学生成绩管理系统C语言编写.docx
《学生成绩管理系统C语言编写.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统C语言编写.docx(32页珍藏版)》请在冰点文库上搜索。
学生成绩管理系统C语言编写
学
生
成
级
管
理
系
统
目录
——学生成绩管理系统
实验题目………………………………3
实验要求………………………………3
源程序………………………………5
结果分析………………………………40
心得体会………………………………42
实验题目:
学生成绩管理系统
实验要求:
学生包含以下信息项:
学号、姓名、学院、班级、高数成绩、英语成绩、C语言成绩、总分、平均分。
系统的主要功能包括:
1.创建学生成绩信息文件,根据提示输入学生的各项信息,计算出总分和平均分,然后按学号对学生信息进行排序,并将排序后的学生成绩信息存储到一个二进制文件中。
2.增加学生信息,在原有学生信息文件的基础上增加新的学生成绩信息,要求:
增加后的学生信息仍按学号排序,并继续保存至原文件。
3.删除学生信息,提示用户输入要进行删除操作的学号,如果在文件中有该信息存在,则将该学号所对应的学生信息删除,否则输出提示信息,并提示用户选择是否继续进行删除操作。
4.修改学生信息,提示用户输入要进行修改操作的学号,如果在文件中有该息存在,则将提示用户输入该学号对应的要修改的选项,结果保存至原文件,并提示用户选择是否继续进行修改操作。
5.按不同条件对学生信息进行查询操作,输出满足条件的学生信息。
(1)按学号查询,输入一个学号,输出对应的学生信息。
(2)按姓名查询,包括精确查询(输入全名),模糊查询(输入姓)。
(3)按学院查询,输入学院名称,输出该学院的全部学生的信息。
(4)按班级查询,输入班级名称,输出该班级的全部学生的信息。
6.按不同条件对学生成绩进行统计工作。
(1)按总分对学生信息进行排序(由高到低),输出排序后的信息,并将排序后的学生信息存放到一个新的二进制文件中。
(2)按平均分统计各个分数段的学生人数(不及格,60-69,70-79,80-89,90-100)。
(3)分别找出3门课程成绩最高的学生,并输出他们的信息。
(4)分别统计出3门课程的不及格率,并输出。
源程序:
#ifndefH_STUDENT_HH
#defineH_STUDENT_HH
#include"stdio.h"
#include"string.h"
#include"malloc.h"
#defineLENsizeof(structmessage_student)/*一个结构体数组元素的长度*/
#definenumsubs5/*学科数目*/
typedefstructmessage_student/*结构体定义*/
{
charnumber[6];
charname[20];
charsex[4];
floatsubject[numsubs];
floatscore;
floataverage;
intindex;
}student;
externintnumstus;/*学生数目*/
externstudent*pointer;/*指向结构体数组*/
externintlens;
intmenu_select();/*函数声明*/
intopenfile(studentstu[]);
intfindrecord(studentstud[]);
intwritetotext(studentstud[]);
voidwelcome();
voiddisplay1();
voidshowtable();
voidsort(studentstu[]);
voiddeleterecord(studentstu[],inti);
voidaddrecord(studentstud[]);
voiddisplay(studentstud[],intn1,intn2);
voidamendrecord(studentstud[]);
voidcount(studentstud[]);
voidsortnum(studentstud[]);
voidsortnum2(studentstud[]);
voidsortname(studentstud[]);
voidsortname2(studentstud[]);
voidsortcount(studentstud[]);
voidsortcount2(studentstud[]);
voidstatistic(studentstud[]);
voiddisplay1();
#endif
//#include"head.h"
intmenu_select()
{
charc;
printf("\n\n");
printf("|1.增加学生记录5.统计信息|\n");
printf("|2.查询学生记录6.打开文件|\n");
printf("|3.修改学生记录7.保存文件|\n");
printf("|4.学生纪录排序8.显示记录|\n");
printf("|0.退出系统|\n");
printf("\n\n");
printf("请选择(0-8):
");
c=getchar();
getchar();
return(c-'0');
}
//#include"head.h"
intfindrecord(studentstud[])/*查找信息*/
{
charstr[2];
inti,num;
if(numstus==0)
{
printf("没有可被查找的记录\n");
return-1;
}
else
{
printf("以何种方式查找?
\n1.学号\t2.姓名\t3.名次\n");
gets(str);
if(str[0]=='1')/*按学号查找*/
{
printf("请输入学号:
");
gets(str);
for(i=0;i<=numstus;i++)
if(strcmp(str,stud[i].number)==0)
{
display(stud,i,i);
break;
}
elsecontinue;
}
elseif(str[0]=='2')/*按姓名查找*/
{
printf("请输入姓名:
");
gets(str);
for(i=0;i<=numstus;i++)
if(strcmp(str,stud[i].name)==0)
{
display(stud,i,i);
break;
}
elsecontinue;
}
elseif(str[0]=='3')/*按名次查找*/
{
printf("请输入名次:
");
scanf("%d",&num);
getchar();
for(i=0;i<=numstus;i++)
if(num==stud[i].index)
{
display(stud,i,i);
break;
}
elsecontinue;
}
if(i>numstus)
{
printf("没有查找所要的信息。
\n");
return-1;
}
returni;
}
}
//#include"head.h"
intopenfile(studentstu[])
{
inti=0,j;
FILE*fp;
charfilename[20],str[2];
if(numstus!
=0)
{
printf("已经有记录存在,是否保存?
(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')
writetotext(stu);
}
printf("请输入文件名:
");
gets(filename);
numstus=0;
if((fp=fopen(filename,"rb+"))==NULL)
{
printf("无法打开该文件\n");
return(-1);
}
fscanf(fp,"%d",&numstus);
fgetc(fp);
while(i{
fscanf(fp,"%s",stu[i].number);
fscanf(fp,"%s",stu[i].name);
fscanf(fp,"%s",stu[i].sex);
for(j=0;jfscanf(fp,"%f",&stu[i].subject[j]);
fscanf(fp,"%f",&stu[i].score);
fscanf(fp,"%f",&stu[i].average);
fscanf(fp,"%d",&stu[i].index);
i++;
}
fclose(fp);
printf("文件读取成功\n");
printf("是否显示纪录?
(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')
display(stu,0,numstus-1);
return(0);
}
//#include"head.h"
voidsort(studentstud[])
{
inti,j=0;
charstr[5];
student*p;
p=stud;
if(numstus==0)
{
printf("没有可供查询的记录!
");
}
while
(1)
{
for(i=0;;i++)
{
printf("请输入查询方式:
");
printf("(直接输入回车则结束查询操作)\n");
printf("1.按照学号\t");
printf("2.按照姓名\t");
printf("3.按照名次\n");
gets(str);
if(strlen(str)==0)break;
if(str[0]=='1')
{
printf("请输入排序次序:
\n");
printf("1.升序排列\t");
printf("2.降序排列\n");
gets(str);
if(str[0]=='1')
sortnum2(p);
else
sortnum(p);
display(stud,0,numstus-1);
}
elseif(str[0]=='2')
{
printf("请输入排序次序:
\n");
printf("1.升序排列\t");
printf("2.降序排列\n");
gets(str);
if(str[0]=='1')
sortname2(p);
else
sortname(p);
display(stud,0,numstus-1);
}
elseif(str[0]=='3')
{
printf("请输入排序次序:
\n");
printf("1.升序排列\t");
printf("2.降序排列\n");
gets(str);
if(str[0]=='1')
sortcount2(p);
else
sortcount(p);
display(stud,0,numstus-1);
}
elseprintf("请输入1~3");
printf("是否退出排序?
(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')break;
}
return;
}
}
voidsortnum(studentstud[])
{
inti,j;
studenttemp;
student*p;
p=stud;
for(i=0;ifor(j=0;j{
if(strcmp(stud[j+1].number,stud[j].number)>0)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
voidsortnum2(studentstud[])
{
inti,j;
studenttemp;
student*p;
p=stud;
for(i=0;ifor(j=0;j{
if(strcmp(stud[j].number,stud[j+1].number)>0)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
voidsortname(studentstud[])
{
inti,j;
studenttemp;
student*p;
p=stud;
for(i=0;ifor(j=0;j{
if(strcmp(stud[j+1].name,stud[j].name)>0)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
voidsortname2(studentstud[])
{
inti,j;
studenttemp;
student*p;
p=stud;
for(i=0;ifor(j=0;j{
if(strcmp(stud[j].name,stud[j+1].name)>0)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
voidsortcount(studentstud[])
{
inti,j;
studenttemp;
student*p;
p=stud;
for(i=0;ifor(j=0;j{
if(stud[j+1].index>stud[j].index)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
voidsortcount2(studentstud[])
{
inti,j;
studenttemp;
student*p;
p=stud;
for(i=0;ifor(j=0;j{
if(stud[j].index>stud[j+1].index)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
//#include"head.h"
voidstatistic(studentstud[])/*新增功能,输出统计信息*/
{
inti,j=0,k=0;
charc1,str[2];
floataverage[numsubs],sum=0;
if(numstus==0)
printf("没有可被查找的记录\n");
else
{
while
(1)
{
printf("下面将统计考试成绩\n");
printf("请选择你要统计哪科的成绩1.A\t2.B\t3.C\t4.D\t5.E\n");
c1=getchar();
printf("\t一共有个%d记录\n",numstus);/*总共记录数*/
switch(c1)
{
case'1':
for(i=0;i{
sum+=stud[i].subject[0];
if(stud[k].subject[0]>stud[i].subject[0])k=i;
if(stud[j].subject[0]}
average[0]=sum/numstus;
printf("\t科目A的最高分:
\n");/*最高分*/
printf("\t\t学号:
%s姓名:
%s分数:
%.2f\n",stud[j].number,stud[j].name,stud[j].subject[0]);
printf("\t科目A的最低分是:
\n");/*最低分*/
printf("\t\t学号:
%s姓名:
%s分数:
%.2f\n",stud[k].number,stud[k].name,stud[k].subject[0]);
printf("\t科目A的平均分是%5.2f\n",average[0]);/*平均分*/
break;
case'2':
for(i=0;i{
sum+=stud[i].subject[1];
if(stud[k].subject[1]>stud[i].subject[1])k=i;
if(stud[j].subject[1]}
average[1]=sum/numstus;
printf("\t科目B的最高分:
\n");/*最高分*/
printf("\t\t学号:
%s姓名:
%s分数:
%.2f\n",stud[j].number,stud[j].name,stud[j].subject[1]);
printf("\t科目B的最低分是:
\n");/*最低分*/
printf("\t\t学号:
%s姓名:
%s分数:
%.2f\n",stud[k].number,stud[k].name,stud[k].subject[1]);
printf("\t科目B的平均分是%5.2f\n",average[1]);/*平均分*/
break;
case'3':
for(i=0;i{
sum+=stud[i].subject[2];
if(stud[k].subject[2]>stud[i].subject[2])k=i;
if(stud[j].subject[2]}
average[2]=sum/numstus;
printf("\t科目C的最高分:
\n");/*最高分*/
printf("\t\t学号:
%s姓名:
%s分数:
%.2f\n",stud[j].number,stud[j].name,stud[j].subject[2]);
printf("\t科目C的最低分是:
\n");/*最低分*/
printf("\t\t学号:
%s姓名:
%s分数:
%.2f\n",stud[k].number,stud[k].name,stud[k].subject[2]);
printf("\t科目C的平均分是%5.2f\n",average[2]);/*平均分*/
break;
case'4':
for(i=0;i{
sum+=stud[i].subject[3];
if(stud[k].subject[3]>stud[i].subject[3])k=i;
if(stud[j].subject[3]}
average[3]=sum/numstus;
printf("\t科目D的最高分:
\n");/*最高分*/
printf("\t\t学号:
%s姓名:
%s分数:
%.2f\n",stud[j].number,stud[j].name,stud[j].subject[3]);
printf("\t科目D的最低分是:
\n");/*最低分*/
printf("\t\t学号:
%s姓名:
%s分数:
%.2f\n",stud[k].number,stud[k].name,stud[k].subject[3]);
printf("\t科目D的平均分是%5.2f\n",average[3]);/*平均分*/
break;
case'5':
for(i=0;i{
sum+=stud[i].subject[4];
if(stud[k].subject[4]>stud[i].subject[4])k=i;
if(stud[j].subject[4]}
average[4]=sum/numstus;
printf("\t科目E的最高分:
\n");/*最高分*/
printf("\t\t学号:
%s姓名:
%s分数:
%.2f\n",stud[j].number,stud[j].name,stud[j].subject[4]);
printf("\t科目E的最低分是:
\n");/*最低分*/
printf("\t\t学号:
%s姓名:
%s分数:
%.2f\n",stud[k].number,stud[k].name,stud[k].subject[4]);
printf("\t科目E的平均分是%5.2f\n",average[4]);/*平均分*/
break;