小言_互联网的博客

学生通讯录管理系统【用 结构数组 实现 通讯录管理】【C语言】

515人阅读  评论(0)

目录

说明

1、实训目的

2、实训内容

3、系统需求分析

4、系统设计与实现

完整程序代码(纯C语言 代码)

5、系统测试与运行结果分析

6、心得体会

原创性声明


说明

大一下学期(2019年 上半年),开学第一周,C语言实训作业!展示作品!

2019 125日至 20193 1 日          C语言程序设计实训 总结报告

1、实训目的

C语言程序设计实训》是移动软件专业的主要实践性教学环节。通过本课程的实训,使学生在完成有关专业基础课学习的基础上,能够综合运用所学相关知识,并基于学生个人的创新创意,设计并实现相应的程序;使学生初步掌握程序设计的基本方法、初步具备运用程序设计解决实际问题的能力、初步具备进行工程设计的基本技能及分析能力,为毕业设计和以后的工程实践打下良好的基础。

2、实训内容

设计并实现一个学生通讯录管理系统。

3、系统需求分析

系统需求:用结构数组实现通讯录管理。

首先用switch分支结构,进行循环。

其次,用文件来存储学生信息。

然后,用函数实现不同的功能。例如:1.创建通讯录、2.显示通讯录、3.查询通讯录、4.修改通讯录、5.添加通讯录、6.删除通讯录、7.排序通讯录、8.退出等。

4、系统设计与实现

在C++环境下 ,编译运行,需要 添加 头文件 #include <cstdlib>

C++ 中error: ‘exit’ was not declared in this scope 的解决方法:添加头文件#include <cstdlib>

完整程序代码(纯C语言 代码


  
  1. #include <stdio.h>
  2. #include <string.h>
  3. #define N 108
  4. typedef struct telephone
  5. {
  6. char name[ 25];
  7. char num[ 25];
  8. char tel[ 25];
  9. } TEL;
  10. void DisplayMenu(); //显示主菜单
  11. void save(TEL a[], int n);
  12. void CreateList(TEL a[], int n); //1.创建通讯录
  13. void DisplayList(TEL a[], int n); //2.显示通讯录
  14. void InquireListName(TEL a[], int n); //3.按姓名查询通讯录
  15. void InquireListNum(TEL a[], int n); //4.按学号查询通讯录
  16. void ChangeListName(TEL a[], int n); //5.按姓名修改通讯录
  17. void ChangeListNum(TEL a[], int n); //6.按学号修改通讯录
  18. int DelListName(TEL a[], int n); //7.按姓名删除通讯录
  19. int DelListNum(TEL a[], int n); //8.按学号删除通讯录
  20. void UpSortListName(TEL a[], int n); //9.姓名升序排序通讯录
  21. void DownSortListNum(TEL a[], int n); //10.学号逆序排序通讯录
  22. int AddList(TEL a[], int n); //11.添加学生信息
  23. int main()
  24. {
  25. struct telephone a[N];
  26. int i, n;
  27. FILE *fp;
  28. if ((fp = fopen( "stu.dat", "r")) != NULL) //如果文件stu.dat已存在
  29. { // 则把数据从文件加载到数组a(读入记录个数n和n个姓名、学号、电话号码)
  30. fscanf(fp, "%d", &n);
  31. for (i = 0; i < n; i++)
  32. fscanf(fp, "%s%s%s", a[i].name, a[i].num, a[i].tel);
  33. }
  34. else
  35. {
  36. printf( "第一次使用该系统,请输入n和n个姓名、学号、电话号码:\n");
  37. scanf( "%d", &n);
  38. for (i = 0; i < n; i++)
  39. scanf( "%s%s%s", a[i].name, a[i].num, a[i].tel);
  40. save(a, n);
  41. }
  42. DisplayMenu(); //显示主菜单
  43. while ( 1)
  44. {
  45. char select;
  46. char name[ 25];
  47. scanf( " %c", &select);
  48. if (select < 'a' || select > 'l')
  49. {
  50. printf( "输入错误!\n");
  51. continue;
  52. }
  53. //if( select=='l' )
  54. // break;
  55. switch (select)
  56. {
  57. case 'a':
  58. DisplayMenu(); //显示主菜单
  59. break;
  60. case 'b':
  61. DisplayList(a, n); //2.显示通讯录
  62. break;
  63. case 'c':
  64. InquireListName(a, n); //3.按姓名查询通讯录
  65. break;
  66. case 'd':
  67. InquireListNum(a, n); //4.按学号查询通讯录
  68. break;
  69. case 'e':
  70. ChangeListName(a, n); //5.按姓名修改通讯录
  71. break;
  72. case 'f':
  73. ChangeListNum(a, n); //6.按学号修改通讯录
  74. break;
  75. case 'g':
  76. if (DelListName(a, n)) //7.按姓名删除通讯录
  77. n--;
  78. break;
  79. case 'h':
  80. if (DelListNum(a, n)) //8.按学号删除通讯录
  81. n--;
  82. break;
  83. case 'i':
  84. UpSortListName(a, n); //9.姓名升序排序通讯录
  85. break;
  86. case 'j':
  87. DownSortListNum(a, n); //10.学号逆序排序通讯录
  88. break;
  89. case 'k':
  90. if (AddList(a, n)) //11.添加学生信息
  91. n++;
  92. save(a, n);
  93. break;
  94. case 'l':
  95. exit( 0); //12.退出系统
  96. break;
  97. }
  98. }
  99. return 0;
  100. }
  101. void save(TEL a[], int n)
  102. {
  103. int i;
  104. FILE *fp;
  105. fp = fopen( "stu.dat", "w");
  106. fprintf(fp, "%d\n", n);
  107. for (i = 0; i < n; i++)
  108. fprintf(fp, "%s\t%s\t%s\n", a[i].name, a[i].num, a[i].tel);
  109. }
  110. void DisplayMenu() //1.显示主菜单
  111. {
  112. printf( " 学生通讯录管理系统\n\n");
  113. printf( "*************************系统功能菜单**************************\n");
  114. printf( " -------------------------------------------------------------\n");
  115. printf( " a.显示主菜单 b.显示通讯录\n");
  116. printf( "************************************************************\n");
  117. printf( " c.按姓名查询通讯录 d.按学号查询通讯录\n");
  118. printf( "************************************************************\n");
  119. printf( " e.按姓名修改通讯录 f.按学号修改通讯录\n");
  120. printf( "************************************************************\n");
  121. printf( " g.按姓名删除通讯录 h.按学号删除通讯录\n");
  122. printf( "************************************************************\n");
  123. printf( " i.姓名升序排序通讯录 j.学号逆序排序通讯录\n");
  124. printf( "************************************************************\n");
  125. printf( " k.添加学生信息 l.退出系统\n");
  126. printf( " -------------------------------------------------------------\n");
  127. printf( "***************************************************************\n\n");
  128. printf( "请选择您需要的操作:\n");
  129. }
  130. void DisplayList(TEL a[], int n) //2.显示通讯录
  131. {
  132. int i;
  133. printf( "显示通讯录:\n");
  134. for (i = 0; i < n; i++)
  135. printf( "%s\t%s\t%s\n", a[i].name, a[i].num, a[i].tel);
  136. printf( "\n");
  137. }
  138. void InquireListName(TEL a[], int n) //3.按姓名查询通讯录
  139. {
  140. int i, flag;
  141. char SearchName[ 25];
  142. printf( "按姓名查询通讯录:\n");
  143. scanf( "%s", SearchName);
  144. for (i = 0, flag = 0; i < n; i++)
  145. {
  146. if ( strcmp(SearchName, a[i].name) == 0)
  147. {
  148. printf( "%s\t", a[i].name);
  149. printf( "%s\t", a[i].num);
  150. printf( "%s\n", a[i].tel);
  151. flag = 1;
  152. break;
  153. }
  154. }
  155. if (flag == 0)
  156. {
  157. printf( "未查询到该姓名信息!\n");
  158. }
  159. printf( "\n");
  160. }
  161. void InquireListNum(TEL a[], int n) //4.按学号查询通讯录
  162. {
  163. int i, flag;
  164. char SearchID[ 25];
  165. printf( "按学号查询通讯录:\n");
  166. scanf( "%s", SearchID);
  167. for (i = 0, flag = 0; i < n; i++)
  168. {
  169. if ( strcmp(SearchID, a[i].num) == 0)
  170. {
  171. printf( "%s\t", a[i].name);
  172. printf( "%s\t", a[i].num);
  173. printf( "%s\n", a[i].tel);
  174. flag = 1;
  175. break;
  176. }
  177. }
  178. if (flag == 0)
  179. {
  180. printf( "未查询到该学号信息!\n");
  181. }
  182. printf( "\n");
  183. }
  184. void ChangeListName(TEL a[], int n) //5.按姓名修改通讯录
  185. {
  186. int i, flag;
  187. char SearchName[ 25];
  188. printf( "按姓名修改通讯录:\n");
  189. scanf( "%s", SearchName);
  190. for (i = 0, flag = 0; i < n; i++)
  191. {
  192. if ( strcmp(SearchName, a[i].name) == 0)
  193. {
  194. strcpy(a[i].name, SearchName);
  195. printf( "请输入要修改的学号:");
  196. scanf( "%s", a[i].num);
  197. printf( "请输入要修改的电话号码:");
  198. scanf( "%s", a[i].tel);
  199. //strcpy(p[i].name,ChangeName);
  200. //strcpy(p[i].name,ChangeTel);
  201. save(a, n);
  202. printf( "信息修改完毕!\n");
  203. printf( "%s\t%s\t%s\n", a[i].name, a[i].num, a[i].tel);
  204. flag = 1;
  205. break;
  206. }
  207. }
  208. if (flag == 0)
  209. printf( "未找到该姓名信息!");
  210. printf( "\n");
  211. }
  212. void ChangeListNum(TEL a[], int n) //6.按学号修改通讯录
  213. {
  214. int i, flag;
  215. char SearchNum[ 25];
  216. printf( "按学号修改通讯录:\n");
  217. scanf( "%s", SearchNum);
  218. for (i = 0, flag = 0; i < n; i++)
  219. {
  220. if ( strcmp(SearchNum, a[i].num) == 0)
  221. {
  222. strcpy(a[i].num, SearchNum);
  223. printf( "请输入要修改的名字:");
  224. scanf( "%s", a[i].name);
  225. printf( "请输入要修改的电话号码:");
  226. scanf( "%s", a[i].tel);
  227. //strcpy(p[i].name,ChangeName);
  228. //strcpy(p[i].name,ChangeTel);
  229. save(a, n);
  230. printf( "信息修改完毕!\n");
  231. printf( "%s\t%s\t%s\n", a[i].name, a[i].num, a[i].tel);
  232. flag = 1;
  233. break;
  234. }
  235. }
  236. if (flag == 0)
  237. printf( "未找到该学号信息!");
  238. printf( "\n");
  239. }
  240. int DelListName(TEL a[], int n) //7.按姓名删除通讯录
  241. {
  242. int i, j;
  243. char SearchName[ 25];
  244. printf( "按姓名删除通讯录:\n");
  245. scanf( "%s", SearchName);
  246. for (i = 0; i < n; i++)
  247. {
  248. if ( strcmp(a[i].name, SearchName) == 0)
  249. break;
  250. }
  251. if (i >= n)
  252. {
  253. printf( "未查询到该姓名信息!按姓名删除通讯录失败!\n");
  254. return 0;
  255. }
  256. else
  257. {
  258. for (j = i; j < n - 1; j++)
  259. a[j] = a[j + 1];
  260. save(a, n);
  261. printf( "按姓名删除通讯录成功!\n");
  262. return 1;
  263. }
  264. }
  265. int DelListNum(TEL a[], int n) //8.按学号删除通讯录
  266. {
  267. int i, j, flag;
  268. char SearchNum[ 25];
  269. printf( "按学号删除通讯录:\n");
  270. scanf( "%s", SearchNum);
  271. for (i = 0; i < n; i++)
  272. {
  273. if ( strcmp(a[i].num, SearchNum) == 0)
  274. break;
  275. }
  276. if (i >= n)
  277. {
  278. printf( "未查询到该学号信息!按学号删除通讯录失败!\n");
  279. return 0;
  280. }
  281. else
  282. {
  283. for (j = i; j < n - 1; j++)
  284. a[j] = a[j + 1];
  285. printf( "按学号删除通讯录成功!\n");
  286. save(a, n);
  287. return 1;
  288. }
  289. printf( "\n");
  290. }
  291. void UpSortListName(TEL a[], int n) //9.姓名升序排序通讯录
  292. {
  293. int i, j;
  294. TEL temp;
  295. for (i = 0; i < n; i++)
  296. {
  297. for (j = i + 1; j < n; j++)
  298. {
  299. if ( strcmp(a[i].name, a[j].name) > 0)
  300. {
  301. temp = a[i];
  302. a[i] = a[j];
  303. a[j] = temp;
  304. }
  305. }
  306. }
  307. printf( "姓名升序排序通讯录:\n");
  308. for (i = 0; i < n; i++)
  309. printf( "%s\t%s\t%s\n", a[i].name, a[i].num, a[i].tel);
  310. printf( "\n");
  311. }
  312. void DownSortListNum(TEL a[], int n) //10.学号逆序排序通讯录
  313. {
  314. int i, j;
  315. TEL temp;
  316. for (i = 0; i < n; i++)
  317. {
  318. for (j = i + 1; j < n; j++)
  319. {
  320. if ( strcmp(a[i].num, a[j].num) > 0)
  321. {
  322. temp = a[i];
  323. a[i] = a[j];
  324. a[j] = temp;
  325. }
  326. }
  327. }
  328. printf( "学号逆序排序通讯录:\n");
  329. for (i = n - 1; i >= 0; i--)
  330. printf( "%s\t%s\t%s\n", a[i].name, a[i].num, a[i].tel);
  331. printf( "\n");
  332. }
  333. int AddList(TEL a[], int n) //11.添加学生信息
  334. {
  335. int i, flag;
  336. char AddNum[ 25];
  337. printf( "添加通讯录:\n");
  338. printf( "请输入要添加的学号:");
  339. scanf( "%s", AddNum);
  340. for (i = 0, flag = 0; i < n; i++)
  341. {
  342. if ( strcmp(AddNum, a[i].num) == 0)
  343. {
  344. flag = 1;
  345. printf( "学号重复!\n");
  346. return 0;
  347. }
  348. }
  349. if (flag == 0)
  350. {
  351. //n++;
  352. printf( "学号不重复!请添加信息:\n");
  353. printf( "请输入要添加的名字:");
  354. scanf( "%s", a[n].name);
  355. strcpy(a[n].num, AddNum);
  356. printf( "请输入要添加的电话号码:");
  357. scanf( "%s", a[n].tel);
  358. //save(a,n);
  359. printf( "添加信息成功!\n");
  360. return 1;
  361. //printf("%d",n);
  362. }
  363. printf( "\n");
  364. }

5、系统测试与运行结果分析

涉及“文件操作”!

程序运行无误。本程序容错能力较强,有很强的错误查找能力。本程序各个小函数的联系性并不强,容易修改与改善。

运行结果无误。无论是“修改通讯录”还是“添加通讯录、删除通讯录”本程序都能够正确执行,并保存到文件之中,非常方便。 “删除通讯录”中“按姓名删除通讯录”与“按学号删除通讯录”分为两个函数,这使得“删除函数”更为简单、清晰,同时使得整个程序更为简单、优化。

 

6、心得体会

此次实训,收获甚多,受益匪浅。“学生通讯录管理系统”用到的知识很多,函数、结构、文件。缺少任何一部分,都无法编出完好的程序。另外,“学生通讯录管理系统”对思维能力要求苛刻,能够使学生真正地掌握所学知识。

原创性声明

本人郑重声明本报告内容,是由作者本人独立完成的。有关观点、方法、数据和文献等的引用已在文中指出。除文中已注明引用的内容外,本报告不包含任何其他个人或集体已经公开发表的作品成果,不存在剽窃、抄袭行为。

特此声明!


转载:https://blog.csdn.net/weixin_44949135/article/details/116310153
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场