🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀
目录
🌸通讯录的需求
1.人员的姓名
2.人员的年龄
3.人员的性别
4.人员的电话号码
5.人员的地址
实现方法:通讯录初始设置100个人的空间,开辟100个人的空间,创建100个人的结构体数组。我们设置两个结构体,一个保存通讯录的需求,一个保存结构体结构体数组和通讯录的人数。
注意:通讯录初始的存储值是100(结构体数组有100成员),就是说可以存储100个人的信息,有效个数也是从0开始的(pc->sz最开始为0)
通讯录的功能
初始化通讯录:
1. void InitContact(Contact* pc) 2. { 3. pc->sz=0; 4. memset(pc->data,0,sizeof(pc->data)); 5. }
pc->data结构体首元素的地址,sizeof(pc->data)计算的是整个结构体数组的大小,然后用memeset将整个数组初始化为0,别忘了引用头文件#include<string.h>
增加联系人:
void AddContact(Contact* pc);
每个联系人都包含姓名,年龄,性别,电话号码,地址,我们需要一一录入,录入成功后,将有效个数(就是联系人个数)增加一,pc->sz增加一
展示联系人的信息:
void ShowContact(Contact* pc);
就是打印出,通讯录里存在的联系人的所有信息,使用的是循环语句。
删除指定人信息
void DelContact(Contact* pc);
就是我们输入我们想要的查找人的名字,如果通讯录里存在这个人,我就删除这个人的信息。这里实现了一个查找姓名的函数,因为在改变联系人信息功能里也需要实现查找这个功能,所以实现一个函数,减少代码的重叠性。
int Find_name(Contact* pc,char name[])
如果在查找函数中,找到这个人的姓名,我们将返回这个人在结构体数组的位置,就是pc->sz。找到了之后,我们会让后面一个人的信息复制到前一个人的空间里,从要删的人位置开始,直到通讯录要删的人位置以后的人都向前复制了。这样我们就删除指定人的信息。
查找指定人的信息
void SearchContact(Contact* pc);
我们还是需要Find_name这个函数去帮我们找到我想修改人员的名字,返回这个人在结构体的位置(pc->sz),找到之后打印这个人的信息。
改变指定人信息
void ModifyContact(Contact* pc);
我们还是需要Find_name这个函数去帮我们找到我想修改人员的名字,返回这个人在结构体的位置(pc->sz),找到之后直接通过他的位置修改这个人的信息。
给通讯录的人信息排序
void SortContact(Contact* pc,int op);
排序我们使用的系统的自带的qsort给通讯录人员信息进行排序,qsort的原型
qsort(pc->data,pc->sz,sizeof(PeoInfo),cmp_by_name);
qrort函数第一个参数是排序空间的首地址,第二个参数是排序的个数,第三个参数是排序单个元素的大小,第四个元素是排序函数。
我们这里排序有两种选择,一是按照姓名排序,而是按照年龄排序,所以有两个排序函数
1. int cmp_by_name(const void* e1,const void* e2)//按照姓名排序 2. { 3. return strcmp(((PeoInfo*)e1)->name,((PeoInfo*)e2)->name); 4. } 5. 6. int cmp_by_gae(const void* e1,const void* e2)//按照年龄排序 7. { 8. return ((PeoInfo*)e1)->age-((PeoInfo*)e2)->age; 9. }
🐰 通讯录的原码
🌸主函数
1. #include"test.h" 2. void menu(void) 3. { 4. printf("===========================\n"); 5. printf(" 1.添加,2.删除 \n"); 6. printf(" 3.查找,4.改动 \n"); 7. printf(" 5.展示,6.排序 \n"); 8. printf(" 0.退出 \n"); 9. printf("===========================\n"); 10. } 11. enum Option 12. { 13. EXIT, 14. ADD, 15. DEL, 16. SEARCH, 17. MODIFY, 18. SHOW, 19. SORT, 20. }; 21. int main() 22. { 23. Contact con; 24. InitContact(&con); 25. int input=0; 26. int op=0; 27. do 28. { 29. menu(); 30. printf("请选择\n"); 31. scanf("%d",&input); 32. switch(input) 33. { 34. case ADD: 35. AddContact(&con); 36. break; 37. case DEL: 38. DelContact(&con); 39. break; 40. case SEARCH: 41. SearchContact(&con); 42. break; 43. case MODIFY: 44. ModifyContact(&con); 45. break; 46. case SHOW: 47. ShowContact(&con); 48. break; 49. case SORT: 50. printf("请选择排序方法\n"); 51. printf("=========================\n"); 52. printf("1.按名字排序 2.按年龄排序\n"); 53. printf("=========================\n"); 54. scanf("%d",&op); 55. SortContact(&con,op); 56. break; 57. case EXIT: 58. printf("退出通讯录\n"); 59. break; 60. default: 61. printf("输入错误\n"); 62. break; 63. } 64. }while(input); 65. }
🌸头文件
1. #ifndef test_h 2. #define test_h 3. #include <stdio.h> 4. #endif /* test_h */ 5. 6. #include<string.h> 7. #include<stdlib.h> 8. 9. #define MAX 100 10. #define MAX_NAME 20 11. #define MAX_SEX 5 12. #define MAX_TELE 12 13. #define MAX_ADDR 30 14. typedef struct PeoInfo 15. { 16. char name[MAX_NAME]; 17. int age; 18. char sex[MAX_SEX]; 19. char tele[MAX_TELE]; 20. char addr[MAX_ADDR]; 21. }PeoInfo; 22. 23. typedef struct Contact 24. { 25. PeoInfo data[MAX];//存放数据 26. int sz;//有效信息的个数 27. }Contact; 28. 29. 30. //初始化 31. void InitContact(Contact* pc); 32. //增加指定联系人 33. void AddContact(Contact* pc); 34. //展示联系人的信息 35. void ShowContact(Contact* pc); 36. //删除指定人信息 37. void DelContact(Contact* pc); 38. //查找指定人的信息 39. void SearchContact(Contact* pc); 40. //改变指定人信息 41. void ModifyContact(Contact* pc); 42. //给通讯录的人信息排序 43. void SortContact(Contact* pc,int op);
🌸函数实现文件
1. #include "test.h" 2. void InitContact(Contact* pc) 3. { 4. pc->sz=0; 5. memset(pc->data,0,sizeof(pc->data)); 6. } 7. void AddContact(Contact* pc) 8. { 9. if(pc->sz==MAX) 10. { 11. printf("通讯录已满,无法增加\n"); 12. } 13. else 14. { 15. printf("请输入名字\n"); 16. scanf("%s",pc->data[pc->sz].name); 17. printf("请输入年龄\n"); 18. scanf("%d",&(pc->data[pc->sz].age)); 19. printf("请输入性别\n"); 20. scanf("%s",pc->data[pc->sz].sex); 21. printf("请输入电话号码\n"); 22. scanf("%s",pc->data[pc->sz].tele); 23. printf("请输入地址\n"); 24. scanf("%s",pc->data[pc->sz].addr); 25. } 26. pc->sz++; 27. printf("添加成功\n"); 28. } 29. void ShowContact(Contact* pc) 30. { 31. printf("%-10s %-4s %-5s %-12s %-30s\n","性别","年龄","性别","电话号码","地址"); 32. for(int i=0;i<pc->sz;i++) 33. { 34. printf("%-10s %-4d %-5s %-12s %-30s\n",pc->data[i].name,pc->data[i].age,pc->data[i].sex,pc->data[i].tele,pc->data[i].addr); 35. } 36. } 37. int Find_name(Contact* pc,char name[]) 38. { 39. int i; 40. int pos=-1; 41. for( i=0;i<pc->sz;i++) 42. { 43. if(strcmp(name,pc->data[i].name)==0) 44. { 45. pos=i; 46. break; 47. } 48. } 49. return pos; 50. } 51. void DelContact(Contact* pc) 52. { 53. if(pc->sz==0) 54. { 55. printf("通讯录为空,无法删除\n"); 56. } 57. //删除 58. //1.找到删除人的位置 59. char name[MAX_NAME]; 60. int pos=-1; 61. int i; 62. printf("输入删除人的名字;>\n"); 63. scanf("%s",name); 64. pos=Find_name(pc,name); 65. if(pos==-1) 66. { 67. printf("要删的人不存在\n"); 68. } 69. else{ 70. for(i=pos;i<pc->sz-1;i++) 71. { 72. pc->data[i]=pc->data[i+1]; 73. } 74. pc->sz--; 75. printf("删除成功\n"); 76. } 77. } 78. void SearchContact(Contact* pc) 79. { 80. char name[MAX_NAME]; 81. printf("输入查找人的名字;>\n"); 82. scanf("%s",name); 83. int pos=-1; 84. pos=Find_name(pc, name); 85. if(pos==-1) 86. { 87. printf("查找的人不存在\n"); 88. } 89. else 90. { 91. printf("%-10s %-4s %-5s %-12s %-30s\n","性别","年龄","性别","电话号码","地址"); 92. printf("%-10s %-4d %-5s %-12s %-30s\n",pc->data[pos].name,pc->data[pos].age,pc->data[pos].sex,pc->data[pos].tele,pc->data[pos].addr); 93. } 94. } 95. void ModifyContact(Contact* pc) 96. { 97. char name[MAX_NAME]; 98. printf("输入修改人的名字;>\n"); 99. scanf("%s",name); 100. int pos=-1; 101. pos=Find_name(pc, name); 102. if(pos==-1) 103. { 104. printf("修改人信息不存在\n"); 105. } 106. else 107. { 108. printf("请输入名字\n"); 109. scanf("%s",pc->data[pos].name); 110. printf("请输入年龄\n"); 111. scanf("%d",&(pc->data[pos].age)); 112. printf("请输入性别\n"); 113. scanf("%s",pc->data[pos].sex); 114. printf("请输入电话号码\n"); 115. scanf("%s",pc->data[pos].tele); 116. printf("请输入地址\n"); 117. scanf("%s",pc->data[pos].addr); 118. printf("修改成功\n"); 119. } 120. } 121. int cmp_by_name(const void* e1,const void* e2) 122. { 123. return strcmp(((PeoInfo*)e1)->name,((PeoInfo*)e2)->name); 124. } 125. int cmp_by_gae(const void* e1,const void* e2) 126. { 127. return ((PeoInfo*)e1)->age-((PeoInfo*)e2)->age; 128. } 129. void SortContact(Contact* pc,int op) 130. { 131. if(op==1) 132. { 133. qsort(pc->data,pc->sz,sizeof(PeoInfo),cmp_by_name); 134. printf("排序成功\n"); 135. } 136. if(op==2) 137. { 138. qsort(pc->data,pc->sz,sizeof(PeoInfo),cmp_by_gae); 139. printf("排序成功\n"); 140. } 141. }
🌸🌸🌸如果大家还有不懂或者建议都可以发在评论区,我们共同探讨,共同学习,共同进步。谢谢大家! 🌸🌸🌸