目录
前言
制作一个通讯录需要包涵以下内容:
- 增加联系人
- 删除指定联系人
- 查找联系人
- 修改联系人的信息
- 显示所有联系人
- 清空通讯录
- 排序所有联系人(姓名/年龄等)
完成代码最主要的就是需要先构思代码内需要包涵的功能,并一步一步的实现它,那么接下来就带大家一起完成这个简易的通讯录吧!
程序设计
1. 创建通讯录
首先,创建通讯录之前我们需要创建一个结构体来表示一个人的信息,例如一个人的信息可以包括姓名、性别、年龄、电话和地址等。
struct PeoInfo
{
char name[MAX_NAME];
char sex[MAX_SEX];
int age;
char tele[MAX_TELE];
char addr[MAX_ADDR];
};
在这里我们使用了#define定义符号以便在后期可以方便更改内容的大小。
#define MAX_NAME 20
#define MAX_SEX 5
#define MAX_TELE 12
#define MAX_ADDR 30
接下来就是创建通讯录。
通讯录里面需要包涵n个人的信息,那么我可以创建一个结构体PeoInfo的数组来存放这些信息。那么我们要怎么知道里面有多少个数组呢?我们可以再创建一个变量来表示通讯录里面信息的数量。(很重要!!!)
struct Contact
{
struct PeoInfo data[MAX];
int sz;
//通过sz来将信息存放到data数组里面
};
#define MAX 1000
2. 初始化通讯录
创建完通讯录之后,我们需要对通信录内的信息进行初始化。
//初始化通讯录
void InitContact(struct Contact* pc)
{
assert(pc);
pc->sz = 0;
memset(pc->data, 0, 100 * sizeof(struct PeoInfo));
}
这一部分较为简单,主要是利用memset函数将data里面的信息都初始化成0。
至于详细的内容,大家可以在链接里面了解: https://cplusplus.com/reference/cstring/memset/?kw=memsety
要注意,使用memset函数需要引用头文件#include<string.h>
3. 实现通讯录内的功能
1. 增加联系人
首先,我们需要思考两种情况:一种是通讯录满了、一种是通讯录还没满。
通讯录满了就无法再添加联系人了,因此无法再进行增加的操作。
//增加一个人的信息
void AddContact(struct Contact* pc)
{
assert(pc);
if (MAX == pc->sz)
{
printf("通讯录已满,无法添加信息\n");
return;
}
printf("请输入姓名:");
scanf("%s", pc->data[pc->sz].name);
printf("请输入性别:");
scanf("%s", pc->data[pc->sz].sex);
printf("请输入年龄:");
scanf("%d", &pc->data[pc->sz].age);//数组名为首元素地址,因此非数组需要加上‘&‘符号
printf("请输入电话:");
scanf("%s", pc->data[pc->sz].tele);
printf("请输入地址:");
scanf("%s", pc->data[pc->sz].addr);
pc->sz++;
printf("成功添加联系人\n");
}
我们对pc指针指向的data数组内下标为pc指针指向的sz数量所对应的元素进行操作。
因为一开始data数组为0个信息,因此可以在data数组下标为0的元素进行操作,在操作完之后对sz进行加一的操作,令之后的增加操作也可以如此进行。
当某一次增加操作将sz加到MAX的值时无法再对通讯录进行增加的操作。