C语言学生成绩管理系统设计方案.docx
- 文档编号:9355280
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:29
- 大小:195.54KB
C语言学生成绩管理系统设计方案.docx
《C语言学生成绩管理系统设计方案.docx》由会员分享,可在线阅读,更多相关《C语言学生成绩管理系统设计方案.docx(29页珍藏版)》请在冰豆网上搜索。
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
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;j if(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;i fprintf(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;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("\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;i fprintf(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;i printf("%-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;i printf("%-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;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); 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;i fprintf(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;i math_ave=(math_ave+stu[i].math); math_ave=(math_ave/n); for(i=0;i english_ave=(english_ave+stu[i]
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 学生 成绩管理系统 设计方案
![提示](https://static.bdocx.com/images/bang_tan.gif)