在写一个程序前需要了解的知识,需要对通讯录的流程了如指掌,才能写出一个完整的程序 。
- 写一个主函数,里面包含菜单、对菜单的选择、以及循环。
- 创建个人信息结构体,多人构成的结构体数组。
- 分析每一个函数:
1).增加信息:首先需要判断通讯录中人数是否超过结构体数组的最大范围,超过了就没有增加的必要(也会出现数组越界问题);其次就是增加个人信息(姓名、年龄、性别、地址、电话);最后就是通讯录中的个数增加。
2).删除信息:首先需要判断通讯录中是否存在一个人,如若不存在,也会出现数组越界问题;其次就是输入你想要的删除人的姓名;将输入删除人的姓名与结构体数组的所有人的姓名进行比较找到其下标,找不到返回-1;然后就是将后面所有的人的个人信息往前挪(复制);最后就是通讯录中的个数减少。
3).查找信息:这个与前两个不一样,这个首先是需要知道你要输入查找人的姓名:然后就是找到姓名对应数组下标,找不到返回-1;最后就是打印这个人的个人信息。
4).修改信息:同样需要输入姓名、找其下标【重复操作,可以封装一个进行对比的函数】;然后再重新输入个人信息。
5).显示信息:这个就是打印所有人的个人信息。
主函数
主函数一般都是单独一个源文件。在每一个程序中有且只有一个主函数,让我们看看通讯录的主函数包含什么、与其他程序的主函数有什么区别。
包含:以结构体为主的主函数 都需要创建一个信息,就像声明一个变量一样先创将一个变量con,而con的类型则是Per。然后就是需要初始化con,菜单、选择等。
区别:这个与扫雷、三子棋等程序的主函数没什么区别,只是声明变量时结构体的声明不一样、传参是用的是指针,其他没什么不一样。
int main()
{
int input = 0;
//创建信息
Per con;
//初始化
InitContact(&con);
do
{
menu();
printf("请输入你选择的数字:");
scanf("%d", &input);
switch (input)
{
case 1:
AddContact(&con);
break;
case 2:
DelContact(&con);
break;
case 3:
SearchContact(&con);
break;
case 4:
ModifyContact(&con);
break;
case 5:
ShowContact(&con);
break;
case 0:
printf("退出程序!\n");
break;
default:
printf("选择错误,请重新选择!\n");
break;
}
} while (input);
return 0;
}
头文件
结构体在整个程序中都需要使用,所以将结构体的声明放在一个头文件中“contact.h”,还有宏定义也放在头文件中,使用库函数涉及到的头文件,以及各个函数的声明也放入头文件中。还有就是在源文件调用这个头文件时都需要引用头文件 。
宏定义
每一个数组都使用宏定义,目的是以后想要改变数组的最大范围更方便修改。
结构体的声明
在通讯录中,想要对其进行修改(增删改查)首先需要知道其姓名,再进行修改。但使用一部新的手机前通讯录列表是空的无法进行修改,所以需要增加个人信息(姓名、年龄、性别、地址、电话等详细信息,为了各方面找)。想要存各种信息,使用数组是不可以的(类型不统一),那就只能使用结构体进行存储。
下面来看看结构体是如何创建的:结构体包含多种类型,就通讯录来说:需要姓名、年龄、性别、地址、电话,这些中年龄是int类型,其它都是char类型且一个信息所占的空间是不一样的(像姓名与性别需要的字节不一样)。(typedef就是将struct Stu类型简单的用S简写)
这个只是一个人的个人信息,在手机通讯录中可以存储很多人,这是需要创建一个结构体数组(data),还需要一个变量计算通讯录中人的个数(sz),这两个的类型不一致同样需要一个结构体。(typedef就是将struct P类型简单的用Per简写)
源文件
单独创建一个源文件用来存放程序的主体(增删改查等函数)。
初始化信息
初始化这个函数将通讯录设置初始模式(不存在一个人),memset库函数是将结构体数组中的信息全部置为0,第一个参数是数组名,第二个是赋值为0,第三个参数是结构体数组中首元素所占的字节数。
增加信息
先判断通讯录中的人数是否达到最大容纳量,没有就可以添加信息。添加信息需要输入pc中的data[pc->sz]中的姓名,输入pc中的data[pc->sz]中的年龄、性别、地址、电话,然后再将pc中的sz++,这样一个信息就添加了。
删除信息
先判断通讯录是否可以删除,可以的话就输入想要删除的姓名;寻找下标可以封装一个函数,找到返回下标找不到返回-1;返回下标后将下标后的信息全部往前挪(即复制),这里不需要将每一个详细的信息都复制,复制结构体数组就可以了,通讯录中的人数减少一个。
修改信息
首先需要知道想要修改人的姓名,然后再去寻找通讯录中是否存在这个姓名,存在的话就重新输入一遍数据就可以了,通讯录中的人数不变。
查找信息
首先需要输入查找的姓名,然后再去寻找通讯录中是否存在这个姓名,存在就打印各个信息,这个也不改变通讯录的人数。
显示信息
显示信息就是将通讯录中所有详细信息都打印出来。