收藏 分销(赏)

班级成绩管理系统大学论文.doc

上传人:w****g 文档编号:2170395 上传时间:2024-05-21 格式:DOC 页数:29 大小:693.50KB
下载 相关 举报
班级成绩管理系统大学论文.doc_第1页
第1页 / 共29页
班级成绩管理系统大学论文.doc_第2页
第2页 / 共29页
班级成绩管理系统大学论文.doc_第3页
第3页 / 共29页
班级成绩管理系统大学论文.doc_第4页
第4页 / 共29页
班级成绩管理系统大学论文.doc_第5页
第5页 / 共29页
点击查看更多>>
资源描述

1、课 程 设 计 报 告课程名称 C语言程序设计 课题名称 班级成绩管理系统 专 业 信息管理与信息系统 班 级 学 号 姓 名 指导教师 赵锦元、李峰、罗敬 2011 年 6 月 22 日湖南工程学院课 程 设 计 任 务 书课程名称 C语言程序设 课 题 班级成绩管理系统 专业班级 学生姓名 学 号 指导老师 赵锦元、李峰、罗敬 审 批 任务书下达日期 2011 年 6月4 日任务完成日期 2011 年 6 月 22 日一、设计内容与设计要求1.课程设计目的全面熟悉、掌握C语言基本知识,增强对不同的问题运用和灵活选择合适的数据结构以及算法描述的本领,熟悉编制和调试程序的技巧,掌握分析结果的若

2、干有效方法,进一步提高上机动手能力,培养使用计算机解决实际问题的能力,养成提供文档资料的习惯和规范编程的思想,为后继课程(数据结构和数据库等课程)的实验以及课程设计打下较扎实的基础。2.课题题目 班级成绩管理系统 班级档案管理系统 飞机订票系统 猜数字游戏 电子英汉词典设计 通讯录管理系统3.设计要求 (1)掌握结构化程序设计的主体思想,以自顶向下逐步求精的方法编制程序解决一些实际的中型问题,为将来开发软件积累一些典型的案例处理经验。具体要求如下:设计课题题目:每位同学根据自己学号除以6所得的余数加一选择相应题号的课题。原则上不予换提,私自换题者不记成绩。(2)根据自己对应的课题完成以下主要工

3、作:完成系统需求分析:包括系统设计目的与意义;系统功能需求;输入输出的要求。完成系统概要设计:程序由哪些模块组成以及模块之间的层次结构、各模块的调用关系;每个模块的功能;课题涉及的数据结构和数据库结构;即要存储什么数据,这些数据是什么样的结构,它们之间有什么关系等。完成系统详细设计:包括采用C语言定义相关的数据类型;写出各模块的类C码算法;画出函数的调用关系图。调试分析、设计体会、测试数据:准备典型的测试数据和测试方案,包括正确的输入及输出结果和含有错误的输入及输出结果;程序调试中遇到的问题以及解决问题的方法;课程设计过程经验教训、心得体会。关键源程序(带注释) 按规定格式完成课程设计报告,将

4、其打印稿(A4纸)上交给老师存档。不得抄袭他人程序、课程设计报告,每个人应体现自己的个性设计。二、进度安排第 17 周 星期一 8时:00分11时:30分 星期二 8时:00分11时:30分 星期四 8时:00分11时:30分 星期五 8时:00分11时:30分第18周 星期一 8时:00分11时:30分 第18周 星期二 14时:30分18时:00分 目录1.系统需求分析11.1问题描述11.2功能需求11.3算法提示:11.4测试数据:21.5其它22.概要设计22.1程序的模块组成22.2各模块的功能23.详细设计33 .1采用C语言定义相关的数据类型332显示主界面的函数433成绩录入

5、函数534成绩显示函数53 .5成绩保存函数536成绩排序函数637成绩修改函数638成绩统计函数74.系统调试84.1函数关系调用图84.2 程序中出现的问题及解决方法95.运行结果105.1 主界面、成绩录入105.2成绩显示 、保存115.3成绩排序125.4成绩修改以及修改后保存135.5 成绩统计146.心得体会157.附录167.1源代码167.2参考文献228 评分表231.系统需求分析1.1问题描述 对一个有N个学生的班级,每个学生有M门课程。该系统实现对班级成绩的录入、显示、修改、排序、保存等操作的管理。1.2功能需求(1)本系统采用一个结构体数组,每个数据的结构应当包括:学

