文档介绍:运动会分数统计系统的实现
09计科(2)班
E10914044
杨 素 传
一、设计要求
1、问题描述
参加运动会有n个学校,学校编码为1,2,…,n,比赛分成m个男子项目与w个女子项目。项目编号为男子1,2,…,m,女子m+1,m+2,…,m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为7,5,3,2,1;前三名的积分分别5,3,2;哪些取前五名或前三名由学生自己设定(m<=20,n<=20)。
2、需求分析
(1)可以输入各个项目的前三名或前五名成绩;
(2)能统计各学校成绩;
(3)可以按学校编号、学校总分、男女团体总分排序输出;
(4)可以按学校编号查询学校某项目情况,可以按项目编号查询取得前三名或前五名的学校。
二、概要设计
1、主界面设计
为了实现运动会分数统计系统,设计一个含有多个菜单项的主控菜单子程序以连接系统的各项子程序,方便用户使用本程序。本系统主控菜单运行界面图1所示。
图1 运动会分数统计系统程序主菜单
2、存储结构设计
本程序采用链式存储类型(LNode)存储运动会分数统计系统的节点信息。运动会分数统计系统的链表中的结点包括8个域:项目编号域(objnum)、项目类型(objtype)、运动员编号(athnum)、运动员姓名(athname[20])、学校编号(schnum)、校名(schname[30])、运动员分数(athscore)与指向下一个节点的指针欲(struct LNode *next)。
3、系统功能设计
本系统设置了8个子功能菜单。8个子功能的设计描述如下:
(1)录入各项目的成绩。由函数creatLink()实现。当用户选择该功能时,系统会以用户输入的数据运动会分数统计链表。
(2)统计各学校分数。由函数schoolScore()实现。当用户选择该功能时,系统会统计各学校分数。
(3)按学校编号顺序输出。由函数printfSchoolNumber()实现。当用户选择该功能时,系统会按学校编号顺序输出数据。
(4)按学校总分顺序输出。由函数printfSchoolScore()实现。当用户选择该功能时,系统会按学校总分顺序输出数据。
(5)按男女团体总分顺序输出。由函数printfManWomanScore()实现。当用户选择该功能时,系统会按男女团体总分顺序输出数据。
(6)按学校编号查询学校某项目情况。由函数printfSchoolObject()实现。当用户选择该功能时,系统会按学校编号输出学校某项目情况。
(7)按项目编号查询取得前三名或前五名的学校。由函数printfObjectSchool()实现。当用户选择该功能时,系统会按项目编号查询取得前三名或前五名的学校情况。
(8)退出。由exit(0)函数实现。
三、模块设计
1、模块设计
本程序包含两个模块:主程序模块与工作区选择模块。其调用关系如图2所示。
主程序模块
工作区选择模块
图2 模块调用示意图
2、系统子程序及功能设计
本系统共设置个6子程序,各子程序的函数名及功能说明如下。
LinkList creatLink() //创建链表(录入各项目的成绩)
int schoolScore(LinkList L) //统计各学校总分
void printfSchoolNumber() //按学校编号顺序输出
void printfSchoolScore() //按学校总分顺序输出
void printfManWomanScore(LinkList L //按男女团体总分排序输出
void printfSchoolObject(LinkList L) //按学校编号查询学校某项目情况
void printfObjectSchool(LinkList L) //按项目编号查询取得前三名或前五名的学校
int main() //主函数
3、函数主要调用关系图
本系统6个子系统之间的主要调用关系如图3所示,图中数字就是各函数的编号。
8 main()
1
2
3
4
5
6
7
图3 系统函数调用关系图
四、详细设计
1、数据类型定义
(1)本系统采用链式结构存储运动会分数统计的结点。节点定义如下:
typedef struct LNode{// 链表节点数据结构
int objnum;
char objtype;