C语言课程设计报告班级学生成绩管理 .doc

上传人:土8路 文档编号:10101957 上传时间:2021-04-19 格式:DOC 页数:24 大小:90KB
返回 下载 相关 举报
C语言课程设计报告班级学生成绩管理 .doc_第1页
第1页 / 共24页
C语言课程设计报告班级学生成绩管理 .doc_第2页
第2页 / 共24页
C语言课程设计报告班级学生成绩管理 .doc_第3页
第3页 / 共24页
C语言课程设计报告班级学生成绩管理 .doc_第4页
第4页 / 共24页
C语言课程设计报告班级学生成绩管理 .doc_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《C语言课程设计报告班级学生成绩管理 .doc》由会员分享,可在线阅读,更多相关《C语言课程设计报告班级学生成绩管理 .doc(24页珍藏版)》请在三一文库上搜索。

1、X X 航 空 工 业 学 院 课程设计学 号 _班 级 _ 姓 名 _指导教师 _年 月 日XX航空工业学院课程设计任务书机械与汽车学院 机械设计制造及其自动化专业 5406108班 学号200504061267一、课程设计题目:班级学生成绩管理二、课程设计工作自2007年7月9日起至2007年7月14日止三、课程设计内容:运用所学的C语言知识,编制和调试程序,具体要求如下:(1) 添加学生数据(2) 删除学生数据(3) 按总成绩排序,并显示名次(成绩相同,名次相同)(4) 成绩查询(5) 自己再加一项功能注:每个学生数据至少应该包括学号、姓名、三门成绩,学生数据要保存在student.da

2、t文件中。四、课程设计要求:1、采用模块化程序设计方法;在程序界面,以菜单的形式调用各功能函数;程序可读性强,界面友好;输出形式尽量美观。2、用户界面友好,功能明确,操作方便;可以加以其它功能或修饰。3、用户界面中的菜单至少应包括“输入数据”、“删除数据”、“排序”、“查询”、“退出”5项。4、代码应适当缩进,并给出必要的注释,以增强程序的可读性。课程设计说明书:课程结束后,上交课程设计说明书(打印稿和电子稿),其内容如下:l 封面l 课程设计任务书l 目录l 需求分析(分析题目的要求)l 程序流程图(总体流程图和主要功能模块流程图)l 核心技术的实现说明及相应程序段l 个人总结l 参考资料l

3、 源程序及适当的注释指导教师:_学生签名:_目录一、需求分析1二、程序流程图2三、核心技术的实现说明及相应程序段7四、个人总结13五、参考文献14六、源程序14一、需求分析经过对程序设计题目的分析可知,整个程序的设计实现大致分为五个模块,其中每一个模块对应一个函数,他们的功能分别是:添加学生数据函数(add),删除数据函数(del),排序函数(sort),成绩查询函数(query),以及更改学生数据函数(change)。在这些函数当中,前四个函数的实现严格按照题目的要求,而后面的一个函数属于附加功能。1、添加学生数据函数 主要实现程序最初运行时学生数据的录入以及其后的运行中学生数据的追加功能;

4、2、删除学生数据函数 实现的功能是按照学号对学生的数据记录进行删除;3、排序函数 按照题目的具体要求实现的是总成绩的递减排序以及名次显示,其中总成绩相同者名次相同;4、成绩查询函数 允许按照学号对学生的各科成绩进行查询;5、更改数据函数 可以实现对学生记录中除学号以外的信息进行修改;除上面介绍的功能之外,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。每一个学生记录都包含学号、姓名,以及英语、计算机和数学三门成绩,在程序当中,将学生记录类型定义为结构体类型,添加以及追加的学生信息直接写入E盘的student.dat文件中,其他函数每次对学生记录的访问,

5、其数据来源都是student.dat文件,这样做不但可以保证学生数据的一致性,而且可以对学生数据进行永久保存,保证每次运行程序都可以采用原来的数据。二、程序流程图1、程序总体结构图 当(1) 真 n=1 假 添加 n=2? 数据 真 假 函数 n=3? add( ) 删除 真 假 函数 del() 排序 真 n=4? 假 sort() 查询 n=5?check() 真 假 更改 退出change() 图1程序总体结构图2、具体功能框图(1)添加学生数据函数add 读写方式打开E盘student.dat文件不成功?真 假写方式打开E盘student.dat文件不成功 ? 输入追加的学生数量n真

