C语言学生成绩管理应用程序.docx
《C语言学生成绩管理应用程序.docx》由会员分享,可在线阅读,更多相关《C语言学生成绩管理应用程序.docx(23页珍藏版)》请在冰豆网上搜索。
C语言学生成绩管理应用程序
题目:
C语言课程设计报告
学生:
学号:
院(系):
专业:
指导教师:
综合性实验—学生成绩管理应用程序
一:
实验仪器设备:
多媒体计算机。
二:
实验目的:
在掌握相关基础知识的基础上,熟练掌握switch的用法、灵活使用循环结构、熟悉结构体、文件等相关知识并能够恰当运用这些方法实现特定功能,会开发有一定使用价值的DOS应用程序。
三:
实验内容及任务:
1.进行人机界面设计,界面具有提示信息,可以选择:
查询每门课程的平均成绩及最高分最低分、查询每个学生的各科成绩及总成绩、查询所有学生的平均总成绩、插入一个学生并录入信息及其各科成绩、修改任一个学生的任一门课程成绩、删除一个学生及其成绩、退出程序。
2.将所有学生信息及成绩存入以你的学号命名的数据文件内,在所有查询、修改操作前打开该文件,选择退出程序则关闭该文件;
3.所有的查询功能、修改功能、插入功能都用子程序(函数)来实现。
四:
实现步骤:
在对主函数进行设计之前先要写好头文件,还有一些函数声明,及结构体的定义。
其c语言程序代码如下:
#include
#include
#include
typedefstructstudentSTUD;
structstudent
{
intnum;
charname[20];
intscoreComputer;
intscoreEnglish;
intscoreMath;
};
voidposition(void);
voidsite(void);
voidfun(void);
voidfun1(void);
voidfun2(void);
voidfun3(void);
voidfun4(void);
voidfun5(void);
voidfun6(void);
(1).主函数设计:
主函数的文字说明:
1:
通过调用position()函数然后在人机界面上就会出现一些信息:
这些信息是提示用户下列函数的功能:
欢迎进入学生成绩管理系统:
case1:
fun1()的功能是:
查询每门课程的平均成绩及最高分最低分,及每个学生的平均成绩\n
case2:
fun2()的功能是:
把一个学生的信息插入到原来的文件中\n
case3:
fun3()的功能是:
把文件中的信息读出来\n
case4:
fun4()的功能是:
删除一个学生的信息\n
case5:
fun5()的功能是:
修改一个学生的信息\n
case6:
fun6()的功能是:
查询学生的所有成绩及总成绩\n
case7:
的功能是退出程序\n
选择相应的数字就会实现相应的函数功能:
例如:
输入数字1就会实现fun1的功能:
查询每门课程的平均成绩及最高分最低分,及每个学生的平均成绩\n。
2:
然后通过调用fun()函数来输入学生的基本信息:
学号,姓名,各科的成绩。
并通过fwrite()把内容同写入自己所命名的文件中。
在以后要用到这些学生的信息时,只需要将文件打开fopen(0然后读取fread()就可以用了。
3:
通过调用size()函数,来实现对各个模块的调用,通过switch()函数对其进行调用,然后运用了goto语句来实现循环,问了避免无限循环下去,运用了exit(0)这个函数来停止程序。
主函数程序代码:
voidmain()
{
position();
fun();
site();
}
Fun()函数及size()以及position()三个函数的程序代码:
voidsite(void)
{inti;
start:
printf("请输入1~7中任意一个数字选择你需要的函数功能");
scanf("%d",&i);
switch(i)
{case1:
fun1();break;
case2:
fun2();break;
case3:
fun3();break;
case4:
fun4();break;
case5:
fun5();break;
case6:
fun6();break;
case7:
exit(0);
}
gotostart;}
voidposition(void)
{
printf("欢迎进入学生成绩管理系统:
\n");
printf("case1:
fun1()的功能是:
查询每门课程的平均成绩及最高分最低分,及每个学生的平均成绩\n");
printf("case2:
fun2()的功能是:
把一个学生的信息插入到原来的文件中\n");
printf("case3:
fun3()的功能是:
把文件中的信息读出来\n");
printf("case4:
fun4()的功能是:
删除一个学生的信息\n");
printf("case5:
fun5()的功能是:
修改一个学生的信息\n");
printf("case6:
fun6()的功能是:
查询学生的所有成绩及总成绩\n");
printf("case7:
的功能是退出程序\n");
}
voidfun(void)
{
STUDstu[30],*pt=stu;/*stu[30]为结构体数组*/
FILE*fp;
inti,n;charfilename[12];
printf("请输入学生的基本信息");
printf("请输入一个文件名\n");
scanf("%s",filename);
if((fp=fopen(filename,"w"))==NULL)
{
printf("can’topenthefile!
\n");
exit(0);
}
printf("请输入学生个数n\n");
scanf("%d",&n);
printf("请输入那个学生的信息:
学号姓名计算机成绩英语成绩数学成绩\n然后通过读的方式把文件中的信息读出为:
\n");
for(i=0;iscanf("%d%s%d%d%d",&stu[i].num,stu[i].name,&stu[i].scoreComputer,&stu[i].scoreEnglish,&stu[i].scoreMath);
for(i=0;ifwrite(&stu[i],sizeof(STUD),1,fp);/*一次写入n个数据项*/
fclose(fp);}
(2):
各模块的设计:
1:
对查询每门课程的平均成绩及最高分最低分以及每个学生的平均成绩模块的设计:
文字说明:
此模块是对学生的每门课程的平均成绩及最高分最低分以及每个学生的平均成绩计算的程序:
首先先要定义一些变量,结构体变量结构体指针和文件指针然后通过fopen()来打开文件,通过fread()来读取文件中的学生信息,然后关闭文件,文件用完后必须关闭,要必然就会出现一些意想不到的错误。
通过结构体指针对结构体进行访问,通过for()循环来访问结构体中的所有成员,然后算出每一门的平均成绩,最后再打印出每门课的平均成绩。
接下来通过结构体变量来访问结构体,算出计算机最高成绩,英语最高成绩,数学最高成绩,然后通过printf()函数打印出各科的最高分。
最后通过结构体变量来访问结构体,计算出每个学生的平均成绩,最后输出来。
对查询每门课程的平均成绩及最高分最低分以及每个学生的平均成绩模块的设计的c程序代码:
voidfun1()
{
STUDstu[30],*pt=stu;
FILE*fp;inti,n;
doubleave[3]={0},max[3]={0},min[3]={0},sum[3]={0},average[2];
charfilename[12];
printf("请输入文件名");
scanf("%s",filename);
if((fp=fopen(filename,"a+"))==NULL)
{
printf("can’topenthefile!
\n");
exit(0);
}
n=fread(stu,sizeof(STUD),30,fp);
fclose(fp);
for(pt=stu;pt{
sum[0]=sum[0]+pt->scoreComputer;
sum[1]=sum[1]+pt->scoreEnglish;
sum[2]=sum[2]+pt->scoreMath;
}
for(i=0;i<3;i++)
{
ave[i]=sum[i]/2;
}
printf("计算机平均成绩:
%f\n英语平均成绩:
%f\n数学平均成绩:
%f\n",ave[0],ave[1],ave[2]);
max[0]=stu[0].scoreComputer;
max[1]=stu[0].scoreEnglish;
max[2]=stu[0].scoreMath;
for(pt=stu;pt{if(pt->scoreComputer>max[0])
max[0]=pt->scoreComputer;
if(pt->scoreEnglish>max[1])
max[1]=pt->scoreEnglish;
if(pt->scoreMath>max[2])
max[2]=pt->scoreMath;
}
printf("计算机最高成绩:
%f\n英语最高成绩:
%f\n数学最高成绩:
%f\n",max[0],max[1],max[2]);
min[0]=stu[0].scoreComputer;
min[1]=stu[0].scoreEnglish;
min[2]=stu[0].scoreMath;
for(pt=stu;pt{if(pt->scoreComputermin[0]=pt->scoreComputer;
if(pt->scoreEnglishmin[1]=pt->scoreEnglish;
if(pt->scoreMathmin[2]=pt->scoreMath;
}
printf("计算机最低成绩:
%f\n英语最低成绩:
%f\n数学最低成绩:
%f\n",min[0],min[1],min[2]);
for(i=0;iaverage[i]=(stu[i].scoreComputer+stu[i].scoreEnglish+stu[i].scoreMath)/3;
printf("每个学生的平均成绩");
for(i=0;iprintf("%f\n",average[i]);}
2.对把一个学生的信息插入到原来的文件中模块设计;
文字说明:
首先先输入要插入的学生的信息,然后打开文件,注意打开文件的方式最好是“a+”的形式通过fwrite()函数把这个学生的信息写入文件中,这样才能很好的把学生的信息学入到文件中去。
最后关闭文件。
对把一个学生的信息插入到原来的文件中模块设计的c程序代码:
voidfun2(void)
{STUDa;charfilename[20];FILE*fp;
printf("请输入要插入的学生信息\n");
scanf("%d%s%d%d%d",&a.num,a.name,&a.scoreComputer,&a.scoreEnglish,&a.scoreMath);
printf("请输入文件名\n");
scanf("%s",filename);
if((fp=fopen(filename,"a+"))==NULL)
{
printf("can’topenthefile!
\n");
exit(0);
}
fwrite(&a,sizeof(STUD),1,fp);
fclose(fp);
}
3.对把文件中的信息读出来模块设计;
文字说明:
首先先把文件打开,通过fread()函数对文件进行读取,把文件中的学生的基本信息读到结构体变量中去,然后打印出这些学生的基本信息。
最后关闭文件。
对把文件中的信息读出来模块设计的程序代码:
voidfun3(void)
{FILE*fp;
charfilename[20];
STUDstu[30];intn,i;
printf("请输入文件名\n");
scanf("%s",filename);
if((fp=fopen(filename,"rb"))==NULL)
{printf("can’topenthefile!
\n");
exit(0);
}
n=fread(stu,sizeof(STUD),30,fp);
for(i=0;iprintf("学生基本信息:
%d\t%s\t%d\t%d\t%d\t\n",stu[i].num,stu[i].name,stu[i].scoreComputer,stu[i].scoreEnglish,stu[i].scoreMath);
fclose(fp);
}
4.对删除一个学生的信息模块设计;
文字说明:
通过
if((fp=fopen(filename,"a+"))==NULL)
{printf("can’topenthefile!
\n");
exit(0);
}
种方式来代开文件,然后把文件中的学生的基本信息读入结构体变量中去,首先先要确定要删除的学生学号,通过scanf()函数输入,然后判断是否有这个学生,如果有就删除这个学生的基本信息,删除的思路是从这个学生开始,一次把后面的学生的信息向前移一位,就把这个学生的信息覆盖了。
然后通过fwrite()函数不这些信息写入到文件中去。
这样文件中的内容就改变了。
最后在关闭文件。
对删除一个学生的基本信息的模块的设计的c程序代码
voidfun4(void)
{STUDa[30];charfilename[20];FILE*fp;
inti,n,num;
printf("请输入文件名\n");
scanf("%s",filename);
if((fp=fopen(filename,"a+"))==NULL)
{printf("can’topenthefile!
\n");
exit(0);
}
n=fread(a,sizeof(STUD),30,fp);
fclose(fp);///////
scanf("%d",&num);
for(i=0;iif(num==a[i].num)
break;
for(;i{a[i].num=a[i+1].num;
strcpy(a[i].name,a[i+1].name);
a[i].scoreComputer=a[i+1].scoreComputer;
a[i].scoreEnglish=a[i+1].scoreEnglish;
a[i].scoreMath=a[i+1].scoreMath;
}
if((fp=fopen(filename,"w"))==NULL)
{printf("can’topenthefile!
\n");
exit(0);
}
fwrite(a,sizeof(STUD),n-1,fp);
fclose(fp);
}
5:
对修改一个学生的信息模块的设计:
文字说明:
先打开文件,然后读取文件后,把文件中的内容读到结构体变量中去,关闭文件。
先要计划要修改的学生的学号,通过scanf()输入这个学生的学号和基本信息,然后判断是否有这个学生,如果有就对其进行修改。
然后把修改后的内容再次存到文件中,把前面的信息就覆盖了。
对修改一个学生的信息模块的设计的c程序代码:
voidfun5()
{STUDa[30],b;charfilename[20];FILE*fp;
inti,n,num;
printf("请输入文件名\n");
scanf("%s",filename)
if((fp=fopen(filename,"a+"))==NULL)
{
printf("can’topenthefile!
\n");
exit(0);
}
n=fread(a,sizeof(STUD),30,fp);
fclose(fp);
printf("请输入要修改的学生信息\n");
scanf("%d%s%d%d%d",&b.num,b.name,&b.scoreComputer,&b.scoreEnglish,&b.scoreMath);
printf("请输入要修改的学生的学号\n");
scanf("%d",&num);
for(i=0;iif(num==a[i].num)
break;
a[i].num=b.num;
strcpy(a[i].name,b.name);
a[i].scoreComputer=b.scoreComputer;
a[i].scoreEnglish=b.scoreEnglish;
a[i].scoreMath=b.scoreMath;
if((fp=fopen(filename,"w"))==NULL)
{
printf("can’topenthefile!
\n");
exit(0);
}
fwrite(a,sizeof(STUD),n,fp);
fclose(fp);
}
6:
对读取学生各科成绩及总成绩模块的设计:
文子说明:
先打开文件,在读取文件,算出学生的总成绩,然后输出学生的各科成绩及总成绩,最后关闭文件。
对读取学生各科成绩及总成绩模块的设计的c程序:
voidfun6()
{FILE*fp;
charfilename[20];
doublesum[30]={0};
STUDstu[30];intn,i;
printf("请输入文件名\n");
scanf("%s",filename);
if((fp=fopen(filename,"rb"))==NULL)
{
printf("can’topenthefile!
\n");
exit(0);
}
n=fread(stu,sizeof(STUD),30,fp);
for(i=0;i{sum[i]=stu[i].scoreComputer+stu[i].scoreEnglish+stu[i].scoreMath;
printf("学生各科成绩及其总成绩:
%d\t%s\t%d\t%d\t%d\t%f\n",stu[i].num,stu[i].name,stu[i].scoreComputer,stu[i].scoreEnglish,stu[i].scoreMath,sum[i]);}
fclose(fp);
}
五:
源程序代码:
#include
#include
#include
typedefstructstudentSTUD;
structstudent
{
intnum;
charname[12];
intscoreComputer;
intscoreEnglish;
intscoreMath;
};
voidposition(void);
voidsite(void);
voidfun(void);
voidfun1(void);
voidfun2(void);
voidfun3(void);
voidfun4(void);
voidfun5(void);
voidfun6(void);
voidmain()
{
position();
fun();
site();
}
voidsite(void)
{inti;
start:
printf("请输入1~7中任意一个数字选择你需要的函数功能");
scanf("%d",&i);
switch(i)
{case1:
fun1();break;
case2:
fun2();break;
case3:
fun3();break;
case4:
fun4();break;
case5:
fun5();break;
case6:
fun6();break;
case7:
exit(0);
}
gotostart;}
voidposition(void)
{
printf("欢迎进入学生成绩管理系统:
\n");
printf("创建人:
董军鹏学号:
200712030112班级:
信息071\n");
printf("case1:
fun1()的功能是:
查询每门课程的平均成绩及最高分最低分,及每个学生的平均成绩\n");
printf("case2:
fun2()的功能是:
把一个学生的信息插入到原来的文件中\n");
printf("case3:
fun3()的功能是:
把文件中的信息读出来\n");
printf("case4:
fun4()的功能是:
删除一个学生的信息\n");
printf("case5:
fun5()的功能是:
修改一个学生的信息\n");
printf("case6:
fun6()的功能是:
查询学生的所有成绩及总成绩\n");
printf("case7:
的功能是退出程序\n");
}
voidfun(void)
{
//此函数为把学生信息写入文件中
STUDstu[30],*pt=stu;/*stu[30]为结构体数组*/
FILE*fp;
inti,n;charfilename[20];
printf("请输入学生的基本信息");
printf("请输入一个文件名\n");
scanf("%s",filename);
if((fp=fopen(filename,"w"))==NULL)
{
printf("can’topenthefile!
\n");
exit(0);
}
printf("请输入学生个数n\n");
scanf("%d",&n);
printf("请输入那个学生的信息:
学号姓名计算机成绩英语成绩数学成绩\n然后通