#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){
int i;
while(1){
system("cls");
void LoadInformation();
printf("================================\n");
printf("=======***欢迎使用***=======\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("===***8.读取学生信息文件===***\n");
printf("===***9.退出菜单系统***===\n");
printf("================================\n");
printf("请选择:\n");
printf("请选择<1-9>:\n");
scanf("%d",&i);
switch(i){ //switch语句来选择
case 1:
void Enterstudents();
break;
case 2:
void Printstudents();
break;
case 3:
void Changestudents();
break;
case 4:
void Findstudents();
break;
case 5:
void Deletestudents();
break;
case 6:
void Arrangestudents();
break;
case 7:
void SaveStudent();
break;
case 8:
void LoadInformation();
break;
case 9:
printf("Thanks for using, See you again!");
exit(0);
default: ;
}
}
return 0;
}
struct Student{ //创建学生信息结构体
char ID[20]; //学号
char name[10]; //姓名
float score1; //高等数学
float score2; //大学英语
float score3; //大学物理
float score4; //C语言程序设计
float Allscore; //总分
float average; //平均分
}students[100];
int num=0; //计数器
void replace(struct Student *array,int i,int j){ //取代函数:学生i索引位置将被学生j索引位置取代信息
strcpy(array[i].ID,array[j].ID);
strcpy(array[i].name,array[j].name);
array[i].score1=array[j].score1;
array[i].score2=array[j].score2;
array[i].score3=array[j].score3;
array[i].score4=array[j].score4;
array[i].Allscore=array[j].Allscore;
array[i].average=array[j].average;
}
int Students_SearchByID(char id[]){ //学生学号检索函数
int i;
for(i=0;i<num;i++){
if(strcmp(students[i].ID,id)==0){ //使用strcmp函数来比较学号是否相同
return i; //相同,返回i
}
}
if(strcmp(students[i].ID,id)!=0)
return -1; //不相同,返回-1
}
int Students_SearchByName(char name[]){ //学生姓名检索函数
int i;
for(i=0;i<num;i++){
if(strcmp(students[i].name,name)==0){ //使用strcmp函数来比较姓名是否相同
return i;
}
}
if(strcmp(students[i].name,name)!=0)
return -1;
}
void Student_printf(int index){ //指针位置打印信息函数
int i;
printf("学生学号,学生姓名,高等数学成绩,大学英语成绩,大学物理成绩,C语言程序设计成绩,总分,平均成绩");
for(i=0;i<num;i++){
printf("%10s%10s%8.2f%8.2f%8.2f%8.2f%10.2f%10.2f\n",students[index].ID,students[index].name,
students[index].score1,students[index].score2,students[index].score3,students[index].score4,students[index].Allscore,students[index].average);
}
}
void SaveStudent()
{
FILE *fp = fopen("student-information.txt", "w+");
fprintf(fp, "%d\n", num);
for (int i = 0; i < num; i++)
{
fprintf(fp, "%s %s %f %f %f %f %f %f\n", students[i].ID, students[i].name, students[i].score1, students[i].score2, students[i].score3, students[i].score4, students[i].Allscore, 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 %f\n", students[i].ID, students[i].name, &students[i].score1, &students[i].score2, &students[i].score3, &students[i].score4, &students[i].Allscore, &students[i].average);
}
fclose(fp);
printf("系统已读取文件学生信息\n");
}
void Enterstudents(){ //录入学生信息
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(); //逐步输入各项数据
printf("总分为:");
students[num].Allscore=students[num].score1+students[num].score2+students[num].score3+students[num].score4;
printf("平均成绩为:");
students[num].average=(students[num].score1+students[num].score2+students[num].score3+students[num].score4)/4;
if(Students_SearchByID(students[num].ID)==-1){
num++; //向下移动一位
}
else
printf("学号重复,输入数据错误!\n");
printf("是否要继续?(y/n)");
if(getchar()=='n'){
break;
}
}
}
void Printstudents(){ //打印学生信息
int i;
printf("学生学号,学生姓名,高等数学成绩,大学英语成绩,大学物理成绩,C语言程序设计成绩,总分,平均成绩");
for(i=0;i<num;i++){
printf("%10s%10s%8.2f%8.2f%8.2f%8.2f%10.2f%10.2f\n",students[num].ID,students[num].name,
students[num].score1,students[num].score2,students[num].score3,students[num].score4,students[num].Allscore,students[num].average);
}
}
void Changestudents(){ //修改学生成绩
while(1){
char id[20]; //定义修改学号
int index;
printf("请输入要修改的学号:");
scanf("%s",&id);
getchar();
index=Students_SearchByID(id); //调用id查询函数
if(index==-1){
printf("系统中无该学号!");
}
else{
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("请输入修改后的C语言程序设计成绩:");
scanf("%f",&students[num].score4);
getchar();
printf("修改后总分为:");
students[num].Allscore=students[num].score1+students[num].score2+students[num].score3+students[num].score4;
printf("修改后的平均成绩为:");
students[num].average=(students[num].score1+students[num].score2+students[num].score3+students[num].score4)/4;
printf("是否要继续:<y/n>");
if(getchar()=='n'){
break;
}
}
}
}
void Findstudents(){ //查询学生信息
while(1){
char name[20];
int index;
printf("请输入您要查询的学生名字:");
scanf("%s",&name);
getchar();
index=Students_SearchByName(name);
if(index==-1){
printf("查无此人!");
}
else{
printf("您要查询的信息如下:");
Student_printf(index); //调用指针位置打印信息函数
}
printf("是否要继续:<y/n>");
if(getchar()=='n'){
break;
}
}
}
void Deletestudents(){ //删除学生信息函数
int i;
while(1){
char id[20];
int index;
printf("请您输入要删除的学生学号:");
scanf("%s",&id);
getchar();
index=Students_SearchByID(id);
if(index==-1){
printf("无此人信息!");
}
else{
printf("你要删除的学生信息如下:");
Student_printf(index);
printf("是否要继续:<y/n>");
if(getchar()=='y'){
for(i=index;i<num-1;i++){
replace(students,i,i+1);
}
}
num--;
}
printf("是否要继续:<y/n>");
if(getchar()=='n'){
break;
}
}
}
void Arrangestudents(){ //按学生的平均分成绩排序
int i ,j;
//struct Student t;
for(i=0;i<num;i++){
students[num].average=(students[num].score1+students[num].score2+students[num].score3+students[num].score4)/4;
}
for(i=0;i<num;i++){
for(j=1;j<num-i;j++){
if(students[j-1].average<students[j].average){
replace(students,num,j-1);
replace(students,j-1,j);
replace(students,j,num);
//t=i;
//i=j;
//j=t; 冒泡排序
}
}
}
printf("学生学号,学生姓名,高等数学成绩,大学英语成绩,大学物理成绩,C语言程序设计成绩,总分,平均成绩");
int a;
for(a=0;a<num;a++){
printf("%10s%10s%8.2f%8.2f%8.2f%8.2f%10.2f%10.2f\n",students[a].ID,students[a].name,
students[a].score1,students[a].score2,students[a].score3,students[a].score4,students[a].Allscore,students[a].average);
}
}
为什么无法运行switch语句中1~8的函数内容,只有9能运行,其他都会卡在页面不进去