#include \"stdio.h\" /*定义学生结构体*/ struct Student {
char ID[20];
char Name[20];
float Mark1; /*计算机*/
float Mark2; /*英语*/
float Mark3; /*数学*/
float Zongfen; /*总分*/
float Average;}; /*平均分*/ /*声明学生数组及学生数量*/ struct Student students[2000]; int num=0; /*求总分*/ float Zong(struct Student stu) { return(stu.Mark1+stu.Mark2+stu.Mark3); } /*求平均值*/ float Avg(struct Student stu) {return (stu.Mark1+stu.Mark2+stu.Mark3)/3;} /*通过学号返回数组下标*/ int Student_SearchByIndex(char id[]) {
int i;
for (i=0;i
int i;
for (i=0;i
{if (strcmp(students[i].Name,name)==0)
{return i;}}
return -1;}
/*通过学号返回数组下标*/ int Student_SearchID(char id[]){
int i;
for (i=0;i
{if (strcmp(students[i].ID,id)==0)
{return i;}}
return -1;} /*显示单条学生记录*/ void Student_DisplaySingle(int index) {printf(\"%10s%10s%8s%8s%8s%8s%10s\\n\",\"学号\",\"姓名\",\"计算机\",\"英语\",\"数学\",\"总分\",\"平均成绩\"); printf(\"------------------------------\\n\"); printf(\"%10s%10s%8.0f%8.0f%8.0f%8.0f%10.2f\\n\",students[index].ID,students[index].Name, students[index].Mark1,students[index].Mark2,students[index].Mark3,students[index].Zongfen,students[index].Average); }void Student_DisplaySingle1(int index) {printf(\"------------------------------\\n\"); printf(\"%10s%10s%8.0f%8.0f%8.0f%8.0f%10.2f\\n\",students[index].ID,students[index].Name, students[index].Mark1,students[index].Mark2,students[index].Mark3,students[index].Zongfen,students[index].Average); } /*插入学生信息*/ void Student_Insert() {while(1) {printf(\"请输入学号:\");scanf(\"%s\",&students[num].ID);getchar(); printf(\"请输入姓名:\");scanf(\"%s\",&students[num].Name);getchar(); printf(\"请输入计算机成绩:\");scanf(\"%f\",&students[num].Mark1);getchar(); printf(\"请输入英语成绩:\");scanf(\"%f\",&students[num].Mark2);getchar(); printf(\"请输入数学成绩:\");scanf(\"%f\",&students[num].Mark3);getchar();
students[num].Average=Avg(students[num]);
students[num].Zongfen=Zong(students[num]);
num++;
printf(\"是否继续?(y/n)\");
if (getchar()==\'n\'){break;} }} void exit() ; /*修改学生信息*/ void Student_Modify() {
float mark1,mark2,mark3;
while(1)
{
char id[20];
int index;
printf(\"请输入要修改的学生的学号:\");
scanf(\"%s\",&id);
getchar();
index=Student_SearchByIndex(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].Mark1);
getchar();
printf(\"请输入成绩:\");
scanf(\"%f\",&students[index].Mark2);
getchar();
printf(\"请输入成绩:\");
scanf(\"%f\",&students[index].Mark3);
getchar();
students[index].Zongfen=Zong(students[index]);
students[index].Average=Avg(students[index]);
printf(\"是否继续?(y/n)\");
if (getchar()==\'n\')
{
break;
}
} } /*删除学生信息*/
void Student_Delete() {
int i;
while(1)
{
char id[20];
int index;
printf(\"请输入要删除的学生的学号:\");
scanf(\"%s\",&id);
}
getchar();
index=Student_SearchByIndex(id);
if (index==-1)
{
printf(\"学生不存在!\\n\");
}
else
{
printf(\"你要删除的学生信息为:\\n\");
Student_DisplaySingle(index);
printf(\"是否真的要删除?(y/n)\");
if (getchar()==\'y\')
{
for (i=index;i
{
students[i]=students[i+1];
}
num--;
}
getchar();
}
printf(\"是否继续?(y/n)\");
if (getchar()==\'n\')
{
break;
}
} } /*按姓名或学号查询*/ void Student_Select() {
int sel;
printf(\"1--------------------按姓名查询\\n\");
printf(\"2--------------------按学号查询\\n\");
scanf(\"%d\",&sel);
if(sel==2){
while(1)
{
char id[20];
int index;
printf(\"请输入要查询的学生的学号:\");
scanf(\"%s\",&id);
getchar();
index=Student_SearchID(id);
if (index==-1)
{
printf(\"学生不存在!\\n\");
}
else
{
printf(\"你要查询的学生信息为:\\n\");
Student_DisplaySingle(index);
}
printf(\"是否继续?(y/n)\");
if (getchar()==\'n\')
{
break;
}
}}else if (sel==1)
{while(1)
{
char name[20];
int index;
printf(\"请输入要查询的学生的姓名:\");
scanf(\"%s\",&name);
getchar();
index=Student_SearchByName(name);
if (index==-1)
{
printf(\"学生不存在!\\n\");
}
else
{
printf(\"你要查询的学生信息为:\\n\");
Student_DisplaySingle(index);
}
printf(\"是否继续?(y/n)\");
if (getchar()==\'n\')
{
break;
}
}}
else printf(\"信息错误!\\n\"); } /*排序*/ void Student_SortByAverage() {
int a,sel;
printf(\"1--------------------按学号排序\\n\");
printf(\"2--------------------按姓名排序\\n\");
printf(\"3--------------------按计算机排序\\n\");
printf(\"4--------------------按英语排序\\n\");
printf(\"5--------------------按数学排序\\n\");
printf(\"6--------------------按总分排序\\n\");
printf(\"7--------------------按平均分排序\\n\");
scanf(\"%d\",&sel);
if(sel==1)
{int i,j;
struct Student tmp;
for (i=0;i
{
for (j=1;j
{
if (strcmp(students[j-1].ID,students[j].ID)>0)
{
tmp=students[j-1];
students[j-1]=students[j];
students[j]=tmp;
}
}
}}
else if(sel==2)
{int i,j;
struct Student tmp;
for (i=0;i
{
for (j=1;j
{
if (strcmp(students[j-1].Name,students[j].Name)>0)
{
tmp=students[j-1];
students[j-1]=students[j];
students[j]=tmp;
}
}
}}
else if(sel==3)
{int i,j;
struct Student tmp;
for (i=0;i
{
for (j=1;j
{
if (students[j-1].Mark1>students[j].Mark1)
{
tmp=students[j-1];
students[j-1]=students[j];
students[j]=tmp;
}
}
}}
else if(sel==4)
{int i,j;
struct Student tmp;
for (i=0;i
{
for (j=1;j
{
if (students[j-1].Mark2>students[j].Mark2)
{
tmp=students[j-1];
students[j-1]=students[j];
students[j]=tmp;
}
}
}}
else if(sel==5)
{int i,j;
struct Student tmp;
for (i=0;i
{
for (j=1;j
{
if (students[j-1].Mark3>students[j].Mark3)
{
tmp=students[j-1];
students[j-1]=students[j];
students[j]=tmp;
}
}
}}
else if(sel==6)
{int i,j;
struct Student tmp;
for (i=0;i
{
for (j=1;j
{
if (students[j-1].Zongfen>students[j].Zongfen)
{
tmp=students[j-1];
students[j-1]=students[j];
students[j]=tmp;
}
}
}}
else if(sel==7)
{int i,j;
struct Student tmp;
for (i=0;i
{
for (j=1;j
{
if (students[j-1].Average>students[j].Average)
{
tmp=students[j-1];
students[j-1]=students[j];
students[j]=tmp;
}
}
}}
else printf(\"信息错误!\\n\"); } /*显示学生信息*/ void Student_Display() {
int i;
printf(\"%10s%10s%8s%8s%8s%8s%10s\\n\",\"学号\",\"姓名\",\"计算机\",\"英语\",\"数学\",\"总分\",\"平均成绩\");
printf(\"------------------------------\\n\");
for (i=0;i
{
printf(\"%10s%10s%8.0f%8.0f%8.0f%8.0f%10.2f\\n\",students[i].ID,students[i].Name,
students[i].Mark1,students[i].Mark2,students[i].Mark3,students[i].Zongfen,students[i].Average);
} } /*将学生信息从文件读出*/ 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
{
fread(&students[i],sizeof(struct Student),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
{
if (fwrite(&students[i],sizeof(struct Student),1,fp)!=1)
{
printf(\"写入文件错误!\\n\");
}
}
fclose(fp); } /*统计不同分数段的学生*/ void Student_TJ() {
while(1)
{
int a,sel;
float m,n;
printf(\"1--------------------按计算机统计不同分数段的学生\\n\");
printf(\"2--------------------按英语统计不同分数段的学生\\n\");
printf(\"3--------------------按数学统计不同分数段的学生\\n\");
printf(\"4--------------------按总分统计不同分数段的学生\\n\");
printf(\"5--------------------按平均分统计不同分数段的学生\\n\");
scanf(\"%d\",&sel);
printf(\"输入所需查询的分数段[m,n]\");
scanf(\"%f%f\",&m,&n);
printf(\"%10s%10s%8s%8s%8s%8s%10s\\n\",\"学号\",\"姓名\",\"计算机\",\"英语\",\"数学\",\"总分\",\"平均成绩\");
if(sel==1)
{int j;
for (j=0;j
{
if (students[j].Mark1>=m&&students[j].Mark1
Student_DisplaySingle1(j);
}}
else if(sel==2)
{int j;
for (j=0;j
{
if (students[j].Mark2>=m&&students[j].Mark2
Student_DisplaySingle1(j);
}}
else if(sel==3)
{int j;
for (j=0;j
{
if (students[j].Mark3>=m&&students[j].Mark3
Student_DisplaySingle1(j);
}}else if(sel==4)
{int j;
for (j=0;j
{
if (students[j].Zongfen>=m&&students[j].Zongfen
Student_DisplaySingle1(j);
}}else if(sel==5)
{int j;
for (j=0;j
{
if (students[j].Average>=m&&students[j].Average
Student_DisplaySingle1(j);
}}
else printf(\"信息错误!\\n\");
printf(\"是否继续?(y/n)\");
a=getchar();
if (getchar()==\'n\'){break;} } } /*主程序*/ main() { int choice;
IO_ReadInfo();
fflush(stdin); while(1)
{ /*主菜单*/ 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(\"
请选择(1-9):\"); scanf(\"%d\",&choice); getchar(); switch(choice){ case 1:Student_Insert();break; case 2:Student_Insert();break; case 3:Student_Modify();break; case 4:Student_Delete();break; case 5:Student_Select();break; case 6:Student_SortByAverage();Student_Display();break; case 7:Student_TJ();break; case 8:Student_Display();break;} IO_WriteInfo();
} }