1. 功能框架说明
系统功能:
1、档案管理—学生档案、课程档案、选课档案
增加、删除、修改、查询
2、统计管理—学生成绩表
登记成绩、计算加权平均分、总学分
3、文件加载(进入系统时)
读入学生档案、课程档案、选课档案
生成学生成绩表
4、文件保存(退出系统时)
保存学生档案、课程档案、选课档案
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈
需要建立三张表,生成一张表:
学生表—关键字是学号
课程表—关键字是课程号
选课表—关键字是学号+课程号
成绩统计表(生成)–关键字是学号
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈
学生成绩管理系统旨在提供一个高效且便捷的工具,用于管理学生、课程和选课信息,并生成和显示学生成绩单。系统主要包括以下功能模块:
数据初始化模块:读取学生、课程和选课信息表文件,初始化系统数据。
主菜单模块:显示主菜单,供用户选择操作。
学生信息管理模块:添加、修改、删除和查询学生信息。
课程信息管理模块:添加、修改、删除和查询课程信息。
选课信息管理模块:添加、修改、删除和查询选课信息。
成绩单管理模块:根据选课信息和课程信息生成学生成绩单,并支持显示和排序功能。
数据存储模块:将当前的学生信息、课程信息和选课信息保存到文件中。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈
2. 程序设计
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈
程序的主要数据结构包括学生信息、课程信息、选课信息和成绩单信息,具体定义
typedef struct //学生信息 { char xh[10]; //学号 char xm[9]; //姓名,最多4个汉字 char xb[3]; //性别 int nl; //年龄 } Student; typedef struct //课程信息 { char kh[8]; //课号 char km[11]; //课名,最多5个汉字 float xf; //学分 } Course; typedef struct //选课信息 { char xh[10]; //学号 char kh[8]; //课号 float cj; //成绩 } Select; typedef struct //成绩信息 { char xh[9]; //学号 float cj[10]; //不超过10门课程成绩 float pj; //加权平均分 float zxf; //总学分 } Score;
Student:表示学生信息,包括学号、姓名、性别和年龄。
Course:表示课程信息,包括课号、课名和学分。
Select:表示选课信息,包括学号、课号和成绩。
Score:表示成绩单信息,包括学号、各门课程成绩、加权平均分和总学分。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈
程序模块之间的调用关系可以描述为一个有序的流程,各个模块通过特定的接口函数进行交互和数据传递。
主程序入口:main函数作为程序的入口,初始化数据并调用主菜单函数。
调用init函数读取文件并初始化数据。
调用create_cjlist函数生成成绩单。
调用display_main_menu函数显示主菜单,用户选择相应操作。
数据初始化模块:init函数负责从文件中读取数据并初始化学生信息、课程信息和选课信息。
从slist.txt读取学生信息,存储到Student数组中。
从clist.txt读取课程信息,存储到Course数组中。
从sclist.txt读取选课信息,存储到Select数组中。
主菜单模块:display_main_menu函数显示主菜单,用户通过输入选择执行相应操作。
用户选择操作后,调用相应的管理模块函数,如input_stud、disp_stud、delete_stud等。
学生信息管理模块:实现添加、修改、删除和查询学生信息的功能。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈
input_stud函数:添加或修改学生信息。
disp_stud函数:显示学生信息。
delete_stud函数:删除学生信息。
query_stud函数:查询学生信息。
int delete_stud(Student slist[], int scount) //删除学生信息 { char xh[10]; int i, j, flag = 0; char yes; printf("请输入要删除的学生学号:");>👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈 scanf("%s", xh); for (i = 0; i < scount; i++) { if (strcmp(slist[i].xh, xh) == 0) { printf("找到学生 %s %s %s %d,是否删除(Y/N):", slist[i].xh, slist[i].xm, slist[i].xb, slist[i].nl); fflush(stdin); yes = getchar(); if (yes == 'Y' || yes == 'y') { for (j = i; j < scount - 1; j++) { slist[j] = slist[j + 1]; } scount--; printf("删除成功\n"); } flag = 1; break; } } if (!flag) { printf("未找到学号为 %s 的学生\n", xh); } system("pause"); return scount; }
课程信息管理模块:实现添加、修改、删除和查询课程信息的功能。
input_course函数:添加或修改课程信息。
disp_course函数:显示课程信息。
delete_course函数:删除课程信息。
query_course函数:查询课程信息。
int delete_select(Select sclist[], int sccount) //删除选课信息 { char xh[10], kh[11]; int i, j, flag = 0; char yes; printf("请输入要删除的选课记录学号和课程号:"); scanf("%s %s", xh, kh); for (i = 0; i < sccount; i++) { if (strcmp(sclist[i].xh, xh) == 0 && strcmp(sclist[i].kh, kh) == 0) { printf("找到选课记录 %s %s %.1f,是否删除(Y/N):", sclist[i].xh, sclist[i].kh, sclist[i].cj); fflush(stdin); yes = getchar(); if (yes == 'Y' || yes == 'y') { for (j = i; j < sccount - 1; j++) { sclist[j] = sclist[j + 1]; } sccount--; printf("删除成功\n"); } flag = 1; break;>👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈 } } if (!flag) { printf("未找到学号为 %s 和课程号为 %s 的选课记录\n", xh, kh); } system("pause"); return sccount; }
选课信息管理模块:实现添加、修改、删除和查询选课信息的功能。
input_select函数:添加或修改选课信息。
disp_select函数:显示选课信息。
delete_select函数:删除选课信息。
void query_course(Course clist[], int ccount) //查询课程记录 { char khkm[11]; int i; printf("请输入要查询的课程号或课程名:"); scanf("%s", khkm); for (i = 0; i < ccount; i++) { if (strcmp(clist[i].kh, khkm) == 0 || strcmp(clist[i].km, khkm) == 0) { printf("找到课程:课号:%s 课名:%s 学分:%.1f\n", clist[i].kh, clist[i].km, clist[i].xf); break; } } if (i == ccount) { printf("未找到课程\n");>👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈 } system("pause"); }
成绩单管理模块:生成和显示学生成绩单,并支持排序功能。
create_cjlist函数:根据选课信息和课程信息生成成绩单。
disp_cjlist函数:显示成绩单信息。
sort_cjlist函数:按加权平均分降序排序成绩单。
数据存储模块:将当前数据保存到文件中,确保数据的持久化。
write_to_file函数:将学生信息、课程信息和选课信息分别保存到slist.txt、clist.txt和sclist.txt文件中。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈
主程序入口 (main):
调用init初始化数据。
调用create_cjlist生成初始成绩单。
进入无限循环,根据用户选择调用display_main_menu,显示主菜单并处理用户输入。
根据用户选择分别调用以下函数:
input_stud、input_course、input_select:添加或修改信息。
disp_stud、disp_course、disp_select、disp_cjlist:显示信息。
delete_stud、delete_course、delete_select:删除信息。
query_stud、query_course、query_cjlist:查询信息。 write_to_file:保存信息到文件。
exit(0):退出程序。
数据初始化模块 (init):从文件读取学生、课程和选课信息,分别存储到Student、Course和Select数组中。
成绩单管理模块 (create_cjlist):根据选课信息和课程信息计算每个学生的成绩单信息,存储到Score数组中。
主菜单模块 (display_main_menu):根据用户输入,调用相应的管理函数进行操作。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈
int display_main_menu() { char c; do { system("cls"); printf("\n\n\t\t\t 学生成绩管理系统\n\n"); printf("\t\t\t 1.修改或添加学生、课程和选课信息\n"); printf("\t\t\t 2.显示学生、课程和选课信息\n"); printf("\t\t\t 3.删除学生、课程和选课信息\n"); printf("\t\t\t 4.查询学生、课程和选课信息\n"); printf("\t\t\t 5.保存学生、课程和选课信息到文件\n"); printf("\t\t\t 0.退出\n"); printf("\t\t\t 软件作者 学号:032330135 姓名:南小航\n");>👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈 printf("\n\t\t\t 请选择 (0~5): "); fflush(stdin); c = getchar(); } while (c < '0' || c > '5'); return c - '0'; } //读取学生信息表,课程信息表,选课信息表 void init(Student slist[], int *Scount, Course clist[], int *Ccount, Select sclist[], int *SCcount) { FILE *file; char buffer[100];>👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈 int count; // 读取学生信息表 if ((file = fopen("slist.txt", "r")) == NULL) { printf("无法打开学生信息文件\n"); exit(1); } count = 0; while (fgets(buffer, sizeof(buffer), file)) { sscanf(buffer, "%[^,],%[^,],%[^,],%d", slist[count].xh, slist[count].xm, slist[count].xb, &slist[count].nl); count++; } fclose(file); *Scount = count; // 读取课程信息表 if ((file = fopen("clist.txt", "r")) == NULL) { printf("无法打开课程信息文件\n"); exit(1); } count = 0; while (fgets(buffer, sizeof(buffer), file)) { sscanf(buffer, "%[^,],%[^,],%f", clist[count].kh, clist[count].km, &clist[count].xf); count++; } fclose(file); *Ccount = count; // 读取选课信息表 if ((file = fopen("sclist.txt", "r")) == NULL) { printf("无法打开选课信息文件\n"); exit(1); } count = 0;>👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈 while (fgets(buffer, sizeof(buffer), file)) { sscanf(buffer, "%[^,],%[^,],%f", sclist[count].xh, sclist[count].kh, &sclist[count].cj); count++; } fclose(file); *SCcount = count; printf("读取学生信息表,课程信息表,选课信息表\n");>👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈 system("pause"); }
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈
3. 运行结果
主菜单
修改学生名单
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈
修改课程信息
修改课程信息
显示学生信息
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈
显示课程信息
显示成绩单
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈
查询学生信息
查询课程信息
查询成绩信息
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈
删除学生信息
删除课程信息
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈
删除选修信息
保存到文件
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “成绩” 获取。👈👈👈