摘要本文详细介绍了运动会分数统计程序的设计与实现,该程序具有运动会成绩的输入,每个学校所参加的项目成绩的查询,修改,删除,统计操作以及学校成绩单和团体得分报表的输出等功能。
概要设计部分给出了程序功能说明,数据结构设计和函数变量说明。
详细设计和实现部分列出了系统功能模块、算法原理及流程图。
最后还给出了调试和操作说明。
在课程设计中,程序设计语言采用Visual C++,程序运行平台为Windows98/2000/XP。
对于运动会上获得名次的同学在存储其成绩的时候采用了链表的结构,有利于数据的存储与查找。
程序通过调试运行,实现了最初的设计目标,并且经过适当完善后,在实际中可以解决更多的问题。
关键词:运动会分数统计;程序设计;C;链表目录摘要 (I)目录............................................................................................................................................ I I 第一章概论. (1)1.1 运动会分数统计系统的背景 (1)1.2 运动会分数统计系统的任务和目标 (1)第二章运动会分数统计系统的需求分析 (2)2.1功能需求 (2)2.2功能模块 (2)2.3数据需求 (3)2.4性能需求 (3)第三章系统开发工具及关键技术 (4)3.1 系统开发工具 (4)3.1.1 Code::Blocks (4)3.2 关键技术 (4)3.2.1 C语言 (4)3.2.2 数组 (4)3.2.3 链表 (4)3.3系统子程序及功能设计 (5)第四章运动会分数统计系统的实现 (6)4.1数据结构设计 (6)4.2结构体定义 (6)4.3 系统界面的实现 (7)4.3.1主菜单窗口 (7)4.3.2. 输入各个项目成绩并存储文件 (8)4.3.3. 统计各学校总分 (9)4.3.4 按学校编号排序输出 (10)4.3.5. 按学校总分排序输出 (10)4.3.6. 按男团体总分排序输出 (10)4.3.7. 按女团体总分排序输出 (11)4.3.8. 按学校编号查询学校某个项目情 (11)4.3.9. 按项目编号查询取得名次的学校 (12)结束语 (13)参考文献 (14)附录 (15)运动会分数统计系统第一章概论第一章概论1.1 运动会分数统计系统的背景在信息技术已经深入人类工作生活的今天,计算机软件得到了广泛的应用,越来越多的政府和企业将其业务纳入计算机软件系统。
随着社会进步,体育事业的发展,为了提高运动会成绩统计的准确性,减少设计者们的工作量,开发了本系统。
1.2 运动会分数统计系统的任务和目标任务:参加运动会有n个学校,学校编号为1……n。
比赛分成m个男子项目,和w个女子项目。
项目编号为男子1……m;女子m+1……m+w。
不同的项目取前前三名积分;前三名的积分分别为:5、3、2。
(m、w<=20,n<=10)。
输出形式:中文提示,输出界面友好。
界面要求:合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
目标:1.可以输入各个项目的前三名或前五名的成绩;2.能统计各学校总分;3.可以按学校编号、学校总分、男女团体总分排序输出;4.可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
规定:输入数据形式和范围:20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)。
第二章运动会分数统计系统的需求分析2.1功能需求运动会分数统计方案适合采用结构体数组,为了实现系统功能,主要应实现以下几部分:比赛成绩输入、比赛成绩输出、查询比赛成绩和调用统计结果。
2.2功能模块根据分析整个系统主要划分为4个功能模块,分别执行要求中的功能。
该系统分为比赛成绩输入、比赛成绩输出、查询比赛成绩和调用统计结果。
比赛成绩输出模块有四个子模块,分别是:按学校编号输出模块、按学校总分输出模块、安南员总分输出模块和按女团总分输出模块;查询比赛成绩模块分为按学校编号查询模块河岸项目编号查询两个子模块。
(1)比赛成绩输入模块:比赛成绩输入模块分为:创建信息部分,该部分需输入学校编号,项目编号,取得的名次,以及哪些名次;算法部分,得到排序结果。
(2)比赛成绩输出模块:将以输入的数据按照输出比赛菜单的选择输出相应的数据。
(3)查询比赛成绩模块:按照查询比赛结果菜单和其查询方式子菜单查询要的数据。
(4)调用统计结果:将输入的各学校运动会成绩排序输出。
功能模块图如图2.1所示:图2.1功能模块图2.3数据需求需要输入学校编号,项目编号,取得的名次,以及哪些名次。
2.4性能需求本程序在运行期间,为了避免在运行大量数据时不会出错,并且能够在很短的时间内将运行结果稳定输出,需要系统达到安全性能好,可靠性高,稳定性强,处理数据迅速等特点。
第三章系统开发工具及关键技术3.1 系统开发工具3.1.1 Code::BlocksCode::Blocks是一个开放源码的全功能的跨平C/C++集成开发环境。
Code::Blocks 是开放源码软件。
Code::Blocks由纯粹的C++语言开发完成,它使用了蓍名的图形界面库wxWidgets(2.6.2 unicode)版。
对于追求完美的C++程序员,不必忍受Eclipse的缓慢,也不必忍受的庞大和高昂的价格。
3.2 关键技术3.2.1 C语言C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。
它由美国贝尔研究所的D.M.Ritchie于1972年推出。
1978后,C语言已先后被移植到大、中、小及微型机上。
它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。
它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画。
具体应用比如单片机以及嵌入式系统开发。
3.2.2 数组数组是在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来的一种形式。
这些按序排列的同类数据元素的集合称为数组。
在C语言中,数组属于构造数据类型。
一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。
因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。
3.2.3 链表链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。
不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而顺序表相应的时间复杂度分别是O(logn)和O(1)。
使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。
但是链表失去了数组随机读取的优点,同时链表由于增加了结点的指针域,空间开销比较大。
链表可以在多种编程语言中实现。
像Lisp和Scheme这样的语言的内建数据类型中就包含了链表的存取和操作。
程序语言或面向对象语言,如C/C++和Java依靠易变工具来生成链表。
3.3系统子程序及功能设计(1)、本系统共设置个6子程序,各子程序的函数名及功能说明如下。
a. LinkList creatLink() //创建链表(录入各项目的成)。
b. int schoolScore(LinkList L) //统计各学校总分。
c. void printfSchoolNumber()//按学校编号顺序输出。
d. void printfSchoolScore()//按学校总分顺序输出。
e. void printfManWomanScore(LinkList L) //按男女团体总分排序输出。
f. void printfSchoolObject(LinkList L)//按学校编号查询学校某项目情况。
g. void printfObjectSchool(LinkList L) //按项目编号查询取得前三名或前五名的学校。
h. int main() //主函数。
第四章运动会分数统计系统的实现4.1数据结构设计其中school类为:class school:public athlete /*学校*/{ ……public:int item; /*学校获奖数*/int school; /*学校编号*/int boys; /*男团体总分*/int girls; /*女团体总分*/int score; /*学校总分*/athlete ath[MaxSize]; /*获奖运动员信息数组,包括分数,名次,项目*/ school *prev;//前指针school *next; //后指针}其中部分主要的函数:添加操作add(school* &head)查询操作checkFunc(school *head,int &n)文件保存save(school *head)总分快速排序tquicksort(vector<school *>& v, int first, int last)总分基数排序tbaseSort(vector<school *>& v, int d)4.2结构体定义typedef struct node1{int school; /*学校编号*/int record; /*项目成绩*/struct node1 *next; /*链域*/}Schools;typedef struct {int item; /*项目编号*/Schools *firstschool; /*链域指向链表中第一个结点*/}ITEM;typedef struct {int z; /* 项目总数*/ITEM a[MAX];}ALLitems;typedef struct node2 {int item; /*该学校获奖的项目*/int record; /*项目成绩*/struct node2 *next; /*链域*/}Items;typedef struct {int school; /*学校编号*/int score; /*学校总分*/int boys; /*男团体总分*/int girls; /*女团体总分*/Items *firstitem; /*链域指向链表中第一个获奖项目的结点*/ }SCHNode;typedef struct {int n; /* 学校总数*/SCHNode b[MAX];}ALLNode;4.3 系统界面的实现4.3.1主菜单窗口此为运动会分数统计系统代码运行后的初始窗体图4.14.3.2. 输入各个项目成绩并存储文件请选择(0~8):1进入输入各个项目成绩并存储文件图4.21.输入男子项目总数m;12.输入男子项目总数m;13.输入参加运动会的学校总数3图4.3输入项目:1请选择1(1.前三名2.前五名)第3名:学校<学校编号为数字>3第2名:学校<学校编号为数字>2第1名:学校<学校编号为数字>1项目:2请选择1(1.前三名2.前五名)第3名:学校<学校编号为数字>1第2名:学校<学校编号为数字>2第1名:学校<学校编号为数字>3 项目:3请选择1(1.前三名2.前五名)第3名:学校<学校编号为数字>1第2名:学校<学校编号为数字>3第1名:学校<学校编号为数字>2图4.4 然后输入项目:0返回到菜单主页面图4.54.3.3. 统计各学校总分请选择(0~8):2进入统计各学校总分图4.64.3.4 按学校编号排序输出按任意键继续返回到菜单主界面请选择(0~8):3图4.74.3.5. 按学校总分排序输出按任意键继续返回到菜单主界面请选择(0~8):4图4.84.3.6. 按男团体总分排序输出按任意键继续返回到菜单主界面请选择(0~8):5图4.94.3.7. 按女团体总分排序输出按任意键继续返回到菜单主界面请选择(0~8):6图4.104.3.8. 按学校编号查询学校某个项目情按任意键继续返回到菜单主界面请选择(0~8):7图4.114.3.9. 按项目编号查询取得名次的学校按任意键继续返回到菜单主界面请选择(0~8):8图4.12运动会分数统计系统结束语结束语经过此次的课程设计,可以明确的了解到自己哪些知识点掌握的比较好,哪些知识点运用的还不够熟练。