C语言学生成绩管理系统设计方案.docx
《C语言学生成绩管理系统设计方案.docx》由会员分享,可在线阅读,更多相关《C语言学生成绩管理系统设计方案.docx(29页珍藏版)》请在冰豆网上搜索。
![C语言学生成绩管理系统设计方案.docx](https://file1.bdocx.com/fileroot1/2023-2/3/6cf25137-59ce-4c85-b757-0b07fc32efb6/6cf25137-59ce-4c85-b757-0b07fc32efb61.gif)
C语言学生成绩管理系统设计方案
学生成绩管理系统
1系统分析
1.1课程设计容
设计一学生成绩管理系统,功能包括:
1.输入数据:
可输入学生、学号、及多门(至少5门)课程的成绩。
(先将所有学生的、学号输入完后,再逐科输入成绩)
2.
3.
4.
5.
6.
7.
编辑数据:
可添加、删除、修改数据。
计算:
计算出每个学生的总分及平均成绩;计算每门课程平均成绩。
查询:
可按、学号查询;可查询不及格的学生。
排序:
可按、学号、总分排序
浏览:
可浏览输入、查询或排序后的数据。
文件操作:
可打开、保存、关闭数据文件。
1.2系统功能需求分析
本系统应具有以下功能:
1、数据输入功能:
可输入学生人数、学号、数学成绩、英语成绩,语文成绩、物理成绩、电脑成绩,输入后自动保存学生数据。
2、数据添加、修改、删除功能:
可以添加多名学生信息,包括、学号、各科成绩等待,可以修改某学生的全部信息,也可以删除某学生的全部信息。
3、计算功能:
可以计算出每个学生的总分以及平均成绩,也可以计算出全部学生的各科的平均成绩。
4、查询功能:
可按、学号查询到某个学生的信息,可以输出不及格的学生。
5、排序功能:
可以按学生、学号、总分对全部学生排序。
6、浏览功能:
可浏览输入、查询或排序后的数据。
7、文件功能:
可以新建文件,打开文件。
8、关闭系统。
2系统设计
2.1总体设计
按系统分析的功能要求将系统划分为以下几个主要功能模块:
2.2详细设计
1、主函数main()
利用While循环语句和switch()实现各函数的调用,系统根据输入的数字选项来调用相应的函数。
2、菜单函数menu()
通过菜单函数显示可选择的菜单,每次操作完后按任意键回到菜单函数。
3、新建文件函数new_file()
通过该函数实现新建文件、输入学生数据功能。
4、编辑数据函数edit_data()
该函数下还有3个函数,通过switch()功能去选择其包含3个函数去实现不同的功能。
3个函数分别是添加学生数据函数add_data()、删除学生信息函数del_data()、修改学生信息函数mod_data()。
5、计算函数calculate()
通过该函数计算每个学生的平均成绩及总成绩,计算出每科的平均成绩,并显示出来。
6、查询函数search()
该函数包含3个子涵数,分别按照查询函数search_name():
、按照学号查询函数search_num()、查询不及格函数search_fail()。
通过switch()来选这3个函数去实现不同的查询功能。
7、排序函数sort()
该函数包含3个子函数,分别按照排序函数sort_name()、按照学号排序函数sort_num()、按照分数高低排序函数sort_score(),通过switch()来选择这3个函数,每个函数排序好后会显示出来。
8、浏览函数browse()
通过该函数可以查看可浏览输入、查询或排序后的数据。
9、打开文件函数open_file()
通过该函数可以打开已经保存的文件,查看里面的数据。
10、保存函数save()
把该函数放在子函数末尾,比如放在排序函数,编辑函数等函数容的末尾,这个就可以实现将修改后的数据保存下来。
11、清屏函数clrscr()
通过该函数可以独立显示每个函数的容。
12、返回菜单函数return_menu()
这个函数反正子函数里面,当子函数操作完后,通过该函数可按任意键返回到目录。
13、定义一个结构体structstudent{}stu[SIZE]
这样就可以将不同类型的数组组合成一个有机的整体,以便引用,还可以通过SIZE的大小来控制最多可输入的学生人数。
3系统运行
菜单界面:
输入数据:
删除数据:
计算数据:
按排序后的数据:
按排序:
打开文件:
4总结
本次设计达到了设计要求的基本容,各功能都能正常运行,设计的系统使用方法容易理解,界面清晰但不够华丽,没有设计到要求以外的其它功能。
设计过程中文件操作这一部分把我难住了,由于之前没有系统地去学这一块,自己只有看书,问同学来了解,搞了很久才完成这一块。
还有输入错误检查这一部分做得不好。
通过一个多星期的C语言课程设计,感觉自己收获了不少。
首先学会了一些书本没学到的函数,比如clrscr()等。
我对各函数的作用有更加进一步的了解,熟悉了函数之间的调用关系。
懂得了冷静地去处理编译时出现的问题。
从这里我也得到一个体会,做一个程序,或者开发一个软件,应该着重从它的后台制作入手,不能做出一个中看不中用的程序或者软件,写的程序往往是很长的,有时候面对几百行的程序甚至数千行的程序,自己也会看傻,这就需要我们在设计时要有耐心,适当地做下注释。
这次课程设计对我以后在单片机编程这一块打下了很好的基础,对我以后的学习有很大的帮助。
参考文献
C程序设计(第三版)谭浩强编著
C程序设计题解与上机指导(第三版)谭浩强编著
附录:
代码
#include"stdio.h"#include#include#defineSIZE100
inti,number;
/*包含exit()*/
FILE*fp,*fp1;
structstudent
{
charname[20];
charnum[10];
intmath;
intenglish;
intChinese;
intphysics;
intcomputer;
inttotal;
intaverage;
}stu[SIZE];
voidsave()
{
/*将数据储存于文件*/
FILE*fp;
intj;
if((fp=fopen("stu_list","wb"))==NULL)
{
printf("cannotopenfile\n");
return;
}
for(j=0;jif(fwrite(&stu[j],sizeof(structstudent),1,fp)!
=1)printf("filewriteerror\n");
fclose(fp);
}
voidreturn_menu()
{
/*返回菜单*/
printf("\n\n\tPressanykeytoreturntomenu...");getch();
}
voidmenu()
{
/*菜单*/
inti;
clrscr();
gotoxy(1,3);
for(i=0;i<37;i++)
printf("*");
printf("\n\n\n1.Setupnewfile\n");printf("2.Editdata\n");
printf("3.Calculation\n");
printf("4.Search\n");
printf("5.Sort\n");
printf("6.Browse\n");
printf("7.Openfile\n");
printf("0.exit\n");
printf("\n\n");
for(i=0;i<37;i++)
printf("*");
printf("\n\nPleaseselectthemenu:
");
}
voidnew_file()
{
/*输入数据*/
inti,j,sum;
charfile_name[10];
for(i=0;i<37;i++)
printf("*");
clrscr();
printf("\n\nPleaseinputthefilename:
");
scanf("%s",&file_name);
fp=fopen(file_name,"w");/*向文件写数据*/
printf("\nSuccessedtocreatfile");
printf("\n\nPleaseinputthenumberofstudents:
");
scanf("%d",&number);
for(i=0;i{
printf("\nPleaseinputthenameofthestudent:
");scanf("%s",stu[i].name);
printf("Pleaseinputthenumberofstudentslearning:
");scanf("%s",stu[i].num);
printf("Pleaseinputthemathematicsscore:
");
scanf("%d",&stu[i].math);
printf("PleaseinputEnglishscore:
");
scanf("%d",&stu[i].english);
printf("Pleaseinputthemathematicsscore:
");
scanf("%d",&stu[i].Chinese);
printf("Pleaseinputthephysicalscore:
");
scanf("%d",&stu[i].physics);
printf("Pleaseinputthecomputerscore:
");
scanf("%d",&stu[i].computer);
}
fprintf(fp,"%d",number);
for(i=0;ifprintf(fp,"\n%s%s%d%d%d%d%d",stu[i].name,stu[i].num,stu[i].math,stu[i].english,stu[i].Chinese,stu[i].physics,stu[i].computer);/*将学生信息输出到文件上*/
fclose(fp);/*关闭文件*/
/*save();*/
printf("\n\nPressanykeytoreturntothemenu");
getch();
}
voidedit_data()/*编辑数据*/
{
voidadd_data();
voiddel_data();
voidmod_data();
inti;
clrscr();
printf("\n\n1.Adddata\n");
printf("2.Deletedata\n");
printf("3.Modifydata\n");
printf("4.Returntomenu\n");
printf("\n\nYouchoiceis:
");
scanf("%d",&i);
switch(i)
{
case1:
add_data();break;
case2:
del_data();break;
case3:
mod_data();break;
case4:
return_menu();break;
default:
printf("Nothischoice");
}
}
voidadd_data()/*添加数据*/
{
inti,n;
charfname[10];
clrscr();
printf("\n\n\tPleaseinputthefilenamewhichyouwanttoadddata:
");scanf("%s",fname);
fp=fopen(fname,"r");
/*读入文件*/
fscanf(fp,"%d",&number);/*从文件读出学生人数*/for(i=0;ifscanf(fp,"%s%s%d%d%d%d%d",stu[i].name,stu[i].num,&stu[i].math,&stu[i].english,&stu[i].Chinese,&stu[i].physics,&stu[i].computer);/*从文件读入学生各项信息*/
fclose(fp);
printf("\n\nPleaseinputtheaddnumberofstudents:
");
scanf("%d",&n);
for(i=number;i{
printf("\nPleaseinputthenameofthestudent:
");
scanf("%s",stu[i].name);
printf("Pleaseinputthenumberofstudentslearning:
");
scanf("%s",stu[i].num);
printf("Pleaseinputthemathematicsscore:
");
scanf("%d",&stu[i].math);
printf("PleaseinputEnglishscore:
");
scanf("%d",&stu[i].english);
printf("Pleaseinputthemathematicsscore:
");
scanf("%d",&stu[i].Chinese);
printf("Pleaseinputthephysicalscore:
");
scanf("%d",&stu[i].physics);
printf("Pleaseinputthecomputerscore:
");
scanf("%d",&stu[i].computer);
}
number=number+n;
fp=fopen(fname,"w");
fprintf(fp,"%d",number);
for(i=0;ifprintf(fp,"%s%s%d
%d%d%d%d",stu[i].name,stu[i].num,stu[i].math,stu[i].english,stu[i].Chinese,stu[i].physics,stu[i].computer);
fclose(fp);
save();
printf("\n\nPressanykeytoreturntothemenu");
getch();
}
voiddel_data()/*删除数据*/
{
inti,k,n;
charname[10],c;
charfname[10];
clrscr();
printf("\n\n\tPleaseinputthefilenamewhichyouwanttodeletedata:
");scanf("%s",fname);
fp=fopen(fname,"r");fscanf(fp,"%d",&number);for(i=0;i/*把学生信息读进来*/
fscanf(fp,"%s%s%d%d%d%d%d",stu[i].name,stu[i].num,&stu[i].math,&stu[i].english,&stu[i].Chinese,&stu[i].physics,&stu[i].computer);
fclose(fp);
printf("\toriginaldata:
");
printf("\n\nnamenummathenglisChinesephysicscomputer\n");
for(i=0;iprintf("%-10s%-10s%-10d%-10d%-10d%-10d%-10d\n",stu[i].name,stu[i].num,stu[i].math,stu[i].english,stu[i].Chinese,stu[i].physics,stu[i].computer);
printf("\n\tPleaseinputthestudent'snamewhichyouwanttodelete:
");scanf("%s",name);
for(i=0;i{
if(strcmp(name,stu[i].name)==0)
{
/*将学生信息向前移一位*/
strcpy(stu[i].name,stu[i+1].name);
strcpy(stu[i].num,stu[i+1].num);
stu[i].math=stu[i+1].math;
stu[i].english=stu[i+1].english;
stu[i].Chinese=stu[i+1].Chinese;
stu[i].physics=stu[i+1].physics;
stu[i].computer=stu[i+1].computer;
}
}
printf("\n\tthenewdata:
");
printf("\n\nnamenummathenglisChinesephysicscomputer\n");
for(i=0;iprintf("%-10s%-10s%-10d%-10d%-10d%-10d%-10d\n",stu[i].name,stu[i].num,stu[i].math,stu[i].english,stu[i].Chinese,stu[i].physics,stu[i].computer);
number--;
fp=fopen(fname,"w");
fprintf(fp,"%d",number);
for(i=0;i/*将删除后的信息写到文件上*/
%d%d%d%d",stu[i].name,stu[i].num,stu[i].math,stu[i].english,stu[i].Chinese,stu[i].physics,stu[i].computer);
fclose(fp);
save();
printf("\n\nPressanykeytoreturntothemenu");getch();
}
voidmod_data()
{
/*修改数据*/
charname[10];
charfname[10];
clrscr();
printf("\n\n\tPleaseinputthefilenamewhichyouwanttomodifydata:
");scanf("%s",fname);
fp=fopen(fname,"r");
fscanf(fp,"%d",&number);
for(i=0;ifscanf(fp,"%s%s%d%d%d%d%d",stu[i].name,stu[i].num,&stu[i].math,&stu[i].english,&stu[i].Chinese,&stu[i].physics,&stu[i].computer);
fclose(fp);
clrscr();
printf("\n\nPleaseinputthestudent'snamewhoyouwanttomodify:
");scanf("%s",name);
for(i=0;i{
if(strcmp(name,stu[i].name)==0)
{
printf("\nPleaseinputthenewnameofthestudent:
");
scanf("%s",stu[i].name);
printf("Pleaseinputthenewnumberofstudentslearning:
");scanf("%s",stu[i].num);
printf("Pleaseinputthenewmathematicsscore:
");
scanf("%d",&stu[i].math);
printf("PleaseinputnewEnglishscore:
");
scanf("%d",&stu[i].english);
printf("Pleaseinputthenewmathematicsscore:
");
scanf("%d",&stu[i].Chinese);
printf("Pleaseinputthenewphysicalscore:
");
scanf("%d",&stu[i].physics);
printf("Pleaseinputthenewcomputerscore:
");
scanf("%d",&stu[i].computer);
}
}
fp=fopen(fname,"w");
fprintf(fp,"%d",number);
for(i=0;ifprintf(fp,"%s%s%d
%d%d%d%d",stu[i].name,stu[i].num,stu[i].math,stu[i].english,stu[i].Chinese,stu[i].physics,stu[i].computer);
fclose(fp);
save();
printf("\n\nPressanykeytoreturntothemenu");
getch();
}
voidcalculate(intn){
/*计算*/
inti,math_ave=0,english_ave=0,chinese_ave=0,physics_ave=0,computer_ave=0;clrscr();
printf("\n\nEverystudent'stotalscoreandaveragescoreare:
\n\n");printf("nametatalaverage\n");
for(i=0;i{
stu[i].total=stu[i].math+stu[i].english+stu[i].Chinese+stu[i].physics+stu[i].computer;
stu[i].average=stu[i].total/5;
printf("%-10s%-10d%-10d
\n",stu[i].name,stu[i].total,stu[i].average);
}
for(i=0;imath_ave=(math_ave+stu[i].math);
math_ave=(math_ave/n);
for(i=0;ienglish_ave=(english_ave+stu[i]