班级成绩管理系统.docx
《班级成绩管理系统.docx》由会员分享,可在线阅读,更多相关《班级成绩管理系统.docx(33页珍藏版)》请在冰豆网上搜索。
班级成绩管理系统
课程设计报告
课程名称C语言程序设计
课题名称班级成绩管理系统
专业机械设计制造及其自动化
班级0983班
学号************
姓名
指导教师王颖
20010年6月30日
湖南工程学院
课程设计任务书
课程名称C语言程序设计
课题班级成绩管理系统
专业班级机械设计0983
学生姓名
学号************
指导老师王颖
审批
任务书下达日期年月日
任务完成日期年月日
第一章绪论--------------------------------------------------------
第二章需求分析--------------------------------------------------
2.1程序的功能------------------------------------------
2.2输入输出的要求------------------------------------
第三章概要设计--------------------------------------------------
3.1程序的模块组成-------------------------------------
3.2学生信息结构数组----------------------------------
3.3各个程序的功能介绍-------------------------------
第四章详细设计--------------------------------------------------
4.1总流程图----------------------------------------------
4.2统计函数流程图-------------------------------------
第五章测试--------------------------------------------------------
5.1系统调试----------------------------------------------
5.2结果分析----------------------------------------------
第六章使用说明--------------------------------------------------
第七章总结--------------------------------------------------------
附录---------------------------------------------------------------------
评分表------------------------------------------------------------------
第一章:
绪论
一.课题描述:
《C语言程序设计》课程设计是对学生的一种全面综合训练,它包括问题分析,总体结构设计,用户界面设计,程序设计基本技能和技巧,多人合作,以至一整套软件工作规范的训练和科学作风的培养。
是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。
通常,课程设计的课题比平时的习题复杂得多,也更接近实际。
课程设计着眼于与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,培养软件工作所需要的动手能力;另一方面,能使书上的知识变“活”,使学生更好地深化理解和灵活掌握教学内容。
为了达到上述目的,本课程设计安排了八个设计课题,训练重点在于基本的程序设计方法和分析问题的能力,而不强调面面俱到。
学生可任选其中一题进行设计,设计完毕写出课程设计报告,用A4纸打印成册;并将课程设计报告与源程序存盘。
学习委员将课程设计报告与磁盘收齐后交指导老师。
二.课程设计内容
⑴问题描述:
一个有N个学生的班级,每个学生有M门课程。
该系统实现对班级成绩的录入、显示、修改、排序、保存等操作的管理。
⑵功能要求:
①、本系统采用一个结构体数组,每个数据的结构应当包括:
学号、姓名、M门课程名称。
②、本系统显示这样的菜单:
请选择系统功能项:
a、成绩录入
b、成绩显示
c、成绩保存
d、成绩排序
e、成绩修改(要求先输入密码)
f、成绩统计
Ⅰ、显示每门课程成绩最高的学生的基本信息
Ⅱ、显示每门课程的平均成绩
g、退出系统
③、执行一个具体的功能之后,程序将重新显示菜单。
④、将学生成绩保存到文件中。
⑶算法提示:
①、数据结构:
结构体类型数组。
②、数据库结构:
下表构成该系统的基本数据库。
姓名
学号
课程名称1
课程名称2
●●●●●●
char
Char
float
float
⑷测试数据:
学生人数N=10
课程门数M=4
课程名:
数学、语文、英语、政治
⑸其它
该系统有兴趣的同学可以在实现上述基本功能后,完善系统的其它功能。
三.课程设计要求及分组安排。
1.课程设计要求
1).设计正确,方案合理。
2).界面友好,使用方便。
3).程序精炼,结构清晰。
4).设计报告5000字以上,含程序设计说明、用户使用说明,系统的功能框图、流程图、源程序清单等。
5).上机演示。
6).每个学生在规定的时间内独自完成相关课题的C源程序编写,调整和运行。
源程序及编译生成各文件均保存在软盘中;
7).实际操作过程中遇到的问题及解决方法:
设计总结及心得体会.
8).按任务书的要求,按附录的要求编写《课程设计报告》(Word文档格式)。
并用A4的复印纸打印并装订。
2.分组及安排
所选题目(共8题)根据学生学号顺序选课题号,四个人一道题,相邻四个学号的同学选同一道题,32号以后的同学按学号每人选一题。
如你的学号为15,则所选题目号为:
第四题。
3.成绩评定
程序设计方案是否合理;程序设计是否正确;调试结果;设计说明书的质量高低;答辩时回答问题情况;课程设计周表现情况;总评成绩记入“课程设计成绩评分表”。
四.进度安排
第一周星期四:
熟悉这次课程设计的目的和课程设计的要求,通过图书馆或因特网查找与帧封装课题相关的资料,明确了解一些要用到的文件和调用函数等,然后再把整个程序设计的总体框架、流程图等构思出来,并进行书面程序设计。
第二周星期一:
机房上机,在计算机上编辑源程序。
调试程序,在改正错误的同时不断完善程序,使源代码满足课程设计的要求和实现课程设计的基本功能。
第二周星期二:
寻找资料完善和调试程序。
第二周星期三:
继续修改、编辑、调试程序。
不断改正错误后,要保证程序能成功编译成目标文件,链接成功成为可执行文件,再运行能显示出“帧封装已完成”的信息,这样才能算已经完成了本课题的基本功能。
之后,开始撰写课程设计报告。
第二周星期四:
上机调试,完善程序。
第二周星期五:
答辩。
第二周星期六—星期天:
撰写课程设计报告。
第二章:
系统需求分析
一.摘要
1.开发系统的名称:
班级成绩管理系统。
2.开发系统的目标:
开发出一个操作简便、界面友好、灵活实用、安全可靠的学生成绩管理系统。
该系统的开发可以提高班级对学生成绩的统计分析效率、减轻教务管理人员对学生成绩管理和统计的负担、提高班级对学生成绩的规范化管理。
结合班级管理的实际需要,实现对学生成绩等数据进行有效的管理,提供查询分析功能等。
二.成绩管理系统的背景分析:
当今时代是飞速发展的信息时代,在各行各业中离不开信息处理,正是计算机被广泛应用于信息管理系统的环境.计算机的最大好处在于利用它能够进行信息管理.使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性.尤其对于复杂的信息管理,计算机能够充分发挥它的优越性.
随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能在人类社会的各个领域并发挥着越来越重要的作用.学生成绩管理系统提供了强大的学生成绩管理管理功能,方便系统管理员对学生成绩等信息的添加,修改,删除,查询,留言等操作,同时一样的方面学生对自己各科成绩查询,学习的交流.本系统是班级教学管理的一个功能模块,可以快速方便地对学生成绩进行管理、输入、显示、查询、和统计等功能。
二.开发学生成绩管理的必要性:
开发一个学生成绩管理系统,采用计化.现在我国的大中专院校的学生成绩档案管理水平普遍都不是很高,有的还停留在全用纸介质基础上,这种管理方式已不能适应时代的发展,社会的需求,因为它浪费了大量的人力物力,也存在着许多不足的因素.在今天信息时代这种传统的管理方法必然会被计算机为基础的信息管理系统所代替.一个高效的学生成绩管理系统可以存储历届的学生成绩档案,不需要大量的人力,只需要几名专门录入员即可操作系统,节省大量人力,可以迅速查到所需信息,高效,安全,学生在能方便的查看自己的成绩.算机对学生成绩进行管理,进一步提高了办学效益和现代化水平.为广大教师和学生提高工作效率,实现学生成绩信息管理工作流程的系统化,规范化和自动
三.系统的功能需求:
1.系统需要实现的功能包括以下几个方面:
1.1学生查询功能:
为了方便学生查找成绩等信息,将所有信息按照需要进行分类。
这样学生就能很方便的找到自己所需要的信息。
1.2管理员查询功能:
管理员可以通过条件选择查询所有信息,并进行排序。
1.3添加功能:
管理员可以输入学生成绩等相关信息。
1.4修改功能:
输入密码后管理员可以对数据库中的信息进行修改,系统能够通过管理员的给出的条件查找出所要修改的信息,对修改后的信息进行保存。
1.5统计功能:
管理员可以通过此功能对信息进行统计。
四.系统的数据需求
1.通过查阅资料以及对程序的理解,总结出用户对数据的需求如下:
1)学生信息:
包括:
学号、学生姓名等信息。
2)课程信息:
包括:
课程编号、课程名称等。
3)基本数据维护功能:
1.录入学生的成绩信息。
2.显示学生的成绩信息。
3.保存学生的成绩信息。
4.排序学生的成绩信息。
5.统计学生的成绩信息。
五.系统的性能分析
1.系统的高速性、稳定性、安全性。
2.系统人机界面友好,易学易用。
3.系统维护成本较低。
六.输入输出要求:
在菜单选项中1-7,选择功能项,进行对应选项的函数调用.
1)、每一条记录包括一个学生的学号、姓名、4门成绩、平均成绩;
2)输入功能:
输入学生的基本信息存入磁盘文件中;
3)、显示功能:
输出已存盘的学生信息;
4)、排序功能:
输出用户所要选择科目的提问,输入科目后输出该科目一排好的学生成绩,并按学生平均成绩进行排序;
6)、插入功能:
插入新的信息;
7)修改功能,输入密码.错误输出是否继续输入密码.正确则逐个输出是否想要修改学生信息;
8)、保存功能:
将学生记录保存在任何自定义的文件中;
9)、退出功能:
有一个清晰美观界面来调用各个功能。
七.体框架结构
八.学生成绩业务管理图
图3
第三章:
系统概要设计
1.程序的模块组成
第一个模块:
先定义好一些必要的全局变量以及调用的函数和结构体数组。
第二个模块:
设计一个菜单函数menu();实现能供用户选择功能项。
第三个模块:
用enter()函数实现成绩的输入。
第四个模块:
用save()函数实现成绩的保存。
第五个模块:
用print()函数实现成绩输出。
第六个模块:
用cort()函数实现成绩排序功能。
第七个模块:
用modify()函数实现成绩修改功能。
第八个模块:
用count()函数实现成绩统计功能。
main函数实现总的控制台界面,调用voidenter(),voidcort(),voidmodify(),voidcount(),print(),voidsave(),函数实现各种用户功能要求。
2.学生信息结构数组
structstu
{
charname[20];
intnum;
intscore[M];
};
3.各个程序的主要功能介绍:
1:
为便于用户使用,先定义一个常数N表示人数,学生信息的结构体数组,以及调用功能项的函数。
2:
voidmain():
利用swithch()实现各函数的调用,系统根据输入的数字选项来调用相应的函数。
3:
voidEnter():
用来执行学生成绩记录的输入。
4:
voidPrint():
显示所有学生的信息。
5:
voidsave():
这是一个不返回值的有参函数,形参为“链表头的指针”,可以把学生记录保存在电脑上由自己任意命名的二进制文件
6:
voidCort():
要排序的科目的序号,用选择排序法实现函数学生成绩的排序。
7:
voidModify():
需要通过密码验证,进入菜单后可实现对学生资料的修改.
8:
voidCount()可以显示学生的平均成绩以及科目最高分.
第四章:
系统详细设计
一.整个系统除了主函数外,另外还有7个函数,实现六大功能:
输入功能、显示功能、排序功能、修改功能、删除功能、保存功能。
各个函数的详细设计说明分别如下:
1、主函数main()
利用swithch()实现各函数的调用,系统根据输入的数字选项来调用相应的函数。
主要实现“功能选择”的界面,在这个界面里有显示系统的九大功能,根据每个功能前面的序号进行选择。
等执行完每一个函数功能后,按任一键回到主界面也要通过这个函数来实现!
2、voidEnter()函数
用scanf依次输入学生信息,在输入多门成绩成绩时,用for循环来实现,结尾调用save()函数保存。
3、voidPrint()函数
为了使界面美观对学生成绩用%5d输出,且用换行实现,学生信
息整齐排列。
4、voidCort()函数
先定义choice1,输出想要排序的科目的序号,用选择排序法实
现函数学生成绩的排序。
5、voidModify()函数
先定义好一个密码以及flag=0;如果输入的密码错误则flag=1,用do..while实现是否重新输入密码,密码准确后调用modi()函数,实现修改功能
6、voidCount()函数
用menu1函数实现一个菜单功能。
用switch实现,用户选择想执
行的功能,从而调用Show1()Show2()Show3();
1.总流程图
2.统计函数流程图
第五章:
测试
1.系统调试
1:
在enter()函数中对学生成绩的输入用scanf(“%d”,s);当输入一门成绩后就会跳回,使接下来的程序无法运行,改为for(j=1;j<=M;j++)scanf(“%d”,&s[i].score[j]);将错误解决.
2:
在enter函数中,输入姓名用scanf(“%s”,&s[i].name);错误,在scanf函数中的输入项如果是字符数组名代表该数组的起始地址.则应改为scanf(“%d”,s[i].name);
3:
在运行print()函数时,第四门课显示出来的分数并非输入项:
错误,在定义时将j=1,应改为j=0。
4:
学生成绩定义为浮点型,但与scanf连接不起来。
是由于所使用的系统不支持该项操作。
5:
在count()函数中,show3();输出的人数比实际的多一人,因为b++:
在循环结束之后会自增一次,则比实际的大一。
2.结果分析
1:
为了使调试程序简便,先定义班级的人数N为3人,编译连接后,显示出菜单桌面,先输入学生成绩保存起来.
2:
选择2.在用循环输出学生的基本信息的最后加printf(“\n”);,则输出学生的基本信息是每行显示一位同学的信息.
3:
选择5.修改函数中用getchar()来覆盖原有的,则就可输出修改的信息.
4:
选择6.用一个选择菜单
intmenu1()
{intchoice1;
printf("\n*******\n");
printf("1:
xianshimeikechengjizuigaodexueshengxinxi\n");
printf("2:
xianshimeikepingjunchengji\n");
printf("3:
xianshichaogoupingjunchengjiderenshu\n");
printf("4:
quit\n");
printf("********\n");
选择<1>.输入选择的科目用标记法找出成绩最高的的学生则输出其基本信息.
选择<2>.用for循环,先求出了每门的总成绩再除以人数的到平均成绩用一个数组接收.再用循环则的到结果.
选择<3>.先定义了一个数组b[M].用循环如果出现超过平均成绩的人就自增一次,接收到b[M]中,用循环输出b[M]则得到每门超过平均成绩的人数.
5:
在modify()函数中,当输入一个错误的密码时会出现死循环,因为跳出的位置错误了。
以下是课程设计中的错误总结和分析:
①变量是程序中不可缺少的一部分,要谨记先定义后使用。
②输入输出类型要一致。
③“;”是C语言的语句结束语,不可省略。
④{}的互相匹配。
⑤调用函数必先声明。
⑥形式参数和实际参数必须个数相等,类型相同。
第六章:
该系统使用说明
1.运行时进入主界面,系统根据输入的数字选项来调用相应的函数。
主要实现“功能选择”的界面,在这个界面里有显示系统的七大功能,根据每个功能前面的序号进行选择。
以下为该介面;
2.进行学生成绩输入时按照提示选择1键,录入第一个学员信息。
完成后屏幕下方出现提示“是否继续输入?
(Y\N)”,此时,按键盘上的N键则为结束输入,返回主菜单;若按Y键,则继续输入第二个学员信息,依此类推。
3.当要求显示学生成绩时输入2键,按下回车键即出现以下界面图中所显示的即为刚刚输入的学生成绩:
3,当执行对学生成绩进行排序时,输入4键,会出现一个选择界面让所要排序的科目当输入一个数字时及执行对该科目成绩的排序命令,具体如下截图:
4.改时需要进行密码验证当密码错误时不能进行该操作,只有输入正确的密码才能运行,运行结果如下图:
5.当需要进行成绩统计时,输入数字6,按回车即可出现一个选择界面:
输入数字1即显示每科成绩最高的学生信息:
输入数字2即显示每科的平均成绩;输入数字3则退出该功能的运行.截图如下:
第七章:
总结
不经一番寒彻骨,哪得梅花扑鼻香。
一周的C语言课程设计已接近尾声了,现在回想起来真是五味俱全,从开
始的懵懂无知到现在做出一本挺有厚度的资料,我不但实践了课本的知识,还编出小程序,虽然很多人帮了我的忙,仍旧感觉自己对C语言有了深入的了解,还是有所成长,有所收获,在实践中,自己编程常会犯错误,并总结一些克服缺点的方法。
深刻体会到程序设计中最重要的一部分不是编写源程序,而是调试过程。
只有经过调试程序,我们才能掌握正确的语法知识及把问题的解决方法用程序语言来表达。
在这段时间里,我门匆匆忙忙为了它准备了很多,其中不免有叹息声,但是总的来说让我么学到了很多,也懂得了很多,不仅在知识方面,还在有人的生活态度,目标上。
这次的C语言课程设计充分展示了C的魅力,用一些小小的实现合成一个系统从而融入到生活中解决实际问题。
同时也教会了我应站在用户的角度去设计程序。
在此次设计过程中必不可少的出现了很多问题,整体规划,模块与模块之间的调用与划分,标识符的使用。
单词的拼写错误,结构体数组的使用,正确的使用循环的限制条件….。
这些问题大多是因为平时上课很少听讲的原因,以至于很多概念混淆不清。
这次的课程设计让我看到自己对C语言研究地少之又少。
这次的班级成绩管理系统仍旧存在着不足。
记得开始课设的第一天,我糊里糊涂地在机房呆了一个上午,对老师要求做的课程设计束手无策,上网搜了几个,但觉得没点意思,最后还是没有用。
但相对于别人的做的系统,我的好像简单多了。
但后来还是不得不去看书,因为很多东西还牛毛都不知道。
比如,做这个课程设计时候,最好使用链表,而链表我们还没有深入去熟悉它,在说这个课程设计牵涉到前面我们学过的所有内容,如,一些基本函数的运用,函数的调用及指针,结构体。
内容多而复杂,如果没有对教材有个很好的了解掌握,是不可能篇好这个程序的。
我还在把书本重新温习了一遍,对照程序一一翻书,试图找到一中解释来说明程序当中一些函数的作用和结构。
接下来的一段时间里对这段程序进行了修改,经过东凑西凑,拼拼剪剪,终于可以在电脑上运行了,但是它的功能不是很完善,需要进一步完善。
后来怀着疑问去询问老师才发现其实很多问题都想比较简单的,比如在运行程序时发现无论我怎么输入成绩,第四门课的成绩都与我输入的分数不同,自己也尝试用很多方法去解决,最终不了了之。
同学看过以后告诉我是我在定义的时候把初始值定义错了。
在修该以后,再次运行便没看见以前的错误了。
后来有用这种方法把后面的两个警告解决了一个。
在这个过程中,也试图自己独立完成这个课程,偶尔发现书本上第11章节里面,有介绍链表的使用,而且书本上关于这个课程的一些基本函数功能在本章节都有说明,比如,链表的创建,节点的插入,删除,一些基本信息的修改都有。
最终完成的课程的设计,马马虎虎的,完成的,但是还是受益匪浅。
其中老
师与同学的教导让我刻苦铭心。
不管其结果怎么样,但至少这个过程,让我们明白了,懂得了很多。
虽然有点挫折很艰辛在里面,但是那都是短暂的,美丽的,它教会了我们不经过自己的努力,是达不到预期的结果的,不经过自己的实践操作,是体验不到其中的美妙的。
不仅如此,还给了我们一个警告,对待学习不可马马虎虎,否则完成不了应有的任务,得不到理想的结果,半途而废是失败的首要原因,不要什么事情都觉得满不在乎,踏踏实实的学习,踏踏实实的工作,拥有积极乐观的态度去应对一切挫折,最终会让你走想成功的前沿。
因为:
“胜利永远是属于永不放弃的人!
附录
1.参考文献
《C程序设计(第三版)》谭浩强著清华大学出版社
《C语言程序设计实用指南》谭浩强著清华大学出版社
《C语言大学实用教程学习指导》苏小红著电子工业出版社
2.源代码
#include/*I/O函数*/
#include/*字符串函数*/
#defineM4/*课程数*/
#defineNUM3/*人数*/
#defineNULL0
#include
#include
intavar[M];
structstu
{
charname[20];
intnum;
intscore[M];
};
voidenter(structstus[],intn);/*进入*/
voidprint(structstus[],intn);/*输入文件*/
v