6、号、姓名、M门课程名称。(2)本系统显示这样的菜单:请选择系统功能项:a、 成绩录入b、 成绩显示c、 成绩保存d、 成绩排序e、 成绩修改(要求先输入密码)f、 成绩统计(1)显示每门课程成绩最高的学生的基本信息(2)显示每门课程的平均成绩(3)显示超过某门课程平均成绩的学生人数g、 退出系统(3)执行一个具体的功能之后,程序将重新显示菜单。 (4)将学生成绩保存到文件中。1.3算法提示:1、数据结构:结构体类型数组。2、数据库结构:下表构成该系统的基本数据库。姓名学号课程名称1课程名称2charCharfloat float1.4测试数据:学生人数N=10课程门数M=4课程名:数学、语文、

7、英语、政治1.5其它对该系统有兴趣的同学可以在实现上述基本功能后,完善系统的其它功能。2.概要设计2.1程序的模块组成整个系统除了主函数外,另外还有7个函数,实现七大功能:成绩录入功能、成绩显示功能、成绩保存功能、成绩排序功能、成绩修改功能、成绩统计功能、退出系统功能。 2.2各模块的功能 (1)主函数 main() 利用while()输出函数主界面和swithch()实现选择函数以及各函数的 调用,系统根据输入的数字选项来调用相应的函数。 a、主界面函数 利用while(xz)语句,只要输入的xz!=0,就会输出主界面。 b、菜单选择函数 用switch(XZ)开关语句,进入“功能选择”的界

8、面,在这个界面里有显 示系统的七大功能,当XZ=?时,根据每个功能前面的序号(XZ=)进行选择。等执行完每一个函数功能后,返回菜单。 (2)成绩录入函数(xxlr) void xxlr(struct student stu,int n) 实现对每个学生学号,姓名,四门课程的成绩,总成绩,平均成绩的录入。 (3)成绩显示函数(xxxs) void xxxs(struct student stu,int n) 实现对每个学生的学生信息的输出。 (4)成绩保存函数(xxbc) void xxbc(struct student stu,int n) 实现对输入的信息保存在cstudent.txt中,并

9、且能从中读取学生的信息。 (5)成绩排序函数(xxpx) void xxpx(struct student stu,int n) 实现对学生总成绩的从大到 小的排序。(6)成绩修改函数(xxxg) void xxxg(struct student stu,int n) 实现对几个学生信息修改,再次选择xz=3,4可将修改的程序重新保存。(7) 成绩统计函数(xxtj) void xxtj(struct student stu,int n) 实现以下三个分功能: a、 每门课程成绩最高的学生信息;b、 每门课程的平均成绩;c、 显示超过某门课程平均成绩的人数。 (8)退出系统函数 用if语句表示

10、 if(xz=0) break;即选择0时就表示退出系统了。3.详细设计3 .1采用C语言定义相关的数据类型 对要输入的学生信息采用结构体数组的形式,这样既方便又明了,而且也使我自己对这种方式的表达更加熟悉。 Struct student /结构体数组关于学生的信息 char num11; char name10; float score4; float total; float aver; stu11; 本程序对要定义的学生信息中不同的信息采用了不同的数据类型,例如:在对学生的学号和名称用字符型(char num11; char name10;),在对学生的四门成绩,总成绩和平均成绩采用浮点

11、型(float score4; float total; float aver;)。并且对后文程序中要定义的采用了相对应的类型(int i,j;)。32显示主界面的函数用while()语句实现,如: while(1) printf(*学生成绩管理系统*n); printf(=n); printf( 1.学生成绩录入 n); printf( 2.学生成绩显示 n); printf( 3.学生成绩保存 n); printf( 4.学生成绩排序 n); printf( 5.学生成绩修改 n); printf( 6.学生成绩统计 n); printf( 0.结束程序 n); printf(=n); p

