1、数据结构课程设计 实验名称: 运动会分数记录 学生班级: 2023级通信二班 学生姓名: 赵玉昌 学生学号: 实验日期: 2023年7月3日 一.需求分析:1任务:参与运动会有n个学校,学校编号为1n。比赛提成m个男子项目,和w个女子项目。项目编号为男子1m,女子m+1m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些项目取前五名或前三名由学生自己设定。(m=20,n=0数据关系:R1=|ai-1,aiD,I=2,,n基本操作: StrAssign(&T,chars)初始条件:chars是字符串常量。操作结果:生成一起值等于c
2、hars的字符串T.StrCopy(&T,s)初始条件: 串S存在操作结果:由串复制得串T.StrEmpty(s)初始条件: 串S存在。操作结果:若S为空串,则返回TRUE,否则返回FALSE.Strcompare(S,T)初始条件:串S和T存在。操作结果:若ST,则返回0;若S=T,则返回值=0,若ST,则返回值0.Strlength(S)初始条件: 串S存在。操作结果:返回S的元素个数,称为串的长度。ClearString(&S)初始条件: 串S存在。操作结果:将S清为空串。Concat(&T,S1,S2)初始条件:串S1和串S2都存在。操作结果:用Y返回由S1和S2连接而成的新串。2.现
3、性顺序表的抽象数据定义如下:Typedef Struct LNode ElemType *elemInt lengthInt listsize;LNode,*linklist; 3.本程序分为三个模块:1) 主程序模块 main()while(标志!=0) 执行命令; 输入标志; switch(标志) case 标志:命令;break; default:命令;2)赋值模块实现各个数据的赋值 Sho fuzhi() for( )输入学校的名字 for()输入几个体育项目For()按成绩输入各个体育项目的学校的名次3)排序模块:对各项成绩进行排序Void paixu( ) 给i,j,赋初值; Fo
4、r() If判断; 排序; 输出结果;4)查询模块;根据规定查询成绩的排名情况 Void chaxun () 定义临时变量; 输入要查找的代码; For() If(命令=进入) 输出成绩; 各个模块之间的关系如下: 主程序模块 赋值模块 排序模块 查找模块三具体设计:#includeiostream.h #includemalloc.h #include #includestdlib.h #define m 4 #define n 5 1.运动项目的类型 typedef struct sport char sportname20; int num;int s; spo; typedef str
5、uct sport1 char schoolname20; spo sportsm; int zong,boy,girl,zong1,boy1,girl1; spos,*spor; 2.学校名字的类型typedef struct school spos shoolsn; *sho,shos; 3.进行赋值操作,输入学校名字和运动会项目以及其的排名情况sho fuzhi() sho l;int a,b,c,d,e; l=(shos*)malloc(sizeof(shos); int i,j; for(i=0;in;i+) cout请输入i+1个学校的名字l-shoolsi.schoolname;
6、system(cls); for(i=0;im;i+) cout请输入i+1个运动项目的名字l-shools0.sportsi.sportname;system(cls); for(j=0;j+;jshoolsj.sportsi.sportname,l-shools0.sportsi.sportname); for(i=0;in;i+) for(j=0;jshoolsi.sportsj.num=0;l-shoolsi.sportsj.s=0; l-shoolsi.zong=0;l-shoolsi.boy=0;l-shoolsi.girl=0; for(i=0;im-3;i+) cout请按各学
7、校的代码进行成绩输入endl; for(j=0;jn;j+) coutj+1.shoolsj.schoolname; coutendl; cout请输入shools0.sportsi.sportnameabcde;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;im;i+) cout请按各学校的代码进行成绩输入endl; for(
8、j=0;jn;j+) coutj+1.shoolsj.schoolname ; coutendl; cout请输入shools0.sportsi.sportnameabc;system(cls); l-shoolsa-1.sportsi.num=5; l-shoolsb-1.sportsi.num=3; l-shoolsc-1.sportsi.num=2; return l; void sum(sho l) int i,j; for(i=0;in;i+) for(j=0;jshoolsi.zong=l-shoolsi.zong+l-shoolsi.sportsj.num; for(j=0;js
9、hoolsi.boy=l-shoolsi.boy+l-shoolsi.sportsj.num; for(j=m-3;jshoolsi.girl=l-shoolsi.girl+l-shoolsi.sportsj.num; coutshoolsi.schoolname总分为shoolsi.zongendl; 4.对输入的分数情况进行排序void paixu1(sho l) int i,j,k=1; int temp=0; for(j=0;jn;j+) for(i=0;ishoolsi.zongl-shoolsj.zong) k+; l-shoolsj.zong1=k; k=1; for(j=1;j
10、n+1;j+) for(i=0;ishoolsi.zong1=j) cout总分第j名学校为:shoolsi.schoolnameendl; void paixu2(sho l) int i,j,k=1; int temp=0; for(j=0;jn;j+) for(i=0;ishoolsi.boyl-shoolsj.boy) k+; l-shoolsj.boy1=k; k=1; for(j=1;jn+1;j+) for(i=0;ishoolsi.boy1=j) cout男子第j名学校为:shoolsi.schoolnameendl; void paixu3(sho l) int i,j,k=
11、1; int temp=0; for(j=0;jn;j+) for(i=0;ishoolsi.girll-shoolsj.girl) k+; l-shoolsj.girl1=k; k=1; for(j=1;jn+1;j+) for(i=0;ishoolsi.girl1=j) cout女子第j名学校为:shoolsi.schoolnameendl; 5.根据需要查询各项成绩排名void chaxun1(sho l) int j,a,b; cout请按各学校的代码进行成绩查询endl; for(j=0;jn;j+) coutj+1.shoolsj.schoolname; couta; cout请按
12、各运动的项目的代码进行成成绩查询endl; for(j=0;jm;j+) coutj+1.shools0.sportsj.sportname; coutb; cout该学校shools0.sportsb-1.sportname项目分数为:shoolsa-1.sportsb-1.num; coutendl; void chaxun2(sho l) int i,j,a,k=1; cout请按各运动的项目的代码进行成成绩查询endl; for(j=0;jm;j+) coutj+1.shools0.sportsj.sportname; couta; for(j=0;jn;j+) for(i=0;ish
13、oolsi.sportsa-1.numl-shoolsj.sportsa-1.num) k+; l-shoolsj.sportsa-1.s=k; k=1; for(j=1;jn+1;j+) for(i=0;ishoolsi.sportsa-1.s=j&l-shoolsi.sportsa-1.num0) coutshools0.sportsa-1.sportname第j名学校为:shoolsi.schoolnameendl; 6.主函数及其他代码的算法main() sho l;int flog=1; while(flog!=0) cout请选择您要执行的命令:endl; cout1。赋值 2.求
14、总 3.总分排序 4.男子项目排序 5。女子项目排序 6.学校某个项目查询; cout7.某项目排名情况查询 0.退出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(cls);paixu3(l);break; case 6:system(cls);chaxun1(l);break; case 7:s
15、ystem(cls);chaxun2(l);break; case 0:cout谢谢使用endl;break; default:system(cls);cout请重新选择endl; 7.函数的调用关系图 MainFuzhi() sum(1) paixu1(l) paixu2(l) paixu3(l) chaxun1(l) chaxun2(l)四调试分析:1.在定义学校及运动会项目的类型是直接使用数组去定义,设定了好几个数组,这样在使用的过程中显得非常麻烦,改善方法后运用线性表去将学校及各个运动项目定义为结构变量,结构变量可以作为数组元素,同时这些数组还可以成为结构类型的成员,并且结构变量和志向
16、结构变量的指针都可以作为函数参数和返回值。这样在使用的过程中间少了很多不必要的麻烦。2.由于学校的个数和运动项目的个数不是很多,所以在查找的选择上没有使用其他计较麻烦的查找方式而是直接使用比较简便的、针对查找对象较少的情况下使用的直接查找法3.本程序的算法都比较合理,采用了线性顺序表和串的方式,尽也许的减少不必要的麻烦。模块的划分也十分的合理,根据题目的规定,将模块十分情绪的提成四个大的模块,由于数据对象并比较少,所以都是采用最简便最有效的方式。然后通过主函数直接调用这些函数已达成完毕所需要的命令。4.算法的时空分析1.由于学校的个数我定义为n个,运动项目的个数我定义为m个,所以在使用穿的操作
17、strcopy时的复杂度是O(n),其他都为字符串数组元素的使用,比较简朴分明在求总的过程的复杂度为O(m*n),在总分排序过程中的时间复杂度为O(m*n2),男子项目和女子项目排序的时间复杂度为O(n2),学校某个项目查询的时间复杂度为O(n*m),某项目排名情况的复杂度为O(m*n2)。2.本实验采用数据抽象的方式将程序分为三个层次结构:结构模块,串模块,主控模块,很亲系的将设计思绪反映出来,各模块的使用方便实现调试方便。五用户手册:1 本程序的运营环境为DOS操作系统,执行文献为ydhfstj.cpp。2 进入演示程序后,既显示用户界面:请选择您要执行的命令:1。赋值 2.求总 3.总分
18、排序 4.男子项目排序 5。女子项目排序 6.学校某个项目查询7.某项目排名情况查询 0.退出按规定输入你要执行的命令3 一方面进入“赋值”的命令,输入1+回车键,然后按照提醒输入所需要的数据值,结束符为回车键,当所有赋值都成功后,按回车键又进入上面的总界面。4 根据你所需要的规定可以进行以上的命令,根据命令所相应的数字进行操作,如要查找总分排序就输入“3”然后使用回车键为执行命令符;假如要退出就输入“0”+回车键就可以退出界面。六测试数据测试数据和输出结果分别入下:请选择您要执行的命令:1。赋值 2.求总 3.总分排序 4.男子项目排序 5。女子项目排序 6.学校某个项目查询7.某项目排名情
19、况查询 0.退出1赋值: 请输入1个学校的名字:东华请输入1个学校的名字:上外请输入1个学校的名字:外贸请输入1个学校的名字:视觉请输入1个学校的名字:工技大请输入一个运动项目的名字:篮球请输入一个运动项目的名字:游泳请输入一个运动项目的名字:足球请输入一个运动项目的名字:马拉松输入篮球前五名的学校代码:14532请输入游泳前三名的学校代码:152请输入足球前三名的学校代码:143请输入马拉松前三名的学校代码:1352.求总:东华总分为17上外总分为4外贸总分为14视觉总分为8工技大总分为53.总分排序:总分第1名学校为:东华总分第2名学校为:外贸总分第3名学校为:视觉总分第4名学校为:工技大
20、总分第5名学校为:上外4.男子项目排序:男子第1名学校为:外贸男子第2名学校为:视觉男子第3名学校为:工技大男子第4名学校为:东华男子第5名学校为:上外5.女子项目排序:女子第1名学校为:东华女子第2名学校为:外贸女子第3名学校为:上外女子第4名学校为:视觉女子第5名学校为:工技大6.学校某个项目的查询:请按各学校代码进行查询:1. 东华2.上外.3.外贸4.视觉5.工技大1请按各运动的项目的代码进行查询:1. 篮球2.游泳3.足球4.马拉松2该学校的游泳项目的分数为:57.某项目排名情况查询:请按葛云东的项目代码及逆行成绩查询1. 篮球2.游泳3.足球4.马拉松4马拉松第1名学校为:东华马拉松第2名学校为:外贸马拉松第3名学校为:工技大8.退出:谢谢使用Press any key to continue七附录源程序文献名清单:iostream.hmalloc.hstring.hstdlib.h