数据结构运动会分数统计课程设计(共22页).doc
《数据结构运动会分数统计课程设计(共22页).doc》由会员分享,可在线阅读,更多相关《数据结构运动会分数统计课程设计(共22页).doc(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上 数据结构课程设计 目录1. 需求分析-2 1.1问题描述-21.2基本任务-22. 概要设计-22.1主界面设计-22.2数据结构设计-32.3系统功能设计-33. 模块设计-33.1模块设计-33.2系统子模块及功能设计-43.3系统模块之间的调用关系-44. 详要设计-54.1数据结构设计-54.2系统主要模块设计-65. 调试分析-85.1创建学校链表-85.2添加获奖学生-85.3按项目查学校成绩-115.4按学校编号查参加项目-146. 用户使用说明-157. 参考文献-158. 对软件自我评价-159. 程序设计源代码-1610. 心得体会-22一需求分
2、析 1.1 问题描述1. 课程设计题目:运动会分数统计。2. 任务:加运动会有n个学校,学校编号为1n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1m,女子m+1m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m=20,n=20)3. 问题分析:1)、每个学校有运动员要参加运动项目,故存储结构要有三个,项目结构体,学生信息结构体和学校链表。每个结点存储一个学校,每个学校可以有多名运动员参加运动项目。由此,存储结构就建立了。2)、要求不同的项目根据具体情况取去前五名或前三名积分,则可
3、以设定标准,即当参加某项目的运动员数等于或多于五人时,就取该项目的前五名进行积分,取前五名的积分分别为:7,5,3,2,1。当参加某一项目的人数少于五人时,则去该项目的前三名进行积分,去取前三名的积分分别为:5,3,2。3)、要求能统计学校的总分,并可以按学校编号输出每个学校的参赛信息及每个学校每个运动员的信息和所有运动项目清单。以上这些功能可以通过遍历学校链表来实现。4)、要求可以学校编号查询学校某个项目的情况,用户输入学校编号和项目编号,通过遍历学校链表即可实现。5)、要求可以按编号查询取得前三或前五名的学校,用户输入要查询的项目的编号,通过遍历学校链表即可实现。6)、设置菜单函数menu
4、(),产生用户界面。 规定: 输入数据形式和范围:可以输入学校的名称,运动项目的名称输出形式:有中文提示,各学校分数为整形界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,以保证程序的稳定。 1.2 基本任务通过用户调查分析及实际需求,系统需要实现如下基本任务:1) .输入各个项目的前三名或前五名的成绩;2) .统计各学校总分;3).按学校编号或名称、男女团体总分排序输出;4).按学校编号查询
5、学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。数据存入文件并能随时查询。二概要设计为了完成需求分析的基本任务,主要从以下3个方面进行设计: 2.1 主界面设计为了实现运动会分数统计的各项功能,设计了一个含有多个菜单项的主控菜单模块以链接系统的各项功能,以方便用户使用系统。系统主控菜单运行界面如图1所示:图1 运动会分数统计主菜单 2.2 数据结构设计系统采用数据的存储结构定义:运动项目结构体、 运动员信息结构体、学校链表此外,还定义了一些全局变量:学校总数SchoolCount、男生项目总数BoyProject、女生项目总数GirlProject、项目总数TotalProjec
6、t、项目表Project_T41。 2.3 系统功能设计创建学校的链表: void CreatSchoolLink(School &head);添加获奖学生: void AddStudentLink(School &head); 按项目编号查询取得前三或前五名的学校。 void Find_Project_ID(School &head,int Project_ID); 按学校编号查询学校某个项目。 void Find_School_Project(School &head,int School_ID,int Project_ID);成绩统计: void ScoreCount(School &h
7、ead);输出参赛结果: void OutPut_Link(School head);(7) .添加学生数据: void AddStudent(School &head);(8).菜单函数: int menu();(9).主函数: int main();三模块设计 3.1 模块设计系统主要包含主程序模块和其它链表操作模块。其调用关系如图2所示。ScoreCount(School&head)main()CreatSchoolLink(head)AddStudent(head)OutPut_Link(head)FindProject_ID(head,Project_ID)Find_School_P
8、roject(head,School_ID,intProject_ID)menu()AddStudentLink(head) 图2 模块调用示意图 3.2 系统子模块及其功能设计系统设计了8个子功能模块,8个子功能模块的描述如下:创建学校的链表: void CreatSchoolLink(School &head);添加获奖学生: void AddStudentLink(School &head); 按项目编号查询取得前三或前五名的学校。 void Find_Project_ID(School &head,int Project_ID); 按学校编号查询学校某个项目。 void Find_Sc
9、hool_Project(School &head,int School_ID,int Project_ID);成绩统计: void ScoreCount(School &head);输出参赛结果: void OutPut_Link(School head);(8) .添加学生数据: void AddStudent(School &head);(8).菜单函数: int menu(); 3.3 系统模块之间的调用关系系统的10个子模块之间的主要调用关系如图3所示:Menu() 图3 系统函数调用关系图四详细设计 4.1 数据结构设计系统采用线性表的链式存储结构存储学校信息。结点定义如下:typ
10、edef struct SchoolNodeint number;/学校编号 char name10; int count;/运动员人数 int boyscore;/男子团体总分 int girlscore;/女子团体总分 int totalscore;/团体总分 int jifen;/积分 Student students20;/参赛学生 struct SchoolNode *next;SchoolNode,*School; 4.2 系统主要模块设计(1) 创建学校链表算法思想及程序代码:void CreatSchoolLink(School &head)/创建学校的链表 School p;
11、 int i; head=p=(School)malloc(sizeof(SchoolNode); for(i=1;inext=(School)malloc(sizeof(SchoolNode); printf(请输入编号为%d的学校的名称:n,i); scanf(%s,p-name); p-number=i; p-count=0; p-boyscore=0; p-girlscore=0; p-totalscore=0; p-jifen=0; p-next=NULL;/使指针指向空 head=head-next;/头指针后移(2) 添加获奖学生函数程序代码:void AddStudentLin
12、k(School &head)/添加获奖学生 School L,p; int School_ID; /学校编号 char StudentName20; /学生姓名 int sex;/性别 int Project_ID; /项目编号 int score; /成绩 int ranking; /名次 printf(请输入学生的姓名:n); scanf(%s,StudentName); printf(请输入该学生所在学校的编号:n); scanf(%d,&School_ID); printf(请输入该学生的性别(0-女,-男):n); scanf(%d,&sex); printf(请输入该学生参加的项
13、目编号:n); scanf(%d,&Project_ID); if(sex=0) GirlProject=Project_ID; if(sex=1) BoyProject=Project_ID; printf(请输入该学生该项目的得分:n); scanf(%d,&score); printf(请输入该学生在该项目中的名次:n); scanf(%d,&ranking); L=head; while(L) if(L-number=School_ID) p=L; p-count=p-count+1; /运动员数+1 strcpy(p-studentsp-count.name, StudentName
14、); /学生姓名 p-studentsp-count.Project=Project_ID ;/得分项目 Project_TProject_ID.count=Project_TProject_ID.count+1; /该项目得分人数+1 p-studentsp-count.ranking=ranking;/得分名次 p-studentsp-count.score=score;/得分 p-studentsp-count.sex=sex; /性别 break; else L=L-next; (3) 按学校项目查询前三名和前五名学校函数程序代码:void Find_Project_ID(School
15、 &head,int Project_ID) /按项目编号查询取得前三或前五名的学校。 School h,p; p=h=head; /保存链表头指针 int i; printf(查询结果如下:n); while(h) for(i=1;icount;i+) if(h-studentsi.Project=Project_ID) printf(学校:%s 姓名:%s 名次:%dn,h-name,h-studentsi.name,h-studentsi.ranking); printf(n-n); h=h-next; (4) 按学校编号查询学校的某个项目程序代码:void Find_School_Pr
16、oject(School &head,int School_ID,int Project_ID)/按学校编号查询学校某个项目 School h,p; int Project_i=0; int i; p=h=head; /保存链表头指针 while(h) if(h-number=School_ID)p=h;break; h=h-next; for(i=1;icount;i+) if(p-studentsi.Project=Project_ID) printf(查询结果如下:n); printf(姓名:%sn,p-studentsi.name); Project_i=p-studentsi.Pro
17、ject; if(p-studentsi.sex=0) printf(性别:女n); Project_i=Project_i+20; else printf(性别:男n); printf(项目编号:%d 项目名称%s 该项目得分%d 名次:%dn,p-studentsi.Project,Project_TProject_i.name,p-studentsi.score,p-studentsi.ranking); 五调试分析各子功能测试运行结果如下: 5.1创建学校链表运行结果: 创建5个学校,分别为重庆工商大学、重庆邮电大学、重庆交通大学、重庆师范大学、重庆大学 5.2添加获奖学生运行结果:详
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 运动会 分数 统计 课程设计 22
限制150内