数据结构课程设计运动会分数统计_第1页
数据结构课程设计运动会分数统计_第2页
数据结构课程设计运动会分数统计_第3页
数据结构课程设计运动会分数统计_第4页
数据结构课程设计运动会分数统计_第5页
免费预览已结束,剩余14页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、班级 :姓名:学号日期课题一 运动会分数统计一 . 需求分析:1任务:参加运动会有n个学校,学校编号为1n0比赛分成m个男子项目,和w 个女子项目。项目编号为男子 1簿 女子m+1m+w不同的项目取前五名或前 三名积分;取前五名的积分分别为:7、 5、 3、 2、 1,前三名的积分分别为:5、3、 2;哪些项目取前五名或前三名由学生自己设定。( m<=20,n<=20).2 。功能要求:1) 可以输入各个项目的前三名或前五名的成绩;2) 能统计各学校总分;3) 可以按学校编号、学校总分、男女团体总分排序输出;4) 可以按学校编号查询学校某个项目的情况;5) 可以按项目编号查询取得前

2、三或前五名的学校。3程序执行的命令包括:1)输入所需要的各项数据2)对成绩进行排序3)查找成绩4)退出结束4测试数据:输入五个学校的名字: 东华,上外,外贸,视觉,工技大输入四个体育项目:篮球,游泳,足球,马拉松。输入篮球前五名的学校代码排名情况: 1 3 5 2 4输入游泳前三名学校代码排名情况: 1 2 3输入足球前三名学校代码情况: 1 4 2输入马拉松前三名的学校代码排名情况: 1 5 3二概要设计:为了实现上述程序需要使用要串和线性表,因此需要两个抽象数据类型:串和线性顺序表。1 串的抽象数据类型的定义如下:ADT String数据对象:D=ai|a i C characterSet

3、,I=1,2, ,n,n>=0数据关系:R=<ai-i, ai>|ai-i ,ai C D,I=2, , n基本操作:StrAssign(&T,chars)初始条件: chars 是字符串常量。操作结果:生成一起值等于chars 的字符串 T.StrCopy(&T,s)初始条件 : 串 S 存在操作结果:由串复制得串 T.StrEmpty(s)初始条件 : 串 S 存在。操作结果:若S为空用,则返回TRUE否则返回FALSE.Strcompare(S,T)初始条件:串 S 和 T 存在。操作结果:若S>T,则返回>0;若S=T,则返回值=0,若S&

4、lt;T,则返回值<0.Strlength(S)初始条件:串S 存在。操作结果:返回S 的元素个数,称为串的长度。ClearString(&S)初始条件:串S 存在。操作结果 : 将 S 清为空串。Concat(&T,S1,S2)初始条件:用S1和用S2都存在。操作结果:用Y返回由S1和S2连接而成的新申2. 现性顺序表的抽象数据定义如下:Typedef Struct LNodeElemType *elemInt lengthInt listsize;LNode,*linklist;3. 本程序分为三个模块:1. 主程序模块main ()while (标志!=0) 执行命

5、令;输入标志;switch (标志) case 标志:命令; break ;default :命令; 2)赋值模块实现各个数据的赋值Sho fuzhi() for( ) 输入学校的名字for () 输入几个体育项目For() 按成绩输入各个体育项目的学校的名次3)排序模块:对各项成绩进行排序Void paixu( ) 给 i , j ,赋初值;For ()If 判断;排序;输出结果;4)查询模块; 根据要求查询成绩的排名情况Void chaxun () 定义临时变量;输入要查找的代码;For ()If (命令=进入) 输出成绩;各个模块之间的关系如下:主程序模块赋值模块排序模块查找模块三.详细

6、设计:#include""#include""#include <>#include""#define m 4#define n 51.运动项目的类型typedef struct sportchar sportname20;int num;int s;spo;typedef struct sport1char schoolname20;spo sportsm;int zong,boy,girl,zong1,boy1,girl1;spos,*spor;2. 学校名字的类型typedef struct schoolspos s

