- 1.基本构架
- 2.头文件(.h)
- 3.函数文件
- 1.代码实现
- 2.拓展分析
- 3.主函数所在文件(test.c)
#define _CRT_SECURE_NO_WARNINGS #include3.函数文件 1.代码实现#include #define max 1000 #define max_name 20 #define max_tele 12 #define max_address 30 enum sex { male, female }; struct peoinfo { char name[max_name]; char tele[max_tele]; char sex[7]; char address[max_address]; int age; }; struct contact { struct peoinfo data[max]; int size; }; void initcontact(struct contact* ps); void addcontact(struct contact* ps); void showcontact(const struct contact* ps); void delcontact(struct contact* ps); void searchcontact(const struct contact* ps); void modifycontact(struct contact* ps); void sortcontact(struct contact* ps); enum opinion { exit, add, del, search, modify, show, sort };
#include"contact.h"
void initcontact(struct contact* ps)
{
memset(ps->data, 0, sizeof(ps->data));
ps->size=0;
}
static int find_by_name(char name[max_name],struct contact* ps)
{
int i = 0;
for (; i < ps->size; i++)
{
if (strcmp(ps->data[i].name, name) == 0)
return i;
}
return -1;
}
void addcontact(struct contact* ps)
{
if (ps->size == max)
{
printf("contact is fulln");
}
else
{
printf("please input name,tele,sex,address,age in ordern");
scanf("%s", &ps->data[ps->size].name);
scanf("%s", &ps->data[ps->size].tele);
scanf("%s", &ps->data[ps->size].sex);
scanf("%s", &ps->data[ps->size].address);
scanf("%d", &ps->data[ps->size].age);
ps->size++;
printf("输入成功n");
}
}
void showcontact(const struct contact* ps)
{
if (ps->size == 0)
printf("通讯录为空n");
else
{
}
{
int i = 0;
printf("%-10st%-12st%-6st%-20st%-3stn","name","tele","sex","address","age");
for (i = 0; i < (ps->size); i++)
{
printf("%-10st%-12st%-6st%-20st%-3dtn",ps->data[i].name,
ps->data[i].tele,
ps->data[i].sex,
ps->data[i].address,
ps->data[i].age);
}
}
}
void delcontact(struct contact* ps)
{
char name[max_name];
printf("请输入要删除联系人的名字n");
scanf("%s", name);
int i, a;
for (i = 0; i < ps->size; i++)
{
if (0 == strcmp(ps->data[i].name, name))
break;
}
if (i == ps->size)
printf("要删除的联系人不存在n");
else
{
for (a = i; a < ps->size - 1; a++)
{
ps->data[a] = ps->data[a + 1];
}
ps->size--;
printf("delete successfullyn");
}
}
void searchcontact(const struct contact* ps)
{
char name[max_name];
printf("please input who you want to searchn");
scanf("%s", name);
int i=find_by_name(name,ps);
if (i>=0)
{
printf("%-10st%-12st%-6st%-20st%-3stn", "name", "tele", "sex", "address", "age");
printf("%-10st%-12st%-6st%-20st%-3dtn", ps->data[i].name,
ps->data[i].tele,
ps->data[i].sex,
ps->data[i].address,
ps->data[i].age);
}
else
printf("who you want to search doesn't existn");
}
void modifycontact(struct contact* ps)
{
printf("please input who you want to modifyn");
char name[max_name];
scanf("%s", name);
int i=find_by_name(name, ps);
if (i >= 0)
{
printf("please input new name,tele,sex,address,age in ordern");
scanf("%s", &ps->data[i].name);
scanf("%s", &ps->data[i].tele);
scanf("%s", &ps->data[i].sex);
scanf("%s", &ps->data[i].address);
scanf("%d", &ps->data[i].age);
printf("You have modified successfullyn");
}
else
printf("who you want to search doesn't modifyn");
}
enum way
{
age = 1,
name,
tele,
address,
sex
};
void sort1(int input1, int input2, struct contact* ps)
{
switch (input1)
{
case age:
int i, j, min;
for (i = 0; i < ps->size; i++)
{
min = i;
for (j = i; j < (ps->size); j++)
{
if (input2==2)
{
if (ps->data[j].age < ps->data[min].age)
min = j;
}
else
{
if (ps->data[j].age >ps->data[min].age)
min = j;
}
}
//在struct peoinfo data[max]这个结构体数组中找到age最小元素(即struct peoinfo类型)的下标min
struct peoinfo tmp = ps->data[i];
ps->data[i] = ps->data[min];
ps->data[min] = tmp;
}
break;
case name:
//按照姓氏首字母先后顺序排序
int i, j, min;
for (i = 0; i < ps->size; i++)
{
min = i;
for (j = i; j < (ps->size); j++)
{
if (input2 == 2)
{
if (strcmp(ps->data[j].name, ps->data[min].name)<0)
min = j;
}
else
{
if (strcmp(ps->data[j].name, ps->data[min].name)>0)
min = j;
}
}
//在struct peoinfo data[max]这个结构体数组中找到age最小元素(即struct peoinfo类型)的下标min
struct peoinfo tmp = ps->data[i];
ps->data[i] = ps->data[min];
ps->data[min] = tmp;
}
break;
}
}
void sortcontact(struct contact* ps)
{
int input1,input2;
printf("choose the standard to the sequencen");
printf("1.age 2.namen");
printf("3.tele 4.addressn");
printf("5.sex n");
scanf("%d", &input1);
printf("choose the sequencen");
printf("input 1 from high to low or input 2 from low to highn");
scanf("%dn", &input2);
sort1(input1, input2, ps);
}
2.拓展分析
sortcontact函数实现依托于一个标准,这个标准必须从结构体struct peoinfo的元素中找,那么这些元素又可以划分e成两类:1.字符数组 2.整形变量age
那么在实现sortcontact函数的时 候,理应以这5个元素来划分标准供客户选择,但这里只实现了字符数组char name[max_name]和整形int age。
#include"contact.h"
menu()
{
printf("1.add 2.deln");
printf("3.search 4.modifyn");
printf("5.show 6.sortn");
printf("0.exitn");
}
int main()
{
int input;
struct contact con;
initcontact(&con);
do{
menu();
scanf("%d", &input);
switch (input)
{
case add:
addcontact(&con);
break;
case del:
delcontact(&con);
break;
case search:
searchcontact(&con);
break;
case modify:
modifycontact(&con);
break;
case show:
showcontact(&con);
break;
case sort:
sortcontact(&con);
break;
case exit:
break;
default:
printf("input an error number,please input againn");
}
} while (input);
return 0;
}