6、假 读出学生记录数量赋j输出文件打开失败 输入录入学生数量n 文件位置指针重回开头rewind将n值写如文件 学生记录总数n+j写入文件循环变量i=1 文件位置指针定位在结尾fseek当i=n时 循环变量i=1return; 输入学号,姓名和 当i=n时三门成绩 输入学号,姓名和三门成绩学生信息写入文件i+ 学生信息写入文件i+关闭文件 图2 添加学生数据函数(2)读取学生数据reads循环变量i=0i*n读出一条学生记录到形参数组元素stui读出记录总数赋给形参*n开始i+关闭文件结束读方式打开E盘student.dat文件不成功?returnNNYY图3读取学生数据(3)删除学生记录函数d

7、elreads(stu,&n);循环变量i=0; 输入待删除的学生学号number假i+当in-1时stui与number相等?真break;输出该学生记录不存在!记录写回文件i+关闭文件return;当i=n-2显示打开文件失败!i=0写方式打开student.dat不成功?假真数租元素依次前移 j+当j=n?真假j=i+1(4)按总分排序函数sort(4)排序函数sort图4删除学生记录函数(4)按总分排序函数sort 循环变量i=o,j=oreads(stu.&n);当i=n-1当jn-1-i第j个学生总分第j+1个总分真 假交换两个学生信息j+ j+i+ 写方式打开E盘student.

8、dat文件成功真 假记录总数n写入文件 显示打开文件失败!i=0当in写入文件并输出,输出时显示名次i+ return;关闭文件图5总分排序函数三、核心技术的实现说明及相应程序段本程序主要由五个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。在这些函数当中,添加数据函数、删除数据函数和排序函数是程序中较为核心的部分,下面分别进行说明。1、添加数据函数 添加数据分为两种情况,其一是在学生文件(student.dat)不存在的情况下,首先由程序创建一个新文件,并将录入的学生信息写入该文件当中;其二是在学生文件(student.dat)已经存在的情况下,此时文件要

9、以读写方式或追加的方式打开,这样才可以保证以前已经存在的数据不丢失。具体的程序段如下:if(fp=fopen(e:student.dat,rb+)!=NULL) /*读写方式打开文件*/ j=getw(fp); rewind(fp); /*文件位置指针返回文件开头*/ printf(请输入要添加的学生数量,按回车键确认:); scanf(%d,&n); putw(j+n,fp); fseek(fp,0L,2); for(i=1;i=n;i+) printf(n请输入第%d个学生的学号、姓名,并按回车键确认:n,i); scanf(%s%s,stu.num,stu.name); printf(n

10、请输入第%d个学生的三门成绩,并按回车键确认:n,i); scanf(%f%f%f,&stu.english,&puter,&stu.math); fwrite(&stu,sizeof(struct student),1,fp); else /*文件不存在时,新建一个文件,并将数据写入该文件*/ if(fp=fopen(e:student.dat,wb)!=NULL) printf(请输入要添加的学生数量,按回车键确认:); scanf(%d,&n); putw(n,fp); for(i=1;i=n;i+) printf(n请输入第%d个学生的学号、姓名,并按回车键确认:n,i); scanf

11、(%s%s,stu.num,stu.name); printf(n请输入第%d个学生的三门成绩,并按回车键确认:n,i); scanf(%f%f%f,&stu.english,&puter,&stu.math); fwrite(&stu,sizeof(struct student),1,fp); fclose(fp);2、删除数据函数该函数的核心内容是删除算法以及最终对源文件的更新。该函数执行时,首先调用reads函数将文件中的学生信息读入数组当中,并由用户输入待删除学生的学号,而后按照该学号进行查找,如果文件中存在该学生的数据,则采用删除算法删除,否则输出学生信息不存在的提示信息。对学生信息

12、的具体删除算法是在结构体数组中实现的,当学生的信息被找到后,位于数组中该学生后面的学生记录依次向前移动一个元素的位置,这些操作完成后,要删除的学生信息就被后面的数组元素覆盖掉了,也就实现了删除。在数组中删除学生信息后,还要将更改后的信息重新写回文件当中,以保证数据的一致性。具体程序段如下:void del() /*信息删除函数*/struct student stuN; char number20; FILE *fp; int n,i,j; reads(stu,&n); printf(n请输入要删除信息的学生学号,按回车键确认:); scanf(%s,number); for(i=0;i=n)

