课程设计报告课程名称C语言程序设计课题名称班级成绩管理系统专业电子信息班级0802班学号32姓名董霄宇指导教师肖伟平罗敬肖彬2009年6月19日2湖南工程学院课程设计任务书课程名称C语言程序设计课题班级成绩管理系统专业班级电子信息0802班学生姓名董霄宇学号32指导老师肖伟平罗敬肖彬审批任务书下达日期2009年6月19日任务完成日期2009年6月30日3一、设计内容与设计要求1.设计内容:班级成绩管理系统设计涉及的知识点:①掌握并熟练运用C语言的基本数据类型与各种表达式,程序的流程控制语句;②掌握数组的基本概念。熟练掌握一维数组、二维数组的应用、掌握字符数组与字符串的关系以及字符串的简单处理。③掌握函数的定义,函数的返回值,函数的调用,函数的形式参数和实际参数之间的关系;掌握变量的作用域与生存期,了解函数的作用域。④掌握结构的概念,结构类型的定义,结构变量的定义和初始化,结构成员的表示,结构的赋值含义,结构与指针、函数的关系。⑤掌握文件、文件类型指针的基本概念,熟练掌握文件的打开与关闭以及文件的建立、读写等有关操作。2.设计要求:1)用C语言实现系统;利用结构体数组实现班级成绩的数据结构设计;系统的各个功能模块要求用函数的形式实现;应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观。2)建立一个班级学生成绩数据库,文件名为bjcjk.txt,并从该文件中读取数据;3)班级成绩管理系统应能提供以下功能:(1)主菜单界面设计。通过提示用户输入一个数字选项,调用相应的功能函数。(2)成绩显示:完成班级全部学生成绩的显示;(3)成绩录入:完成新增一个学生的成绩记录,并重新计算学生的平均成绩;(4)成绩修改:按学号修改一个学生的学习成绩,并重新计算学生的平均成绩;(5)成绩排序:按学生平均成绩进行排序;(6)成绩统计:①统计并显示每门课程的平均成绩;②统计并显示超过某门课程平均分的人数以及学生记录;44)说明:(1)要求将修改后的数据写入到一个新的数据文件nwejck.txt中。(2)对系统有兴趣的同学可以在实现基本要求的基础上,完善系统的其它功能。5)班级成绩管理系统采用一个结构体数组,学生成绩数据库结构如下:intxh/*学号*/charname[10]/*姓名*/intyy/*英语*/intmat/*数学*/intjsj/*计算机*/intwl/*物理*/intzf/*总分*/注意:学号不重复,且数据库应有10条或以上的记录。6)要求:⑴要求每个学生必须独立思考,认真并按时完成本课程设计所包含的所有内容;⑵要求学生必须按照课程设计报告的完整格式说明设计内容,设计任务分析过程和算法,给出程序流程图和全部源程序;⑶设计报告的完整格式应包括以下部分的内容:①设计总体思路;②程序及各个模块说明;③总体模块框图;④各个程序模块说明;⑤程序流程图;⑥程序清单;⑦课程设计总结与体会(不少于400字)。5⑷上机时要求必到,设计完成,必须演示程序,答辩并提交设计报告。二、进度安排第18周星期五8:00——12:00星期日15:00——18:00第19周星期一19:00——22:00星期三8:00——12:00星期四14:30——17:30附:课程设计报告装订顺序:封面、任务书、目录、正文、评分、附件(A4大小的图纸及程序清单)。正文的格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。正文的内容:一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现(至少要有一个主要模块的流程图);四、程序调试;五、总结;六、附件(所有程序的原代码,要求对程序写出必要的注释)。正文总字数要求在5000字以上(不含程序原代码)。6目录一.需求分析---------------------------------------7(1)程序功能--------------------------------------7(2)输入输出要求----------------------------------7二.总体设计----------------------------------------7三.模块功能详细设计分析----------------------------8四.调试分析及体会----------------------------------9五.部分运行界面截取图------------------------------11六.流程图-----------------------------------------17七.心得体会---------------------------------------18八..附件------------------------------------------201.源程序-----------------------------------------202.参考书目---------------------------------------27九.评分表------------------------------------------287一.需要分析:(1)程序功能该程序是一个实现对班级成绩管理的系统。包括显示,添加,删除,修改,排序,查找,统计及退出等功能。输入学生的学号、姓名及成绩对其进行存储,在存储后可以对学生的成绩按学号和姓名进行查寻。该系统具有存贮学生数据,按学号、姓名查询,列出学生成绩和统计功能。系统输入数据后,将在当前目录中建立一个名为stu.dat文件,用于保存输入的数据。(2)输入输出要求学号输入只能用数字输入,姓名输入只能用字符,且最长为10个字符。此程序在BC2.0下运行通过。二.总体设计:(1)抽象数据类型定义学生成绩数据库结构:数据库{学号:int()姓名:char(10)英语:int()数学:int()计算机:int()物理:int()总分:int()平均分:flaot()名次:int()}(2)程序的模块及其功能和关系该程序由9个模块组成,由主函数调用计算,显示,添加,删除,修改,排序,查找,统计8及其退出等模块.下面将介绍每个模块的功能及与他们之间的关系.模块图如下:(3)主函数分析主函数主要由一个switch()开关语句构成,开关语句在一个无限循环体里,开关语句里的开关是调用主菜单显示函数的返回值。除最后一个语句是强制结束整个程序的语句外,其它case都是调用相应的函数,完成相应的功能。各调用情况如下:case1:调用显示函数case2:调用追加函数、case3:调用修改函数、case4:调用删除函数、case5:调用查询函数、case6:调用排序函数、case7:调用退出函数,主函数将保证每调用完一个函数之后又调用显示函数,然后按任意键又重新回到主菜单,以便用户进行下一次的操作。三.模块功能详细设计分析1班级成绩显示模块:VoidDisp()这个模块的主要功能是用来计算每个人的平均分并显示班级中所有人各科相对应的成绩,平均分,总分及名次。在主菜单中选择“1”就可以进入这个模块界面。这个删除模块查询模块退出模块修改模块成绩统计Main()主菜单模块添加模块9功能的实现是用了一个for循环来完成的。通过这个循环printf()函数依次输出每一个人的学号,姓名,各科成绩,平均分,总分,名次。最后在界面上显示所有人的信息因此我们可以浏览所有人的信息。〈2〉班级成绩追加模块:VoidAppe()本模块的主要功能是添加一个人的记录。在主菜单中键入“2”,就进入次模块。由多个for循环控制。在for循环中包括printf和scanf函数,依照提示依次输入:学号,姓名,各科成绩。再调用显示函数Disp()。3班级成绩修改模块:voidModi()本模块的主要功能是按学号查找相应的记录,然后系统判断学号是否存在,如果不存在将提示用户,如果存在再根据提示语句,用户可以按要求修改记录中除学号,姓名以外的指定内容,可按照用户要求修改对应成绩,可由用户自行控制修改人数,并重新显示。在主菜单中键入“3”就可以进入这个模块。此模块是通过for循环语句控制实现的。如果输入的信息不存在系统就提示信息提醒。4班级成绩删除模块:VoidDele()此模块的主要功能是用来删除班级成绩管理中的信息。可按指定学号,姓名删除记录并重新显示。在主菜单中选择输入“4”,就可以进入这个模块的界面。这个模块的设计是通过if和for循环语句控制实现的。如果输入的信息不存在系统就提示信息提醒。5.班级成绩查询模块:voidQuery()这个模块可以按学号查询;然后系统判断所输入信息是否存在,如果存在将显示该人的各科成绩,平均分,总分及名次。这个模块是通过if和for循环语句控制实现的。如果输入的信息不存在系统就提示信息提醒。6班级成绩排序模块:VoidSort()该模块先由计算模块算出每个人的平均分及名次,再通过对名次的排序。运用双重for循环嵌套及if语句进行排序。7班级成绩退出模块:voidQuit()任意键退出程序.四.程序调试分析1.在显示函数里应该含有计算函数,否则显示的信息中平均分,总分及名次都为零。2.在输入函数中设了一个无限循环,可以输入无数个学生的成绩信息,但是不方便退出,后来用了一个输入函数输入要输入的学生信息的个数,在用循环控制,这样就方便多了。103.输入太多个学生的成绩时,屏幕显示不能控制为一页一页显示,所以为了方便起见,不要输入太多记录。4.在程序调试的时候,出现函数名变成未定义字符,经过分析后发现是没有在程序的前面些程序包含的语句,加上前面的头文件包含后就没有这个错误了.5.在程序中需要输入的项太多,故在每个输入项前应加一个提示输入项,提示用户输入正确的信息。11五.部分运行界面截取图1、显示模块运行截面图运行程序菜单框图中选则1,按回车。运行结果如下图:122、追加模块运行截面图运行程序菜单框图中选则2,按回车.按照提示输入信息,运行结果如下图:133、修改模块运行截面图运行程序菜单框图中选则3,按回车.按照提示输入信息,结果如图:144、删除模块运行截面图运行程序菜单框图中选则4,按回车.按照提示输入信息,运行结果如下图:155、查询模块运行截面图运行程序菜单框图中选则5,按回车.按照提示输入信息,运行结果如下图166、排序模块运行截面图运行程序菜单框图中选则6,按回车.按照提示输入信息,运行结果如下图17六、流程图1、总体设计流程图主函数流程图:菜单界面输入选择值menu-selcet()执行显示函数执行追加函数执行修改函数执行删除函数执行查询函数执行退出函数读入数据创建新数据库结束执行排序函数18七.心得体会课程设计这一周感受颇深。我想说实践是检验真理的唯一标准。尤其对于C语言这门对动手能力要求很高的学科。有很多程序你编了也检查了但也许就是发现不了错误,但只要一上机操作隐含的问题就全面暴露出来了。C语言课程设计是一门细致的活。正如熟话所说的:一招不慎,满盘皆输。一个错误的存在整个程序就运行不出结果。对于基础不太牢固的我来真是一个考验,同时有时一个挑战。它需要耐心、仔细和坚持。说句老实话正如肖老师预言的在课程设计的前两天我是在失望、痛苦、焦虑和茫然中度过。一开始我编的程序存在很多问题,这些问题使我头都大了。就拿建立数据库来说我就建了不下十个。真的是无从下手也不知所措!怎么做怎么错,失败全面打击着我。万事开头难,课程设计是前所未有的难。痛定思痛,我强迫自己冷静下来:先弄懂设计思路从整体上对课程设计有一个清晰的了解,接下来就开始着手模块的设计。由于之前受了太多打击,接下来显示模块的成功出世给了我极大的安慰。再接下来的追加、删除、修改和查询模块就顺手多了,因为我找到了一点自信。C语言程序设计既是一个整体,同是各个模块之间相互独立又紧密联系。因为有规律可循,后四个模块基本上就是switch、if-else和for语句的嵌套使用,当然还有基本输入输出函数的大量使用。找到