「这是我参与11月更文挑战的第22天,活动详情查看:2021最后一次更文挑战」
主函数
main是主函数,里面仅包含三条语句。第一句执行test函数,第二句执行冻结屏幕,最后进行返回。
咱们看看主要的test函数的内容,首先定义用户选择input,这个用int类型的变量进行表示
定义通讯录后调用初始化函数。用do while语句执行用户输入,接收到用户输入后根据Switch分支判断执行对应函数。ADD对应添加,DEL对应删除,SHOW对应显示,SEARCH对应查找,MODIFY对应修改,SORT对应按姓名首字母进行排序,EMPTY对应清空通讯录,EXIT对应退出通讯录系统,其他输入则显示选择错误让用户重新进行选择。
int main()
{
test();
system("pause");//冻结屏幕,用户按任意键结束
return 0;
}
void test()
{
int input=0;
Contact con;//定义通讯录
InitContact(&con);//初始化
do
{
menu();
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case ADD:
AddContact(&con);
break;
case DEL:
DelContact(&con);
break;
case SHOW:
ShowContact(&con);
break;
case SEARCH:
SearchContact(&con);
break;
case MODIFY:
ModifyContact(&con);
break;
case SORT:
SortContact(&con);
break;
case EMPTY:
EmptyContact(&con);
case EXIT:
SaveContact(&con);
DestroyContact(&con);
printf("退出!\n");
break;
default:
printf("选择错误!\n");
break;
}
} while (input);
}
初始化函数
assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行。
如果不为空则不用进行初始化,为空的时候首先把有效数量定义置0,然后为数据分配内存空间
void InitContact(Contact *pcon)
{
assert(pcon != NULL);
pcon->sz = 0;
pcon->data = (Info*)malloc(3 * sizeof(Info));//为数据分配内存空间
if (pcon->data == NULL)
{
perror("InitContact::use malloc");
exit(EXIT_FAILURE);//退出程序
}
pcon->capacity = 3;
//加载文件中的保存信息
LoadContact(pcon);
}
增容函数
对通讯录进行增容,增容成功后给出提示。
int Check_Capacity(Contact *pcon)
{
assert(pcon);
if (pcon->capacity == pcon->sz)
{
//扩容
Info *ptr= realloc(pcon->data, (pcon->capacity + 2)*sizeof(Info));
if (ptr != NULL)
{
pcon->data = ptr;
printf("增容成功!");
return 1;
}
}
return 1;
}
显示菜单函数
这个是纯输入给用户进行提示的,如果对提示页面不满意可以进行修改。
void menu()
{
printf("*************************************\n");
printf("*************** 通讯录 **************\n");
printf("*** 1.add 2.del ***\n");
printf("*** 3.search 4.modify ***\n");
printf("*** 5.show 6.sort ***\n");
printf("*** 7.empty 0. exit ***\n");
printf("*************************************\n");
}
添加用户信息
传入一个指针,assert用法在之前讲过就不赘述,注释内容可以对通讯录进行大小限制。先判断增容是否成功,如果失败给出提示:"增容失败,无法添加",如果成功则给出提示让用户进行添加用户信息。名字、电话号码、街道、城市、省份、邮编均用字符串进行记录。
void AddContact(Contact *pcon)
{
assert(pcon != NULL);
/*if (pcon->sz == MAX)
{
printf("通讯录已满,无法添加!\n");
}*/
if (0 == Check_Capacity(pcon))
{
printf("增容失败,无法添加");
return;
}
else
{
printf("请输入名字:> ");
scanf("%s", pcon->data[pcon->sz].name);
printf("请输入电话:> ");
scanf("%s", pcon->data[pcon->sz].tele);
printf("请输入街道;> ");
scanf("%s", pcon->data[pcon->sz].addr);
printf("请输入城市:> ");
scanf("%s", pcon->data[pcon->sz].city);
printf("请输入省份:> ");
scanf("%s", pcon->data[pcon->sz].province);
printf("请输入邮编:> ");
scanf("%s", pcon->data[pcon->sz].postcode);
pcon->sz++;
}
}