运动会成绩管理系统c++实践报告

上传人:正** 文档编号:42220828 上传时间:2018-06-01 格式:DOC 页数:9 大小:96.42KB
返回 下载 相关 举报
运动会成绩管理系统c++实践报告_第1页
第1页 / 共9页
运动会成绩管理系统c++实践报告_第2页
第2页 / 共9页
运动会成绩管理系统c++实践报告_第3页
第3页 / 共9页
运动会成绩管理系统c++实践报告_第4页
第4页 / 共9页
运动会成绩管理系统c++实践报告_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《运动会成绩管理系统c++实践报告》由会员分享,可在线阅读,更多相关《运动会成绩管理系统c++实践报告(9页珍藏版)》请在金锄头文库上搜索。

1、中南大学中南大学本科生课程设计(实践)任务书、设计报告(C+应用基础课程设计)应用基础课程设计)题 目运动会成绩统计程序 学生学号1104100322学生姓名指导班级王晋瑞学 院交通运输工程学院专业班级交通运输专业 1001 班指导老师周欣然计算机基础教学实验中心2011 年 09 月 08 日某学校开运动会,共有 m 个班参加,比赛设有 n 个男子项目和个女子项目。假设项 目编号为, ,n,n+1, , n+L, 并且假定各比赛项目取前名,得分顺序为 7、5、3、2、1。请编写出一个程序以实现: (1)成绩数据录入。每个项目结束时,将项目编号及名称、比赛时间(可只记载开始时间) 输入,并按名

2、次输入运动员的姓名、班级、成绩。能添加、删除、修改。 (2)产生指定班级在指定时间内的总分; (3)产生指定运动员在指定时间内的总分; (4)产生指定班级在指定项目的总得分; (5)汇总各班级在指定时间内的总分,且排序输出; (6)产生各班成绩单(包括各班所取得的各项成绩的项目号、名次、运动员姓名和得分) 。(7)程序运行过程中可将数据存从文件读入内存; (8)程序运行过程中可将数据存文件; 提示:假设 m20,n15,L10; 班级名称、比赛项目名称(如男子 100 米、女子 5kg 铅球等)都用字符串表示; 各比赛项目参赛单位为个人,即可以不考虑接力赛等多人作为参赛单位的项目; 时间可以用

3、结构体类型数据表示; 本题实际就是要编写程序管理如下结构的表格信息,并且对表格数据按要求统计、 汇总等。 (建议用链表不要用数组) 项目编号项目名称比赛时间姓名班级成绩本选题程序应包含主控模块和其它若干个功能模块,主控模块要显示主界面和主菜 单。1.1.运动会程序设计系统开发设计思想运动会程序设计系统开发设计思想对于一个管理系统而言,主函数,函数以及成员函数是其重要组成部分。系统开发设计也是从该三方面入手,下面加以详细阐述。(1)主函数的设计在做一个系统开发前,一定要明确系统的功能以及功能实现时的输出(屏幕显示) 。编写主函数的主要任务就是确定调用函数以及控制屏幕显示。确定调用的函数根据要求,

4、该系统至少应该实现五种基本功能:输出工作信息,删除分数信息,修改分数信息,查找分数信息,列出所有信息。实现以上任何一种功能都必须要调用一个函数,根据标识符的定义规则,依次命名为AddNew(),DoDelete(),DoMotify(),DoFind(),List().屏幕显示一个系统要想处理信息,首先必须要输出菜单及提示信息,通过用户在键盘上的输入来选择某个功能。本系统的屏幕显示如上。为实现该屏幕显示,输出语句完全可以放在 main()函数中,但为了使主函数清晰明了,我设计了一个菜单函数 Main()供其调用。(2)函数的设计编写函数的目的就是编写一个能实现某种功能的函数供主函数调用。根据

5、C+面向对象的特点,函数也可以调用类中的成员函数。这样主函数,函数以及成员函数之间的层次分明,关系就清晰明了,不会有冗长的感觉。函数设计的主要任务是确定调用的成员函数以及屏幕显示。确定调用的成员函数。不同的函数调用的成员函数是不尽相同的,基本上每个函数都有一个对应的成员函数,例如 AddNew()与 AddItem(),DoDelete()与 RemoveItem(),DoFind()与 Search(),DoMotify()与 Replace(),List()与 Worker.List()对应,这些成员函数都是共有函数,并且只被其对应函数唯一调用一次。当然,每个函数不可能只调用一个成员函数,

