C语言——通讯录系统

浅浅的花香味﹌ 2022-10-21 11:53 264阅读 0赞

实现效果如图:

在这里插入图片描述

在这里插入图片描述

模块如下:

通讯录系统主菜单功能选择
1、添加联系人信息
2、查找联系人信息
3、修改联系人信息
4、删除联系人信息
5、显示全部联系人信息
6、退出通讯录系统

7、释放链表

代码如下:

  1. #include<stdio.h>
  2. #include<conio.h>
  3. #include<stdlib.h>
  4. //联系人信息
  5. typedef struct _Person
  6. {
  7. char name[10];
  8. char phone[20];
  9. char addr[20];
  10. }Person;
  11. //联系人节点
  12. typedef struct _Node
  13. {
  14. Person P;
  15. struct _Node* next;
  16. }Node;
  17. Node* HeadNode = NULL;
  18. //主界面
  19. void Menu()
  20. {
  21. printf("-------------通讯录主菜单功能:----------------\n"
  22. "1.添加联系人信息.\n2.查找联系人信息.\n"
  23. "3.修改联系人信息.\n4.删除联系人信息.\n"
  24. "5.显示联系人信息.\n6.退出通讯录系统.\n"
  25. "7.释放链表.\n");
  26. }
  27. //添加联系人
  28. void AddContact()
  29. {
  30. Node* ANode = (Node*)malloc(sizeof(Node));
  31. ANode->next = NULL;
  32. printf("\n\n\n\t\t\t\t-------------请添加新的联系人信息-----------\n");
  33. printf("\t\t\t\t请输入联系人的姓名:");
  34. scanf("%s", ANode->P.name);
  35. printf("\t\t\t\t请输入联系人的号码:");
  36. scanf("%s", ANode->P.phone);
  37. printf("\t\t\t\t请输入联系人的地址:");
  38. scanf("%s", ANode->P.addr);
  39. //头插法连接链表
  40. if (HeadNode == NULL)
  41. {
  42. HeadNode = ANode;
  43. }
  44. else
  45. {
  46. ANode->next = HeadNode;
  47. HeadNode = ANode;
  48. }
  49. printf("添加成功.\n");
  50. return 1;
  51. }
  52. //搜索联系人
  53. void SearchContact(Node* pNode)
  54. {
  55. Node* SNode = pNode;
  56. char Name[10] = "";
  57. printf("\n\n\t\t\t\t-------------请输入您要查找的联系人姓名------------\n");
  58. printf("\t\t\t\t请输入联系人的姓名:");
  59. scanf("%s",Name);
  60. while (SNode != NULL)
  61. {
  62. if (strcmp(SNode->P.name, Name) !=0)
  63. {
  64. SNode = SNode->next;
  65. continue;
  66. }
  67. else
  68. {
  69. printf("\t\t\t\t联系人:%s\n\t\t\t\t电话号码:%s\n\t\t\t\t地址:%s\n", SNode->P.name, SNode->P.phone, SNode->P.addr);
  70. return 1;
  71. }
  72. }
  73. printf("\t\t\t\t抱歉,找不到该联系人.\n");
  74. return 1;
  75. }
  76. //修改联系人
  77. void ChangeContact(Node* pNode)
  78. {
  79. Node* CNode = pNode;
  80. char Name[10] = "";
  81. printf("\n\n\t\t\t\t-------------请输入您要查找的联系人姓名------------\n");
  82. printf("\t\t\t\t请输入联系人的姓名:");
  83. scanf("%s", Name);
  84. while (CNode != NULL)
  85. {
  86. if (strcmp(CNode->P.name, Name) != 0)
  87. {
  88. CNode = CNode->next;
  89. continue;
  90. }
  91. else
  92. {
  93. printf("\n\n\n\t\t\t\t-------------请修改该联系人的信息-----------\n");
  94. printf("\t\t\t\t联系人的姓名:");
  95. scanf("%s", CNode->P.name);
  96. printf("\t\t\t\t联系人的号码:");
  97. scanf("%s", CNode->P.phone);
  98. printf("\t\t\t\t联系人的地址:");
  99. scanf("%s", CNode->P.addr);
  100. return 1;
  101. }
  102. }
  103. printf("\t\t\t\t抱歉,找不到该联系人.\n");
  104. return 1;
  105. }
  106. //删除联系人
  107. int DeleteContact(Node* pNode)
  108. {
  109. //1、判断链表是否存在
  110. if (pNode == NULL)//不存在
  111. {
  112. printf("\n\n\t\t\t\t当前目录不存在联系人.\n");
  113. return pNode;
  114. }
  115. char name[32] = "";
  116. printf("\t\t\t\t------------------请输入您要删除的联系人--------------------\n");
  117. printf("\t\t\t\t请输入联系人的姓名:");
  118. scanf("%s", name);
  119. //2、寻找删除点
  120. Node* firstNode = pNode, * secondNode = pNode;
  121. while (strcmp(firstNode->P.name, name) != 0 && firstNode->next != NULL)
  122. {
  123. secondNode = firstNode;
  124. firstNode = firstNode->next;
  125. }
  126. //3、找到删除点
  127. if (strcmp(firstNode->P.name, name) == 0)//找到删除点
  128. {
  129. //4、判断删除的位置
  130. if (firstNode == pNode)//删除头结点
  131. {
  132. pNode = firstNode->next;
  133. free(firstNode);
  134. }
  135. else//中部 或 尾部节点
  136. {
  137. firstNode->next = firstNode->next;
  138. free(firstNode);
  139. }
  140. printf("删除成功");
  141. return pNode;
  142. }
  143. else//没找到删除点
  144. {
  145. printf("未找到该联系人.");
  146. }
  147. return pNode;
  148. }
  149. //显示联系人
  150. void PrintContact(Node* pNode)
  151. {
  152. Node* PNode = pNode;
  153. printf("\t\t\t\t------------------所有联系人信息如下--------------------\n");
  154. while (PNode != NULL)
  155. {
  156. printf("\t\t\t\t联系人\t\t电话号码\t地址\n");
  157. printf("\t\t\t\t%s\t\t%s\t\t%s\n", PNode->P.name, PNode->P.phone, PNode->P.addr);
  158. PNode = PNode->next;
  159. }
  160. return 1;
  161. }
  162. //释放链表
  163. int FreeContact(Node* pNode)
  164. {
  165. if (pNode == NULL)
  166. {
  167. printf("当前链表无结点.\n");
  168. return pNode;
  169. }
  170. else
  171. {
  172. Node* pb = pNode;
  173. while (pb != NULL)
  174. {
  175. pNode = pb->next;
  176. free(pb);
  177. pb = pNode;
  178. }
  179. printf("释放成功.\n");
  180. return pNode;
  181. }
  182. return pNode;
  183. }
  184. int main()
  185. {
  186. system("color b0");
  187. while (1)
  188. {
  189. Menu();
  190. int choose = _getch();
  191. switch (choose)
  192. {
  193. case '1':
  194. AddContact();//添加联系人信息
  195. break;
  196. case '2':
  197. SearchContact(HeadNode);//查找联系人信息
  198. break;
  199. case '3':
  200. ChangeContact(HeadNode);//修改联系人信息
  201. break;
  202. case '4':
  203. HeadNode=DeleteContact(HeadNode); //删除联系人信息
  204. break;
  205. case '5':
  206. PrintContact(HeadNode);//显示联系人信息
  207. break;
  208. case '6':
  209. exit(0);//退出通讯录系统
  210. case '7':
  211. HeadNode=FreeContact(HeadNode);//释放链表
  212. break;
  213. }
  214. system("pause");
  215. system("cls");
  216. }
  217. return 0;
  218. }

发表评论

表情:
评论列表 (有 0 条评论,264人围观)

还没有评论,来说两句吧...

相关阅读

    相关 通讯录排序(c语言

    输入n个朋友的信息,包括姓名、生日、电话号码,本题要求编写程序,按照年龄从大到小的顺序依次输出通讯录。题目保证所有人的生日均不相同。 输入格式: 输入第一行给出正整数n(

    相关 c语言通讯录

    实现一个通讯录; 通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名,性别,年龄,电话,住址 提供方法:1.添加联系人信息                  

    相关 C语言 通讯录

    任务描述 使用C语言实现通讯录。 功能要求 (1)创建通讯录。输入学生的姓名、学号和电话号码等,并将它们存放在对应的数组中;每输入一组数据,记录数增1。 (2)

    相关 C语言 通讯录排序

    任务描述 输入n个朋友的信息,包括姓名、生日、电话号码,本题要求编写程序,按照年龄从大到小的顺序依次输出通讯录。题目保证所有人的生日均不相同。 功能要求 ①输入格式