7、hoolsn;*sho,shos;3. 进行赋值操作,输入学校名字和运动会项目以及其的排名情况sho fuzhi()sho l;int a,b,c,d,e;l=(shos*)malloc(sizeof(shos);int i,j;for(i=0;i<n;i+)cout<<" 请输入 "<<i+1<<" 个学校的名字"<<endl;cin>>l->shoolsi.schoolname;system("cls");for(i=0;i<m;i+)cout<&

8、lt;" 请输入 "<<i+1<<" 个运动项目的名字"<<endl;cin>>l->shools0.sportsi.sportname;system("cls");for(j=0;j+;j<n)strcpy(l->shoolsj.sportsi.sportname,l->shools0.sportsi.sportname);)for(i=0;i<n;i+)for(j=0;j<m;j+)(l->shoolsi.sportsj.num=0;l-&g

9、t;shoolsi.sportsj.s=0;l->shoolsi.zong=0;l->shoolsi.boy=0;l->shoolsi.girl=0;for(i=0;i<m-3;i+)(coutvv”请按各学校的代码进行成绩输入"«endl;for(j=0;j<n;j+)cout«j+1«"."«l->shoolsj.schoolname;cout«endl;coutvv” 请输入“vv|->shools0.sports。.sportnamevv”的前 5 名的学校代码ci

10、n»a»b»c»d»e;system("cls");l->shoolsa-1.sportsi.num=7;l->shoolsb-1.sportsi.num=5;l->shoolsc-1.sportsi.num=3;l->shoolsd-1.sportsi.num=2;l->shoolse-1.sportsi.num=1;)for(i=m-3;i<m;i+)cout<<"请按各学校的代码进行成绩输入"<<endl;for(j=0;j<n;j+

11、)cout<<j+1<<"."<<l->shoolsj.schoolname<<""cout<<endl;的前3名的学校代码cout<<"请输入"<<l->shools0.sportsi.sportname<<" cin>>a>>b>>c;system("cls");l->shoolsa-1.sportsi.num=5;l->shoolsb-1.spo

12、rtsi.num=3;l->shoolsc-1.sportsi.num=2;return l;void sum(sho l)int i,j;for(i=0;i<n;i+)for(j=0;j<m;j+)l->shoolsi.zong=l->shoolsi.zong+l->shoolsi.sportsj.num;for(j=0;j<m-3;j+)l->shoolsi.boy=l->shoolsi.boy+l->shoolsi.spor tsj.num;for(j=m-3;j<m;j+)l->shoolsi.girl=l->

13、;shoolsi.girl+l->shoolsi.sp ortsj.num;cout<<l->shoolsi.schoolname<<" 总分为"<<l->shoolsi.zong<<endl;)4 .对输入的分数情况进行排序void paixu1(sho l)int i,j,k=1;int temp=0;for(j=0;j<n;j+)for(i=0;i<n;i+)if(l->shoolsi.zong>l->shoolsj.zong)k+;)l->shoolsj.zong1

