学生成绩管理系统C语言编写.docx

上传人:b****8 文档编号:10078248 上传时间:2023-05-23 格式:DOCX 页数:32 大小:102.36KB
下载 相关 举报
学生成绩管理系统C语言编写.docx_第1页
第1页 / 共32页
学生成绩管理系统C语言编写.docx_第2页
第2页 / 共32页
学生成绩管理系统C语言编写.docx_第3页
第3页 / 共32页
学生成绩管理系统C语言编写.docx_第4页
第4页 / 共32页
学生成绩管理系统C语言编写.docx_第5页
第5页 / 共32页
学生成绩管理系统C语言编写.docx_第6页
第6页 / 共32页
学生成绩管理系统C语言编写.docx_第7页
第7页 / 共32页
学生成绩管理系统C语言编写.docx_第8页
第8页 / 共32页
学生成绩管理系统C语言编写.docx_第9页
第9页 / 共32页
学生成绩管理系统C语言编写.docx_第10页
第10页 / 共32页
学生成绩管理系统C语言编写.docx_第11页
第11页 / 共32页
学生成绩管理系统C语言编写.docx_第12页
第12页 / 共32页
学生成绩管理系统C语言编写.docx_第13页
第13页 / 共32页
学生成绩管理系统C语言编写.docx_第14页
第14页 / 共32页
学生成绩管理系统C语言编写.docx_第15页
第15页 / 共32页
学生成绩管理系统C语言编写.docx_第16页
第16页 / 共32页
学生成绩管理系统C语言编写.docx_第17页
第17页 / 共32页
学生成绩管理系统C语言编写.docx_第18页
第18页 / 共32页
学生成绩管理系统C语言编写.docx_第19页
第19页 / 共32页
学生成绩管理系统C语言编写.docx_第20页
第20页 / 共32页
亲,该文档总共32页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

学生成绩管理系统C语言编写.docx

《学生成绩管理系统C语言编写.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统C语言编写.docx(32页珍藏版)》请在冰点文库上搜索。

学生成绩管理系统C语言编写.docx

学生成绩管理系统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;j

fscanf(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;i

for(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;i

for(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;i

for(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;i

for(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;i

for(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;i

for(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;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2