12、rintf(choose 1,2,3,4,5,6,0: n);只要括号中的数不为0,就输出主界面。33成绩录入函数 int i; for(i=0;in;i+) printf(输入学号 姓名:n); scanf(%s%s,stui.num,stui.name); printf(n数学成绩,语文成绩,英语成绩,政治成绩n);scanf(%f,%f,%f,%f,&stui.score0,&stui.score1,&stui.score2,&stui.score3); 利用循环语句,分别对每个学生的信息进行录入34成绩显示函数 int i; printf(n学生信息:学号 姓名 数学成绩 语文成绩 英

13、语成绩 政治成绩 总成绩 平均成绩n); for(i=0;in;i+) printf(n%s,%s,%f,%f,%f,%f,%f,%fn,stui.num,stui.name,stui.score0,stui.score1,stui.score2,stui.score3,stui.total,stui.aver); printf(n);和3.3一样,只是让成绩整体输出,在屏幕上显现出来而已。3 .5成绩保存函数 fp=fopen(c:student.txt,w);先定义一个文件fp,把要输入的信息保存在c:student.txt中。 for(i=0;in;i+) fprintf(fp, n%s

14、,%s,%f,%f,%f,%f,%f,%fn,stui.num,stui.name,stui.score0,stui.score1,stui.score2,stui.score3,stui.total,stui.aver); fclose(fp); 用fprintf语句使信息输入到文件中,并保存。 fp=fopen(c:student.txt,r); for(i=0;in;i+) fscanf(fp, n%,%,%f,%f,%f,%f,%f,%fn,stui.num,stui.name,stui.score0,stui.score1,stui.score2,stui.score3,stui.t

15、otal,stui.aver);再次用只读的形式打开文件,在fscanf语句后再用printf输出学生信息。36成绩排序函数struct student t; /定义结构体变量,用于下面的交换for(i=0;in-1;i+) /第i个学生 for(j=i+1;jstui.total) t=stuj; stuj=stui; stui=t; 用选择法的方式将总成绩最高的学生放在最前面,实现从大到小的排序。37成绩修改函数 首先对密码的设置,用语句if(strcmp(pass,password)=0),如果正确就进行下步操作。输入要修改的学生学号,gets(no); 再次进行stui.num 和no

16、的比较if(strcmp(stui.num,no)=0),就对此学生的成绩进行修改,并输出。38成绩统计函数此函数对三个进行统计:(1) for(j=0;j4;j+) max=stu0.scorej; /先赋初值 k=0; / k表示第k +1个学生 for(i=0;imax) max=stui.scorej; k=i; 这样就得到了每门课成绩最高分的学生,然后在输出他的全部信息。(2)for(j=0;j4;j+) sum=0; for(i=0;in;i+) sum=sum+stui.scorej; aver_courj=sum/n; printf(第%d门课,课程的平均成绩为%fn,j+1,

17、aver_courj); 对每门课程求取平均分。(3)for(j=0;j4;j+) k=0; /k表示超过某门课平均成绩的人数 for(i=0;iaver_courj) k+; printf(第%d门课有%d个同学超过平均分n,j+1,k); 实现了计算超过某门课平均成绩的人数。 总之,在一个函数中,用三个循环语句就实现了所要求的。4.系统调试4.1函数关系调用图 开始main函数 0、退出系统xxtc 1、成绩录入函数 xxlr 2、成绩显示函数xxxs 3、成绩保存函数xxbc 4、成绩排序函数xxpx 5、成绩修改函数xxxg 6、成绩统计函数xxtj结束4.2 程序中出现的问题及解决方

18、法(1)在信息保存在文件中的时候,未使用恰当的输入输出语句,应将printf语句改为fprintf语句,将scanf语句改为fscanf语句,才解决了学生信息可在我保存的cstudent.txt中显示出来,而不是一些乱码。 (2)在排序的时候,没有定义结构体变量(struct student t),而是定义为float型(float t),以至于成绩交换没有实现(t=stui.total;stui.total=stui+1.total;stui+1.total=t;)在我 改变这一个小小的地方后,这个子函数就可以正常运行了。 (3)在求平均成绩时,aver_courj=sum/n;因for循环

19、语句中n的值没弄清,一下就出现了错误。 (4)在if语句中,将数组的比较和值得比较弄混了:如:char pass10,password10;if(stracmp(pass,password)=0)printf(请输入要修改的学生信息的学号);只有用上面的if语句而不是if(pass=password)才能输出正确的结果。 (5)在下面的语句中,scanf(%s%sn,stui.num,stui.name);这条语句是错误的。因为scanf语句是从电脑键盘上输入,不能直接输入换行符(n)。scanf语句有严格的格式要求,你只能按照它的输出要求来办。另外,输入数据时,企图规定精度。 scanf(%

20、7.2f,&a); 这样做是不合法的,输入数据时不能规定精度。再者,在不应加地址运算符&的位置加了地址运算符,scanf(%s,&str); C语言编译系统对数组名的处理是:数组名代表该数组的起始地址,且scanf函数中的输入项是字符数组名,不必要再加地址符&。应改为: scanf(%s,str); (6)switch语句中,每一个case之后又应有一个berak;,但最后一个应没有。就是由于漏写了break语句,case只起标号的作用,而不起判断作用。5.运行结果5.1 主界面、成绩录入 5.1-主界面显示图5.2成绩录入 5.1-成绩录入图5.3成绩显示 、保存 5.3-成绩显示,保存显示

