- 1、需求分析
- 2、功能模块
- 3、效果展示
- 4、代码详解
- (1)学生信息结构体
- (2)学生信息的录入
- (3)学生信息的修改
- (4)学生信息的删除
- (5)学生信息的打印
- (6)学生信息的插入
- (7)学生信息的查询
- (8)学生成绩的排序
- (9)输出各科成绩不及格学生信息
- (10)输出各科成绩最高分学生信息
- (11)生成学生信息文件
- (12)读取文件学生信息
- (13)主程序
- 5、完整代码+注释
2、功能模块 3、效果展示
- 利用C语言编写一个可以对学生成绩信息进行管理的系统
0、退出系统
1、录入学生信息和成绩
2、打印学生信息
3、统计学生人数
4、查找学生信息
5、修改学生信息
6、删除学生信息
7、排序学生成绩
8、生成学生信息文件
9、读取文件学生信息
10、输出各科成绩不及格学生信息
11、输出各科成绩最高分学生信息
12、计算学生成绩总分和平均分
- 系统可以对学生成绩信息进行录入、修改、查找、删除、插入、打印、保存、读取、排序、计算总分、平均分
struct Student //创建学生信息结构体
{ //每个学生对应一个结构体
char ID[20]; //学号
char Name[10]; //姓名
float Score1; //英语成绩
float Score2; //数学成绩
float Score3; //语文成绩
float Score4; //程序设计成绩
float All; //总分
float Average; //平均成绩
} students[1000];
(2)学生信息的录入
void InputStudent() //利用循环录入学生信息
{
while (1)
{
printf("请输入学号:");
scanf("%s", &students[num].ID);
getchar();
printf("请输入姓名:");
scanf("%s", &students[num].Name);
getchar();
printf("请输入成绩:");
scanf("%f", &students[num].Score1);
getchar();
printf("请输入成绩:");
scanf("%f", &students[num].Score2);
getchar();
printf("请输入成绩:");
scanf("%f", &students[num].Score3);
getchar();
printf("请输入成绩:");
scanf("%f", &students[num].Score4); //依次输入各项数据
getchar();
students[num].All = students[num].Score1 + students[num].Score2 + students[num].Score3 + students[num].Score4; //输完数据后自动计算总成绩与平均成绩
students[num].Average = (students[num].Score1 + students[num].Score2 + students[num].Score3 + students[num].Score4) / 4;
if (Student_SearchByIndex(students[num].ID) == -1)
{
num++; //移向下一个位置
}
else
{
printf("学号重复,输入数据无效 !n");
}
printf("是否继续?(y/n):>");
if (getchar() == 'n')
{
break;
}
}
}
(3)学生信息的修改
void ModifyStudent() //修改学生成绩
{
while (1)
{
char id[20];
int index;
printf("请输入要修改的学生的学号:");
scanf("%s", &id);
getchar();
index = Student_SearchByIndex(id); //调用搜查id函数,根据其返回值确定位置
if (index == -1)
{
printf("学生不存在!n");
}
else
{
printf("你要修改的学生信息为:n");
Student_DisplaySingle(index);
printf("-- 请输入新值--n");
printf("请输入学号:");
scanf("%s", &students[index].ID);
getchar();
printf("请输入姓名:");
scanf("%s", &students[index].Name);
getchar();
printf("请输入英语成绩:");
scanf("%f", &students[index].Score1);
getchar();
printf("请输入数学成绩:");
scanf("%f", &students[index].Score2);
getchar();
printf("请输入语文成绩:");
scanf("%f", &students[index].Score3);
getchar();
printf("请输入程序设计成绩:");
scanf("%f", &students[index].Score4); //重新录入一套新的数据替代
getchar();
students[index].All = students[index].Score1 + students[index].Score2 + students[index].Score3 + students[index].Score4;
students[index].Average = (students[index].Score1 + students[index].Score2 + students[index].Score3 + students[index].Score4) / 4;
}
printf("是否继续?(y/n):>");
if (getchar() == 'n')
{
break;
}
}
}
(4)学生信息的删除
void DeleteStudent() //删除学生信息
{
int i;
while (1)
{
char id[20];
int index;
printf("请输入要删除的学生的学号:");
scanf("%s", &id);
getchar();
index = Student_SearchByIndex(id); //调用搜查id函数,根据其返回值确定位置
if (index == -1)
{
printf("该学生不存在!n");
}
else
{
printf("你要删除的学生信息为:n");
Student_DisplaySingle(index);
printf("是否真的要删除?(y/n)");
if (getchar() == 'y')
{
for (i = index; i < num - 1; i++)
{
Copy(students, i, i + 1);
// students[i]=students[i+1]; //把后边的对象都向前移动
}
num--;
}
getchar();
}
printf("是否继续?(y/n):>");
if (getchar() == 'n')
{
break;
}
}
}
(5)学生信息的打印
void display() //打印已录入的学生信息
{
int a;
printf("%10s%10s%8s%8s%8s%8s%10s%10sn", "学号", "姓名", "英语", "数学", "语文", "程序设计", "总成绩", "平均成绩");
printf("-------------------------------------------------------------------------n");
for (a = 0; a < num; a++)
{
printf("%10s%10s%8.2f%8.2f%8.2f%8.2f%10.2f%10.2fn", students[a].ID, students[a].Name,
students[a].Score1, students[a].Score2, students[a].Score3, students[a].Score4, students[a].All, students[a].Average);
}
}
(6)学生信息的插入
void InsertStudent() //指定位置插入学生信息
{
int a, b, c;
printf("请输入你要插入的位置");
scanf("%d", &a);
if (a > num)
{
printf("输入的位置有误,请重新输入,当前共%d条数据n", num);
scanf("%d", &a);
}
b = num - 1;
for (; b >= a - 1; b--)
{
// strcpy(students[b+1].ID,students[b].ID);
// strcpy(students[b+1].Name,students[b].Name);
// students[b+1].Score1=students[b].Score1;
// students[b+1].Score2=students[b].Score2;
// students[b+1].Score3=students[b].Score3;
// students[b+1].Score4=students[b].Score4;
// students[b+1].All=students[b].All;
// students[b+1].Average=students[b].Average;
Copy(students, b + 1, b); //根据其输入的位置,将其及以后的数据向后移动一个位置
}
num++;
printf("请输入学号:");
scanf("%s", &students[a - 1].ID);
getchar();
printf("请输入姓名:");
scanf("%s", &students[a - 1].Name);
getchar();
printf("请输入英语成绩:");
scanf("%f", &students[a - 1].Score1);
getchar();
printf("请输入数学成绩:");
scanf("%f", &students[a - 1].Score2);
getchar();
printf("请输入语文成绩:");
scanf("%f", &students[a - 1].Score3);
getchar();
printf("请输入程序设计成绩:");
scanf("%f", &students[a - 1].Score4); //输入新数据
getchar();
students[a - 1].All = students[a - 1].Score1 + students[a - 1].Score2 + students[a - 1].Score3 + students[a - 1].Score4;
students[a - 1].Average = (students[a - 1].Score1 + students[a - 1].Score2 + students[a - 1].Score3 + students[a - 1].Score4) / 4;
}
(7)学生信息的查询
void search() //查询学生信息
{
while (1)
{
char name[20];
int index;
printf("请输入要查询的学生的姓名:");
scanf("%s", &name);
getchar();
index = Student_SearchByName(name); //调用搜查name函数,根据其返回值确定位置
if (index == -1)
{
printf("学生不存在!n");
}
else
{
printf("你要查询的学生信息为:n");
Student_DisplaySingle(index);
}
printf("是否继续?(y/n):>");
if (getchar() == 'n')
{
break;
}
}
}
(8)学生成绩的排序
void SortStudent() //根据平均分排序
{
int i, j;
// struct students tmp;
for (i = 0; i < num; i++)
{
students[i].Average = (students[i].Score1 + students[i].Score2 + students[i].Score3 + students[i].Score4) / 4;
}
for (i = 0; i < num; i++)
{
for (j = 1; j < num - i; j++)
{
if (students[j - 1].Average < students[j].Average)
{
Copy(students, num, j - 1);
Copy(students, j - 1, j);
Copy(students, j, num);
// tmp=students[j-1];
// students[j-1]=students[j];
// students[j]=tmp; //冒泡排序
}
}
}
int a;
printf("%10s%10s%8s%8s%8s%8s%10s%10sn", "学号", "姓名", "英语", "数学", "语文", "程序设计", "总成绩", "平均成绩");
printf("-------------------------------------------------------------------------n");
for (a = 0; a < num; a++)
{
printf("%10s%10s%8.2f%8.2f%8.2f%8.2f%10.2f%10.2fn", students[a].ID, students[a].Name,
students[a].Score1, students[a].Score2, students[a].Score3, students[a].Score4, students[a].All, students[a].Average);
}
}
(9)输出各科成绩不及格学生信息
void SearchLow() //搜索不及格的并输出
{
int a;
printf("英语不及格的有:%10s%10s%8sn", "姓名", "学号", "英语");
for (a = 0; a < num; a++)
{
if (students[a].Score1 < 60)
printf("tt%10s%10s%8.2fn", students[a].Name, students[a].ID, students[a].Score1); //从头搜索到尾,若小于60就输出
}
printf("数学不及格的有:%10s%10s%8sn", "姓名", "学号", "数学");
for (a = 0; a < num; a++)
{
if (students[a].Score2 < 60)
printf("tt%10s%10s%8.2fn", students[a].Name, students[a].ID, students[a].Score2);
}
printf("语文不及格的有:%10s%10s%8sn", "姓名", "学号", "语文");
for (a = 0; a < num; a++)
{
if (students[a].Score3 < 60)
printf("tt%10s%10s%8.2fn", students[a].Name, students[a].ID, students[a].Score3);
}
printf("程序设计不及格的有%10s%10s%8sn", "姓名", "学号","程序设计");
for (a = 0; a < num; a++)
{
if (students[a].Score4 < 60)
printf("tt%10s%10s%8.2fn", students[a].Name, students[a].ID, students[a].Score4);
}
system("pause");
}
(10)输出各科成绩最高分学生信息
void SearchHigh() //搜索成绩最高者输出
{
int a;
int max;
printf("英语成绩最高分为%10s%10s%8sn", "姓名", "学号", "英语");
max = students[0].Score1;
for (a = 1; a < num; a++)
{
if (students[a].Score1 > max)
max = students[a].Score1;
}
for (a = 0; a < num; a++)
{
if (max == students[a].Score1)
printf("tt%10s%10s%8.2fn", students[a].Name, students[a].ID, students[a].Score1);
}
printf("数学成绩最高分为%10s%10s%8sn", "姓名", "学号", "数学");
max = students[0].Score2;
for (a = 1; a < num; a++)
{
if (students[a].Score2 > max)
max = students[a].Score2;
}
for (a = 0; a < num; a++)
{
if (max == students[a].Score2)
printf("tt%10s%10s%8.2fn", students[a].Name, students[a].ID, students[a].Score2);
}
printf("语文成绩最高分为%10s%10s%8sn", "姓名", "学号", "语文");
max = students[0].Score3;
for (a = 1; a < num; a++)
{
if (students[a].Score3 > max)
max = students[a].Score3;
}
for (a = 0; a < num; a++)
{
if (max == students[a].Score3)
printf("tt%10s%10s%8.2fn", students[a].Name, students[a].ID, students[a].Score3);
}
printf("程序设计最高分为%10s%10s%8sn", "姓名", "学号", "程序设计");
max = students[0].Score4;
for (a = 1; a < num; a++)
{
if (students[a].Score4 > max)
max = students[a].Score4;
}
for (a = 0; a < num; a++)
{
if (max == students[a].Score4)
printf("tt%10s%10s%8.2fn", students[a].Name, students[a].ID, students[a].Score4);
}
system("pause");
}
(11)生成学生信息文件
void SaveStudent()
{
FILE *fp = fopen("student-information.txt", "w+");
fprintf(fp, "%dn", num);
for (int i = 0; i < num; i++)
{
fprintf(fp, "%s %s %f %f %f %f %f %fn", students[i].ID, students[i].Name, students[i].Score1, students[i].Score2, students[i].Score3, students[i].Score4, students[i].All, students[i].Average);
}
fclose(fp);
printf("学生信息文件已保存在本地n");
}
(12)读取文件学生信息
void LoadInformation()
{
FILE *fp = fopen("student-information.txt", "r");
fscanf(fp, "%d", &num);
for (int i = 0; i < num; i++)
{
fscanf(fp, "%s %s %f %f %f %f %f %fn", students[i].ID, students[i].Name, &students[i].Score1, &students[i].Score2, &students[i].Score3, &students[i].Score4, &students[i].All, &students[i].Average);
}
fclose(fp);
printf("系统已读取文件学生信息n");
}
(13)主程序
int main()
{
int i;
while (1)
{
LoadInformation();
printf("-------------------------------------------------------------------------n");
printf(" 请选择系统功能 n");
printf("-------------------------------------------------------------------------n");
printf(" 欢迎使用高校学生信息管理系统 n");
printf("-------------------------------------------------------------------------n");
printf(" 0.退出系统 n");
printf(" 1.学生信息的录入 n");
printf(" 2.学生信息的修改 n");
printf(" 3.学生信息的删除 n");
printf(" 4.学生信息的插入 n");
printf(" 5.学生信息的打印 n");
printf(" 6.学生信息的查找 n");
printf(" 7.学生成绩的排序 n");
printf(" 8.生成学生信息文件 n");
printf(" 9.读取学生信息文件 n");
printf(" 10.输出各科不及格学生信息 n");
printf(" 11.输出各科最高分学生信息 n");
printf("-------------------------------------------------------------------------n");
printf("--------------------------------作者: wink-------------------------------n");
printf("请选择(0-11):>");
scanf("%d", &i);
switch (i)
{
case 1:
InputStudent();
break;
case 2:
ModifyStudent();
break;
case 3:
DeleteStudent();
break;
case 4:
InsertStudent();
break;
case 5:
display();
break;
case 6:
search();
break;
case 7:
SortStudent();
break;
case 8:
SaveStudent();
break;
case 9:
LoadInformation();
break;
case 10:
SearchLow();
break;
case 11:
SearchHigh();
break;
case 0:
printf("Thanks for using, See you again !");
exit(0);
default:;
}
}
return 0;
}
5、完整代码+注释
#include#include #include #include struct Student //创建学生信息结构体 { //每个学生对应一个结构体 char ID[20]; //学号 char Name[10]; //姓名 float Score1; //英语成绩 float Score2; //数学成绩 float Score3; //语文成绩 float Score4; //程序设计成绩 float All; //总分 float Average; //平均成绩 } students[1000]; int num = 0; //计数器 void Copy(struct Student *arr, int i, int j) { strcpy(arr[i].ID, arr[j].ID); strcpy(arr[i].Name, arr[j].Name); arr[i].Score1 = arr[j].Score1; arr[i].Score2 = arr[j].Score2; arr[i].Score3 = arr[j].Score3; arr[i].Score4 = arr[j].Score4; arr[i].All = arr[j].All; arr[i].Average = arr[j].Average; } int Student_SearchByName(char name[]) //通过姓名来检索学生 { int i; for (i = 0; i < num; i++) { if (strcmp(students[i].Name, name) == 0) //通过strcmp函数来对比学生姓名,找到返回在数组的位置 { return i; } } return -1; //未找到返回 -1 } int Student_SearchByIndex(char id[]) //通过学号来检索学生信息 { int i; for (i = 0; i < num; i++) { if (strcmp(students[i].ID, id) == 0) //通过strcmp函数来对比学生id,找到返回位置 { return i; } } return -1; //未找到返回 -1 } void Student_DisplaySingle(int index) //输出表头 { printf("%10s%10s%8s%8s%8s%10sn", "学号", "姓名", "英语", "数学", "语文", "程序设计", "总成绩", "平均成绩"); printf("-------------------------------------------------------------n"); printf("%10s%10s%8.2f%8.2f%8.2f%8.2f%10.2f%10.2fn", students[index].ID, students[index].Name,students[index].Score1, students[index].Score2, students[index].Score3, students[index].Score4, students[index].All, students[index].Average); } void InputStudent() //利用循环录入学生信息 { while (1) { printf("请输入学号:"); scanf("%s", &students[num].ID); getchar(); printf("请输入姓名:"); scanf("%s", &students[num].Name); getchar(); printf("请输入成绩:"); scanf("%f", &students[num].Score1); getchar(); printf("请输入成绩:"); scanf("%f", &students[num].Score2); getchar(); printf("请输入成绩:"); scanf("%f", &students[num].Score3); getchar(); printf("请输入成绩:"); scanf("%f", &students[num].Score4); //依次输入各项数据 getchar(); students[num].All = students[num].Score1 + students[num].Score2 + students[num].Score3 + students[num].Score4; //输完数据后自动计算总成绩与平均成绩 students[num].Average = (students[num].Score1 + students[num].Score2 + students[num].Score3 + students[num].Score4) / 4; if (Student_SearchByIndex(students[num].ID) == -1) { num++; //移向下一个位置 } else { printf("学号重复,输入数据无效 !n"); } printf("是否继续?(y/n):>"); if (getchar() == 'n') { break; } } } void ModifyStudent() //修改学生成绩 { while (1) { char id[20]; int index; printf("请输入要修改的学生的学号:"); scanf("%s", &id); getchar(); index = Student_SearchByIndex(id); //调用搜查id函数,根据其返回值确定位置 if (index == -1) { printf("学生不存在!n"); } else { printf("你要修改的学生信息为:n"); Student_DisplaySingle(index); printf("-- 请输入新值--n"); printf("请输入学号:"); scanf("%s", &students[index].ID); getchar(); printf("请输入姓名:"); scanf("%s", &students[index].Name); getchar(); printf("请输入英语成绩:"); scanf("%f", &students[index].Score1); getchar(); printf("请输入数学成绩:"); scanf("%f", &students[index].Score2); getchar(); printf("请输入语文成绩:"); scanf("%f", &students[index].Score3); getchar(); printf("请输入程序设计成绩:"); scanf("%f", &students[index].Score4); //重新录入一套新的数据替代 getchar(); students[index].All = students[index].Score1 + students[index].Score2 + students[index].Score3 + students[index].Score4; students[index].Average = (students[index].Score1 + students[index].Score2 + students[index].Score3 + students[index].Score4) / 4; } printf("是否继续?(y/n):>"); if (getchar() == 'n') { break; } } } void DeleteStudent() //删除学生信息 { int i; while (1) { char id[20]; int index; printf("请输入要删除的学生的学号:"); scanf("%s", &id); getchar(); index = Student_SearchByIndex(id); //调用搜查id函数,根据其返回值确定位置 if (index == -1) { printf("该学生不存在!n"); } else { printf("你要删除的学生信息为:n"); Student_DisplaySingle(index); printf("是否真的要删除?(y/n)"); if (getchar() == 'y') { for (i = index; i < num - 1; i++) { Copy(students, i, i + 1); // students[i]=students[i+1]; //把后边的对象都向前移动 } num--; } getchar(); } printf("是否继续?(y/n):>"); if (getchar() == 'n') { break; } } } void display() //打印已录入的学生信息 { int a; printf("%10s%10s%8s%8s%8s%8s%10s%10sn", "学号", "姓名", "英语", "数学", "语文", "程序设计", "总成绩", "平均成绩"); printf("-------------------------------------------------------------------------n"); for (a = 0; a < num; a++) { printf("%10s%10s%8.2f%8.2f%8.2f%8.2f%10.2f%10.2fn", students[a].ID, students[a].Name, students[a].Score1, students[a].Score2, students[a].Score3, students[a].Score4, students[a].All, students[a].Average); } } void InsertStudent() //指定位置插入学生信息 { int a, b, c; printf("请输入你要插入的位置"); scanf("%d", &a); if (a > num) { printf("输入的位置有误,请重新输入,当前共%d条数据n", num); scanf("%d", &a); } b = num - 1; for (; b >= a - 1; b--) { // strcpy(students[b+1].ID,students[b].ID); // strcpy(students[b+1].Name,students[b].Name); // students[b+1].Score1=students[b].Score1; // students[b+1].Score2=students[b].Score2; // students[b+1].Score3=students[b].Score3; // students[b+1].Score4=students[b].Score4; // students[b+1].All=students[b].All; // students[b+1].Average=students[b].Average; Copy(students, b + 1, b); //根据其输入的位置,将其及以后的数据向后移动一个位置 } num++; printf("请输入学号:"); scanf("%s", &students[a - 1].ID); getchar(); printf("请输入姓名:"); scanf("%s", &students[a - 1].Name); getchar(); printf("请输入英语成绩:"); scanf("%f", &students[a - 1].Score1); getchar(); printf("请输入数学成绩:"); scanf("%f", &students[a - 1].Score2); getchar(); printf("请输入语文成绩:"); scanf("%f", &students[a - 1].Score3); getchar(); printf("请输入程序设计成绩:"); scanf("%f", &students[a - 1].Score4); //输入新数据 getchar(); students[a - 1].All = students[a - 1].Score1 + students[a - 1].Score2 + students[a - 1].Score3 + students[a - 1].Score4; students[a - 1].Average = (students[a - 1].Score1 + students[a - 1].Score2 + students[a - 1].Score3 + students[a - 1].Score4) / 4; } void search() //查询学生信息 { while (1) { char name[20]; int index; printf("请输入要查询的学生的姓名:"); scanf("%s", &name); getchar(); index = Student_SearchByName(name); //调用搜查name函数,根据其返回值确定位置 if (index == -1) { printf("学生不存在!n"); } else { printf("你要查询的学生信息为:n"); Student_DisplaySingle(index); } printf("是否继续?(y/n):>"); if (getchar() == 'n') { break; } } } void SortStudent() //根据平均分排序 { int i, j; // struct students tmp; for (i = 0; i < num; i++) { students[i].Average = (students[i].Score1 + students[i].Score2 + students[i].Score3 + students[i].Score4) / 4; } for (i = 0; i < num; i++) { for (j = 1; j < num - i; j++) { if (students[j - 1].Average < students[j].Average) { Copy(students, num, j - 1); Copy(students, j - 1, j); Copy(students, j, num); // tmp=students[j-1]; // students[j-1]=students[j]; // students[j]=tmp; //冒泡排序 } } } int a; printf("%10s%10s%8s%8s%8s%8s%10s%10sn", "学号", "姓名", "英语", "数学", "语文", "程序设计", "总成绩", "平均成绩"); printf("-------------------------------------------------------------------------n"); for (a = 0; a < num; a++) { printf("%10s%10s%8.2f%8.2f%8.2f%8.2f%10.2f%10.2fn", students[a].ID, students[a].Name, students[a].Score1, students[a].Score2, students[a].Score3, students[a].Score4, students[a].All, students[a].Average); } } void SearchLow() //搜索不及格的并输出 { int a; printf("英语不及格的有:%10s%10s%8sn", "姓名", "学号", "英语"); for (a = 0; a < num; a++) { if (students[a].Score1 < 60) printf("tt%10s%10s%8.2fn", students[a].Name, students[a].ID, students[a].Score1); //从头搜索到尾,若小于60就输出 } printf("数学不及格的有:%10s%10s%8sn", "姓名", "学号", "数学"); for (a = 0; a < num; a++) { if (students[a].Score2 < 60) printf("tt%10s%10s%8.2fn", students[a].Name, students[a].ID, students[a].Score2); } printf("语文不及格的有:%10s%10s%8sn", "姓名", "学号", "语文"); for (a = 0; a < num; a++) { if (students[a].Score3 < 60) printf("tt%10s%10s%8.2fn", students[a].Name, students[a].ID, students[a].Score3); } printf("程序设计不及格的有%10s%10s%8sn", "姓名", "学号","程序设计"); for (a = 0; a < num; a++) { if (students[a].Score4 < 60) printf("tt%10s%10s%8.2fn", students[a].Name, students[a].ID, students[a].Score4); } system("pause"); } void SearchHigh() //搜索成绩最高者输出 { int a; int max; printf("英语成绩最高分为%10s%10s%8sn", "姓名", "学号", "英语"); max = students[0].Score1; for (a = 1; a < num; a++) { if (students[a].Score1 > max) max = students[a].Score1; } for (a = 0; a < num; a++) { if (max == students[a].Score1) printf("tt%10s%10s%8.2fn", students[a].Name, students[a].ID, students[a].Score1); } printf("数学成绩最高分为%10s%10s%8sn", "姓名", "学号", "数学"); max = students[0].Score2; for (a = 1; a < num; a++) { if (students[a].Score2 > max) max = students[a].Score2; } for (a = 0; a < num; a++) { if (max == students[a].Score2) printf("tt%10s%10s%8.2fn", students[a].Name, students[a].ID, students[a].Score2); } printf("语文成绩最高分为%10s%10s%8sn", "姓名", "学号", "语文"); max = students[0].Score3; for (a = 1; a < num; a++) { if (students[a].Score3 > max) max = students[a].Score3; } for (a = 0; a < num; a++) { if (max == students[a].Score3) printf("tt%10s%10s%8.2fn", students[a].Name, students[a].ID, students[a].Score3); } printf("程序设计最高分为%10s%10s%8sn", "姓名", "学号", "程序设计"); max = students[0].Score4; for (a = 1; a < num; a++) { if (students[a].Score4 > max) max = students[a].Score4; } for (a = 0; a < num; a++) { if (max == students[a].Score4) printf("tt%10s%10s%8.2fn", students[a].Name, students[a].ID, students[a].Score4); } system("pause"); } void SaveStudent() { FILE *fp = fopen("student-information.txt", "w+"); fprintf(fp, "%dn", num); for (int i = 0; i < num; i++) { fprintf(fp, "%s %s %f %f %f %f %f %fn", students[i].ID, students[i].Name, students[i].Score1, students[i].Score2, students[i].Score3, students[i].Score4, students[i].All, students[i].Average); } fclose(fp); printf("学生信息文件已保存在本地n"); } void LoadInformation() { FILE *fp = fopen("student-information.txt", "r"); fscanf(fp, "%d", &num); for (int i = 0; i < num; i++) { fscanf(fp, "%s %s %f %f %f %f %f %fn", students[i].ID, students[i].Name, &students[i].Score1, &students[i].Score2, &students[i].Score3, &students[i].Score4, &students[i].All, &students[i].Average); } fclose(fp); printf("系统已读取文件学生信息n"); } int main() { int i; while (1) { LoadInformation(); printf("-------------------------------------------------------------------------n"); printf(" 请选择系统功能 n"); printf("-------------------------------------------------------------------------n"); printf(" 欢迎使用高校学生信息管理系统 n"); printf("-------------------------------------------------------------------------n"); printf(" 0.退出系统 n"); printf(" 1.学生信息的录入 n"); printf(" 2.学生信息的修改 n"); printf(" 3.学生信息的删除 n"); printf(" 4.学生信息的插入 n"); printf(" 5.学生信息的打印 n"); printf(" 6.学生信息的查找 n"); printf(" 7.学生成绩的排序 n"); printf(" 8.生成学生信息文件 n"); printf(" 9.读取学生信息文件 n"); printf(" 10.输出各科不及格学生信息 n"); printf(" 11.输出各科最高分学生信息 n"); printf("-------------------------------------------------------------------------n"); printf("--------------------------------作者: wink-------------------------------n"); printf("请选择(0-11):>"); scanf("%d", &i); switch (i) { case 1: InputStudent(); break; case 2: ModifyStudent(); break; case 3: DeleteStudent(); break; case 4: InsertStudent(); break; case 5: display(); break; case 6: search(); break; case 7: SortStudent(); break; case 8: SaveStudent(); break; case 9: LoadInformation(); break; case 10: SearchLow(); break; case 11: SearchHigh(); break; case 0: printf("Thanks for using, See you again !"); exit(0); default:; } } return 0; }



