《c语言课程设计学生成绩管理 .doc》由会员分享,可在线阅读,更多相关《c语言课程设计学生成绩管理 .doc(23页珍藏版)》请在三一办公上搜索。
1、 目录目录2一、课程设计的目的与要求31.1课程设计目的:31.2课程设计要求3二、题目说明52.1 程序开发背景52.2 开发工具介绍5三、总体设计73.1 系统结构图73.2模块流程图83.2模块流程图9四、详细说明124.1成绩添加模块124.2成绩显示模块134.3按姓名查找模块144.4成绩排序模块144.5成绩比较模块15五、遇到的问题和解决方法17六、课程设计总结18七、参考文献19附录(源程序代码)20一、课程设计的目的与要求1.1课程设计目的: 1.为培养学生严谨的工作态度,锻炼学生编写文档的能力。进一步掌握和利用C语言进行程设计的能力;进一步理解和运用结构化程设计的思想和方
2、法;初步掌握开发一个小型实用系统的基本方法;学会调试一个较长程序的基本方法;学会利用流程图或N-S图表示算法;掌握书写程设计开发文档的能力(书写课程设计报告); 2、熟练掌握C语言课程中所学的理论知识; C语言是在国内外广泛使用的一种计算机语言。它既有高级语言的特点,又具有汇编语言的特点。它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。因此,它的应用范围广泛。学习使用C语言程序的目的是掌握程序设计的思路,学会用计算机语言编写程序正确处理算法和语法的关系算法是程序的核心、是灵魂,语法是外壳、是工具。通过课程设计,我们要熟练的掌握C语言的算
3、法、语言、函数的调用、循环的使用、数组的运用等。 3、通过综合C语言的基本知识来解决实际问题; C语言中与许多的东西,像:数据类型、运算符、表达式、程序设计结构、数组与函数调用。其中C语言最难和最经典的地方就是循环,(while和for的嵌套)运用WHILE,FOR,SWITCH和if的循环嵌套,我们可以实现现实中课程信息管理、图书信息管理、学生信息管理、商品信息管理等。C语言还具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画。它是数值计算的高级语言。 4、加强分析和解决问题的能力。通过这次的课程设计,能加强我们对程序设计的思考、设计、分析、理解和
4、解决问题的能力。对于我们初学者来说,主要是学习成长设计的方法,进行程序设计的基本训练为将来进一步学习打下基础。课程设计不能之掌握概念,还要动手编程、上机调试运行。只有自己动手,才能学的更多。1.2课程设计要求1.课程设计步骤:(1)对系统进行功能需求分析;(2)设计合理的数据结构和系统框架;(3)编程简练,程序功能齐全,能正确运行;(4)说明书、流程图要清楚;(5)课题完成后必须按要求提交课程设计说明书;在课程设计过程中要求学生:重视课程设计环节,用严谨、科学和踏实的工作态度对待课程设计的每一项任务;按照课程设计的题目要求,独立地完成各项任务,不允许相互抄袭;按时到机房上机,并接受教师的检查。
5、认真编写课程设计报告。课程设计可以由24名同学合作完成一个课题。全体成员应共同协作完成选题,确定设计思想,进行功能模块划分,然后由组长为各成员分配任务。整个设计期间,组长负责协调工作。各小组成员明确自己的任务后,应独立完成各自模块的设计、编码和调试,独立完成课程设计说明书。小组成员要理解同组其他成员设计的模块,熟练操作本组设计。2. 考核方式和成绩评定考核分为两个部分:(1)程序运行情况:按规定时间到机房运行程序,由老师检查运行情况(2)课程设计报告:是否按规定书写课程设计要求的各项内容课程设计成绩采用百分制:100%=平时(20)上机检查(30%)+课程设计报告(50%)二、题目说明 2.1
6、 程序开发背景 计算机已经成为我们学习和工作的得力助手,它被应用于许多领域,之所以如此,主要有以下几个方面的原因:首先,计算机可以替代人工进行许多繁杂的劳动;其次,计算机可以节省许多资源;第三计算机可以大大提高人们的工作效率;第四,计算机可以保证文档的安全通过C语言,我们可以开发许多新的项目,实现智能操作化,科技化,实现低投入,高产出的良好现象。现在我国学生成绩管理还停留在纸介质层面上,这样的机制已经不能适应时代的发展,因为他浪费许多人力物力资源,在信息时代这种管理方法必然将被计算机为基础的信息管理方法所取代。 2.2 开发工具介绍 C语言是Combined Language(组合语言)的中英
7、混合简称。是一种计算机程序设计语言。它既具有高级语言的特点,又具有汇编语言的特点。它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。因此,它的应用范围广泛,不仅仅是在软件开发上,而且各类科研都需要用到C语言,具体应用比如单片机以及嵌入式系统开发。早期的C语言主要是用于UNIX系统。由于C语言的强大功能和各方面的优点逐渐为人们认识,到了八十年代,C语言开始进入其它操作系统,并很快在各类大、中、小和微型计算机上得到了广泛的使用。成为当代最优秀的程序设计语言之一。C语言的特点: C语言是一种结构化语言。它层次清晰,便于按模块化方式组织程序,易于
8、调试和维护。C语言的表现能力和处理能力极强。它不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。它还可以直接访问内存的物理地址,进行位(bit)一级的操作。由于C语言实现了对硬件的编程操作,因此C语言集高级语言和低级语言的功能于一体。既可用于系统软件的开发,也适合于应用软件的开发。C语言中:main是主函数的函数名,表示这是一个主函数。每一个C源程序都必须有,且只能有一个主函数(main函数)。函数调用语句,printf函数的功能是把要输出的内容送到显示器去显示。printf函数是一个由系统定义的标准函数,可在程序中直接调用。此外,C语言还具有效率高,可移植性强等特点。因此广泛地移植
9、到了各类各型计算机上,从而形成了多种版本的C语言。优点: (1)C语言灵活性好,效率高,可以接触到软件开发比较底层的东西。 (2)微软的MFC库博大精深,学会它可以让随心所欲地进行编程。 (3)VC是微软制作的产品,与操作系统的结合更加紧密。 缺点: 对使用者的要求比较高,既要具备丰富的C语言编程经验,又要具有一定的WINDOWS编程基础,它的过于专业使得一般的编程爱好者学习起来会有不小的困难。 三、总体设计3.1 系统结构图学生成绩管理系统是为了方便用户根据需要对学生的各科成绩信息进行管理的系统。在如今的现代化信息理念下,一个学生管理系统在国际各大高校的教育机构中是一个必不可少的应用程序,它
10、可以方便的对学生信息进行查询,比较,排序等功能,大大提高工作效率。学生成绩管理系统包括人员信息的录入,信息查询,比较,排序等操作。内容比较庞大复杂。通过以上说明,我们可以总结得到如下的系统结构图;各科最低分学生成绩管理增加学生成绩显示学生成绩查询学生成绩学生成绩统计与排序学生成绩比较按姓名查找学生总分学生平均分平均分降序排序各科最高分各科平均分图3-13.2模块流程图3.2.1成绩添加和打印模块开始输入学号输入姓名输入成绩打印学生信息图3-2 3.2.2查看成绩模块查看成绩输入姓名是否相等输出相关信息结束YN图3-33.2.3成绩排序模块学生成绩利用For循环i=0;in-1;i+j=i;ja
11、verage(head+k)-average) if(head+j)-average(head+k)-average) k=j;if(k!=i)temp=*(head+k)*(head+k)=*(head+i)*(head+i)=temp图 3-43.2.4成绩比较模块开始for(p=head;phead+m;p+)for(i=0;iscoreip-scorekp-scoreiscorek)p-max=p-scoreip-min=p-scorei输出最大值最小值开始for(p=head;phead+m;p+)for(i=0;iscoreip-scorekp-scoreiscorek)开始for
12、(p=head;phead+m;p+)for(i=0;in;i+)是输出最大值最小值图3-5四、详细说明4.1成绩添加模块AppendScore函数:功能简介:向链表的末尾添加从键盘输入学生的学号、姓名和成绩等信息。 函数参数:结构体指针head,指向存储学生信息的结构体数组的首地址。 整形变量n,表示学生人数; 整形变量m,表示考试科目。 图4-1int AppendScore(STU *head,int n,int m) int j; STU *p; char ch; for(p=head+n;pnumber); printf(Input name:); scanf(%s,p-name);
13、 for(j=0;jscore+j); n+; printf(Do you want to append a new node(Y/N)?); scanf(%c,&ch); if(ch=n|ch=N) return n; 定义结构体指针head,存储学生信息。利用for循环依次输入学生的学号、姓名和成绩等信息。4.2成绩显示模块PrintScore函数:功能简介:打印学生的学号、姓名和成绩等信息; 函数参数:结构体指针head,指向存储学生信息的结构体数组的首地址。 整形变量n,表示学生人数; 整形变量m,表示考试科目。图4-2void PrintScore(STU *head,int n,i
14、nt m) STU *p; int i; char str100=0,temp4; strcat(str,Number name); for(i=1;i=m;i+) strcat(str,Score); itoa(i,temp,10); strcat(str, ); strcat(str, average); printf(%s,str); for(p=head;pnumber,p-name); for(i=0;iscorei); printf(%9.2fn,p-average); 定义结构体变量head,储存学生信息,利用for循环依次输出学生的学好、姓名和成绩等信息。4.3按姓名查找模块S
15、earchScort函数:功能简介:按学号查找学生成绩并显示查找结果; 函数参数:结构体指针head,指向存储学生信息的结构体数组的首地址。 整形变量n,表示学生人数; 整形变量m,表示考试科目。图4-3void SearchScore(STU *head,int n,int m) int name,findNo; printf(please Input the name you want to search:); scanf(%c,&name); findNo=SearchName(head,name,n); if(findNo=-1) printf(nNot found!n); else
16、PrintScore(head+findNo,1,m); 输入要查找的学生的姓名,进入系统,定义findNo,findNo=SearchName(head,name,n),如果findNo=-1,那么这显示没有找到,如果findNo不等于-1,则说明有,调用PrintScore函数,输出要查找的学生的成绩。4.4成绩排序模块SortScore函数:功能简介:用选择法按平均成绩由高到低排序;函数参数:结构体指针head,指向存储学生信息的结构体数组的首地址。 整形变量n,表示学生人数。图4-4void SortScore(STU *head,int n) int i,j,k; STU temp;
17、 for(i=0;in-1;i+) k=i; for(j=i;javerage(head+k)-average) k=j; if(k!=i) temp=*(head+k); *(head+k)=*(head+i); *(head+i)=temp; 定义i、j、k,i是指向学生人数的外循环,k、j是指向学生人数的内循环。k=i时,如果j指向的数比k指向的那个数大,那么k=j.而k!=i时,i指向的外循环的数与k指向的内循环的数相等。实现排序。4.5成绩比较模块ReadScore函数:功能简介:结合学生的各科成绩,计算每科的平均成绩、最高分和最低分。 函数参数:结构体指针head,指向存储学生信息
18、的结构体数组的首地址。 整形变量n,表示学生人数; 整形变量m,表示考试科目。 图4-5void ReadScore(STU *head,int n,int m) STU *p; int i,k; for(p=head;psum1=0; for(i=0;isum1=p-sum1+p-scorei; p-average1=(float)p-sum1/n; k=0; i=1; if(p-scoreip-scorek) k=i; p-max=p-scorei; 定义结构体指针p,p是指向考试科目的外循环,定义i,i是指向学生人数的内循环。利用这两个循环,对各科成绩进行统计与比较,计算出各科成绩的总分
19、,继而计算出各科成绩的平均分,以及各科成绩的最高分和最低分。五、遇到的问题和解决方法1、For(i=0;in;i+)经常写成For(i=0,in,i+),导致运行错误。解决方法:编程时候需要仔细和耐心。并记住易错的地方,输入时不应该太快 然后仔细检查。2. 对一些课本中的知识不熟悉,导致刚开始编程的时候很难下手。 解决方法:重新掌握不熟悉的知识并收集相关资料,通过课程设计,我们要熟练的掌握C语言的算法、语言、函数的调用、循环的使用、数组的运用等。 3、由于马虎经常漏掉、;等等。 解决方法:时刻提醒自己认真仔细一点,病记住易错、易漏的地方,而且要仔细认真检查。 4、有些程序太过复杂,违反了kis
20、s规则。 解决方法:要深刻理解程序的意义,化繁为简,化难为易5、计算机应用不熟练,截图是我遇到的最大的问题。 解决方法:提高计算机的操作技术,使快而有效的完成任务。 六、课程设计总结一周的课程设计很快结束了,一开始拿起题目时什么都不懂,真不知道从何下手到后来觉得它很有趣,很想去做并希望能把它做得更好。刚开始错误实在太多,改错误真的很头疼,不过当经过一次又一次的调试后,终于弄好了,那时却是特别的高兴。总的来说就是这次的课程让我学了不少东西,也让我对编程更有兴趣,虽然学的不是很好,不过以后会努力的。课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生
21、实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握计算机开发技术是十分重要的。总的来说,本次课程设计,实在是受益匪浅。虽然课程设计只有短短的几天,但是我发现我学到的知识比整整一个学期学到的都多。理论和实践的相结合是学习最有效的方法。在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,一定把以前所学过的知识重新温故。回顾起此次课程设计,至今我仍感慨颇多,的确,从从拿到题目到完成整个编程,从理论到实践,在整整一个星期的日子里,可以学到很多很多的的东西,同时不
22、仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。本次C 语言的课程设计让我对C 语言的学习又有了更深入的了解,也让我更深刻地领悟到了“实践出真理”这个道理,在上机实践过程中学到的知识远远超过了在课堂上十几周学到的,学校组织的这次实习让我们这些实践知识匮乏的大学生增添了许多社会经验,为我们将来走上工作岗位其了不小的铺垫作用。本次课程设计中遇到了很多以前没有遇到过的问题,也曾想
23、要放弃,但看到那些同学都在那认真的写程序,给了我继续的信心。在同学的帮助下,我顺利的结束了本次课程设计,让我知道原来凭借自己努力取得的成功会让自己这么欣慰,也让我知道了友谊和团结的重要性。七、参考文献1.Visual C+课程设计案例精编 作者:夏崇镨、任海军、余健2.C语言程序设计 作者谭浩强3.实用C语言程序设计教程 李金祥等编 中国电力出版社 20104.网址1: 5.网址2: 附录(源程序代码)#include#include#include#include#define STU_NUM 10#define COURSE_NUM 4struct student int number;
24、char name10; int score4; int sum; int sum1; int max; int min; float average; float average1;typedef struct student STU;int AppendScore(STU *head,int n,int m) int j; STU *p; char ch; for(p=head+n;pnumber); printf(Input name:); scanf(%s,p-name); for(j=0;jscore+j); n+; printf(Do you want to append a ne
25、w node(Y/N)?); scanf(%c,&ch); if(ch=n|ch=N) return n; void PrintScore(STU *head,int n,int m) STU *p; int i; char str100=0,temp4; strcat(str,Number name); for(i=1;i=m;i+) strcat(str,Score); itoa(i,temp,10); strcat(str, ); strcat(str, average); printf(%s,str); for(p=head;pnumber,p-name); for(i=0;iscor
26、ei); printf(%9.2fn,p-average); void TotalScore(STU *head,int n,int m) STU *p; int i; for(p=head;psum=0; for(i=0;isum=p-sum+p-scorei; p-average=(float)p-sum/m; void SortScore(STU *head,int n) int i,j,k; STU temp; for(i=0;in-1;i+) k=i; for(j=i;javerage(head+k)-average) k=j; if(k!=i) temp=*(head+k); *(
27、head+k)=*(head+i); *(head+i)=temp; void ReadScore(STU *head,int n,int m) STU *p; int i,k; for(p=head;psum1=0; for(i=0;isum1=p-sum1+p-scorei; p-average1=(float)p-sum1/n; k=0; i=1; if(p-scoreip-scorek) k=i; p-max=p-scorei; int SearchName(STU *head,char name,int n) int i; for(i=0;inumber=name) return i
28、; return -1;void SearchScore(STU *head,int n,int m) int name,findNo; printf(please Input the name you want to search:); scanf(%c,&name); findNo=SearchName(head,name,n); if(findNo=-1) printf(nNot found!n); else PrintScore(head+findNo,1,m); char Menu(void) char ch; printf(#=#n); printf(# #n); printf(#
29、-#n); printf(# copyright 2011-1-12 #n); printf(#=#n); printf(# 1.Zeng jia xue sheng cheng ji #n); printf(# 2.Xian shi xue sheng cheng ji #n); printf(# 3.Cha xun xue sheng cheng ji #n); printf(# 4.Xue sheng cheng ji pai xu #n); printf(# 5.Xue sheng cheng ji bi jiao #n); printf(# 0.Tui chu xi tong #n)
30、; printf(#=#n); printf(qing an 0-5 xuanzhe cai dan xiang:); scanf( %c, &ch); return ch;main() char ch; int n=0,m=4; STU stuSTU_NUM; while(1) ch=Menu(); switch(ch) case1:n=AppendScore(stu,n,m); TotalScore(stu,n,m); break; case2:PrintScore(stu,n,m); break; case3:SearchScore(stu,n,m); break; case4:SortScore(stu,n); printf(nSorted resultn); PrintScore(stu,n,m); break; case5:ReadScore(stu,n,m); break; case0:exit(0); printf(End of program!); break; default:printf(Input error!); break;