来源:公众号(c语言与cpp编程)
案例要求模拟开发一个学生成绩管理系统,此系统具有以下功能:
这些功能之间的逻辑关系如下图所示:
学生成绩管理系统
分析案例需求可知,该系统首先会向用户展现一个菜单选择界面,用户可以根据菜单界面的提示,选择不同的功能进入子界面,因此可以针对每一个功能定义一个函数,通过函数调用实现相应功能。由系统需求可知,该系统主要有6大功能,因此需要定义6个函数。
void add(struct student stu[]){ int i, id = 0; //i作为循环变量,id用来保存新学号 char quit; //保存是否退出的选择 do { printf("学号:"); scanf("%d", &id); for (i = 0; i < n; i++) { if (id == stu[i].id) { printf("此学号存在!\n"); return; } } stu[i].id = id; printf("姓名:"); scanf("%s", &stu[i].name); printf("计算机基础成绩:"); scanf("%d", &stu[i].chinese); printf("数据结构成绩:"); scanf("%d", &stu[i].math); stu[i].sum = stu[i].chinese + stu[i].math; n++; //记录条数加1 printf("是否继续添加?(Y/N)"); scanf("\t%c", &quit); } while (quit != 'N');}
显示记录——showAll()函数当用户在功能菜单中选择数字2时,会调用show()函数进入显示记录模块,并向控制台输出录入的所有学生的学号、姓名、数据结构成绩、计算机基础成绩和成绩总和。
void show(struct student stu[], int i){ printf("%-10d", stu[i].id); printf("%-10s", stu[i].name); printf("%-10d", stu[i].chinese); printf("%-10d", stu[i].math); printf("%-10d\n", stu[i].sum);}
修改记录——modify()函数当用户在功能菜单中选择数字3时,会调用modify()函数进入修改记录模块,输入要修改的学生姓名,当用户输入了已录入的学生姓名后,如果学生信息存在即可修改除学号以外的其他信息,否则输出没有找到该生的记录。
void modify(struct student stu[]){ char name[8], ch; int i; printf("修改学生的记录。\n"); printf("请输入学生的姓名:"); scanf("%s", &name); for (i = 0; i < n; i++) { if (strcmp(name, stu[i].name) == 0) { getchar(); printf("找到该生的记录,如下所示:\n"); HH; //显示记录的标题 show(stu, i); printf("是否修改?(Y/N)\n"); scanf("%c", &ch); if (ch == 'Y' || ch == 'y') { getchar(); printf("姓名:"); scanf("%s", &stu[i].name); printf("计算机基础成绩:"); scanf("%d", &stu[i].chinese); printf("数据结构成绩:"); scanf("%d", &stu[i].math); stu[i].sum = stu[i].chinese + stu[i].math; printf("修改完毕。\n"); } return; } } printf("没有找到该生的记录。\n");}
void del(struct student stu[]){ int id, i; char ch; printf("删除学生的记录。\n"); printf("请输入学号:"); scanf("%d", &id); for (i = 0; i < n; i++) { if (id == stu[i].id) { getchar(); printf("找到该生的记录,如下所示:\n"); HH; //显示记录的标题 show(stu, i); //显示数组stu中的第i条记录 printf("是否删除?(Y/N)\n"); scanf("%c", &ch); if (ch == 'Y' || ch == 'y') { for (; i < n; i++) // 被删除记录后面的记录均前移一位 stu[i] = stu[i + 1]; n--; //记录总条数减1 printf("删除成功!"); } return; } } printf("没有找到该生的记录!\n");}
查找记录——search()函数当用户在功能菜单中输入数字5时,会调用search()进入查找记录模块,在该模块中输入查找的学生姓名,如果该学生存在则输出该学生的全部信息,否则输出没有找到该生的记录。
void search(struct student stu[]){ char name[8]; int i; printf("查找学生的记录。\n"); printf("请输入学生的姓名:"); scanf("%s", &name); for (i = 0; i < n; i++) { if (strcmp(name, stu[i].name) == 0) { printf("找到该生的记录,如下所示:\n"); HH; //显示记录的标题 show(stu, i); //显示数组stu中的第i条记录 return; } } printf("没有找到该生的记录。\n");}
void sort(struct student stu[]){ int i, j; struct student t; printf("按总成绩进行排序,"); for (i = 0; i < n - 1; i++) { for (j = i + 1; j < n; j++) { if (stu[i].sum < stu[j].sum) { t = stu[i]; stu[i] = stu[j]; stu[j] = t; } } } printf("排序结果如下:\n"); showAll(stu); //显示排序后的所有记录}
由于该系统需要定义6个函数,而且还涉及变量,代码较多,因此可以分文件实现该系统,将函数声明与定义在头文件student.h中实现,函数实现在student.c文件中完成,函数调用在main.c文件中执行。
struct student{ int id; // 学号 char name[8]; //姓名 int chinese; //计算机基础成绩 int math; //数据结构成绩 int sum; //总分};
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。