一、开发思路及框架设计
该通讯录包含的信息:
- 姓名
- 性别
- 电话
- 年龄
- 住址
该通讯录开发的功能:
- 增加联系人的信息
- 删除指定联系人的信息
- 修改指定联系人的信息
- 查找指定联系人的信息
- 联系人信息的排序
- 显示通讯录联系人的信息
二,开发及代码
创建项目
test.c 测试通讯录
contact.c 通讯录的实现
contact.h 通讯录的声明
1)通讯录菜单的打印
voidmenu() { printf("**************************************\n"); printf("***** 1. add 2. del *****\n"); printf("***** 3. search 4. modify *****\n"); printf("***** 5. show 6. sort *****\n"); printf("***** 0. exit *****\n"); printf("**************************************\n"); } intmain() { intinput=0; do { menu(); printf("请选择:"); scanf("%d", &input); switch (input) { case1: break; case2: break; case3: break; case4: break; case5: break; case6: break; case0: break; default: break; } } while (input); return0; }
运行如下:
这样,初步的菜单打印就已经实现了,接下来就是根据菜单添加想要的功能了
2)创建通讯录并使通讯录格式化
首先我们创建一个结构体,里面包含人的成员信息,其次要创建一个完整的通讯录,里面包含个人信息和人数,这样一个完整的通讯录就创建好了
为了确保通讯录的人员信息写入的准确性,我们需要将创建好的通讯录初始化,说白了就是给创建好的通讯录格式化,我们创建一个InitContact函数来初始化。
这里涉及到结构体传参,我们传过去的是地址
这个InitContact函数走下来之后,我们的通讯录格式化工作就完成,为了更好的演示,我们通过调试来打开监视,看看这些成员变量是否初始化成功,如下图所示:
走到这里,创建通讯录以及格式化通讯录就完成了
3)添加个人信息到通讯录
我们利用结构体指针来指向特定的信息,以此来增加联系人的信息,代码如下:
voidAddContact(structContact*pc) { //判断通讯录人员是否满了assert(pc); //确保pc不是空指针if (pc->sz==MAX) { 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"); }
代码运行如下:
4)显示联系人信息
这里需要注意的是,我们为了美观,需要打印一个行号,里面包括姓名,性别等等,还需要考虑打印联系人信息的对齐,代码如下:
voidShowContact(structContact*pc) { inti=0; printf("%-20s\t%-5s\t%-5s\t%-12s\t%-30s\n", "姓名", "性别", "年龄", "电话", "地址"); for (i=0; i<pc->sz; i++) { printf("%-20s\t%-5s\t%-5d\t%-12s\t%-30s\n", pc->data[i].name, pc->data[i].sex, pc->data[i].age, pc->data[i].tele, pc->data[i].addr); } }
代码运行如下:
5)删除指定联系人信息
这里既然要删除,那就必须有个查找联系人名字的功能,所以这里我们写入一个 FindByName函数,以便于来删除指定联系人,代码如下:
intFindByName(conststructContact*pc, charname[]) { inti=0; for (i=0; i<pc->sz; i++) { if (0==strcmp(pc->data[i].name, name)) { returni; } } return-1; } voidDelContact(structContact*pc) { charname[MAX_NAME]; printf("请输入要删除人的名字:"); scanf("%s", name); //查找一下指定的人是否存在intret=FindByName(pc, name); if (ret==-1) printf("要删除的人不存在\n"); else { //删除intj=0; for (j=ret; j<pc->sz-1; j++) { pc->data[j] =pc->data[j+1]; } pc->sz--; printf("成功删除指定联系人\n"); } }
代码运行如下: