学生通讯录管理系统【用 结构数组 实现 通讯录管理】【C语言】
发布日期:2021-05-04 01:05:13 浏览次数:32 分类:技术文章

本文共 10113 字,大约阅读时间需要 33 分钟。

目录


说明

大一下学期(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语言 代码

#include 
#include
#define N 108typedef struct telephone{ char name[25]; char num[25]; char tel[25];} TEL;void DisplayMenu(); //显示主菜单void save(TEL a[], int n);void CreateList(TEL a[], int n); //1.创建通讯录void DisplayList(TEL a[], int n); //2.显示通讯录void InquireListName(TEL a[], int n); //3.按姓名查询通讯录void InquireListNum(TEL a[], int n); //4.按学号查询通讯录void ChangeListName(TEL a[], int n); //5.按姓名修改通讯录void ChangeListNum(TEL a[], int n); //6.按学号修改通讯录int DelListName(TEL a[], int n); //7.按姓名删除通讯录int DelListNum(TEL a[], int n); //8.按学号删除通讯录void UpSortListName(TEL a[], int n); //9.姓名升序排序通讯录void DownSortListNum(TEL a[], int n); //10.学号逆序排序通讯录int AddList(TEL a[], int n); //11.添加学生信息int main(){ struct telephone a[N]; int i, n; FILE *fp; if ((fp = fopen("stu.dat", "r")) != NULL) //如果文件stu.dat已存在 { // 则把数据从文件加载到数组a(读入记录个数n和n个姓名、学号、电话号码) fscanf(fp, "%d", &n); for (i = 0; i < n; i++) fscanf(fp, "%s%s%s", a[i].name, a[i].num, a[i].tel); } else { printf("第一次使用该系统,请输入n和n个姓名、学号、电话号码:\n"); scanf("%d", &n); for (i = 0; i < n; i++) scanf("%s%s%s", a[i].name, a[i].num, a[i].tel); save(a, n); } DisplayMenu(); //显示主菜单 while (1) { char select; char name[25]; scanf(" %c", &select); if (select < 'a' || select > 'l') { printf("输入错误!\n"); continue; } //if( select=='l' ) // break; switch (select) { case 'a': DisplayMenu(); //显示主菜单 break; case 'b': DisplayList(a, n); //2.显示通讯录 break; case 'c': InquireListName(a, n); //3.按姓名查询通讯录 break; case 'd': InquireListNum(a, n); //4.按学号查询通讯录 break; case 'e': ChangeListName(a, n); //5.按姓名修改通讯录 break; case 'f': ChangeListNum(a, n); //6.按学号修改通讯录 break; case 'g': if (DelListName(a, n)) //7.按姓名删除通讯录 n--; break; case 'h': if (DelListNum(a, n)) //8.按学号删除通讯录 n--; break; case 'i': UpSortListName(a, n); //9.姓名升序排序通讯录 break; case 'j': DownSortListNum(a, n); //10.学号逆序排序通讯录 break; case 'k': if (AddList(a, n)) //11.添加学生信息 n++; save(a, n); break; case 'l': exit(0); //12.退出系统 break; } } return 0;}void save(TEL a[], int n){ int i; FILE *fp; fp = fopen("stu.dat", "w"); fprintf(fp, "%d\n", n); for (i = 0; i < n; i++) fprintf(fp, "%s\t%s\t%s\n", a[i].name, a[i].num, a[i].tel);}void DisplayMenu() //1.显示主菜单{ printf(" 学生通讯录管理系统\n\n"); printf("*************************系统功能菜单**************************\n"); printf(" -------------------------------------------------------------\n"); printf(" a.显示主菜单 b.显示通讯录\n"); printf("************************************************************\n"); printf(" c.按姓名查询通讯录 d.按学号查询通讯录\n"); printf("************************************************************\n"); printf(" e.按姓名修改通讯录 f.按学号修改通讯录\n"); printf("************************************************************\n"); printf(" g.按姓名删除通讯录 h.按学号删除通讯录\n"); printf("************************************************************\n"); printf(" i.姓名升序排序通讯录 j.学号逆序排序通讯录\n"); printf("************************************************************\n"); printf(" k.添加学生信息 l.退出系统\n"); printf(" -------------------------------------------------------------\n"); printf("***************************************************************\n\n"); printf("请选择您需要的操作:\n");}void DisplayList(TEL a[], int n) //2.显示通讯录{ int i; printf("显示通讯录:\n"); for (i = 0; i < n; i++) printf("%s\t%s\t%s\n", a[i].name, a[i].num, a[i].tel); printf("\n");}void InquireListName(TEL a[], int n) //3.按姓名查询通讯录{ int i, flag; char SearchName[25]; printf("按姓名查询通讯录:\n"); scanf("%s", SearchName); for (i = 0, flag = 0; i < n; i++) { if (strcmp(SearchName, a[i].name) == 0) { printf("%s\t", a[i].name); printf("%s\t", a[i].num); printf("%s\n", a[i].tel); flag = 1; break; } } if (flag == 0) { printf("未查询到该姓名信息!\n"); } printf("\n");}void InquireListNum(TEL a[], int n) //4.按学号查询通讯录{ int i, flag; char SearchID[25]; printf("按学号查询通讯录:\n"); scanf("%s", SearchID); for (i = 0, flag = 0; i < n; i++) { if (strcmp(SearchID, a[i].num) == 0) { printf("%s\t", a[i].name); printf("%s\t", a[i].num); printf("%s\n", a[i].tel); flag = 1; break; } } if (flag == 0) { printf("未查询到该学号信息!\n"); } printf("\n");}void ChangeListName(TEL a[], int n) //5.按姓名修改通讯录{ int i, flag; char SearchName[25]; printf("按姓名修改通讯录:\n"); scanf("%s", SearchName); for (i = 0, flag = 0; i < n; i++) { if (strcmp(SearchName, a[i].name) == 0) { strcpy(a[i].name, SearchName); printf("请输入要修改的学号:"); scanf("%s", a[i].num); printf("请输入要修改的电话号码:"); scanf("%s", a[i].tel); //strcpy(p[i].name,ChangeName); //strcpy(p[i].name,ChangeTel); save(a, n); printf("信息修改完毕!\n"); printf("%s\t%s\t%s\n", a[i].name, a[i].num, a[i].tel); flag = 1; break; } } if (flag == 0) printf("未找到该姓名信息!"); printf("\n");}void ChangeListNum(TEL a[], int n) //6.按学号修改通讯录{ int i, flag; char SearchNum[25]; printf("按学号修改通讯录:\n"); scanf("%s", SearchNum); for (i = 0, flag = 0; i < n; i++) { if (strcmp(SearchNum, a[i].num) == 0) { strcpy(a[i].num, SearchNum); printf("请输入要修改的名字:"); scanf("%s", a[i].name); printf("请输入要修改的电话号码:"); scanf("%s", a[i].tel); //strcpy(p[i].name,ChangeName); //strcpy(p[i].name,ChangeTel); save(a, n); printf("信息修改完毕!\n"); printf("%s\t%s\t%s\n", a[i].name, a[i].num, a[i].tel); flag = 1; break; } } if (flag == 0) printf("未找到该学号信息!"); printf("\n");}int DelListName(TEL a[], int n) //7.按姓名删除通讯录{ int i, j; char SearchName[25]; printf("按姓名删除通讯录:\n"); scanf("%s", SearchName); for (i = 0; i < n; i++) { if (strcmp(a[i].name, SearchName) == 0) break; } if (i >= n) { printf("未查询到该姓名信息!按姓名删除通讯录失败!\n"); return 0; } else { for (j = i; j < n - 1; j++) a[j] = a[j + 1]; save(a, n); printf("按姓名删除通讯录成功!\n"); return 1; }}int DelListNum(TEL a[], int n) //8.按学号删除通讯录{ int i, j, flag; char SearchNum[25]; printf("按学号删除通讯录:\n"); scanf("%s", SearchNum); for (i = 0; i < n; i++) { if (strcmp(a[i].num, SearchNum) == 0) break; } if (i >= n) { printf("未查询到该学号信息!按学号删除通讯录失败!\n"); return 0; } else { for (j = i; j < n - 1; j++) a[j] = a[j + 1]; printf("按学号删除通讯录成功!\n"); save(a, n); return 1; } printf("\n");}void UpSortListName(TEL a[], int n) //9.姓名升序排序通讯录{ int i, j; TEL temp; for (i = 0; i < n; i++) { for (j = i + 1; j < n; j++) { if (strcmp(a[i].name, a[j].name) > 0) { temp = a[i]; a[i] = a[j]; a[j] = temp; } } } printf("姓名升序排序通讯录:\n"); for (i = 0; i < n; i++) printf("%s\t%s\t%s\n", a[i].name, a[i].num, a[i].tel); printf("\n");}void DownSortListNum(TEL a[], int n) //10.学号逆序排序通讯录{ int i, j; TEL temp; for (i = 0; i < n; i++) { for (j = i + 1; j < n; j++) { if (strcmp(a[i].num, a[j].num) > 0) { temp = a[i]; a[i] = a[j]; a[j] = temp; } } } printf("学号逆序排序通讯录:\n"); for (i = n - 1; i >= 0; i--) printf("%s\t%s\t%s\n", a[i].name, a[i].num, a[i].tel); printf("\n");}int AddList(TEL a[], int n) //11.添加学生信息{ int i, flag; char AddNum[25]; printf("添加通讯录:\n"); printf("请输入要添加的学号:"); scanf("%s", AddNum); for (i = 0, flag = 0; i < n; i++) { if (strcmp(AddNum, a[i].num) == 0) { flag = 1; printf("学号重复!\n"); return 0; } } if (flag == 0) { //n++; printf("学号不重复!请添加信息:\n"); printf("请输入要添加的名字:"); scanf("%s", a[n].name); strcpy(a[n].num, AddNum); printf("请输入要添加的电话号码:"); scanf("%s", a[n].tel); //save(a,n); printf("添加信息成功!\n"); return 1; //printf("%d",n); } printf("\n");}

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

涉及“文件操作”!

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

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

 

6、心得体会

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

原创性声明

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

特此声明!

转载地址:https://blog.csdn.net/weixin_44949135/article/details/116310153 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:研究生 论文写作【要注意的30个禁忌(总体问题、选题方面、摘要方面、研究方法方面、讨论与结果、结论方面)】
下一篇:数学建模必备算法之模拟退火算法

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年04月02日 04时36分01秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章