数据结构课程设计-运动会分数统计系统
- 格式:docx
- 大小:287.63 KB
- 文档页数:13
数据结构运动会分数统计系统一、系统需求分析在设计运动会分数统计系统之前,我们首先需要明确系统的需求。
运动会通常包括多个项目,如田径、游泳、球类比赛等,每个项目又有不同的小项和参赛选手。
因此,系统需要能够处理大量的比赛数据,包括选手信息、比赛项目、成绩等。
1、数据录入功能系统应提供方便快捷的数据录入界面,支持手动输入和批量导入数据。
录入的数据应包括选手的基本信息(如姓名、性别、班级等)、参赛项目、比赛成绩等。
2、成绩计算功能能够根据不同项目的比赛规则自动计算选手的成绩和得分。
例如,在田径比赛中,根据选手的跑步时间计算名次和得分;在游泳比赛中,根据选手的游泳时间计算得分;在球类比赛中,根据比赛结果(如胜、负、平)计算得分。
3、数据存储功能系统需要将录入和计算得到的数据安全地存储起来,以便后续查询和分析。
数据存储应采用可靠的数据库管理系统,如 MySQL、Oracle 等。
能够根据不同的条件查询和统计比赛数据,如查询某个选手的比赛成绩、某个班级的总分、某个项目的前三名等。
统计结果应以清晰直观的方式展示,如表格、图表等。
5、报表生成功能系统应能够生成各种报表,如比赛成绩报表、班级总分报表、项目排名报表等。
报表应支持打印和导出为 Excel、PDF 等格式,方便数据的共享和存档。
二、系统设计基于上述需求分析,我们可以设计一个基于数据结构的运动会分数统计系统。
系统主要由以下几个模块组成:1、数据录入模块该模块负责接收用户输入的比赛数据,并进行合法性检查和数据预处理。
数据录入可以通过网页界面、Excel 导入等方式进行。
2、成绩计算模块根据比赛项目的规则和录入的成绩数据,计算选手的得分和排名。
成绩计算可以采用算法实现,如冒泡排序、快速排序等。
3、数据存储模块使用数据库来存储比赛数据,包括选手信息表、比赛项目表、成绩表等。
数据库设计应遵循规范化原则,以确保数据的一致性和完整性。
通过编写 SQL 查询语句,实现对比赛数据的查询和统计功能。
师范学院(本科)课程设计说明书课程数据结构题目运动会分数统计系统姓名学号专业班级指导教师完成日期1、绪言21世纪是个信息化的时代,现代计算机技术的发展,为各行各业的发展创造了一个全新的时代背景——人们的生活、工作等已经越来越离不开计算机科学的运用,体育作为个人、家庭、社会的一个主要实践领域,大大小小的运动会也在各大中院校中展开,自从计算机科学涉及运动领域后,人们对运动会的管理也从人工的向自动化转变。
运用数据结构的知识解决运动会分数统计的问题,编写一个程序来完成运动会分数统计系统.本程序设计中,可以输入参加运动会的学校编号及项目编号;根据具体情况选择输入参加项目的男女类别和取成绩名次类别;最后选择输入名次;实现数据统计,排序输出,学院及项目查询等功能。
数据结构课程设计是为数据结构课程独立开设的实践性教学环节。
课程设计的目的是要求学生达到熟练掌握C语言的基本知识和技能;了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;提高程序设计和调试能力。
学生通过上机实习,验证自己设计的算法的正确性。
学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改;培养算法分析能力,分析所设计算法的时间复杂度和空间复杂度,进一步提高程序设计水平;初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能。
2、需求分析2.1 功能需求本系统主要是运动会分数统计方案设计。
任务:参加运动会有n个学校,学校编号为1……n。
比赛分成m个男子项目,和w个女子项目。
项目编号为男子1……m,女子m+1……m+w。
不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。
(m<=20,n<=20)运动会分数统计方案适合采用结构体数组,为了实现系统功能,主要应实现以下几部分:比赛成绩输入、比赛成绩输出、查询比赛成绩和调用统计结果。
数据结构课程设计报告题目:运动会分数统计系统学生姓名:学号:班级:指导教师:2010年 5 月28 日目录一、题目 (3)二、时间 (3)三、地点 (3)四、程序要求 (3)五、数据结构设计 (4)1.概述 (4)2.关键算法 (5)3.查询操作 (7)六、详细代码 (8)七、测试结果 (20)1.主菜单窗口 (20)3. 统计各学校总分 (21)4. 按学校编号排序输出 (22)5. 按学校总分排序输出 (22)6. 按男团体总分排序输出 (23)7. 按女团体总分排序输出 (23)8. 按学校编号查询学校某个项目情况 (24)9. 按项目编号查询取得名次的学校 (24)八、测试非法数据 (24)九、课程设计总结 (25)一、题目:运动会分数统计系统二、时间:2010.05.24~05.28三、地点:软件楼606四、程序要求:任务:参加运动会有n个学校,学校编号为1……n。
比赛分成m个男子项目,和w个女子项目。
项目编号为男子1……m,女子m+1……m+w。
不同的项目取前前三名积分;前三名的积分分别为:5、3、2。
(m、w<=20,n<=10)功能要求:1).可以输入各个学校、各项目、以及各项目前三名的数据信息;2).能统计各学校总分、男子项目和女子项目总分;3).可以按学校编号(或学校名称)、学校总分、男女团体总分排序输出;4).可以按学校编号(或学校名称)查询学校某个项目的情况;可以按项目编号查询取得前三的学校。
规定:输入数据形式和范围:10以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)输出形式:有中文提示,各学校分数为整形界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
存储结构:学生自己根据系统功能要求自己设计。
请在最后的上交资料中指明你用到的存储结构;测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。
进行程序测试,以保证程序的稳定。
运动会分数统计(数据结构课程设计)
在现代社会,竞技运动会已经成为一项重要的社会活动,对学生和参
赛者都有重要的意义。
计算机技术在现代社会中有重要的作用,特别
是数据结构理论,它能够有效地提高竞赛的效率和准确性,从而更好
地服务于社会的发展。
最近,我参加了一次数据结构课程的设计,以
实现一种竞技运动会的分数统计功能。
计算机科学中的数据结构和算法理论,可以用来存储、排序、检索等
是必不可少的。
这项课程设计,主要是利用链表和堆栈的数据结构来
存储竞赛数据,并利用递归算法来进行排序,以便快速检索想要的结果。
我分解了该项设计过程,先根据运动项目分层链表,以存储每个
运动项目及其分数;然后根据不同项目要求,采用递归或非递归算法
来排序;最后,利用堆栈的数据结构,将得分按从高到低的形式输出。
在本项目完成后,可以更加有效地实现竞技运动会的分数统计,提高
评审效率和结果准确性。
通过运用数据结构和算法理论,使我更加深
入地了解了计算机科学和编程领域的应用,让我拥有了更多的实用技能,在未来的工作中发挥着强有力的作用。
计算机学院信管专业数据结构课程设计题目:运动会分数统计班级:姓名:学号:同组人姓名:起迄日期:课程设计地点:指导教师:完成日期:2013年12月目录1、需求分析 (02)2、概要设计 (03)3、详细设计 (04)4、调试分析和测试结果 (05)5、总结 (13)6、参考文献 (14)7、致谢 (14)8、附录 (14)1、需求分析(1)任务:参加运动会有n个学校,学校编号为1……n。
比赛分成m个男子项目,和w个女子项目。
项目编号为男子1……m,女子m+1……m+w。
不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。
(m<=20,n<=20)(2)功能要求:a).可以输入各个项目的前三名或前五名的成绩;b).能统计各学校总分,c).可以按学校编号、学校总分、男女团体总分排序输出;d).可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
(3)规定:输入数据形式和范围:20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)(4)输出形式:有中文提示,各学校分数为整形(5)界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
(6)存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。
(7)测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。
进行程序测试,以保证程序的稳定。
测试数据及测试结果请在上交的资料中写明;2、概要设计(1)文字分析本课设要求输入信息,统计分数,执行排序与查找功能,在要求中没有在建立数据之后进行插入和删除操作,而在排序和查找过程中有许多的随机读取数据操作,因此使用顺序结构而不用链表。
由于各个要求属性具有一定的联系,在定义数据时使用结构体和结构体数组来存储信息数据。
数据结构运动会分数统计系统⒈系统介绍本文档描述了一个数据结构运动会分数统计系统的设计和实现。
该系统旨在帮助组织者和参与者记录和统计运动会比赛的分数。
系统将提供以下功能:●比赛项目管理:添加、编辑和删除比赛项目的信息,包括项目名称、参与者名单和评委名单。
●成绩录入:记录每个参与者在不同比赛项目中的分数。
●分数统计:计算每个参与者在每个项目中的总分和平均分。
●排名:根据参与者的总分和平均分排名列表。
●数据导出:将统计数据导出为可读取和处理的格式。
⒉系统设计⑴数据结构系统将使用以下数据结构来管理和存储数据:●比赛项目(Event):包含项目名称、参与者名单和评委名单等属性。
●参与者(Participant):包含参与者的姓名、编号、所参与的项目及其分数等属性。
●评委(Judge):包含评委的姓名、编号等属性。
⑵系统模块系统将被划分为以下模块:●比赛项目管理模块:用于管理比赛项目的添加、编辑和删除操作。
●成绩录入模块:用于录入每个参与者在不同比赛项目中的分数。
●分数统计模块:用于计算每个参与者在每个项目中的总分和平均分。
●排名模块:用于根据参与者的总分和平均分排名列表。
●数据导出模块:用于将统计数据导出为可读取和处理的格式。
⒊系统实现⑴技术选型系统将使用以下技术来实现:●编程语言:Java●数据库系统:MySQL●后端框架:Spring Boot●前端框架:React⑵数据库设计系统将使用数据库来存储比赛项目、参与者和评委的信息。
数据库将包含以下表格:●比赛项目表(event):包含项目名称、参与者名单和评委名单等字段。
●参与者表(participant):包含参与者的姓名、编号、所参与的项目及其分数等字段。
●评委表(judge):包含评委的姓名、编号等字段。
⑶ API设计系统将提供以下API来实现各个模块的功能:●添加比赛项目API:用于添加新的比赛项目。
●编辑比赛项目API:用于修改已有的比赛项目信息。
课程设计报告课程名称数据结构设计题目运动会分数统计专业计算机科学与技术班级学号姓名完成日期_________2012年6月8日_____________课程设计任务书设计题目:运动会分数统计系统设计内容与要求:【设计内容】参加运动会有n个学校,学校编号为1……n。
比赛分成m个男子项目,和w个女子项目。
项目编号为男子1……m,女子m+1……m+w。
不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定(m<=20,n<=20)。
【基本要求】1) 可以输入各个项目的前三名或前五名的成绩;2) 能统计各学校总分,3) 可以按学校编号或名称、学校总分、男女团体总分排序输出;4) 可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
5) 数据存入文件并能随时查询6) 规定:输入数据形式和范围:可以输入学校的名称,运动项目的名称输出形式:有中文提示,各学校分数为整形界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
指导教师:_____2012年6月8日课程设计评语成绩:指导教师:__________2012年6月8日目录1、问题描述--------------------------------------------- 12、基本要求--------------------------------------------- 1(1)、数据要求----------------------------------------------------------------------------------------------------- 1(2)、操作要求----------------------------------------------------------------------------------------------------- 1(3)、测试数据要求 ---------------------------------------------------------------------------------------------- 1(4)、界面要求----------------------------------------------------------------------------------------------------- 1(5)、存储结构要求 ---------------------------------------------------------------------------------------------- 1 3、数据结构--------------------------------------------- 1(1)、定义运动项目数据类型---------------------------------------------------------------------------------- 1(2)、定义学校数据类型 ---------------------------------------------------------------------------------------- 24、总体设计--------------------------------------------- 25、详细设计--------------------------------------------- 4(1)、信息输入及分数统计功能 ------------------------------------------------------------------------------- 4(2)、信息排序输出功能 ---------------------------------------------------------------------------------------- 5(3)、信息查询功能----------------------------------------------------------------------------------------------- 6(4)、信息保存及读取 ------------------------------------------------------------------------------------------- 6 6、测试与调试------------------------------------------- 71、输出界面 -------------------------------------------------------------------------------------------------------- 7(1)、输入信息 --------------------------------------------------------------------------------------------- 8 (2)、输出各个学校总分信息 -------------------------------------------------------------------------- 9 (3)、信息排序 ------------------------------------------------------------------------------------------- 10 (4)、查询信息 ------------------------------------------------------------------------------------------- 12 (5)、调用信息 ------------------------------------------------------------------------------------------- 14 (6)退出系统--------------------------------------------------------------------------------------------- 153、调试分析 ------------------------------------------------------------------------------------------------------ 15存在问题的思考及算法的改进设想:--------------------------------------------------------------- 164、设计总结 ------------------------------------------------------------------------------------------------------ 16 7、源程序清单 --------------------------------------- 16源代码:----------------------------------------------------------------------------------------------------------- 171、问题描述任务:参加运动会有n个学校,学校编号为1……n。
课程设计报告书专业:计算机科学与技术课程设计名称:《数据结构课程设计》题目:运动会分数统计班级:设计者学号:设计者姓名:同组人员:指导老师:完成时间:摘要随着时代的进步,人们需要处理越来越多的数据,接受的信息数量也不断增加、分工的不断细化、各个行业间联系的不断密切,对数据的处理能力要求也不断提高。
如何处理好生活中的信息,对信息管理,对成情况和发展趋势进行统计、规划、分析并制定切实可行的人事政策,是一项繁重而艰巨的任务。
提供信息咨询,信息检索,信息存取等服务,在此论文中主要实现对存储在数据库中的数据表进行这些简单的操作,为提对数据的处理能管理效率提供了行之有效的手段。
关键词:数据结构;算法设计;开发工具;程序设计;程序调试;目录目录 (1)第一章开发环境和开发工具 (1)1.1 C++简介 (1)1.2 开发背景....................................... 错误!未定义书签。
1.3 开发环境 (2)第二章算法思想 (3)2.1 系统需求分析 (3)2.2 系统总体设计 (3)2.2.1 系统设计目标 (3)2.2.2 开发设计思想 (4)2.2.3 系统功能模块设计 (4)2.3 算法思想描述 (6)第三章算法实现 (8)3.1 数据结构 (8)3.2 程序模块 (8)3.3 各模块之间的调用关系 (8)3.4 源程序代码 (9)第四章测试与分析.................................... 错误!未定义书签。
4.1 测试数据选择 (14)4.2 测试结果分析 (16)总结 (17)心得体会 (18)参考文献 (19)第一章开发环境和开发工具1.1 C++简介一种面向对象的开发语言,C++是一种使用非常广泛的计算机编程语言。
C++是一种静态数据类型检查的、支持多重编程方式的通用程序设计语言。
它支持过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格。
运动会分数统计系统课程设计报告数据结构院系:专业:班级:学号:姓名:一、问题描述1、功能任务:参加运动会有n个学校,学校编号为1……n。
比赛分成m个男子项目,和w个女子项目。
项目编号为男子1……m,女子m+1……m+w。
不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。
(m<=20,n<=20),按要求实现相应的数据输入、查询、计分等功能。
2、数据建议输入学校的名称,运动项目的名称等,其余信息学生自行设计;输出形式:有合理的提示,各学校分数为整形;数据的存储结构自行设计。
建议运动会的相关数据要存储在数据文件中。
3、操作1)可以输入各个项目的前三名或前五名的成绩;2)能统计各学校总分,3)可以按学校编号或名称、学校总分、男女团体总分排序输出;4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
4、要求提供系统菜单,界面友好,提示信息完整。
二、系统分析及设计1、需求分析根据运动会分数统计系统的问题分析及设计要求,可以将此系统分为四个模块:信息统计模块、信息输出模块、信息查询模块、信息调用模块。
其系统功能结构图如图所示。
(1)、信息统计模块实现信息的输入、统计、存档。
(2)、信息输出模块实现信息的输出。
(3)、信息查询模块实现信息的查询。
(4)、信息调用模块实现信息的调用,即从文件中读出信息并输出。
2、概要设计此系统采用顺序存储结构存储,定义了一个结构体数组存放参赛学校的信息。
之所以采用顺序存储结构,是因为用它来实现信息的存储、查询比较方便,节省时间,效率高,而且也方便把信息写入文件以及读取文件。
(1)、结构体定义如下:①、定义运动项目数据类型,用于存放运动项目的信息,包括项目名称、项目编号、用户自己定义的取前3名还是前5名的积分、名次、分数。
typedef struct{char proname[10]; //项目名称int pronum; //项目编号int top; //取前3名或前5名积分,由用户自己定义int range[5]; //名次int mark[5]; //分数}Pronode; //项目结点类型定义②、定义学校数据类型,用于存放参赛学校的信息,包括学校名称、学校编号、学校总分、男子团体总分、女子团体总分以及项目数组。
(运动会分数统计系统课程设计报告>数据结构院系:专业:班级:学号:$姓名:教师:时间:一、问题描述|1、功能任务:参加运动会有n个学校,学校编号为1……n。
比赛分成m个男子项目,和w个女子项目。
项目编号为男子1……m,女子m+1……m+w。
不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。
(m<=20,n<=20),按要求实现相应的数据输入、查询、计分等功能。
2、数据建议输入学校的名称,运动项目的名称等,其余信息学生自行设计;输出形式:有合理的提示,各学校分数为整形;数据的存储结构自行设计。
建议运动会的相关数据要存储在数据文件中。
3、操作$1)可以输入各个项目的前三名或前五名的成绩;2)能统计各学校总分,3)可以按学校编号或名称、学校总分、男女团体总分排序输出;4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
4、要求提供系统菜单,界面友好,提示信息完整。
}二、系统分析及设计1、需求分析根据运动会分数统计系统的问题分析及设计要求,可以将此系统分为四个模块:信息统计模块、信息输出模块、信息查询模块、信息调用模块。
其系统功能结构图如图所示。
(1)、信息统计模块实现信息的输入、统计、存档。
(2)、信息输出模块实现信息的输出。
(3)、信息查询模块实现信息的查询。
(4)、信息调用模块实现信息的调用,即从文件中读出信息并输出。
…2、概要设计此系统采用顺序存储结构存储,定义了一个结构体数组存放参赛学校的信息。
之所以采用顺序存储结构,是因为用它来实现信息的存储、查询比较方便,节省时间,效率高,而且也方便把信息写入文件以及读取文件。
(1)、结构体定义如下:①、定义运动项目数据类型,用于存放运动项目的信息,包括项目名称、项目编号、用户自己定义的取前3名还是前5名的积分、名次、分数。
运动会分数统计数据结构报告一、概述本报告主要介绍了运动会分数统计系统的数据结构。
运动会分数统计系统需要对运动员的各项比赛成绩进行记录、统计和分析,以便为比赛组织者和运动员提供全面、准确的数据支持。
为了实现这一目标,我们设计了一个合理的数据结构,以存储和处理运动会分数数据。
二、数据结构设计1. 运动员信息表字段名称字段类型字段含义运动员ID INT 唯一标识运动员的编号姓名 VARCHAR(50) 运动员的姓名性别 CHAR(1) 运动员的性别(男/女)年龄 INT 运动员的年龄所属单位 VARCHAR(100) 运动员所属的单位或学校名称2. 比赛项目表字段名称字段类型字段含义项目ID INT 唯一标识比赛项目的编号项目名称 VARCHAR(50) 比赛项目的名称项目类型 VARCHAR(50) 比赛项目的类型(田径、游泳、篮球等)项目难度系数 FLOAT 比赛项目的难度系数,用于计算总成绩时进行加权处理3. 比赛成绩表字段名称字段类型字段含义成绩ID INT 唯一标识比赛成绩的编号运动员ID INT 与运动员信息表相关联的外键,标识产生该成绩的运动员项目ID INT 与比赛项目表相关联的外键,标识该成绩所属的比赛项目成绩时间戳 TIMESTAMP 该成绩的记录时间(精确到秒)成绩分数 FLOAT 该成绩对应的分数值(根据项目难度系数计算得出)三、数据结构特点1. 分层设计:数据结构分为三个层次,分别是运动员信息层、比赛项目层和比赛成绩层,各层之间通过外键关联,便于进行数据查询和更新操作。
2. 数据完整性:通过外键关联确保了数据的完整性,即一个运动员只能对应一个成绩记录,一个成绩只能对应一个比赛项目。
3. 可扩展性:数据结构设计考虑了未来可能增加的字段和表,例如可以增加教练信息表、领队信息表等,便于对数据进行扩展和补充。
4. 数据灵活性:数据结构设计允许对字段进行灵活调整,例如可以根据需要增加或删除某些字段,以适应实际需求的变化。
运动会分数统计系统 设计内容 1. 任务: 参加运动会有n个学校,学校编号为1~n。比赛分成m个男子项目,和w个女子项目。项目编号为1~m,女子为m+1~w。不同的项目取前5名或前3明积分;取前5名的积分为:7、5、3、2、1,前3名的积分分别为:5、3、2;哪些项目取前5名或前3名由学生自己决定。(m<=20,n<=20)。
2. 功能要求: 1) 可以输入各个项目的前3名或前5名的成绩; 2) 能统计各个学校总分; 3) 可以按学校编号、学校总分、男女团体总分排序输出; 4) 可以按学校编号查询学校某个项目的情况; 5) 可以按项目编号查询取得前3或前5名的学校。
设计思路 1. 系统结构设计图
运动会SportsMeeting
东华University交大University
„„
比赛项目集合SportEvents
项目1Event
项目2Event
……
„„复旦University
运动会分数统计系统结构设计图 2. 思路分析 1) 从上面的结构设计图来看,隐含地给出了第一个约束条件:每个参赛学校均参加所有的比赛项目。然而这种设计思路并不符合实际情况,因为每个学校有权利选择参加或不参加某个比赛项目。 2) 首先,在上述结构图中,比赛项目Event是最小的数据存储基本单元。比赛项目集合SportEvents可以理解为Event数组,包含了所有的比赛项目。根据约束,只要有学校University参加运动会,此学校就包含了一个SportEvents集合,即为每个学校分配自己的项目成绩单。有n个学校报名参加了运动会SportsMeeting,大会的工作人员根据比赛项目结果统计各个学校的成绩。因此,这种设计结构有3层包含关系,但是每一部分相互独立,耦合性弱。 3) 除了第1条所指出的设计缺陷,这种设计也面临着另一个问题。项目的成绩如何输入?常规思想是根据比赛结果,向系统输入比赛项目的前3或5名的学校编号或名称,系统后台自动累加积分。但是,这里项目是最小的单元,学校又包含了项目,也就是说每个学校的项目成绩单之间是封闭的,学校和学校之间是无法看到的,只有运动会的工作人员才有权限按照逻辑关系查询某个学校的某项成绩,所以显然就不能按照常规思想进行项目成绩的输入。那怎么办呢?直接输入分数。我再给出第二个约束:对于一个项目来说,每个学校只派出一个代表参加。通常对于一个比赛项目来说,学校可以派出不止一个代表参加,就像奥运会的男子百米飞人大赛,牙买加出3名,美国出3名等。
表1 项目1 表2 项目1 学校1 1 学校1 5 学校2 学校2 0 学校3 3 学校3 2 学校4 学校4 0 学校5 2 学校5 3
根据第二个约束条件,假设裁判给出比赛结果表1中的学校名次,工作人员根据名次,将表2的分数输入到系统即可。 4) 从另一个方面来看,如果大会的积分规则改变了。除非系统有对外修改积分规则的接口,否则工作人员就无能为力了。因此以表2的形式更加有灵活性。 5) 客观的说,此系统的设计上有很多缺陷,与实际的常规思想有所不同,所以才加入了两个约束条件。
功能设计 1. 功能模块设计图 主函数菜单
执行模块基本信息模块
统计模块查询模块
参赛学校信息比赛项目信息排名积分规则输入比赛项目成绩统计学校总分
学校所有项目成绩和总分学校总分排名男团总分排名女团总分排名按学校编号查询项目成绩按项目编号查询Top学校
运动会分数统计系统模块设计图
2. 实现思路 1) 模块设计图中具体功能明了,这里就不再重复了。 2) 一般情况下,学校信息,比赛项目信息和项目成绩都需要在cmd窗口中进行输入。这也带来2个问题。一是如果学校有n个,项目有m个,取前5名,那么你就要输入n*m*5个数据,工作量大。二是一旦发现历史输入有误,那么就要全部重新输入数据。为解决这个问题,本系统以文件流的形式导入数据,文件流最简单的方式就是读写txt。我把每个项目的成绩放在对应的txt文件中,如男子100米——M100.txt,具体对应关系可以查看PointsRules.txt。文件里的内容形式与表2相同,存放的是项目成绩。在cmd窗口中,需要哪个项目的成绩,就导入对应的txt文件即可。此外,如果项目成绩发生变化,只需修改txt文件,再重新导入即可。 3) 采用OOP编程,将每一部分封装成一个类,每个类满足了强内聚、松耦合原则。具体的类的定义和声明请查看代码。 4) 在结构设计图中,学校和项目的数量是可以任意的,虽然需求规定m<=20,n<=20。如果直接定义数组(对象数组或者结构数组)大小为20,可能存在资源浪费的情况。为此,我采用了c++自带的通用模板(也即泛型)vector<>结构。对于SportEvents类来说,它包含了vector类型的数据成员;在SportsMeeting类中,包含了vector类型的数据成员。调用push_back() 函数,就可以根据实际情况添加任意个学校或者项目。 5) 此外,采用vector另一个好处,就在于排序,对应功能要求的第5条。Vector背后运用的是迭代器,也就可以调用通用函数sort() 对vector进行排序,只要设计相应的排序规则即可,简化了工作量。
程序实现 1. 运行环境 Win XP,VC++ 6.0。
2. 工程项目 工程文件SportsMeeting,包括SportsMeeting.h,SportsMeeting.cpp,Client.cpp。
3. 编译原理图
SportsMeeting.hClient.cppSportsMeeting.cppComplierComplierClient.objSportsMeeting.objLinkSportsMeeting.exe 4. 类声明 对应结构设计图中所设计的4个类,在SportsMeeting.h中声明
*************************** Event类 *************************** class Event { public: Event(); void setEventInfo(const int & index, const string name); // 设置项目编号和名称 int getEventIndex() const; // 返回项目编号 string getEventName() const; // 返回项目名称 int getEventScore() const; // 返回项目成绩 void setEventScore(const int & score); // 设置项目成绩
private: int eventIndex; // 项目编号 string eventName; // 项目名称 int eventScore; // 项目成绩 };
*************************** SportEvents类 *************************** class SportEvents { public: SportEvents(); void setSportEventsInfo(); // 设置运动会项目信息 void displaySportEventsInfo() const; // 返回所有比赛项目信息和目前成绩 void initializeSportEvents(); // 初始化比赛信息
vector & getMySportEvents(); private: vector mySportEvents; };
*************************** University类 *************************** class University { public: University(); void initializeUinversity(); // 初始化 void setUniversityInfo(const int & index, const string name); // 设置学校信息 void getUniversityInfo() const; // 返回学校信息 int getUniversityIndex() const; // 返回学校编号 string getUniversityName() const; // 返回学校名称 void getUniversitySportsInfo() const; // 返回学校所有参赛项目信息 int getTotalScore(); // 返回学校总成绩 int getMTScore(); // 返回男团总分 int getWTScore(); // 返回女团总分
SportEvents & getUniSportEvents(); private: int uIndex; // 学校编号 string uName; // 学校名称 int totalScore; // 学校总成绩