要求:
1、程序功能
编程实现一个基础的成绩管理系统。
2、设计目的
通过本程序综合掌握结构体类型、指针、链表、函数、文件等知识的综合使用。
3、功能要求(可扩充功能)
(1)实现简单的菜单设计,如下所示:
1 添加学生信息
2 显示学生信息
3 查找学生信息
4 插入学生信息
5 删除学生信息
6 成绩计算
7 按总分降序输出
0 退出
(2)每个学生的信息至少包括姓名、学号、3门课程的成绩、班级等信息。
(3)“添加学生信息”:输入新的学生信息以后,系统将把相关信息存储到文件中。以班级为单位存放到不同的文件中。至少有3个班,每个班级至少10个学生。
(4)“显示学生信息”:系统将从文件中读取数据,按要求显示所有的学生信息。为使界面美观,可考虑用二维表格的形式输出。
(5)“查找学生信息”:可进一步设计,如按姓名查找或按学号查找,或者查找某门课程的最高/最低成绩、或者在所有学生中查找平均分最高/最低的学生信息等。
(6)“插入学生信息”:根据学号顺序进行插入。
(7)“删除学生信息”:可进一步设计,根据姓名删除还是根据学号删除。删除前显示该条记录,并提交用户确认。
(8)“成绩计算”:可扩充,如计算每个学生的总分、平均分;计算每个班级每门课程的平均分。
(9)“按总分降序输出”:可扩展,按总分降序或升序。
学生根据需求可以扩展。
可供参考。如果也问题或好的意见记得提出来哟。让学习编程更加群有趣。
#include#include #include FILE* fp1, * fp2, * fp3; typedef struct node { int id; char name[20]; int score[3]; int s_class; double average; double sum; union { int s_id; char s_name[20]; }resault; }STU; STU stu[300],a; int menu() { int op; printf("n***************************************************************************************************n"); printf("*----------------------------------------学生信息管理系统-----------------------------------------*n"); printf("* 1 添加学生信息 *n"); printf("* 2 显示学生信息 *n"); printf("* 3 查找学生信息 *n"); printf("* 4 插入学生信息 *n"); printf("* 5 删除学生信息 *n"); printf("* 6 成绩计算 *n"); printf("* 7 按总分降序显示 *n"); printf("* 0 退出 *n"); printf("***************************************************************************************************n"); printf("n"); printf("请输入选项->"); scanf("%d", &op); return op; } //添加学生信息 void AddInformation() { while (1) { int n,cnt = 0; int i = 0; printf("请输入添加学生班级(1-3),输入0退出:"); scanf("%d", &n); //根据班级打开不同的文件 switch (n) { case 1: if ((fp1 = fopen("F:\visual studio C language\Small Grade Management System\Class1.txt", "a")) == NULL) { printf("Open file Class1 error!n"); exit(1); } printf("输入学号:"); scanf("%d", &stu[i].id); while (stu[i].id) { printf("输入姓名:"); scanf("%s", stu[i].name); stu[i].s_class = n; printf("输入三门成绩:"); scanf("%d %d %d", &stu[i].score[0], &stu[i].score[1], &stu[i].score[2]); stu[i].sum = stu[i].score[0] + stu[i].score[1] + stu[i].score[2]; stu[i].average = stu[i].sum / 3; fwrite(stu, sizeof(STU), 1, fp1); printf("输入学号:"); scanf("%d", &stu[i].id); } fclose(fp1); break; case 2: if ((fp2 = fopen("F:\visual studio C language\Small Grade Management System\Class2.txt", "a")) == NULL) { printf("Open file Class2 error!n"); exit(1); } printf("输入学号:"); scanf("%d", &stu[i].id); while (stu[i].id) { printf("输入姓名:"); scanf("%s", stu[i].name); stu[i].s_class = n; printf("输入三门成绩:"); scanf("%d %d %d", &stu[i].score[0], &stu[i].score[1], &stu[i].score[2]); stu[i].sum = stu[i].score[0] + stu[i].score[1] + stu[i].score[2]; stu[i].average = stu[i].sum / 3; fwrite(stu, sizeof(STU), 1, fp2); printf("输入学号:"); scanf("%d", &stu[i].id); } fclose(fp2); break; case 3: if ((fp3 = fopen("F:\visual studio C language\Small Grade Management System\Class3.txt", "a")) == NULL) { printf("Open file Class3 error!n"); exit(1); } printf("输入学号:"); scanf("%d", &stu[i].id); while (stu[i].id) { printf("输入姓名:"); scanf("%s", stu[i].name); stu[i].s_class = n; printf("输入三门成绩:"); scanf("%d %d %d", &stu[i].score[0], &stu[i].score[1], &stu[i].score[2]); stu[i].sum = stu[i].score[0] + stu[i].score[1] + stu[i].score[2]; stu[i].average = stu[i].sum / 3; fwrite(stu, sizeof(STU), 1, fp3); printf("输入学号:"); scanf("%d", &stu[i].id); } fclose(fp3); break; } if (n == 0) break; } } //显示学生信息 void PrintInformation() { int n, i = 0; while (1) { printf("输入要显示的班级(1-3),退出输入0:"); scanf("%d", &n); switch (n) { case 1: i = 0; if ((fp1 = fopen("F:\visual studio C language\Small Grade Management System\Class1.txt", "r")) == NULL) { printf("Open file Class1 error!n"); exit(1); } printf("n***********************************************************************************************n"); printf("*---No-----ID-------Name--------------Class----Score1---Score2---Score3---Average----Sum------*n"); while (fread(&stu[i], sizeof(STU), 1, fp1) == 1) { printf("* %-3d ", i + 1); printf("%-10d %-20s %-8d %-8d %-8d %-8d %-8.1lf %-8.1lf *n", stu[i].id, stu[i].name, stu[i].s_class, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].average, stu[i].sum); i++; } printf("***********************************************************************************************n"); printf("n"); fclose(fp1); break; case 2: i = 0; if ((fp2 = fopen("F:\visual studio C language\Small Grade Management System\Class2.txt", "r")) == NULL) { printf("Open file Class2 error!n"); exit(1); } printf("n***********************************************************************************************n"); printf("*---No-----ID-------Name--------------Class----Score1---Score2---Score3---Average----Sum------*n"); while (fread(&stu[i], sizeof(STU), 1, fp2) == 1) { printf("* %-3d ", i + 1); printf("%-10d %-20s %-8d %-8d %-8d %-8d %-8.1lf %-8.1lf *n", stu[i].id, stu[i].name, stu[i].s_class, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].average, stu[i].sum); i++; } printf("***********************************************************************************************n"); printf("n"); fclose(fp2); break; case 3: i = 0; if ((fp3 = fopen("F:\visual studio C language\Small Grade Management System\Class3.txt", "r")) == NULL) { printf("Open file Class3 error!n"); exit(1); } printf("n***********************************************************************************************n"); printf("*---No-----ID-------Name--------------Class----Score1---Score2---Score3---Average----Sum------*n"); while (fread(&stu[i], sizeof(STU), 1, fp3) == 1) { printf("* %-3d ", i + 1); printf("%-10d %-20s %-8d %-8d %-8d %-8d %-8.1lf %-8.1lf *n", stu[i].id, stu[i].name, stu[i].s_class, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].average, stu[i].sum); i++; } printf("***********************************************************************************************n"); printf("n"); fclose(fp3); break; } if (n == 0) break; } } //按姓名查找 void searchN3() { int i = 0; int n = 1; if ((fp3 = fopen("F:\visual studio C language\Small Grade Management System\Class3.txt", "r")) == NULL) { printf("Open file Class3 error!n"); exit(1); } while (fread(&stu[i], sizeof(STU), 1, fp3) == 1) { if (strcmp(a.resault.s_name, stu[i].name) == 0) { printf("n******************************************************************************************n"); printf("*-----Id-------Name-------------Class-----Score1---Score2---Score-3---Average---Sum------*n"); printf("* %-10d %-20s %-8d %-8d %-8d %-8d %-8.1lf %-8.1lf *n", stu[i].id, stu[i].name, stu[i].s_class, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].average, stu[i].sum); printf("******************************************************************************************n"); printf("n"); n = 0; break; } i++; } fclose(fp3); if (n != 0) { printf("n******************************************************n"); printf("* 没有这个学生! *n"); printf("******************************************************n"); printf("n"); } } void searchN2() { int i = 0; int n = 1; if ((fp2 = fopen("F:\visual studio C language\Small Grade Management System\Class2.txt", "r")) == NULL) { printf("Open file Class2 error!n"); exit(1); } while (fread(&stu[i], sizeof(STU), 1, fp2) == 1) { if (strcmp(a.resault.s_name, stu[i].name) == 0) { printf("n******************************************************************************************n"); printf("*-----Id-------Name-------------Class-----Score1---Score2---Score-3---Average---Sum------*n"); printf("* %-10d %-20s %-8d %-8d %-8d %-8d %-8.1lf %-8.1lf *n", stu[i].id, stu[i].name, stu[i].s_class, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].average, stu[i].sum); printf("******************************************************************************************n"); printf("n"); n = 0; break; } i++; } fclose(fp2); if (n != 0) searchN3(); } void searchN1() { int i = 0; int n = 1; if ((fp1 = fopen("F:\visual studio C language\Small Grade Management System\Class1.txt", "r")) == NULL) { printf("Open file Class1 error!n"); exit(1); } while (fread(&stu[i], sizeof(STU), 1, fp1) == 1) { //若在第一个文件里找到了,就不用往下找 //如在第一个文件里找不到,就开始在第二个文件里找 if (strcmp(a.resault.s_name, stu[i].name) == 0) { printf("n******************************************************************************************n"); printf("*-----Id-------Name-------------Class-----Score1---Score2---Score-3---Average---Sum------*n"); printf("* %-10d %-20s %-8d %-8d %-8d %-8d %-8.1lf %-8.1lf *n", stu[i].id, stu[i].name, stu[i].s_class, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].average, stu[i].sum); printf("******************************************************************************************n"); printf("n"); n = 0; break; } i++; } fclose(fp1); if (n != 0) searchN2(); } //按学号查找 void search3() { int i = 0; int n = 1; if ((fp3 = fopen("F:\visual studio C language\Small Grade Management System\Class3.txt", "r")) == NULL) { printf("Open file Class3 error!n"); exit(1); } while (fread(&stu[i], sizeof(STU), 1, fp3) == 1) { if (a.resault.s_id == stu[i].id) { printf("n******************************************************************************************n"); printf("*-----Id-------Name-------------Class-----Score1---Score2---Score-3---Average---Sum------*n"); printf("* %-10d %-20s %-8d %-8d %-8d %-8d %-8.1lf %-8.1lf *n", stu[i].id, stu[i].name, stu[i].s_class, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].average, stu[i].sum); printf("******************************************************************************************n"); printf("n"); n = 0; break; } i++; } fclose(fp3); if (n != 0) { printf("n******************************************************n"); printf("* 没有这个学生! *n"); printf("******************************************************n"); printf("n"); } } void search2() { int i = 0; int n = 1; if ((fp2 = fopen("F:\visual studio C language\Small Grade Management System\Class2.txt", "r")) == NULL) { printf("Open file Class2 error!n"); exit(1); } while (fread(&stu[i], sizeof(STU), 1, fp2) == 1) { if (a.resault.s_id == stu[i].id) { printf("n******************************************************************************************n"); printf("*-----Id-------Name-------------Class-----Score1---Score2---Score-3---Average---Sum------*n"); printf("* %-10d %-20s %-8d %-8d %-8d %-8d %-8.1lf %-8.1lf *n", stu[i].id, stu[i].name, stu[i].s_class, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].average, stu[i].sum); printf("******************************************************************************************n"); printf("n"); n = 0; break; } i++; } fclose(fp2); if (n != 0) search3(); } void search1() { int i = 0; int n = 1; if ((fp1 = fopen("F:\visual studio C language\Small Grade Management System\Class1.txt", "r")) == NULL) { printf("Open file Class1 error!n"); exit(1); } while (fread(&stu[i], sizeof(STU), 1, fp1) == 1) { //若在第一个文件里找到了,就不用往下找 //如在第一个文件里找不到,就开始在第二个文件里找 if (a.resault.s_id == stu[i].id) { printf("n******************************************************************************************n"); printf("*-----Id-------Name-------------Class-----Score1---Score2---Score-3---Average---Sum------*n"); printf("* %-10d %-20s %-8d %-8d %-8d %-8d %-8.1lf %-8.1lf *n", stu[i].id, stu[i].name, stu[i].s_class, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].average, stu[i].sum); printf("******************************************************************************************n"); printf("n"); n = 0; break; } i++; } fclose(fp1); if (n != 0) search2(); } //学生信息查找 void SearchInformation() { char ch; while (1) { printf("用学号查到输入I,用姓名查找输入N,退出输入0:"); gets(); scanf("%c", &ch); if (ch == 'N') { printf("请输入查找学生姓名:"); scanf("%s", a.resault.s_name); searchN1(); //调用第一个按姓名查找函数 } else if (ch == 'I') { printf("请输入查找学生学号:"); scanf("%d", &a.resault.s_id); search1(); //调用第一个按学号查找函数 } else if (ch == '0') { printf("n****************************************************n"); printf("* 查找结束! *n"); printf("****************************************************n"); printf("n"); break; } } } //插入学生信息 void InsertInformation() { int n=1, m; int cnt = 0; int c = 0; int id; int i = 0, j = 0; char name[20]; int score[3]; double average, sum = 0; printf("请输入插入学生的班级(1-3)和位置(1-10):"); scanf("%d %d", &n, &m); if (m > 10) m = 10; printf("输入学号:"); scanf("%d", &id); printf("输入姓名:"); scanf("%s", name); printf("输入三门课程:"); scanf("%d %d %d", &score[0], &score[1], &score[2]); sum = score[0] + score[1] + score[2]; average = sum / 3; switch (n) { case 1: if ((fp1 = fopen("F:\visual studio C language\Small Grade Management System\Class1.txt", "r")) == NULL) { printf("Open file Class1 error!n"); exit(1); } while (fread(&stu[i], sizeof(STU), 1, fp1) == 1) //先从文件里读出来 { i++; } cnt = i; for (i = 0; i < m; i++) //查找要出入的位置 { if ((m - 1) == i) //如果找到了,这个位置开始所有元素往后移动一次 { c = 1; for (j = cnt; j > i; j--) { stu[j].id = stu[j - 1].id; strcpy(stu[j].name, stu[j - 1].name); stu[j].s_class = stu[j - 1].s_class; stu[j].score[0] = stu[j - 1].score[0]; stu[j].score[1] = stu[j - 1].score[1]; stu[j].score[2] = stu[j - 1].score[2]; stu[j].average = stu[j - 1].average; stu[j].sum = stu[j - 1].sum; } //在这个位置进行更新 stu[i].id = id; strcpy(stu[i].name, name); stu[i].s_class = n; stu[i].score[0] = score[0]; stu[i].score[1] = score[1]; stu[i].score[2] = score[2]; stu[i].average = average; stu[i].sum = sum; break; } } if (c == 0) //如果没找到,就在最后加一个学生信息 { stu[i + 1].id = id; strcpy(stu[i].name, name); stu[i + 1].s_class = n; stu[i + 1].score[0] = score[0]; stu[i + 1].score[1] = score[1]; stu[i + 1].score[2] = score[2]; stu[i + 1].average = average; stu[i + 1].sum = sum; } fclose(fp1); //更新完以后,更新文件,以“w”方式打开 if ((fp1 = fopen("F:\visual studio C language\Small Grade Management System\Class1.txt", "w")) == NULL) { printf("Open file Class1 error!n"); exit(1); } fwrite(stu, sizeof(STU), cnt + 1, fp1); //再次把所有信息写在文件里 fclose(fp1); printf("n********************************************n"); printf("* 插入信息成功! *n"); printf("********************************************n"); printf("n"); break; case 2: if ((fp2 = fopen("F:\visual studio C language\Small Grade Management System\Class2.txt", "r")) == NULL) { printf("Open file Class2 error!n"); exit(1); } while (fread(&stu[i], sizeof(STU), 1, fp2) == 1) //先从文件里读出来 { i++; } cnt = i; for (i = 0; i < m; i++) { if ((m - 1) == i) { c = 1; for (j = cnt; j > i; j--) { stu[j].id = stu[j - 1].id; strcpy(stu[j].name, stu[j - 1].name); stu[j].s_class = stu[j - 1].s_class; stu[j].score[0] = stu[j - 1].score[0]; stu[j].score[1] = stu[j - 1].score[1]; stu[j].score[2] = stu[j - 1].score[2]; stu[j].average = stu[j - 1].average; stu[j].sum = stu[j - 1].sum; } stu[i].id = id; strcpy(stu[i].name, name); stu[i].s_class = n; stu[i].score[0] = score[0]; stu[i].score[1] = score[1]; stu[i].score[2] = score[2]; stu[i].average = average; stu[i].sum = sum; break; } } if (c == 0) { stu[i + 1].id = id; strcpy(stu[i].name, name); stu[i + 1].s_class = n; stu[i + 1].score[0] = score[0]; stu[i + 1].score[1] = score[1]; stu[i + 1].score[2] = score[2]; stu[i + 1].average = average; stu[i + 1].sum = sum; } fclose(fp2); if ((fp2 = fopen("F:\visual studio C language\Small Grade Management System\Class2.txt", "w")) == NULL) { printf("Open file Class2 error!n"); exit(1); } fwrite(stu, sizeof(STU), cnt + 1, fp2); fclose(fp2); printf("n********************************************n"); printf("* 插入信息成功! *n"); printf("********************************************n"); printf("n"); break; case 3: if ((fp3 = fopen("F:\visual studio C language\Small Grade Management System\Class3.txt", "r")) == NULL) { printf("Open file Class3 error!n"); exit(1); } while (fread(&stu[i], sizeof(STU), 1, fp3) == 1) //先从文件里读出来 { i++; } cnt = i; for (i = 0; i < m; i++) { if ((m - 1) == i) { c = 1; for (j = cnt; j > i; j--) { stu[j].id = stu[j - 1].id; strcpy(stu[j].name, stu[j - 1].name); stu[j].s_class = stu[j - 1].s_class; stu[j].score[0] = stu[j - 1].score[0]; stu[j].score[1] = stu[j - 1].score[1]; stu[j].score[2] = stu[j - 1].score[2]; stu[j].average = stu[j - 1].average; stu[j].sum = stu[j - 1].sum; } stu[i].id = id; strcpy(stu[i].name, name); stu[i].s_class = n; stu[i].score[0] = score[0]; stu[i].score[1] = score[1]; stu[i].score[2] = score[2]; stu[i].average = average; stu[i].sum = sum; break; } } if (c == 0) { stu[i + 1].id = id; strcpy(stu[i].name, name); stu[i + 1].s_class = n; stu[i + 1].score[0] = score[0]; stu[i + 1].score[1] = score[1]; stu[i + 1].score[2] = score[2]; stu[i + 1].average = average; stu[i + 1].sum = sum; } fclose(fp3); if ((fp3 = fopen("F:\visual studio C language\Small Grade Management System\Class3.txt", "w")) == NULL) { printf("Open file Class3 error!n"); exit(1); } fwrite(stu, sizeof(STU), cnt + 1, fp3); fclose(fp3); printf("n********************************************n"); printf("* 插入信息成功! *n"); printf("********************************************n"); printf("n"); break; } } //删除学生信息 void Deletesearch3(int* p) { int i = 0, j = 0; int cnt = 0; int c = 0; int n = 1; if ((fp3 = fopen("F:\visual studio C language\Small Grade Management System\Class3.txt", "r")) == NULL) { printf("Open file Class3 error!n"); exit(1); } while (fread(&stu[i], sizeof(STU), 1, fp3) == 1) //先从文件里读出来 { i++; } cnt = i; for (i = 0; i <= cnt; i++) //查找要出入的位置 { if (stu[i].id == *p) //如果找到了,这个位置开始所有元素往后移动一次 { c = 1; for (j = i; j < cnt; j++) { stu[j].id = stu[j + 1].id; strcpy(stu[j].name, stu[j + 1].name); stu[j].s_class = stu[j + 1].s_class; stu[j].score[0] = stu[j + 1].score[0]; stu[j].score[1] = stu[j + 1].score[1]; stu[j].score[2] = stu[j + 1].score[2]; stu[j].average = stu[j + 1].average; stu[j].sum = stu[j + 1].sum; } break; } } fclose(fp3); if ((fp3 = fopen("F:\visual studio C language\Small Grade Management System\Class3.txt", "w")) == NULL) { printf("Open file Class3 error!n"); exit(1); } if (c != 1) { fwrite(stu, sizeof(STU), cnt, fp3); //再次把所有信息写在文件里 printf("n******************************************************************n"); printf("* 没有发现学生信息! *n"); printf("******************************************************************n"); printf("n"); } else { fwrite(stu, sizeof(STU), cnt - 1, fp3); //再次把所有信息写在文件里 printf("n******************************************************************n"); printf("* 删除学生信息成功! *n"); printf("******************************************************************n"); printf("n"); } fclose(fp3); } void Deletesearch2(int* p) { int i = 0, j = 0; int cnt = 0; int c = 0; int n = 1; if ((fp2 = fopen("F:\visual studio C language\Small Grade Management System\Class2.txt", "r")) == NULL) { printf("Open file Class2 error!n"); exit(1); } while (fread(&stu[i], sizeof(STU), 1, fp2) == 1) //先从文件里读出来 { i++; } cnt = i; for (i = 0; i <= cnt; i++) //查找要出入的位置 { if (stu[i].id == *p) //如果找到了,这个位置开始所有元素往后移动一次 { c = 1; for (j = i; j < cnt; j++) { stu[j].id = stu[j + 1].id; strcpy(stu[j].name, stu[j + 1].name); stu[j].s_class = stu[j + 1].s_class; stu[j].score[0] = stu[j + 1].score[0]; stu[j].score[1] = stu[j + 1].score[1]; stu[j].score[2] = stu[j + 1].score[2]; stu[j].average = stu[j + 1].average; stu[j].sum = stu[j + 1].sum; } break; } } fclose(fp2); if ((fp2 = fopen("F:\visual studio C language\Small Grade Management System\Class2.txt", "w")) == NULL) { printf("Open file Class2 error!n"); exit(1); } if (c != 1) { fwrite(stu, sizeof(STU), cnt, fp2); //再次把所有信息写在文件里 Deletesearch3(p); } else { fwrite(stu, sizeof(STU), cnt - 1, fp2); //再次把所有信息写在文件里 printf("n******************************************************************n"); printf("* 删除学生信息成功! *n"); printf("******************************************************************n"); printf("n"); } fclose(fp2); } void Deletesearch1(int* p) { int i = 0, j = 0; int cnt = 0; int c = 0; int n = 1; if ((fp1 = fopen("F:\visual studio C language\Small Grade Management System\Class1.txt", "r")) == NULL) { printf("Open file Class1 error!n"); exit(1); } while (fread(&stu[i], sizeof(STU), 1, fp1) == 1) //先从文件里读出来 { i++; } cnt = i; for (i = 0; i <= cnt; i++) //查找要出入的位置 { if (stu[i].id ==*p ) //如果找到了,这个位置开始所有元素往后移动一次 { c = 1; for (j = i; j < cnt; j++) { stu[j].id = stu[j + 1].id; strcpy(stu[j].name, stu[j + 1].name); stu[j].s_class = stu[j + 1].s_class; stu[j].score[0] = stu[j + 1].score[0]; stu[j].score[1] = stu[j + 1].score[1]; stu[j].score[2] = stu[j + 1].score[2]; stu[j].average = stu[j + 1].average; stu[j].sum = stu[j + 1].sum; } break; } } fclose(fp1); if ((fp1 = fopen("F:\visual studio C language\Small Grade Management System\Class1.txt", "w")) == NULL) { printf("Open file Class1 error!n"); exit(1); } if (c != 1) { fwrite(stu, sizeof(STU), cnt, fp1); //再次把所有信息写在文件里 Deletesearch2(p); } else { fwrite(stu, sizeof(STU), cnt - 1, fp1); //再次把所有信息写在文件里 printf("n******************************************************************n"); printf("* 删除学生信息成功! *n"); printf("******************************************************************n"); printf("n"); } fclose(fp1); } void DeleteInformation() { int id; printf("输入要删掉的学生学号:"); scanf("%d", &id); Deletesearch1(&id); } //计算成绩 void CountScore() { int i = 0; int n = 0; double ave_class1[3] = { 0 }, ave_class2[3] = { 0 }, ave_class3[3] = { 0 }; double sum_score[3] = { 0 }; if ((fp1 = fopen("F:\visual studio C language\Small Grade Management System\Class1.txt", "r")) == NULL) { printf("Open file Class1 error!n"); exit(1); } i = 0; while (fread(&stu[i], sizeof(STU), 1, fp1) == 1) //先从文件里读出来 { sum_score[0] = sum_score[0] + stu[i].score[0]; sum_score[1] = sum_score[1] + stu[i].score[1]; sum_score[2] = sum_score[2] + stu[i].score[2]; i++; } n = i ; ave_class1[0] = sum_score[0] / n; ave_class1[1] = sum_score[1] / n; ave_class1[2] = sum_score[2] / n; fclose(fp1); printf("n*************Class1***************n"); printf("* average score1=%0.2lf *n", ave_class1[0]); printf("* average score2=%0.2lf *n", ave_class1[1]); printf("* average score3=%0.2lf *n", ave_class1[2]); printf("**********************************n"); if ((fp2 = fopen("F:\visual studio C language\Small Grade Management System\Class2.txt", "r")) == NULL) { printf("Open file Class2 error!n"); exit(1); } i = 0; sum_score[0] = 0; sum_score[1] = 0; sum_score[2] = 0; while (fread(&stu[i], sizeof(STU), 1, fp2) == 1) //先从文件里读出来 { sum_score[0] = sum_score[0] + stu[i].score[0]; sum_score[1] = sum_score[1] + stu[i].score[1]; sum_score[2] = sum_score[2] + stu[i].score[2]; i++; } n = i; ave_class2[0] = sum_score[0] / n; ave_class2[1] = sum_score[1] / n; ave_class2[2] = sum_score[2] / n; fclose(fp2); printf("n*************Class2***************n"); printf("* average score1=%0.2lf *n", ave_class2[0]); printf("* average score2=%0.2lf *n", ave_class2[1]); printf("* average score3=%0.2lf *n", ave_class2[2]); printf("**********************************n"); if ((fp3 = fopen("F:\visual studio C language\Small Grade Management System\Class3.txt", "r")) == NULL) { printf("Open file Class3 error!n"); exit(1); } i = 0; sum_score[0] = 0; sum_score[1] = 0; sum_score[2] = 0; while (fread(&stu[i], sizeof(STU), 1, fp3) == 1) //先从文件里读出来 { sum_score[0] = sum_score[0] + stu[i].score[0]; sum_score[1] = sum_score[1] + stu[i].score[1]; sum_score[2] = sum_score[2] + stu[i].score[2]; i++; } n = i; ave_class3[0] = sum_score[0] / n; ave_class3[1] = sum_score[1] / n; ave_class3[2] = sum_score[2] / n; fclose(fp3); printf("n*************Class3***************n"); printf("* average score1=%0.2lf *n", ave_class3[0]); printf("* average score2=%0.2lf *n", ave_class3[1]); printf("* average score3=%0.2lf *n", ave_class3[2]); printf("**********************************n"); printf("n"); } //按总分降序输出 void SortInformation() { int i = 0, j = 0; int cnt = 0; int max = 0; char name[20]; int score[3], id; double sum = 0, average = 0; if ((fp1 = fopen("F:\visual studio C language\Small Grade Management System\Class1.txt", "r")) == NULL) { printf("Open file Class1 error!n"); exit(1); } while (fread(&stu[i], sizeof(STU), 1, fp1) == 1) //先从文件里读出来 { i++; } cnt = i; for (i = 0; i < cnt; i++) { max = i; for (j = i + 1; j < cnt; j++) { if (stu[max].sum < stu[j].sum) max = j; } if (max != i) { id = stu[i].id; stu[i].id = stu[max].id; stu[max].id = id; strcpy(name, stu[i].name); strcpy(stu[i].name, stu[max].name); strcpy(stu[max].name, name); score[0] = stu[i].score[0]; stu[i].score[0] = stu[max].score[0]; stu[max].score[0] = score[0]; score[1] = stu[i].score[1]; stu[i].score[1] = stu[max].score[1]; stu[max].score[1] = score[1]; score[2] = stu[i].score[2]; stu[i].score[2] = stu[max].score[2]; stu[max].score[2] = score[2]; average = stu[i].average; stu[i].average = stu[max].average; stu[max].average = average; sum = stu[i].sum; stu[i].sum = stu[max].sum; stu[max].sum = sum; } } printf("n***********************************************************************************************n"); printf("*---No-----ID-------Name--------------Class----Score1---Score2---Score3---Average----Sum------*n"); for (i = 0; i < cnt; i++) { printf("* %-3d ", i + 1); printf("%-10d %-20s %-8d %-8d %-8d %-8d %-8.1lf %-8.1lf *n", stu[i].id, stu[i].name, stu[i].s_class, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].average, stu[i].sum); } printf("***********************************************************************************************n"); printf("n"); fclose(fp1); i = 0; cnt = 0; if ((fp2 = fopen("F:\visual studio C language\Small Grade Management System\Class2.txt", "r")) == NULL) { printf("Open file Class2 error!n"); exit(1); } while (fread(&stu[i], sizeof(STU), 1, fp2) == 1) //先从文件里读出来 { i++; } cnt = i; for (i = 0; i < cnt; i++) { max = i; for (j = i + 1; j < cnt; j++) { if (stu[max].sum < stu[j].sum) max = j; } if (max != i) { id = stu[i].id; stu[i].id = stu[max].id; stu[max].id = id; strcpy(name, stu[i].name); strcpy(stu[i].name, stu[max].name); strcpy(stu[max].name, name); score[0] = stu[i].score[0]; stu[i].score[0] = stu[max].score[0]; stu[max].score[0] = score[0]; score[1] = stu[i].score[1]; stu[i].score[1] = stu[max].score[1]; stu[max].score[1] = score[1]; score[2] = stu[i].score[2]; stu[i].score[2] = stu[max].score[2]; stu[max].score[2] = score[2]; average = stu[i].average; stu[i].average = stu[max].average; stu[max].average = average; sum = stu[i].sum; stu[i].sum = stu[max].sum; stu[max].sum = sum; } } printf("n***********************************************************************************************n"); printf("*---No-----ID-------Name--------------Class----Score1---Score2---Score3---Average----Sum------*n"); for (i = 0; i < cnt; i++) { printf("* %-3d ", i + 1); printf("%-10d %-20s %-8d %-8d %-8d %-8d %-8.1lf %-8.1lf *n", stu[i].id, stu[i].name, stu[i].s_class, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].average, stu[i].sum); } printf("***********************************************************************************************n"); printf("n"); fclose(fp2); i = 0; cnt = 0; if ((fp3 = fopen("F:\visual studio C language\Small Grade Management System\Class3.txt", "r")) == NULL) { printf("Open file Class3 error!n"); exit(1); } while (fread(&stu[i], sizeof(STU), 1, fp3) == 1) //先从文件里读出来 { i++; } cnt = i; for (i = 0; i < cnt; i++) { max = i; for (j = i + 1; j < cnt; j++) { if (stu[max].sum < stu[j].sum) max = j; } if (max != i) { id = stu[i].id; stu[i].id = stu[max].id; stu[max].id = id; strcpy(name, stu[i].name); strcpy(stu[i].name, stu[max].name); strcpy(stu[max].name, name); score[0] = stu[i].score[0]; stu[i].score[0] = stu[max].score[0]; stu[max].score[0] = score[0]; score[1] = stu[i].score[1]; stu[i].score[1] = stu[max].score[1]; stu[max].score[1] = score[1]; score[2] = stu[i].score[2]; stu[i].score[2] = stu[max].score[2]; stu[max].score[2] = score[2]; average = stu[i].average; stu[i].average = stu[max].average; stu[max].average = average; sum = stu[i].sum; stu[i].sum = stu[max].sum; stu[max].sum = sum; } } printf("n***********************************************************************************************n"); printf("*---No-----ID-------Name--------------Class----Score1---Score2---Score3---Average----Sum------*n"); for (i = 0; i < cnt; i++) { printf("* %-3d ", i + 1); printf("%-10d %-20s %-8d %-8d %-8d %-8d %-8.1lf %-8.1lf *n", stu[i].id, stu[i].name, stu[i].s_class, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].average, stu[i].sum); } printf("***********************************************************************************************n"); printf("n"); fclose(fp3); } int main() { int choice; while (1) { choice = menu(); switch (choice) { case 1:AddInformation(); break; case 2:PrintInformation(); break; case 3:SearchInformation(); break; case 4:InsertInformation(); break; case 5:DeleteInformation(); break; case 6:CountScore(); break; case 7:SortInformation(); break; case 0: printf("n******************************************************************n"); printf("* 程序结束! *n"); printf("******************************************************************n"); printf("n"); return 0; break; } } }