21、图 在显示和保存界面中,出现的是一样的,只是保存的时候在cstudent.txt中可以体现出来。5.4成绩排序 5.4-成绩排序显示图5.5成绩修改以及修改后保存 5.5-成绩修改及保存后的显示图5.6 成绩统计 5.6-成绩统计显示图图中包括(1)每门课成绩最高分的学生信息; (2)每门课的平均分; (3)超过某门课程平均分的人数。6.心得体会回顾起此次课程设计,至今我仍感慨颇多,的确,从拿到题目到完成整个编程这短短的一个多星期内,从理论到实践的转变,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识,而且更加锻炼了我的动手能力以及串联知识和

22、思维的转换能力。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。 在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体当然,在最后完成的程序中,有许多模块是借鉴的,毕竟我还是处于初学者阶段,离高手还有很多路要走,但是我不会灰心的。 通过这次课程设计之后,我了解到设计程序也并非想象中的那么复杂,只要多花点功夫

23、就会有收获,其实很多内容都是老师上课时就讲了的,但我们就是没有用心,缺少了那么一点灵动,所以,我们除了要扎实的学好基础知识之外,那一点点小聪明还是必要的。此外,在不懂得的知识方面,应该及时向老师提出问题或者跟同学一起讨论,以求能得出结论,不要不懂装懂。 本次课程设计结束了,对于我的影响很大。我通过这次实践学到了许多知识,学到了设计一个简单的系统,要注意哪些方面,也使我知道自己哪些方面做得还不够。但我出总结出了一点点的经验如下:(1)要对系统的功能和要求做出详细的分析,并合理分解任务。 (2)把分解出来的子任务,做给一个相对独立的模块。(3)在设计一个模块之前,要简单构想一下总界面的显视情况。(

24、4)针对构想出来的界面进行程序的编写。(5)对整体和细节方面都要考虑全面,不忽视每一个小地方。最后,感谢老师您对我的指导和从百忙中抽空看我的设计,谢谢!7.附录7.1源代码#include#include#includevoid lr(struct student stu, int n); /成绩录入 void xs(struct student stu, int n); /成绩显示void bc(struct student stu, int n); /成绩保存void px(struct student stu, int n); /成绩排序void xg(struct student st

25、u, int n); /成绩修改void tj(struct student stu, int n); /成绩统计void tc(struct student stu, int n); /退出系统struct student char num11; char name16;float score4;float total;float aver; stu11;void main() int xz,n; printf(输入学生数:); scanf(%d,&n); while(1) printf(*学生成绩管理系统*n); printf(=n); printf( 1.学生成绩录入 n); print

26、f( 2.学生成绩显示 n); printf( 3.学生成绩保存 n); printf( 4.学生成绩排序 n); printf( 5.学生成绩修改 n); printf( 6.学生成绩统计 n); printf( 0.结束程序 n); printf(=n); printf(choose 1,2,3,4,5,6,0: n); scanf(%d,&xz); switch(xz) case 1: lr(stu,n); break; case 2: xs(stu,n); break; case 3: bc(stu,n); break; case 4: px(stu,n); break; case 5

