普通版
功能需求
实现通讯录的增加、删除、查找、修改、显示
模块设计
分为三个模块
test.c 测试通讯录
contact.h 函数和类型的声明
contact.c 函数的实现
test.c模块实现
首先我们得有我们的主函数
1. int main() 2. { 3. test(); 4. return 0; 5. }
然后我们在实现test函数时,我们需要完成通讯录的显示菜单,还需要操作者可以进行选择
具体实现如下
1. void menu() 2. { 3. printf("*********** 通讯录 *************\n"); 4. printf("******* 1 添加联系人 2 删除联系人 ******\n"); 5. printf("******* 3 查找联系人 4 修改联系人 ******\n"); 6. printf("******* 5 显示通讯录 0 退出通讯录 ******\n"); 7. printf("*****************************************\n"); 8. } 9. 10. void test() 11. { 12. int input = 0; 13. Contact con;//创建通讯录 14. InitContact(&con); 15. do 16. { 17. menu(); 18. printf("请选择:"); 19. scanf("%d", &input); 20. switch (input) 21. { 22. case ADD : 23. AddContact(&con); 24. break; 25. case DEL : 26. DelContact(&con); 27. break; 28. case SEARCH : 29. SearchContact(&con); 30. break; 31. case MODIFY : 32. ModifyContact(&con); 33. break; 34. case SHOW : 35. ShowContact(&con); 36. break; 37. case EXIT : 38. printf("退出通讯录\n"); 39. break; 40. default: printf("输入错误,重新输入\n"); 41. break; 42. } 43. } while (input); 44. 45. }
而在此处出现的结构体Contact与枚举会在contact.h模块进行声明,还有函数InitContact声明也会在contact.h说明,具体实现会在contact.c模块进行实现
contact.h模块实现
类型的声明
1. 2. //类型的声明 3. 4. typedef struct PeoInfo 5. { 6. char name[MAX_NAME]; 7. int age; 8. char sex[MAX_SEX]; 9. char tele[MAX_TELE]; 10. char addr[MAX_ADDR]; 11. }PeoInfo; 12. 13. 14. //通讯录 15. 16. typedef struct Contact 17. { 18. PeoInfo data[MAX]; 19. int sz; 20. }Contact;
sz存在的意义为可以知道通讯录里有多少联系人
函数的声明
1. //函数声明 2. 3. //初始化通讯录 4. void InitContact(Contact* pc); 5. 6. //增加联系人 7. void AddContact(Contact* pc); 8. 9. //显示所有联系人的信息 10. void ShowContact(const Contact* pc); 11. 12. //删除指定联系人 13. void DelContact(Contact* pc); 14. 15. //查找指定联系人 16. void SearchContact(const Contact* pc); 17. 18. //修改指定联系人 19. void ModifyContact(Contact* pc);
头文件、枚举、宏定义
1. #include <stdlib.h> 2. #include <string.h> 3. #include <assert.h> 4. #include <stdio.h> 5. #define MAX 100 6. #define MAX_NAME 20 7. #define MAX_SEX 5 8. #define MAX_TELE 12 9. #define MAX_ADDR 30 10. enum OPTION//枚举 11. { 12. EXIT,//0 13. ADD, 14. DEL, 15. SEARCH, 16. MODIFY, 17. SHOW 18. };
contact.c 模块实现
初始化通讯录
1. void InitContact(Contact* pc) 2. { 3. assert(pc);//断言,防止pc为空指针 4. memset(pc->data, 0, sizeof(pc->data));//进行复制,每个字节都为0 5. pc->sz = 0; 6. }
增加联系人
这里注意我们需要我们需要进行判断如果通讯录已满,我们就得进行提醒
1. void AddContact(Contact* pc) 2. { 3. assert(pc); 4. if (pc->sz >= MAX) 5. { 6. printf("通讯录已满,无法添加"); 7. return; 8. } 9. printf("请输入名字:>"); 10. scanf("%s", pc->data[pc->sz].name); 11. printf("请输入年龄:>"); 12. scanf("%d", &(pc->data[pc->sz].age)); 13. printf("请输入性别:>"); 14. scanf("%s", pc->data[pc->sz].sex); 15. printf("请输入电话:>"); 16. scanf("%s", pc->data[pc->sz].tele); 17. printf("请输入地址:>"); 18. scanf("%s", pc->data[pc->sz].addr); 19. pc->sz++; 20. printf("成功增加联系人\n"); 21. }