13、 printf(没有找到该学生信息!n); return; elsefor(j=i+1;jn;j+) /*左移,覆盖待删除的学生记录*/ strcpy(stuj-1.num,stuj.num); strcpy(stuj-1.name,stuj.name); stuj-1.english=stuj.english; stuj-puter=puter; stuj-1.math=stuj.math; if(fp=fopen(e:student.dat,wb)=NULL) printf(文件打开失败!); return; else /*重新写回文件当中*/ putw(n-1,fp); for(i=0;

14、in-1;i+) fwrite(&stui,sizeof(struct student),1,fp); fclose(fp); printf(删除成功!n);3、总分排序函数对于总分的排序采用的排序算法是冒泡法排序,其中总分的求得是在排序的过程中实现的,这部分程序仍然调用了reads函数,整个排序过程在结构体数组stu中实现,由于排序算法涉及到两个数组元素的信息交换,因此还需要定义一个中间变量来协助。排序函数使学生数据的排列顺序发生了变化,因此也需要队员文件进行更新,此外,对于学生排序后名次的确定,仅在结果输出时予以显示,并未将名次信息写入源文件。具体的程序段如下:void sort()/*排

15、序函数*/ FILE *fp; struct student stuN,temp; int i,j,n; reads(stu,&n); for(i=0;in-1;i+) for(j=0;jn-1-i;j+) if(stuj.english+puter+stuj.mathstuj+1.english+stuj+puter+stuj+1.math) strcpy(temp.num,stuj.num); strcpy(temp.name,stuj.name); temp.english=stuj.english; puter=puter; temp.math=stuj.math; strcpy(st

16、uj.num,stuj+1.num); strcpy(stuj.name,stuj+1.name); stuj.english=stuj+1.english; puter=stuj+puter; stuj.math=stuj+1.math; strcpy(stuj+1.num,temp.num); strcpy(stuj+1.name,temp.name); stuj+1.english=temp.english; stuj+puter=puter; stuj+1.math=temp.math; if(fp=fopen(e:student.dat,wb)=NULL) /*更新文件*/ prin

17、tf(打开文件失败!); return; putw(n,fp); j=1; for(i=0;in;i+) fwrite(&stui,sizeof(struct student),1,fp);if(stui.english+puter+stui.math=stui+1.english+stui+puter+stui+1.math) printf(%3d%5s%5s%8.2f%8.2f%8.2f%9.2fn,j,stui.num,stui.name,stui.english,puter,stui.math,stui.english+puter+stui.math);else printf(%3d%

18、5s%5s%8.2f%8.2f%8.2f%9.2fn,j+,stui.num,stui.name,stui.english,puter,stui.math,stui.english+puter+stui.math); fclose(fp);getch();四、个人总结通过这次课设我对C语言的掌握比以前熟练了很多,也学会了严谨的治学态度。以前对“c语言”的认识就是以为这是一门学校开设的学科,首先不能挂科,其次要学好它,至于它有什么用处,感受并不是深。本次课设,就是一个把所学知识与生活实践完美结合的典范。课设让我们知道了所学的知识大有用武之地,从而更加激发我学习“c语言”的热情。这次课程设计考察了

19、多方面的知识,比如结构体、文件等等,使我们熟练的掌握知识的同时还增强了我们的实际动手的能力。有时候我个人的能力是有限的,必要是要接受别人的帮助。五、参考文献1 谭浩强C程序设计北京:清华大学出版社,20052 刘成等C语言程序设计实验指导与习题集北京:中国铁道出版社,2006六、源程序#include#include#define N 20struct studentchar num20; char name10; float english; float computer; float math;void menu();void reads();void add();void del();v

20、oid sort();void check();void change();void exit();main() int n; while(1) menu(); printf(n qingshuruninyaoxuanzedecaozuoxuhaoanhuichequeren); scanf(%d,&n); switch(n) case 1: add();break; case 2: del();break; case 3: sort();break; case 4: check();break; case 5: change();break; case 6: exit(0); default

