5.9、学生成绩管理系统的删除功能模块
- 学生成绩管理系统的删除能模块主要是实现学生信息删除的功能
- 从文件中读取学生信息数据。
- 先进行查询学生的信息是判断文件中是否有输入学号的学生相关数据。
- 在进行根据查询到的学生信息进行删除。
- 删除之后,可以显示出删除之后,剩余的学生信息。
学生成绩管理系统的修改功能模块代码如下
// 删除信息功能 void stuDelete() { FILE* fp; // 文件指针变量 int i, num, n; // 定义变量 int total = 0; int flag = 0; 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"); printf("***********************************************************************\n"); fclose(fp); total = i - 1; 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 + 1; flag = 1; break; } } if (flag == 0) { printf("***********************************************************************\n"); printf(" 输入错误!\n"); printf(" 请返回!\n"); printf("***********************************************************************\n"); system("pause"); system("cls"); return; } for (i = n; i <= total; i++) // 删除学生信息 { memcpy(&stu[i - 1], &stu[i], sizeof(Student)); } memset(&stu[total], 0, sizeof(Student)); fp = fopen("studentfile.txt", "w+"); // 打开文件 for (i = 0; i < total; i++) { fwrite(&stu[i], sizeof(Student), 1, fp); // 将学生数据写入文件中 } fclose(fp); fp = fopen("studentfile.txt", "r"); 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"); system("pause"); system("cls"); fclose(fp); }
- 进入学生成绩管理系统,根据主菜单信息的提示,选择数字6,进行学生信息的删除。
- 先查询存储于文件中的学生信息。
- 根据查询到的学生信息可以删除学生的信息。
按F5调试结果如下
- 先查询文件中存储的学生数据
当输入的学号在文件中存在时
当输入的学号在文件中不存在时
- 从调试结果来看,学生成绩管理系统的删除功能实现了。
- 可以删除存储于文件中的学生相关信息。
5.10、学生成绩管理系统的排序功能模块
学生成绩管理系统的排序能模块主要是实现学生平均成绩信息排序的功能。
从文件中读取学生信息数据。
根据学生的平均成绩的高低进行排序。
排序按照降序排列。
可以显示学生成绩排序之前的学生信息和排序之后的学生信息。
学生成绩管理系统的修改功能模块代码如下
// 排序成绩功能 void stuSort() { int i, j, n; // 定义变量 FILE* fp; // 定义文件指针 Student t; // 定义结构体变量 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"); printf("***********************************************************************\n"); fclose(fp); n = i; // 排序学生成绩信息 for (i = 0; i < n; i++) { for (j = i + 1; j < n; j++) { if (stu[i].sAvage < stu[j].sAvage) { t = stu[i]; stu[i] = stu[j]; stu[j] = t; } } } fp = fopen("studentfiles.txt", "wb"); // 打开文件 printf("\n***********************************************************************\n"); printf(" 成绩列表, 排序后\n"); printf("-----------------------------------------------------------------------\n"); printf("序号 学号 姓名 语文 数学 英语 物理 计算机 平均\n"); printf("-----------------------------------------------------------------------\n"); for (i = 0; i < n; 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); fwrite(&stu[i], sizeof(Student), 1, fp); } printf("***********************************************************************\n"); system("pause"); system("cls"); fclose(fp); }
- 进入学生成绩管理系统,根据主菜单信息的提示,选择数字7,进行学生成绩信息的排序。
- 先查询存储于文件中的学生信息。
- 根据查询到的学生信息可以根据学生平均成绩的高低进行排序。
按F5调试结果如下
- 从调试结果来看,学生成绩管理系统的排序功能实现了。
- 可以根据学生平均成绩进行排序。
- 可以显示排序之前与之后的学生的相关信息。
六、学生成绩管理系统的设计与开发的总结
本文的学生成绩管理系统,可以使我们很快掌握C语言的综合应用。
包括了C语言的文件操作
C语言的指针应用
C语言的结构体的应用
C语言函数的应用
C语言的循环的应用
…
本学生成绩管理系统的主要功能是
- 录入信息
- 输出信息
- 增加信息
- 查询信息
- 修改信息
- 输出信息
- 成绩排序
- 退出系统
通过本文的学生成绩管理系统,可以促进我们进一步掌握C语言的应用。