|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<stdio.h>
#include<stdlib.h>
#define MAX 5000
struct StudentInformation //定义学生结构体
{
char Student_ID[20];
char Name[20];
float score1;
float score2;
float score3;
float score4;
float score5;
float sumsc; //学生成绩总和
float average; //学生成绩平均分
};
struct StudentInformation students[MAX]; //定义一个学生数组及其最大数量
int num=0; //定义一个全局变量
float Ave(struct StudentInformation stu) //求分数平均值的函数
{
return(stu.score1+stu.score2+stu.score3+stu.score4+stu.score5)/5;
}
float sum(struct StudentInformation stu) //求分数总和的函数
{
return(stu.score1+stu.score2+stu.score3+stu.score4+stu.score5);
}
int searchName(char name[]) //通过名字搜索的函数
{
int i;
for(i=0;i<num;i++) //遍历数组
{
if(strcmp(students[i].Name,name)==0) //通过字符串比较函数判断是否有这个人
{
return i;
}
}
return -1; //该函数失败
}
int searchStudent_ID(char id[]) // 通过学号搜索,基本与上一个函数功能一致
{
int j;
for(j=0;j<num;j++)
{
if(strcmp(students[j].Student_ID,id)==0)
{
return j;
}
}
return -1;
}
void Mod_message(int p) //定义该函数便于查看学生的信息
{
printf("%20s%20s%20s%20s%20s%20s%20s%20s%20s\n","学号","姓名","成绩","成绩","成绩","成绩","成绩","总成绩","平均成绩");
printf("************************************************************************************************************************\n");
printf("%20s%20s%20.2f%20.2f%20.2f%20.2f%20.2f%20.2f%20.2f\n",students[p].Student_ID,students[p].Name,students[p].score1,
students[p].score2,students[p].score3,students[p].score4,students[p].score5,
students[p].sumsc,students[p].average);
}
void Studentsearch_id_score() //根据学生学号进行成绩查询的函数
{
while(1)
{
char id[20];
int p;
printf("请输入查询学生的学号");
scanf("%s",&id);
getchar();
p=searchStudent_ID(id);
if(p==-1)
{
printf("请检查你输入的学号是否有误\n");
}
printf("你要查询的学生的全部信息为:\n");
Mod_message(p);
printf("是否继续查询新的学生,是请输入y,否请输入n");
if(getchar()=='n')
{
break;
}
}
}
void Studentsearch_name_score() //根据学生姓名进行成绩查询的函数
{
while(1)
{
char name[20];
int p;
printf("请输入查询学生的姓名");
scanf("%s",&name);
getchar();
p=searchName(name);
if(p==-1)
{
printf("请检查你输入的姓名是否有误\n");
}
printf("你要查询的学生的全部信息为:\n");
Mod_message(p);
printf("是否继续查询新的学生,是请输入y,否请输入n");
if(getchar()=='n')
{
break;
}
}
}
void StudentInformation_Inesrt() //插入一个新学生信息的函数
{
while(1){
printf("请输入要插入学生的学号:");
scanf("%s",&students[num].Student_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("%s",&students[num].score3);
getchar();
printf("请输入要插入学生的第四科成绩:");
scanf("%f",&students[num].score4);
getchar();
printf("请输入要插入学生的第五科成绩:");
scanf("%f",&students[num].score5);
getchar();
students[num].average=Ave(students[num]);
num++; //插入了一个学生 全局变量加1
printf("是否继续插入新的学生,是请输入y,否请输入n");
if(getchar()=='n')
{
break;
}
}
}
void Student_Mod() //学生信息修改的函数
{
while(1)
{
char id[20];
int p;
printf("请输入要修改信息的学生的学号:");
scanf("%s",&id);
getchar();
p=searchStudent_ID(id);
if(p==-1)
{
printf("请检查你输入的学号是否有误\n");
}
else
{
printf("你要修改的学生的全部信息为:\n");
Mod_message(p);
printf("请输入你要修改的信息\n");
printf("请输入要修改学生的学号:");
scanf("%s",&students[p].Student_ID);
getchar();
printf("请输入要修改学生的姓名:");
scanf("%s",&students[p].Name);
getchar();
printf("请输入要修改学生的第一科成绩:");
scanf("%f",&students[p].score1);
getchar();
printf("请输入要修改学生的第二科成绩:");
scanf("%f",&students[p].score2);
getchar();
printf("请输入要修改学生的第三科成绩:");
scanf("%s",&students[p].score3);
getchar();
printf("请输入要修改学生的第四科成绩:");
scanf("%f",&students[p].score4);
getchar();
printf("请输入要修改学生的第五科成绩:");
scanf("%f",&students[p].score5);
getchar();
students[p].average=Ave(students[p]);
}
printf("该学生的新信息已保存,是否继续进行修改,是请输入y,否请输入n");
if(getchar()=='n')
{
break;
}
}
}
void Studentid_Delete() //按学生学号查找删除学生信息的函数
{
while(1)
{
char id[20];
int p;
int i;
printf("请输入要删除信息的学生的学号");
scanf("%s",&id);
getchar();
p=searchStudent_ID(id);
if(p==-1)
{
printf("请检查你输入的学号是否有误\n");
}
printf("你要删除的学生的全部信息为:\n");
Mod_message(p);
printf("你真的要删除该学生的信息吗?删除了无法复原的哦,确认删除请输入y,否请输入n");
if(getchar()=='y')
{
for(i=p;i<num-1;i++)
{
students[i]=students[i+1]; //把后面的学生往前移,从而实现删除
}
num--; //删除了一个学生,全局变量减一
}
getchar();
printf("是否继续进行删除,是请输入y,否请输入n");
if(getchar()=='n')
{
break;
}
}
}
void Studentname_Delete() //按学生姓名查找删除学生信息的函数
{
while(1)
{
char name[20];
int i;
int p;
printf("请输入要删除信息的学生的姓名");
scanf("%s",&name);
getchar();
p=searchName(name);
if(p==-1)
{
printf("请检查你输入的姓名是否有误\n");
}
printf("你要删除的学生的全部信息为:\n");
Mod_message(p);
printf("你真的要删除该学生的信息吗?删除了无法复原的哦,确认删除请输入y,否请输入n");
if(getchar()=='y')
{
for(i=p;i<num-1;i++)
{
students[i]=students[i+1]; //把后面的学生往前移,从而实现删除
}
num--; //删除了一个学生,全局变量减一
}
getchar();
printf("是否继续进行删除,是请输入y,否请输入n");
if(getchar()=='n')
{
break;
}
}
}
void Student_Massage() //显示所有的保存的成绩数据
{
int i;
printf("%20s20%20s%20s%20s%20s%20s%20s%20s%20s\n","学号","姓名","成绩","成绩","成绩","成绩","成绩","总成绩","平均成绩");
printf("************************************************************************************************************************\n");
for(i=0;i<num;i++){
printf("%20s%20s%20.2f%20.2f%20.2f%20.2f%20.2f%20.2f%20.2f\n",students[i].Student_ID,students[i].Name,students[i].score1,
students[i].score2,students[i].score3,students[i].score4,students[i].score5,
students[i].sumsc,students[i].average);
}
}
void Student_sortscore1() //使用冒泡法按学生第一门成绩由高到低排序的函数
{
int i,j,temp;
for(i=0;i<num;i++)
{
for(j=0;j<num-i;j++)
{
if(students[j].score1<students[j+1].score1)
{
temp=students[j].score1;
students[j].score1=students[j+1].score1;
students[j+1].score1=temp;
}
}
}
}
void Student_sortscore2() //使用冒泡法按学生第二门成绩由高到低排序的函数
{
int i,j,temp;
for(i=0;i<num;i++)
{
for(j=0;j<num-i;j++)
{
if(students[j].score2<students[j+1].score2)
{
temp=students[j].score2;
students[j].score2=students[j+1].score2;
students[j+1].score2=temp;
}
}
}
}
void Student_sortscore3() //使用冒泡法按学生第三门成绩由高到低排序的函数
{
int i,j,temp;
for(i=0;i<num;i++)
{
for(j=0;j<num-i;j++)
{
if(students[j].score3<students[j+1].score3)
{
temp=students[j].score3;
students[j].score3=students[j+1].score3;
students[j+1].score3=temp;
}
}
}
}
void Student_sortscore4() //使用冒泡法按学生第四门成绩由高到低排序的函数
{
int i,j,temp;
for(i=0;i<num;i++)
{
for(j=0;j<num-i;j++)
{
if(students[j].score4<students[j+1].score4)
{
temp=students[j].score4;
students[j].score4=students[j+1].score4;
students[j+1].score4=temp;
}
}
}
}
void Student_sortscore5() //使用冒泡法按学生第五门成绩由高到低排序的函数
{
int i,j,temp;
for(i=0;i<num;i++)
{
for(j=0;j<num-i;j++)
{
if(students[j].score5<students[j+1].score5)
{
temp=students[j].score5;
students[j].score5=students[j+1].score5;
students[j+1].score5=temp;
}
}
}
}
void Student_sortsumsc() //使用冒泡法按学生总成绩由高到低排序的函数
{
int i,j,temp;
for(i=0;i<num;i++)
{
for(j=0;j<num-i;j++)
{
if(students[j].sumsc<students[j+1].sumsc)
{
temp=students[j].sumsc;
students[j].sumsc=students[j+1].sumsc;
students[j+1].sumsc=temp;
}
}
}
}
void IO_ReadInfo()
{
FILE *fp;
int i;
if ((fp=fopen("Database.txt","rb"))==NULL)
{
printf("不能打开文件!\n");
return;
}
if (fread(&num,sizeof(int),1,fp)!=1)
{
num=-1;
}
else
{
for(i=0;i<num;i++)
{
fread(&students[i],sizeof(struct StudentInformation),1,fp);
}
}
fclose(fp);
}
void IO_WriteInfo()
{
FILE *fp;
int i;
if ((fp=fopen("Database.txt","wb"))==NULL)
{
printf("不能打开文件!\n");
return;
}
if (fwrite(&num,sizeof(int),1,fp)!=1)
{
printf("写入文件错误!\n");
}
for (i=0;i<num;i++)
{
if (fwrite(&students[i],sizeof(struct StudentInformation),1,fp)!=1)
{
printf("写入文件错误!\n");
}
}
fclose(fp);
}
void main()
{
int dd;
IO_ReadInfo();
while(1)
{
printf("\n");
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("| 10.查看第五科成绩的排名 |\n");
printf("* 11.查看总成绩的排名 *\n");
printf("| 12.退出学生管理系统 |\n");
printf("********************************\n");
printf("请选择1~13的功能 ");
scanf("%d",&dd);
getchar();
switch(dd)
{
case 1:
Student_Mod();
break;
case 2:
StudentInformation_Inesrt();
break;
case 3:
Studentid_Delete();
break;
case 4:
Studentsearch_id_score();
break;
case 5:
Studentsearch_name_score();
break;
case 6:
Student_sortscore1();
break;
case 7:
Student_sortscore2();
break;
case 8:
Student_sortscore3();
break;
case 9:
Student_sortscore4();
break;
case 10:
Student_sortscore5();
break;
case 11:
Student_sortsumsc();
break;
case 12:
exit(0);
break;
}
IO_WriteInfo();
}
}
SmallCatt 发表于 2020-11-10 18:35
求分数总和的函数呀 上面 sum
函数是写了,可是,却没有任何地方调用,就是一个摆设。在你的代码中,根本就找不到为总分这个结构成员赋值的任何代码!
|
|