6、例如 AddNew()还调用了另外两个函数 Input()和 Actualpay()。屏幕显示编写函数也需要控制输出以及功能间的转换,从而每一个函数都需要有一个循环来控制其结束。结束的条件都是“当输入的编号为 0 时结束” ,循环语句有 while 也有 dowhile,例如 DoDelete()和 DoFind()用的是dowhile, AddNew()用到的是 while 语句。(3)成员函数的设计。成员函数是系统的灵魂,因为所有的处理过程的细节都在成员函数中完成的。编写成员函数实际上就是一个算法的实现。成员函数的设计包括两方面内容:成员函数算法的实现和成员函数过程的实现。成员函数算法的实

7、现分数管理系统不能单凭数组来处理数据,因为企业班级数是不确定的,并且数组在删除和查找某条信息是相当繁琐。所以该系统需要一个全新的数据处理方式链表。链表是最简单也是最常用的一种动态数据结构,它是对动态获得的内存进行组织的一种结构。它不需要实现定义固定的长度,灵活性更强。链表是算法的关键。在添加新的数据时,可以表头插入也可以表尾插入,这两种插入方法决定了其他成员函数数据的处理。本系统中采取的是表尾插入的方法。在删除某信息时需要判断数据是在表头,表中还是表尾,如果删除的是在表中,则需要将删除的前后链表连接起来。总之,本系统大量运用了链表的 5 种基本操作:建立链表、链表的插入、删除、输入和查找。成员

8、函数过程的实现算法确定后还需要控制屏幕显示、条件的判断以及调用其它成员函数。成员函数之间是可以相互调用的,例如成员函数 List()就调用了成员函数ListCount()来统计当前链表信息的总数,同时还调用了成员函数Print()来输出 Worker_pay()的信息。整个过程中还有一个重要的指针,Worker_pay *Find(),它被 Search(),RemoveItem()以及 AddItem()所调用。其次成员函数中大量运用到了程序控制结构。例如,AddItem()中用 if 来判断是否是链表的表头,List()中用到了 while 语句来实现循环输出。最后屏幕上则需要显示一些完成

9、了某种功能的标志,例如“成功删除编号为xx 的信息” , “成功修改编号为 xx 的信息”等。(3)系统结构框架系统的结构框架主要是系统的流程图以及函数之间的调用关系,该图能描述系统清晰准确的表现出系统的功能实现。运动会程序设计系统结构框架运动会程序设计系统结构框架图图运动会成绩统计系统输出主菜单输入选项成绩数据录入产生指定班级在指定时 间内的总分产生指定运动员在指定 时间内的总分产生指定班级在指定项 目的总得分汇总各班级在指定时间 内的总分AddNew()DoDelete()DoMotify()DoFind()List()AddItem()RemovrItem()Replace()Searc

10、h().List()退出2 2 运动会程序设计系统功能及系统设计介绍运动会程序设计系统功能及系统设计介绍该分数管理系统可以分为 5 个模块,每个模块都有其对应的功能以及其设 计。下面对系统的功能和模块的实现进行简要分析。(1)输入模块输入模块的功能是创建存储班级分数信息的存储系统以及添加某班级的分 数信息。其中的信息包括班级编号,基本分数,津贴,房租,交通费以及银行 储蓄。为实现输入的功能,有两个方面的任务:定义结构体以及建立链表。定义结构体结构体的名称为 Worker_pay,其中包含的信息有班级编号(num) ,基本分 数(pay0),津贴(pay1),房租(pay2),交通费(pay3)

11、,储蓄(pay4)以 及个人所得税(tax),应扣数(deduct),实发数(actualpay)。定义一个 pay 的 数组时为了简化变量的定义,使程序更有条理。建立链表通过从表尾插入的方法来建立链表,首先要先设立一个头指针(head) 来存放链表的首地址。然后,不断用 new 运算符生成一个新的起点,将这个起 点链入已有的链表尾部;如果链表中还没有结点,则这个新结点将是首结点, 否则,将新结点的地址赋给原有链表的尾结点的 next 指针。(2)删除模块删除模块的功能是删除班级的分数信息。当然,信息包括所有输入的信息, 以及程序内部函数计算的信息例如个人所得税,实发数。 从一个链表中删去一个

