5.4、学生成绩管理系统的录入功能模块
- 学生成绩管理系统的录入功能是实现学生信息录入的功能
- 采用文件存储方式
- 将学生数据存储与文件中
- 可以方便使用学生的信息
- 录入的功能是系统运行时,第一步要进行的操作
- 本系统的录入功能是实现系统初始化登入时,将学生的信息录入文件中的功能。
在头文件中定义学生结构体的代码如下
#include <string.h> #define SIZE 10000 typedef struct tagStudent { int n; /*顺序号*/ int sNum; /*学号*/ char sName[10]; /*姓名*/ int sCn; /*语文成绩*/ int sMaths; /*数学成绩*/ int sEn; /*英语成绩*/ int sPhy; /*物理成绩*/ int sCom; /*计算机成绩*/ double sAvage; /*平均成绩*/ } Student, *pStudent; Student stu[SIZE];
学生成绩管理系统的录入功能模块的代码如下
// 录入信息功能 void stuInput() { int i; // 定义变量 FILE* fp; // 定义文件指针 fp = fopen("studentfile.txt", "wb"); // 打开二进制文件 while(1) { printf("\n\r请输入序号i(当输入i=-1时,返回), i = "); scanf("%d", &i); // 输入学生的序号 if (i == -1) { fclose(fp); system("pause"); system("cls"); return; } else // 输入学生相关信息 { printf("\n\r请输入学号(数字型):"); scanf("%d", &stu[i].sNum); printf("\n\r请输入姓名(字符型):"); scanf("%s", stu[i].sName); printf("\n\r请输入语文成绩(0~100):"); scanf("%d", &stu[i].sCn); printf("\n\r请输入数学成绩(0~100):"); scanf("%d", &stu[i].sMaths); printf("\n\r请输入英语成绩:(0~100)"); scanf("%d", &stu[i].sEn); printf("\n\r请输入物理成绩:(0~100)"); scanf("%d", &stu[i].sPhy); printf("\n\r请输入计算机成绩(0~100):"); scanf("%d", &stu[i].sCom); stu[i].sAvage = (stu[i].sCn + stu[i].sMaths + stu[i].sEn + stu[i].sPhy + stu[i].sCom) / 5.0; stu[i].n = i + 1; fwrite(&stu[i], sizeof(Student), 1, fp); // 将学生信息写入二进制文件中 } } fclose(fp); }
进入学生成绩管理系统,根据主菜单信息的提示,选择数字1,进行学生信息的录入
录入的学生信息可以存储与txt文件之中
按F5调试结果如下
打开学生成绩管理系统的的目录,打开txt文件,如下所示
- 可以看做可以将学生的相关信息存储于txt类型的文章之中。
- 可以方便使用文件查询学生的相关信息
5.5、学生成绩管理系统的输出功能模块
- 生成绩管理系统的输出功能模块主要是输出学生的相关信息
- 学生成绩的成绩可以从文件中读取出来
学生成绩管理系统的输出功能模块代码如下
// 输出信息功能 void stuOutput() { int i; // 定义变量 FILE* fp; // 定义文件指针 fp = fopen("studentfile.txt", "rb"); // 打开二进制文件 printf("***********************************************************************\n"); printf(" 成绩列表\n"); printf("-----------------------------------------------------------------------\n"); printf("序号 学号 姓名 语文 数学 英语 物理 计算机 平均\n"); printf("-----------------------------------------------------------------------\n"); for (i = 0; fread(&stu[i], sizeof(Student), 1, fp) == 1; i++) // 从文件中输出学生信息 { printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n", stu[i].n, stu[i].sNum, stu[i].sName, stu[i].sCn, stu[i].sMaths, stu[i].sEn, stu[i].sPhy, stu[i].sCom, stu[i].sAvage); } printf("-----------------------------------------------------------------------\n"); fclose(fp); system("pause"); system("cls"); }
- 进入学生成绩管理系统,根据主菜单信息的提示,选择数字2,进行学生信息的输出
- 输出的学生信息从txt文件中读取出来
按F5调试结果如下
- 可以看到,学生管理系统可以输出存储于文件之中的相关信息信息。
- 可以方便用户查询各个学生的学习成绩情况。
5.6、学生成绩管理系统的增加功能模块
- 学生成绩管理系统的增加功能模块主要是实现学生信息添加的功能
- 采用文件存储方式
- 将学生数据存储与文件中
- 在原有的学生信息基础上添加新的学生相关信息。
- 添加功能可以方便用户增添学生的信息,并将文件存储与txt文件中。
学生成绩管理系统的增加功能模块代码如下
// 增加信息功能 void stuAdd() { int i, s; // 定义变量 FILE* fp; // 定义文件指针 fp = fopen("studentfile.txt", "ab+"); // 打开二进制文件 rewind(fp); printf("***********************************************************************\n"); printf(" 成绩列表\n"); printf("-----------------------------------------------------------------------\n"); printf("序号 学号 姓名 语文 数学 英语 物理 计算机 平均\n"); printf("-----------------------------------------------------------------------\n"); for (i = 0; fread(&stu[i], sizeof(Student), 1, fp) == 1; i++) // 输出文件中的学生信息 { printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n", stu[i].n, stu[i].sNum, stu[i].sName, stu[i].sCn, stu[i].sMaths, stu[i].sEn, stu[i].sPhy, stu[i].sCom, stu[i].sAvage); } printf("***********************************************************************\n"); s = i; for (i = s; i < SIZE; i++) { printf("输入序号i(当输入i=-1时,返回):"); scanf("%d", &i); if (i == -1 || i == 0) { fclose(fp); system("pause"); system("cls"); return; } else // 增加学生信息 { printf("\n\r请输入学号(数字型):"); scanf("%d", &stu[i].sNum); printf("\n\r请输入姓名(字符型):"); scanf("%s", stu[i].sName); printf("\n\r请输入语文成绩(0~100):"); scanf("%d", &stu[i].sCn); printf("\n\r请输入数学成绩(0~100):"); scanf("%d", &stu[i].sMaths); printf("\n\r请输入英语成绩:(0~100)"); scanf("%d", &stu[i].sEn); printf("\n\r请输入物理成绩:(0~100)"); scanf("%d", &stu[i].sPhy); printf("\n\r请输入计算机成绩(0~100):"); scanf("%d", &stu[i].sCom); stu[i].sAvage = (stu[i].sCn + stu[i].sMaths + stu[i].sEn + stu[i].sPhy + stu[i].sCom) / 5.0; stu[i].n = i + 1; fwrite(&stu[i], sizeof(Student), 1, fp); printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n", stu[i].n, stu[i].sNum, stu[i].sName, stu[i].sCn, stu[i].sMaths, stu[i].sEn, stu[i].sPhy, stu[i].sCom, stu[i].sAvage); } } fclose(fp); }
- 进入学生成绩管理系统,根据主菜单信息的提示,选择数字3,进行学生信息的添加
- 添加的学生信息存储与文件中
- 新增加的信息信息可以输出显示
按F5调试结果如下
- 添加学生信息
- 返回学生成绩管理系统主菜单,根据主菜单信息的提示,选择数字2,进行学生信息的查询,查询刚刚
添加的学生信息,查询结果如下所示
- 可以看到,学生成绩管理系统可以正确添加新的学生的相关信息。
- 可以体现出程序没有错误。
5.7、学生成绩管理系统的查询功能模块
- 学生成绩管理系统的查询能模块主要是实现学生信息查询的功能
- 从文件中读取学生信息数据。
- 查询学生的信息是根据学生的学号进行查询。
- 查询功能可以方便用户查询学生的信息,并将从文件中查询指定学生的信息输出显示。
学生成绩管理系统的查询功能模块代码如下
// 查询信息功能 void stuSearch() { int i, num; // 定义变量 FILE* fp; // 定义文件指针 fp = fopen("studentfile.txt", "ab+"); // 打开二进制文件 rewind(fp); printf("请输入要查找的学号:"); scanf("%d", &num); for (i = 0; i <= SIZE; i++) { if (stu[i].sNum == num) { printf("***********************************************************************\n"); printf(" 查询结果\n"); printf("-----------------------------------------------------------------------\n"); printf("序号 学号 姓名 语文 数学 英语 物理 计算机 平均\n"); printf("-----------------------------------------------------------------------\n"); printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n", stu[i].n, stu[i].sNum, stu[i].sName, stu[i].sCn, stu[i].sMaths, stu[i].sEn, stu[i].sPhy, stu[i].sCom, stu[i].sAvage); printf("\n"); system("pause"); system("cls"); fclose(fp); return; } } printf("***********************************************************************\n"); printf(" 查询结果\n"); printf("-----------------------------------------------------------------------\n"); printf(" 没有查询到学生学号为:%d 的相关学生信息!!!\n", num); printf("-----------------------------------------------------------------------\n"); printf("***********************************************************************\n\n"); system("pause"); system("cls"); fclose(fp); }
- 进入学生成绩管理系统,根据主菜单信息的提示,选择数字4,进行学生信息的查询
- 查询的学生信息存储与文件中
- 查询到的学生信息可以进行显示
按F5调试结果如下
- 当输入的学号在文件中存在时
当输入的学号在文件中不存在时
从调试结果来看,学生成绩管理系统的查询功能实现了。
可以查询存储于文件中的学生信息。
5.8、学生成绩管理系统的修改功能模块
学生成绩管理系统的修改能模块主要是实现学生信息修改的功能
从文件中读取学生信息数据。
先进行查询学生的信息是判断文件中是否有输入学号的学生相关数据。
在进行根据查询到的学生信息进行修改。
修改之后,可以显示出修改之后的学生信息。
学生成绩管理系统的修改功能模块代码如下
// 修改信息功能 void stuModify() { int i, n, num, flag = 0; // 定义变量 FILE* fp; // 定义文件指针 fp = fopen("studentfile.txt", "ab+"); // 打开二进制文件 printf("请输入要修改学生的学号:"); scanf("%d", &num); for (i = 0; i <= SIZE; i++) { if (stu[i].sNum == num) { printf("***********************************************************************\n"); printf(" 成绩列表\n"); printf("-----------------------------------------------------------------------\n"); printf("序号 学号 姓名 语文 数学 英语 物理 计算机 平均\n"); printf("-----------------------------------------------------------------------\n"); printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n", stu[i].n, stu[i].sNum, stu[i].sName, stu[i].sCn, stu[i].sMaths, stu[i].sEn, stu[i].sPhy, stu[i].sCom, stu[i].sAvage); printf("-----------------------------------------------------------------------\n"); printf("***********************************************************************\n"); n = i; flag = 1; break; } } if (flag == 0) { printf("***********************************************************************\n"); printf(" 输入学生的学号错误!\n"); printf(" 请返回!\n"); printf("***********************************************************************\n\n"); system("pause"); system("cls"); return; } fp = fopen("studentfile.txt", "rb+"); fseek(fp, n * sizeof(Student), 0); printf("\n\r请输入学号(数字型):"); scanf("%d", &stu[i].sNum); printf("\n\r请输入姓名(字符型):"); scanf("%s", stu[i].sName); printf("\n\r请输入语文成绩(0~100):"); scanf("%d", &stu[i].sCn); printf("\n\r请输入数学成绩(0~100):"); scanf("%d", &stu[i].sMaths); printf("\n\r请输入英语成绩:(0~100)"); scanf("%d", &stu[i].sEn); printf("\n\r请输入物理成绩:(0~100)"); scanf("%d", &stu[i].sPhy); printf("\n\r请输入计算机成绩(0~100):"); scanf("%d", &stu[i].sCom); stu[i].sAvage = (stu[i].sCn + stu[i].sMaths + stu[i].sEn + stu[i].sPhy + stu[i].sCom) / 5.0; stu[i].n = i + 1; fwrite(&stu[i], sizeof(Student), 1, fp); fclose(fp); fp = fopen("studentfile.txt", "r"); printf("***********************************************************************\n"); printf(" 修改信息成功\n"); printf(" 成绩列表\n"); printf("-----------------------------------------------------------------------\n"); printf("序号 学号 姓名 语文 数学 英语 物理 计算机 平均\n"); printf("-----------------------------------------------------------------------\n"); for (i = 0; fread(&stu[i], sizeof(Student), 1, fp) == 1; i++) { printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n", stu[i].n, stu[i].sNum, stu[i].sName, stu[i].sCn, stu[i].sMaths, stu[i].sEn, stu[i].sPhy, stu[i].sCom, stu[i].sAvage); } printf("-----------------------------------------------------------------------\n"); printf("***********************************************************************\n\n"); system("pause"); system("cls"); fclose(fp); }
进入学生成绩管理系统,根据主菜单信息的提示,选择数字5,进行学生信息的修改。
先查询存储于文件中的学生信息。
根据查询到的学生信息可以根据提示进行修改学生信息
按F5调试结果如下
当输入的学号在文件中存在时
当输入的学号在文件中不存在时
- 从调试结果来看,学生成绩管理系统的修改功能实现了。
- 可以修改存储于文件中的学生相关信息。