淮 海 工 学 院 计算机工程学院
课程设计报告
设计名称: 学生成绩排名系统 姓 名: 学 号: 专业班级: G计算机111 系 (院): 计算机工程学院计算机科学与技术系 设计时间: 2012.6.21-2012.6.27
设计地点:计算机工程学院机房、教室、学生宿舍
指导教师评语: 成绩: 签名: 年 月 日 C++课程设计报告 第 2 页,共 27 页
1.课程设计目的 本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完《C++程序设计》课程后进行的一次全面的综合练习。本课程设计的目的和任务:(1)巩固和加深学生对C++课程的基本知识的理解和掌握;(2)掌握C++编程和程序调试的基本技能;(3)利用C++进行简单软件设计的基本思路和方法;(4)提高运用C++解决实际问题的能力;(5)掌握书写程序设计说明文档的能力。 本次课程设计利用《C++程序设计》课程中所学到的编程知识和编程技巧,完成具有一定难度和工作量的程序设计题目,帮助学生掌握编程、调试的基本技能,使学生能够完成所布置的任务。 2.课程设计任务与要求: 要求: 1、分析课程设计题目的要求 2、写出详细设计说明 3、编写程序代码,调试程序使其能正确运行 4、设计完成的软件要便于操作和使用 5、设计完成后提交课程设计报告。 课程设计报告内容包括:课程设计目的、设计任务与要求、设计说明书、设计成果和设计心得五个部分,具体要求见设计报告模板。 6、总结: 调试分析过程描述:包括测试数据、测试输出结果以及对程序调试过程中存在问题的思考(列出主要问题的出错现象、出错原因、解决方法及效果等)包括课程设计过程中的学习体会与收获、对C++和本次课程设计的认识等内容.; 任务: 设计一个学生成绩排名系统,该系统的主要功能如下: 1) 具备对成绩的管理功能(添加、删除、排序) 2) 具备对成绩的统计功能(最高分,最低分,平均分,及格率等) 3) 具备按学号、姓名、或课程名查询成绩的功能。 4)学生成绩应该保存在文件中。 备注:成绩记录以下信息:班级,学号,姓名,课程名,成绩(百分制)。可以用能表示学生成绩的结构体数组存储数据。 3.课程设计说明书 C++课程设计报告 第 3 页,共 27 页 ⑴软件概要设计 一、模块说明 本次程序设计中我设计了十个模块,分别是:学生信息、查询成绩、添加信息、删除信息、保存信息、信息排序、查询单科成绩最高分、查询单科成绩最低分、查询单科成绩及格率、查询单科成绩平均分。这十个模块中原本的信息、查找、添加、删除、保存信息、排序作为学生信息的子函数,查询单科成绩最高分、查询单科成绩最低分、查询单科成绩及格率、查询单科成绩平均分作为成绩查询的子函数,用 switch语句,做成一个菜单供使用者选择所需要的功能,退出系统则是作为switch语句中的一部分,为了可以循环使用这些模块,另外加了while语句。 二、模块结构图 学生信息 添加信息 删除信息 保存信息 信息排序 查询成绩 统查询计单科最高分 统查询计单科及格率 统查询计单科最低分 统查询计单科平均分 学生基本信息管理 成绩管理 学生成绩管理 学生成绩排名系统 C++课程设计报告 第 4 页,共 27 页 三、系统流程图 开始 进入目录并选择 判断是否有该功能 N Y 添 加 删 除 排序 保存 查询 统计单科 统计及格率 统计单科最高 统计单科最低 统计单科平均 Y 是否继续操作 N 退出系统 C++课程设计报告 第 5 页,共 27 页 ⑵详细设计 主界面设计: 用输出语句输出菜单,再用switch语句将所选功能的序号进行批配,批配成功的则进行该选项的操作,利用do….while语句实现多次操作,流程图见系统流程图。 一、各个功能模块设计及流程图: 1.:学生信息模块算法设计: 在学生信息函数中,用指针对学生的成员变量进行赋值。 2.添加信息模块算法设计思路及流程图: 利用循环先输出系统中原有学生的信息,定义一个学生信息管理的对象名,用来进行添加学生信息。将新增的学生信息放入学生信息中,同时学生人数增加。输出学生信息。 C++课程设计报告 第 6 页,共 27 页 3.保存信息模块算法设计思路及流程图: 添加信息界面 打开文件,利用循环将学生信息保存到文件中,关闭文件。 K=0 进入保存界面 K第j+1个学生学号 Y N 第j个学生的学号<第j+1个学生学号 Y 利用新的对象来交换学生信息 N j<当前人数减i Y j<当前人数减i Y i=i+1 i<当前学生人数 Y j=0 i=i+1 N i<当前学生人数 Y j=0 N i=1 选择按学号还是按姓名排序 学号 选择升序还是降序 升序 降序 i=1 姓名 选择升序还是降序 利用新的对象来交换学生信息 N i<当前学生人数 N C++课程设计报告 第 12 页,共 27 页 利用新的对象来交换学生信息 7.统计单科成绩最高分模块算法设计思路及流程图: 先选择统计哪一门课程最高分,定义一个max,令max=第一个学生的成绩,与后面的学生的成绩进行比较,得到最高分。 进入统计单科成绩最高分界面 退出学生信息排序界面 利用for循环将排序好的学生输出 j=j+1 j=j+1 第j个学生的姓名>第j+1个学生姓名 第j个学生的姓名<第j+1个学生姓名 Y 利用新的对象来交换学生信息 N j<当前人数减i j<当前人数减i N N Y max=第一个学生的成i=0 Y N 科目是否是c++ N 选择科目 Y 科目是否是语文 科目是否是C++课程设计报告 第 13 页,共 27 页 8. 统计单科成绩最低分模块算法设计思路及流程图: 先选择统计哪一门课程最低分,定义一个min,令min=第一个学生的成绩,与后面的学生的成绩进行比较,得到最低分。 Y N i<当前学生人数 Y N 进入统计单科成绩最低分界面 选择科目 科目是否是c++ Y min=第一个学生的成绩 N Y 科目是否是语文 N i=0 C++课程设计报告 第 14 页,共 27 页 9. 统计单科成绩及格率模块算法设计思路及流程图: 先选择统计哪一门课程及格率,用一个变量来统计人数,从第一个学生开始倒是最后一个学生为止,比较他们的分数,大于60分则统计人数的变量增加 一。然后将该变量除以总人数,输出及格率。 退出统计平均分界面 i=i+1 输出min Y min=该学生的成绩 min与其后的学生的成绩进行比较 N i<当前学生人数 Y N N 无该门课程 Y 进入统计单科及格率界面 选择科目 科目是否是c++ Y i=0 N Y 科目是否是语文 C++课程设计报告 第 15 页,共 27 页 10. 统计单科成绩平均分模块算法设计思路及流程图: 先选择统计哪一门课程平均分,用一个变量来统计总成绩,从第一个学生开始倒是最后一个学生为止,利用循环把他们的分数相加,然后将该变量除以总人数,输出平均分。 i++ 退出统计及格率界面 Y n++ 输出及格率 是否该学生的成绩大于60 N 满足的条件的人数/总人数 Y N 无该门课程 i<当前学生人数 N Y 科目是否是数学 N 进入统计单科平均分界面 选择科目 科目是否是c++ Y j=0 N Y 科目是否是语文 C++课程设计报告 第 16 页,共 27 页 Y 学生分数相加 输出平均分 j=j+1 退出统计平均分界面 总得分数/总人数 N 无该门课程 j<当前学生人数 Y 科目是否是数学 N C++课程设计报告 第 17 页,共 27 页 4.课程设计成果 1.添加功能: 2.删除功能: 一)按学号删除: C++课程设计报告 第 18 页,共 27 页 二)按姓名删除: 3.查询成绩功能: 一)按学号查询: 二)按姓名查询: C++课程设计报告 第 19 页,共 27 页 三)按课程名查询: 4.成绩排序功能: 一)按学号排序 (1)升序: C++课程设计报告 第 20 页,共 27 页 (2)降序: 二)按姓名排序 (1)升序 C++课程设计报告 第 21 页,共 27 页 (2)降序 5.统计成绩最高分功能: C++: C++课程设计报告 第 22 页,共 27 页 数学: 6.统计成绩最低分功能: C++: 语文: 数学: 语文: C++课程设计报告 第 23 页,共 27 页 7.查询学生成绩平均分: C++: 语文: C++课程设计报告 第 24 页,共 27 页 8.查询学生成绩的及格率: C++: 语文: 数学: 数学: C++课程设计报告 第 25 页,共 27 页 9.保存信息模块: C++课程设计报告 第 26 页,共 27 页 5.课程设计心得 通过此次课程设计,使我更加扎实的掌握了有关c++方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。在验收时,老师又让我增加功能和改变功能,虽然挺累人的,但实践出真知,通过亲自实践,我们掌握的知识不再是纸上谈兵。 过而能改,善莫大焉。在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获取。最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师的指导下,终于游逆而解。在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可! 课程设计诚然是一门专业课,给我很多专业知识以及专业技能上的提升,同时又是一C++课程设计报告 第 27 页,共 27 页 门讲道课,一门辩思课,给了我许多道,给了我很多思,给了我莫大的空间。同时,设计让我感触很深。使我对抽象的理论有了具体的认识。通过这次课程设计,我掌握了c++的面向过程和面向对象的知识,懂得利用循环、冒泡、指针、数组等知识来完成一个项目从需求分析到最后的维护等过程。 我认为,在这学期的实验中,不仅培养了思考、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,在实验课上,我们学会了很多学习的方法。而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。这对于我们的将来也有很大的帮助。以后,不管有多苦,我想我们都能变苦为乐,找寻有趣的事情,发现其中珍贵的事情。就像中国提倡的艰苦奋斗一样,我们都可以在实验结束之后变的更加成熟,会面对需要面对的事情。 回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和思考的能力。在设计的过程中遇到问题,可以说得是困难重重,但可喜的是最终都得到了解决。