12、结点,首先从表头开始,找到被删结点后,只要改 变链接关系即可,使被删结点的前去结点的指针域指向被删结点的后继结点。 如果删去的结点是首结点,则将第二个结点的地址作为新的链表的首地址返回; 如果删去的结点是链尾,则将被删结点的前驱作为新的链尾。(3)修改模块结束修改模块的功能是修改某班级的部分分数信息。 要修改某班级的信息首先必须从表头开始搜寻,当找到指定的编号是,重 新对其赋值即可。(4)查找模块查找模块的功能就是输出指定编号班级的分数信息。 查找链表中的信息时比较简单的,在上面的模块中也用到了,主要是注意 查找叶必须从表头开始。(5)列表模块列表模块的功能是输出当月全体班级的分数信息。 列表

13、模块就是依次输出链表中各结点的数据。首先要知道链表头结点的地 址,也就是 head 的值,然后设一个指针变量 p,先指向第一个结点,输出 p 所 指结点的数据与的值,然后使 p 后移一个结点,再输出其数据与的值;依链表 顺序而行,依次输出相应结点数据域的值,直到链表的尾结点。(5)调试过程中遇到的主要问题及解决办法设计初期,先完成初步构思,写出主函数。然后对主函数所涉及的各个 模块进行编程,将各个模块利用指针和链表联系起来。在环境中进行调试,应 一边编译,一边调试,并且要一个模块一个模块的调试。直至此模块完全没有 错误时,在进入下一模块的调试。不能直接输入全部的代码一次性调,这样错 误会很多,

14、并且不易找出和修改。在完成程序的编译链接后,要用多组数据进 行审查,确保做到系统无误。设计过程中,不应忽视环境提示的警告,有时程序运行不正确与警告也有 很大的关系。这次设计中遇到很多问题都是提示类型不匹配,这时就要认真检 查前面的代码,及时改正并且认真仔细,杜绝此类错再次发生。编写代码时应该少用全局变量,全局变量在编写试看似定义次数少,很方 便。但全局变量出错几率较大,且不易修改,每次修改时都要全面考虑,所以 应避免用到。程序调试中碰到的错误可以使自己学到知识。养成良好的编程习惯,可以 节省很多时间,避免很多不必要的错误。 在编辑完整个程序后,进行调试阶段总是会数显 head 无定义。 解决办

15、法:再类的定义是忘记声明指针 Worker_pay *head;。 3 3 总结总结 经过一周的 C+课程实践,我对 C+语言设计有了一个更深,更全面的了 解,尤其体会到了 C+面向对象操作对简化程序的重要作用。下面是我的几点 体会: 刚拿到课题时,我一脸的茫然,看到如此庞大的工程,不知如何下手。 这个分数管理系统中班级子信息竟然包含 15 条,以前从来没有遇到过如此多的 变量。和同学讨论很久好,我发现其实可以化繁为简的,信息中 15 条不一定全 都要,因为其中本身就有重复的,例如津贴和补贴。并且可以有一个 pay 的数 组来处理数据。所以做任何事情都必须要开动脑筋,积极思考,有时还要学会 化繁为简。 在编程时条理清晰是至关重要的。主函数,函数,成员函数之间的层次关系,调用关系一定要有一个全面的把握,尤其要体会类的封装性。另外很重 要的一点就是一定要对链表的五种操作熟练的掌握。 在编译,链接,调试的过程中一定要有耐心。因为一个程序中会有很多 小的错误,甚至有的问题要几个小时才能解决。遇到问题,一定要全面分析, 有时候还要向同学请教。总得来说,编程时极需要耐心的。 总之,C+课程设计实践为我们提供了一个综合运用所学知识,解决实际 问题的平台,增强了我们实践动手的能力和工程实践能力,并且锻炼和培养了 我们的自学能力,让我们对 C+有了一个更全面的了解。4 输入过程即截图:附源代码:

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号