简易通讯录

   这两天用C语言编写了一个简易版通讯录(学生信息管理),大致功能有添加信息,查看信息(自动按姓名排序,printf输出带颜色字体),查找信息(按姓名查找),删除信息(输入姓名删除相关信息),修改信息(输入修改人的名字,可选择修改其任意信息)和退出 。


 
 
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #define SIZE 100
  5. typedef struct student STU;
  6. int person = 0;
  7. struct student
  8. {
  9. char name[ 10];
  10. int num;
  11. int age;
  12. };
  13. void welcome()
  14. {
  15. system( "clear");
  16. printf( "\n\n\n\n\t\t\t========================================");
  17. printf( "\n\n\t\t\t\t\tWelcome!\n");
  18. sleep( 3);
  19. }
  20. void menu()
  21. {
  22. system( "clear");
  23. printf( "\n\n\t************************************************************************");
  24. printf( "\n\t\t\t\t\t请选择:");
  25. printf( "\n\t\t\t\t\t1.添加信息");
  26. printf( "\n\t\t\t\t\t2.查看信息");
  27. printf( "\n\t\t\t\t\t3.查找信息");
  28. printf( "\n\t\t\t\t\t4.删除信息");
  29. printf( "\n\t\t\t\t\t5.修改信息");
  30. printf( "\n\t\t\t\t\t6.退出");
  31. printf( "\n\t************************************************************************");
  32. }
  33. /*添加信息*/
  34. void AddInfo(STU *s[])
  35. {
  36. system( "clear");
  37. printf( "姓名 学号 年龄\n");
  38. printf( "------------------------\n");
  39. printf( "请输入信息:(bye结束添加)\n");
  40. while( 1)
  41. {
  42. s[person] = (STU*) malloc( sizeof(STU));
  43. if( NULL == s[person])
  44. {
  45. printf( "malloc failure!\n");
  46. }
  47. scanf( "%s", s[person]->name);
  48. if(! strcmp(s[person]->name, "bye"))
  49. {
  50. break;
  51. }
  52. scanf( "%d%d", &s[person]->num, &s[person]->age);
  53. getchar();
  54. person++;
  55. }
  56. }
  57. /*查看信息(按姓名排序)*/
  58. void ShowAll(STU *s[])
  59. {
  60. system( "clear");
  61. int i, j;
  62. STU *q[ 1] = { 0};
  63. q[ 0] = (STU *) malloc( sizeof(STU));
  64. printf( "information:\n");
  65. for(i = 0; i < person; i++)
  66. {
  67. for(j = 0; j < person - 1 - i; j++)
  68. {
  69. if( strcmp(s[j]->name, s[j + 1]->name) > 0)
  70. {
  71. q[ 0] = s[j];
  72. s[j] = s[j + 1];
  73. s[j + 1] = q[ 0];
  74. }
  75. }
  76. }
  77. for(i = 0; i < person; i++)
  78. {
  79. printf( "\e[1;35mname:%s, num:%d, age:%d\e[0m\n", s[i]->name, s[i]->num, s[i]->age);
  80. }
  81. sleep( 3);
  82. getchar();
  83. }
  84. /*查找信息*/
  85. void Search_name(char *name, STU *s[])
  86. {
  87. int i, n = 0;
  88. for(i = 0; i < person; i++)
  89. {
  90. if( strcmp(name, s[i]->name) == 0)
  91. {
  92. n++;
  93. printf( "name:%s, num:%d, age:%d\n", s[i]->name, s[i]->num, s[i]->age);
  94. }
  95. }
  96. if(n == 0)
  97. {
  98. printf( "不存在!\n");
  99. }
  100. }
  101. void SearchInfo(STU *s[])
  102. {
  103. system( "clear");
  104. char *name = ( char *) malloc( sizeof( char));
  105. printf( "请输入要查找的人的名字:\n");
  106. scanf( "%s", name);
  107. Search_name(name, s);
  108. }
  109. /*删除信息*/
  110. void DeleteInfo(STU *s[])
  111. {
  112. system( "clear");
  113. int i, n = 0, j;
  114. char del_name[ 10];
  115. printf( "请输入要删除的人的名字:\n");
  116. scanf( "%s", del_name);
  117. getchar();
  118. getchar();
  119. for(i = 0; i < person; i++)
  120. {
  121. if( strcmp(del_name, s[i]->name) == 0)
  122. {
  123. n++;
  124. free(s[i]);
  125. for(j = i; j < person - 1; j++)
  126. {
  127. strcpy(s[j]->name, s[j + 1]->name);
  128. s[j]->num = s[j + 1]->num;
  129. s[j]->age = s[j + 1]->age;
  130. }
  131. person--;
  132. }
  133. }
  134. if(n == 0)
  135. {
  136. printf( "要删除的人不存在!\n");
  137. }
  138. else
  139. {
  140. printf( "删除成功!\n");
  141. }
  142. }
  143. /*修改信息*/
  144. void Change_name(char *name, STU *s[])
  145. {
  146. int i, n = 0, choice;
  147. char *new_name = ( char *) malloc( sizeof( char));
  148. int new_num, new_age;
  149. for(i = 0; i < person; i++)
  150. {
  151. if( strcmp(name, s[i]->name) == 0)
  152. {
  153. n++;
  154. printf( "该学生的信息如下:");
  155. printf( "name:%s, num:%d, age:%d\n", s[i]->name, s[i]->num, s[i]->age);
  156. printf( "----------------------------\n");
  157. printf( "请选择要修改的内容(1.name 2.num 3.age):\n");
  158. scanf( "%d", &choice);
  159. switch(choice)
  160. {
  161. case 1:
  162. printf( "请输入新的名字:\n");
  163. scanf( "%s", new_name);
  164. strcpy(s[i]->name, new_name);
  165. break;
  166. case 2:
  167. printf( "请输入新的学号:\n");
  168. scanf( "%d", &new_num);
  169. s[i]->num = new_num;
  170. break;
  171. case 3:
  172. printf( "请输入新的年龄:\n");
  173. scanf( "%d", &new_age);
  174. s[i]->age = new_age;
  175. break;
  176. }
  177. }
  178. }
  179. if(n == 0)
  180. {
  181. printf( "不存在!\n");
  182. }
  183. }
  184. void ChangeInfo(STU *s[])
  185. {
  186. system( "clear");
  187. char *name = ( char *) malloc( sizeof( char));
  188. printf( "请输入要修改的人的名字:\n");
  189. scanf( "%s", name);
  190. Change_name(name, s);
  191. }
  192. int main()
  193. {
  194. struct student *s[SIZE] = { 0};
  195. int choice;
  196. welcome();
  197. while( 1)
  198. {
  199. menu();
  200. printf( "\nPlease input choice:");
  201. scanf( "%d", &choice);
  202. switch(choice)
  203. {
  204. case 1:
  205. AddInfo(s);
  206. break;
  207. case 2:
  208. ShowAll(s);
  209. break;
  210. case 3:
  211. SearchInfo(s);
  212. break;
  213. case 4:
  214. DeleteInfo(s);
  215. break;
  216. case 5:
  217. ChangeInfo(s);
  218. break;
  219. case 6:
  220. exit( 0);
  221. break;
  222. }
  223. }
  224. return 0;
  225. }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值