运动会分数统计问题课程设计报告数据结构域算法.docx
- 文档编号:169399
- 上传时间:2022-10-05
- 格式:DOCX
- 页数:15
- 大小:184.15KB
运动会分数统计问题课程设计报告数据结构域算法.docx
《运动会分数统计问题课程设计报告数据结构域算法.docx》由会员分享,可在线阅读,更多相关《运动会分数统计问题课程设计报告数据结构域算法.docx(15页珍藏版)》请在冰豆网上搜索。
合肥学院
计算机科学与技术系
课程设计报告
2010 ~2011学年第2 学期
课程 数据结构与算法
课程设计题目名称 运动会分数统计问题
学生姓名 柏耀洪
学号 0904032024
专业班级 09网络工程
(2)班
指导教师 吕刚王竹婷
2011 年 6 月
1.题目:
(运动会分数统计系统)设计程序完成如下要求:
参加运动会有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)规定:
输入数据形式和范围:
可以输入学校的名称,运动项目的名称。
输出形式:
有中文提示,各学校分数为整形。
界面要求:
有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
2.问题分析
实现本程序需要解决以下几个问题:
1)如何确定定义的项目的结构体所包含的内容
2)如何确定定义的学校的结构体所包含的内容
3)如何按照项目输入运动会的信息
4)如何按学校编号查询学校某个项目的情况
5)如何按项目编号查询取得前三或前五名的学校
6)如何按学校编号或名称、学校总分、男女团体总分排序输出
解题的关键在于如何定义学校和项目的结构体,让它们包含我们所要存储的信息,从而是数据的存取变得简单。
首先,我将项目和学校包含的内容列了出来,如下:
项目:
项目编号,项目名称,前i名的选手的学校编号,项目名次数;学校:
学校编号,学校名称,学校总分,男子总分,女子总分
在程序中,我定义了一个intput()函数,利用它来进行数据的存储。
首先,程序将提示用户输入参赛学校的数目,在这里,我使用了一个全局变量n来存储该数据。
紧接着,需要输入每个学校的名称。
接着,m和w两个全局变量将保存男子和女子项目数。
然后,用户将要选择项目的名次数5,进而存储不同的数据。
完成了数据的存储,我们就需要进行数据的查询以及排序输出了。
数据的查询分两种,一种是如何按学校编号查询学校某个项目的情况,第二种是如何按项目编号查询取得前三或前五名的学校。
对于第一种情况,由于每个学校的结构体都包含sch[i].num(即编号),只要将要查询的学校的编号输入即可。
函数cxsch()将会根据if(sch[i].num==s)找出该学校所参与项目的成绩并输出。
按照项目查询与此同类。
对于信息的排序输出,我主要使用了冒泡排序算法,将结构体进行比较并交换。
例如如果按照学校总分排序输出时,判断sch[i].score 于是我重新复习了一下C语言的相关知识,不同string函数的调用对我启发很大。 3、数据结构的选择和概要设计 首先定义结构体structpro、structschool,将学校和项目的信息,如项目名称、前5名学校的编号、学校名称、学校总分、男子总分、女子总分等信息分别定义进结构体中。 再定义输出函数,分别按学校编号、学校总分、男子总分、女子总分顺序输出。 之后定义菜单函数,选择序号执行需要的操作,从而查询各项信息。 流程图如下: 开始 输入信息 统计分数 根据菜单实 现选择操作 输出信息 排序 主函数 具体操作 图1总体框架 主要函数: voidinput() 输入学校数目、学校名称、男子项目数和女子项目数、项目的名称以及每个项目前5名的学校编号 流程图如下: 输入学校数目 输入数据有误, 请重新输入 n>=1&&n<=20 输入第i个学校的名称 输入男子项目数和女子项目数 输入数据有误, 请重新输入 m<=20&&m>=1&&w<=20&&w>=1) i=1;i<=m+w;i++ 输入第i个项目的名称 输入第i个项目的前5 名的学校编号 开始 结束 图2 输入参赛学校信息 voidsolve() 定义菜单函数,根据菜单提示,可以完成相关的功能要求流程图: Z=1 Z=2 按学校编号顺序输出 Z=3 按学校总分顺序输出 Z=4 按男子总分顺序输出 按女子总分顺序输出 Z=5 Z=6 输入学校编号, 查询学校信息 Z=7 输入项目编号, 查询项目信息 退出 开始 图3主菜单函数 4、算法思想 运动会分数统计该系统相对有点复杂,主要是由于参赛学校和比赛项目不具体可能会很多,其中定义的这两个结构体时里面包括的内容较多。 该程序要求的子函数的功能较多,如可以根据学校编号查询信息、根据项目编号查询信息等等,因此设计算法时可分为以下几步: (1)定义两个结构体: 参赛学校school和比赛项目pro,在结构体中定义各种所需的信息。 (2)定义需要实现功能的各种子函数: 输入信息函数input(),输入函数printf(),按照学校编号排序函数bianhao(),按照男团体总分排序函数malezf(),按照女团体总分排序函数femalezf(),按照项目编号查询的函数cxxm()。 (3)利用主函数来分别调用这些子函数。 就可以实现各种所需功能。 5、详细设计和主要编码段 5.1数据类型及重要变量的定义 (1)定义运动项目数据类型,用于存放运动项目,包括项目编号、项目所取名次数、名次、分数。 定义项目结点的类型: structpro//表示项目的结构体 { stringname;//项目名称 intsnum[6];//前5名学校的编号intnum; //项目编号 }p[21]; (2)定义学校数据类型,用来存储参赛学校信息,包括学校编号、学校总分、男团总分、女团总分、项目数组。 定义学校结点类型: structschool//表示学校的结构体 { intnum; //学校编号stringname;//学校名称intscore;//学校总分intmale;//男子总分intfemale;//女子总分 }sch[21]; 5.2函数的设计和实现 在概要设计中已经对该系统涉及的抽象数据类型和函数及其功能做了说明,这里就不在对每个函数进行一一说明,只对其中比较重要的功能模块进行描述。 (1)信息输入及分数统计功能 input()函数为输入各个参赛学校的信息,包括学校的名称、学校的编号、在输入信息的同时进行分数的统计。 可以输入各个学校各项目前五名的成绩。 在输入学校的参赛项目时同时把该项目所对应的前五名和学校编号。 前五名的成绩赋为7,5、3、2、1,未取得成绩则赋为0。 并统计团体总分,男团总分和女团总分。 其主要功能代码如下: for(i=1;i<=n;i++) {printf("请输入第%d个学校的编号和名称: ",i);//输入学校的编号和名称 cin>>sch[i].num;cin>>sch[i].name;sch[i].score=0;sch[i].female=0;sch[i].male=0;sch[i].num=i;} printf("请输入男子项目数和女子项目数: ");//输入男子和女子项目的数量 y=0; while (1) {scanf("%d%d",&m,&w);if(m<=20&&m>=1&&w<=20&&w>=1)y=1;if(y)break; elseprintf("输入数据有误,请重新输入: ");} for(i=1;i<=m+w;i++) {printf("请输入第%d个项目的编号和名称: \n",i);cin>>p[i].num; cin>>p[i].name; rintf("请输入第%d个项目的前5名的学校编号: \n",i);//输入前五名学校的编号for(j=1;j<=5;j++) {y=0; while (1) {scanf("%d",&x);if(x>=1&&x<=20)y=1;if(y)break; elseprintf("输入数据有误,请重新输入: ");} p[i].snum[j]=x;sch[x].score+=integral[j-1];if(i<=m)sch[x].male+=integral[j-1]; else sch[x].female+=integral[j-1];} (2)菜单子函数 bianhao()函数主要功能是将参赛学校获得前五名的学校按照编号输出。 其主要程序如下: for(i=1;i { for(j=i;j<=n;j++)if(sch[i].num>sch[j].num) {t=sch[i];sch[i]=sch[j];sch[j]=t;} } printf("\n按编号排列: \n"); printf("编号学校名称 总分 男子总分 女子总分\n");for(i=1;i<=n;i++) print(i); } (3)主菜单函数 Void solve()函数是主菜单函数,设置参数z,当z=不同的数值时会选择不同的子菜单,在运行每个子函数之前都要运行主菜单函数,这样就可以知道选择不同的z值就可以对应不同的子函数,其主要功能代码如下: intz;while (1) { printf("\n *************************************\n");printf(" * 选择您需要的操作(选择序号): *\n");printf(" * 1.按学校编号排序输出 *\n");printf(" * 2.按学校总分排序输出 *\n");printf(" * 3.按学校男总分排序输出 *\n");printf(" * 4.按学校女总分排序输出 *\n");printf(" * 5.查询某个学校成绩 *\n"); printf(" * 6.查询某个项目成绩 *\n"); printf(" * 7.结束 *\n"); printf(" *************************************\n");printf(" 选择您需要的操作(选择序号): "); scanf("%d",&z); if(z==1)bianhao();if(z==2)zongfen();if(z==3)malezf();if(z==4)femalezf();if(z==5)cxsch(); if(z==6)cxxm();if(z==7)break; }} 6、上机调试情况记录 (1)运行程序输入各种系统信息: 输入参赛学校的编号和名称如下图4: 图4测试输入参赛学校输入项目编号和名称以及前五名学校的编号如下图5:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 运动会 分数 统计 问题 课程设计 报告 数据结构 算法