27、: xg(stu,n); break; case 6: tj(stu,n); break; case 0: break; default: printf(enter data error!n); if(xz=0) break;/*1.学生成绩录入程序(xxlr.c)*/void lr(struct student stu,int n) int i; for(i=0;in;i+) printf(输入学号 姓名:n); scanf(%s%s,stui.num,stui.name); printf(n数学成绩,语文成绩,英语成绩,政治成绩n); scanf(%f,%f,%f,%f,&stui.sco

28、re0,&stui.score1,&stui.score2,&stui.score3); stui.total=stui.score0+stui.score1+stui.score2+stui.score3; stui.aver=stui.total/4; /*2.学生成绩显示程序(xxxs.c)*/void xs(struct student stu, int n) int i; printf(n学生信息:学号 姓名 数学成绩 语文成绩 英语成绩 政治成绩 总成绩 平均成绩n); for(i=0;in;i+) printf(n%s,%s,%f,%f,%f,%f,%f,%fn,stui.num

29、,stui.name,stui.score0,stui.score1,stui.score2,stui.score3,stui.total,stui.aver); printf(n);/*3.学生成绩保存程序(xxbc.c)*/void bc(struct student stu, int n) FILE *fp; int i; fp=fopen(c:student.txt,w); for(i=0;in;i+) / if(fwrite(&stui,sizeof(struct student),1,fp)!=1) fprintf(fp, n%s,%s,%f,%f,%f,%f,%f,%fn,stu

30、i.num,stui.name,stui.score0,stui.score1,stui.score2,stui.score3,stui.total,stui.aver); /printf(file write error!n); fclose(fp); fp=fopen(c:student.txt,r); for(i=0;in;i+) /fread(&stui,sizeof(struct student),1,fp); fscanf(fp, n%,%,%f,%f,%f,%f,%f,%fn,stui.num,stui.name,stui.score0,stui.score1,stui.scor

31、e2,stui.score3,stui.total,stui.aver); printf(n 学生信息:学号 姓名 数学成绩 语文成绩 英语成绩 政治成绩 总成绩 平均成绩n); printf(n%s,%s,%f,%f,%f,%f,%f,%fn,stui.num,stui.name,stui.score0,stui.score1,stui.score2,stui.score3,stui.total,stui.aver); /*4.学生成绩排序程序(xxpx.c)*/void px(struct student stu, int n) int i,j; struct student t; for

32、(i=0;in-1;i+) /第i个学生 for(j=i+1;jstui.total) t=stuj; stuj=stui; stui=t; printf(the sorted numbers:n); for(i=0;in;i+) printf(n 学生信息:学号 姓名 数学成绩 语文成绩 英语成绩 政治成绩 总成绩 平均成绩n); printf(n%s,%s,%f,%f,%f,%f,%f,%fn,stui.num,stui.name,stui.score0,stui.score1,stui.score2,stui.score3,stui.total,stui.aver); /*5.学生成绩修

33、改程序(xxxg.c)*/void xg(struct student stu, int n) char no11; int i; char pass10,password10; printf(请设置密码:n); scanf(%s,pass); printf(请再次输入密码:n); scanf(%s,password); if(strcmp(pass,password)=0) printf(请输入要修改信息的学生学号:n); getchar(); gets(no); /输入学号 for(i=0;in)printf(你要查找的学生没查到!n); /*6.学生成绩统计程序(xxtj.c)*/voi

34、d tj(struct student stu, int n) int i,j,k; float max,sum,aver_cour4; for(j=0;j4;j+) max=stu0.scorej; k=0; for(i=0;imax) max=stui.scorej; k=i; printf(第%d门课程,n成绩最高的学生的信息 学号%s 姓名%s 数学%f 语文%f 英语%f 政治%f 总成绩%f 平均成绩%fn,j+1,stuk.num,stuk.name,stuk.score0,stuk.score1,stuk.score2,stuk.score3,stuk.total,stuk.a

35、ver); for(j=0;j4;j+) sum=0; for(i=0;in;i+) sum=sum+stui.scorej; aver_courj=sum/n; printf(第%d门课,课程的平均成绩为%fn,j+1,aver_courj); for(j=0;j4;j+) k=0; /k表示超过某门课平均成绩的人数 for(i=0;iaver_courj) k+; printf(第%d门课有%d个同学超过平均分n,j+1,k);7.2参考文献1 苏仕华、魏韦巍、王敬生、刘燕君 编著 数据结构 课程设计 第二版 2 谭浩强著C程序设计(第四版).北京:清华大学出版社.2010.63 谭浩强著C程序设计(第四版)学习辅导.北京:清华大学出版社.2010.64 谭浩强著C语言设计题解与上机指导(第三版).北京:清华大学出版社,20058 评分表计算机与通信学院课程设计评分表课程名称: C语言程序设计 项 目评 价设计方案的合理性与创造性设计与调试结果设计说明书的质量答辩陈述与回答问题情况课程设计周表现情况综合成

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服