21、: printf(shurucuowuqingshurulinbiaozhongcunzaidexuhaon ); void menu()printf( * banjichangjiguanlixitong* ); printf(n 1 tianjiaxueshengshuju); printf(n 2 shanchuxueshengshuju); printf(n 3 genggaixueshengshuju); printf(n 4 zongchengjipaixu); printf(n 5 chengjichaxun); printf(n 6 tuichu);void reads(str

22、uct student stuN,int *n) FILE *fp; int i=0; if(fp=fopen(e:student.dat,rb)=NULL) printf(wenjiandakaishibain); return; else *n=getw(fp); for(i=0;i*n;i+) fread(&stui,sizeof(struct student),1,fp); fclose(fp);void add()FILE *fp; int n,i,j; struct student stu; if(fp=fopen(e:student.dat,rb+)!=NULL) j=getw(

23、fp); rewind(fp); printf(qingshuruyaotianjiadexueshengshulianganhuichequeren); scanf(%d,&n); putw(j+n,fp); fseek(fp,0L,2); for(i=1;i=n;i+) printf(nqingshurudi%dgexueshengdexuehaoxingmingyongkonggefengkaibinganhuichequerenn,i); scanf(%s%s,stu.num,stu.name); printf(nqingshurudi%dgexueshengdeyingyujisua

24、njiheshuxuedesanmenchengjiyongkonggefengkaibinganhuichejianquerenn,i); scanf(%f%f%f,&stu.english,&puter,&stu.math); fwrite(&stu,sizeof(struct student),1,fp); else if(fp=fopen(e:student.dat,wb)!=NULL) printf(qingshuruyaotianjiadexueshengshulianganhuichejianqueren); scanf(%d,&n); putw(n,fp); for(i=1;i

25、=n;i+) printf(nqingshurudi%dgexueshengdexuehaoxingmingyongkonggefenkaibinganhuichejianquerenn,i); scanf(%s%s,stu.num,stu.name); printf(nqingshurudi%dgexueshengdeyingyujisuanjiheshuxuesanmenchengjiyongkonggefenkaibinganhuichejianquerenn,i); scanf(%f%f%f,&stu.english,&puter,&stu.math); fwrite(&stu,siz

26、eof(struct student),1,fp); fclose(fp);void del() struct student stuN; char number20; FILE *fp; int n,i,j; reads(stu,&n); printf(nqingshuruyaoshanchuxueshengxinxidexueshengxuehaoanhuichejianqueren); getchar(); scanf(%s,number); for(i=0;i=n) printf(meiyouzhaodaogaixueshengxinxin); return; elsefor(j=i+

27、1;jn;j+) strcpy(stuj-1.num,stuj.num); strcpy(stuj-1.name,stuj.name); stuj-1.english=stuj.english; stuj-puter=puter; stuj-1.math=stuj.math; if(fp=fopen(e:student.dat,wb)=NULL) printf(wenjiandakaishibai); return; else putw(n-1,fp); for(i=0;in-1;i+) fwrite(&stui,sizeof(struct student),1,fp); fclose(fp)

28、; printf(shanchuchenggongn);void sort() FILE *fp; struct student stuN,temp; int i,j,n; reads(stu,&n); for(i=0;in-1;i+) for(j=0;jn-1-i;j+) if(stuj.english+puter+stuj.mathstuj+1.english+stuj+puter+stuj+1.math) strcpy(temp.num,stuj.num); strcpy(temp.name,stuj.name); temp.english=stuj.english; puter=put

29、er; temp.math=stuj.math; strcpy(stuj.num,stuj+1.num); strcpy(stuj.name,stuj+1.name); stuj.english=stuj+1.english; puter=stuj+puter; stuj.math=stuj+1.math; strcpy(stuj+1.num,temp.num); strcpy(stuj+1.name,temp.name); stuj+1.english=temp.english; stuj+puter=puter; stuj+1.math=temp.math; if(fp=fopen(e:s

30、tudent.dat,wb)=NULL) printf(dakaiwenjianshibai); return; putw(n,fp); j=1; for(i=0;in;i+) fwrite(&stui,sizeof(struct student),1,fp); if(stui.english+puter+stui.math=stui+1.english+stui+puter+stui+1.math) printf(n%3d%5s%5s%8.2f%8.2f%8.2f%9.2fn,j,stui.num,stui.name,stui.english,puter,stui.math,stui.eng

31、lish+puter+stui.math); else printf(n%3d%5s%5s%8.2f%8.2f%8.2f%9.2fn,j+,stui.num,stui.name,stui.english,puter,stui.math,stui.english+puter+stui.math); fclose(fp); getch(); void check() struct student stuN; char number20; int i,n; reads(stu,&n); printf(nqingshurudaichaxundexueshengxuehaoanhuichequerenn

32、); scanf(%s,number); for(i=0;i=n) printf(meiyouzhaodaogaixueshengxinxin); return; elseprintf(n%5s%5s%8.2f%8.2f%8.2f%9.2fn,stui.num,stui.name,stui.english,puter,stui.math,stui.english+puter+stui.math); void change()struct student stuN,temp; int n,i; FILE *fp; printf(nqingshuruyaogenggaixinxidexueshen

33、gxuehaoanhuichejianqueren); scanf(%s,temp.num); reads(stu,&n); for(i=0;i=n) printf(wucixueshengxinxi!); return; printf(nqingshurugenggaihouxueshengdexingmingyingyujisuanjishuxuesanmenchengjianhuichejianquerenn); scanf(%s%f%f%f,temp.name,&temp.english,&puter,&temp.math); strcpy(stui.name,temp.name); stui.english=temp.english; puter=puter; stui.math=temp.math; if(fp=fopen(e:student.dat,wb)=NULL) printf(dakaiwenjianshibai); return; putw(n,fp); for(i=0;in;i+) fwrite(&stui,sizeof(struct student),1,fp); f

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

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1