14、=k;k=1;)for(j=1;j<n+1;j+)for(i=0;i<n;i+)if(l->shoolsi.zong1=j)cout<<"总分第"<<j<<"名学校为:"<<l->shoolsi.schoolname<<endl;)void paixu2(sho l)(int i,j,k=1;int temp=0;for(j=0;j<n;j+)(for(i=0;i<n;i+)if(l->shoolsi.boy>l->shoolsj.boy)(

15、k+;l->shoolsj.boy1=k;k=1;for(j=1;j<n+1;j+)(for(i=0;i<n;i+)if(l->shoolsi.boy1=j)cout<<"男子第"<<j<<"名学校为:"<<l->shoolsi.schoolname<<endl;void paixu3(sho l)(int i,j,k=1;int temp=0;for(j=0;j<n;j+)(for(i=0;i<n;i+)if(l->shoolsi.girl>

16、;l->shoolsj.girl)(k+;)l->shoolsj.girl1=k;k=1;)for(j=1;j<n+1;j+)(for(i=0;i<n;i+)if(l->shoolsi.girl1=j)cout<<"女子第"<<j<<"名学校为:"<<l->shoolsi.schoolname<<endl;)5 .根据需要查询各项成绩排名void chaxun1(sho l)(int j,a,b;cout<<"请按各学校的代码进行成绩查询

17、"<<endl;for(j=0;j<n;j+)cout<<j+1<<"."<<l->shoolsj.schoolname;cout<<endl;cin>>a;cout<<”请按各运动的项目的代码进行成成绩查询"<<endl;for(j=0;j<m;j+)cout«j+1«"."«l->shools0.sportsj.sportname;cout«endl;cin»b;

18、coutvv” 该学校"«l->shools0.sportsb-1.sportname«" 项目分数为:"«l->shoolsa-1.sportsb-1.num;cout«endl;)void chaxun2(sho I)(int ij,a,k=1;cout«"请按各运动的项目的代码进行成成绩查询"«endl;for(j=0;j<m;j+)cout«j+1«"."«l->shools0.sportsj.sport

19、name;cout«endl;cin»a;for(j=0;j<n;j+)(for(i=0;i<n;i+)if(l->shoolsi.sportsa-1.num>l->shoolsj.sportsa-1.num)(k+;)l->shoolsj.sportsa-1.s=k;k=1;)for(j=1;j<n+1;j+)for(i=0;i<n;i+)if(l->shoolsi.sportsa-1.s=j&&l->shoolsi.sportsa-1.num>0)cout<<l->sho

20、ols0.sportsa-1.sportname<<" 第 "<<j<<" 名 学 校 为 : "<<l->shoolsi.schoolname<<endl;6 . 主函数及其他代码的算法main()sho l;int flog=1;while(flog!=0)cout<<" 请选择您要执行的命令: "<<endl;cout<<"1 。 赋值 2. 求总 3. 总分排序 4. 男子项目排序5 。 女子项目排序6. 学校某个项

21、目查询 "cout<<"7. 某项目排名情况查询 0. 退出 "<<endl;cin>>flog;switch(flog)case 1:system("cls");l=fuzhi();break;case 2:system("cls");sum(l);break;case 3:system("cls");paixu1(l);break;case 4:system("cls");paixu2(l);break;case 5:system("c

22、ls");paixu3(l);break;case 6:system("cls");chaxun1(l);break;case 7:system("cls");chaxun2(l);break;case 0:cout<<"谢谢使用"<<endl;break;default:system("cls");cout<<” 请重新选择"<<endl;7 .函数的调用关系图 chaxun2(l)MainFuzhi()sum(1) paixu1(l) paix

23、u2(l) paixu3(l)chaxunl(l)四.调试分析:1 .在定义学校及运动会项目的类型是直接使用数组去定义,设定了好几个数组,这样在使用的过程中显得非常麻烦,改进方法后运用线性表去将学校及各个运动项目定义为结构变量,结构变量可以作为数组元素,同时这些数组还可以成为结 构类型的成员,并且结构变量和志向结构变量的指针都可以作为函数参数和返回 值。这样在使用的过程中间少了很多不必要的麻烦。2 .由于学校的个数和运动项目的个数不是很多, 所以在查找的选择上没有使用其 他计较麻烦的查找方式而是直接使用比较简便的、 针对查找对象较少的情况下使 用的直接查找法3 .本程序的算法都比较合理,采用了

24、线性顺序表和用的方式,尽可能的减少不必 要的麻烦。模块的划分也十分的合理,根据题目的要求,将模块十分情绪的分成 四个大的模块,由于数据对象并比较少,所以都是采用最简便最有效的方式。 然 后通过主函数直接调用这些函数已达到完成所需要的命令。4 .算法的时空分析1 .由于学校的个数我定义为n个,运动项目的个数我定义为 m个,所以在使用穿 的操作strcopy时的复杂度是O(n),其他都为字符串数组元素的使用,比较简 单分明在求总的过程的复杂度为 O (m*n),在总分排序过程中的时间复杂度为 O(m*r2),男子项目和女子项目排序的时间复杂度为O (n2),学校某个项目查询的时间复杂度为O (n*

25、m),某项目排名情况的复杂度为 O (m*r2)。2 .本实验采用数据抽象的方式将程序分为三个层次结构:结构模块,用模块,主控模块,很亲系的将设计思路反映出来,各模块的使用方便实现调试方便。五.用户手册:1 .本程序的运行环境为DOSM乍系统,执行文件为。2 .进入演示程序后,既显示用户界面:请选择您要执行的命令:1。赋值2.求总3.总分排序4.男子项目排序5。女子项目排序6.学校某个项目查询7.某叫忏排名情况查询0.退制按要求输入你要执行3 .首先进入“赋值”的命令,输入1+回车键,然后按照提示输入所需要的数据 值,结束符为回车键,当所有赋值都成功后,接回车键又进入上面的总界面。4 .根据你所需要的要求可以进行以上的命令, 根据命令所对应的数字进

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论