1、数据结构课程设计河 南 城 建 学院Henan University of Urban Construction数据结构程序设计课程设计报告学 号:084412130 姓 名:李鲁杨 专 业:软件工程 题 目:运动会分数统计 指导老师:魏新红 孟庆见 计算机科学与工程系2013年12月一、设计目的1.问题描述参加运动会有n个学校,学校编号为1n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1m,女子m+1m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些项目取前五名或前三名由学生自己设定。(m=20,n=20)基本要求
2、:1) 可以输入各个项目的前三名或前五名的成绩;2) 能统计各学校总分;3) 可以按学校编号、学校总分、男女团体总分排序输出;4) 可以按学校编号查询学校某个项目的情况;5) 可以按项目编号查询取得前三或前五名的学校。二.设计意义数据结构课程设计是在学完数据结构课程之后的实践教学环节。该实践教学是软件设计的综合训练,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能和技巧。学生通过数据结构课程设计在下述各方面得到锻炼:1、能根据实际问题的具体情况,结合数据结构课程中的基本理论和基本算法,正确分析出数据的逻辑结构,合理地选择相应的存储结构,并能设计出解决问题的有效算法。2、提高程序设计和
3、调试能力。学生通过上机实习,验证自己设计的算法的正确性。学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。3、培养算法分析能力。分析所设计算法的时间复杂度和空间复杂度,进一步提高程序设计水平。二. 设计内容第一部分进入程序首先进入成绩录入界面,先输入学校编号1,再输入学校1各个项目成绩0或1(0表示没获得该项目的该名次,1表示获得了该项目的该名次),然后再输入第二个学校编号2,再输入成绩;当输入其他的学校编号和成绩会提示错误输入,重新输入。第二部分1. 输入:1统计各学校总分并输出;2. 输入:2按学校编号排序输出;3. 输入:3按学校总分排序输出;4. 输入:4按男团体总分排序输出
4、;5. 输入:5按女团体总分排序输出;6. 输入:6按学校编号查询学校某个项目情况;7. 输入:7按项目编号查询取得名次的学校;8. 输入:0 退出系统9. 输入其他数据会提示错误输入,重新输入。三概要设计1功能模块图;2各个模块详细的功能描述。1 结构体运动项目 项目编号 ;名次;学校 学校编号;项目;团体总分;男团体总分;女团体总分;2 主程序(main)包括登陆欢迎程序,分数录入程序,查询程序,退出程序四详细设计1.功能函数的调用关系图2各功能函数的数据流程图3重设计及编码。数据类型定义 (1)运动项目的定义:struct matchint matchnum;int rank3;matb
5、m+gm;(2)学校的定义:struct schoolint schoolnum;struct match matbm+gm;int total;int boytotal;int girltotal;schN;五测试数据及运行结果1正常测试数据(3组)及运行结果输入:请输入学校编号:1项目编号 1 2 3 4 5 6 7第名: 1 1 1 1 1 1 1第名: 0 0 0 0 0 0 0第名: 1 1 1 1 1 1 1请输入学校编号: 2项目编号 1 2 3 4 5 6 7第名: 0 0 0 0 0 0 0第名: 1 1 1 1 1 1 1第名: 0 0 0 0 0 0 02非正常测试数据(
6、2组)及运行结果输入数据不合法,程序的健壮性使他课一自动报错.六 调试情况,设计技巧及体会1.对自己的设计进行评价,指出合理和不足之处,和改进方案算法的设计思想:本程序主要是使用顺序表来实现操作。一个运动会包括运动项目和参加运动会的学校。因此构造顺序表match,school。为了操作的方便,设计了一个总目录,选择相应序号进入各个操作,并有错误提示,每完成一个操作程序会提示选择返回目录或退出程序,对于总分的排序使用了冒泡排序。为了使整个程序界面看起来更加惬意,又添加了背景和字体颜色设置的程序语句。每个操作前都有操作指南,易于使用。2对设计及调试过程的心得体会1、由于刚开始程序比较简单,虽能运行
7、,但处理错误的能力很低,后来经过反复的添加修改,使程序能处理了错误,提高了健壮性。2、开始编时由于不太规范,编译出错后由于程序长,很难找到错误,后来规范了格式,错误容易找到了,以后编程要规范。3、算法的时空分析线性表使用的是顺序结构,各种算法的时间复杂度相对比较合理4、本程序相对来说比较容易看明白,其中涉及到的一些函数相对来说比较容易。通过调试,运行,基本上达到了要求,但还存在一些缺点。如:不够人性化等。七参考文献(1)C程序设计(第三版) 谭浩强 著 清华大学出版社(2)数据结构(C语言版)作者:严蔚敏,吴伟民 出版社:清华大学出版社(3)数据结构题集(C语言版)作者:严蔚敏,吴伟民 出版社
8、:清华大学出版社八附录:源代码#include #include #include #define N 2 /学校个数#define bm 4 /男团体个数#define gm 3 /女团体个数void xuanze();void xunhuan();struct match /项目int matchnum;int rank3;matbm+gm;struct school /学校int schoolnum;struct match matbm+gm;int total;int boytotal;int girltotal;schN;void huanyingni() /*开始界面,欢迎使用*/
9、printf(n);printf(t*n);printf(t*n);printf(t* *n);printf(t* 欢迎使用运动会分数统计系统 *n);printf(t* *n);printf(t*n);printf(t*nn );void input() /输入成绩int i,j,k;for(i=0;iN;i+) /初始化分数schi.total=0;schi.boytotal=0;schi.girltotal=0;for(k=0;kbm+gm;k+)schi.matk.rank0=0;schi.matk.rank1=0;schi.matk.rank2=0;schi.matk.matchnu
10、m=k+1;printf(ttt*n);printf(ttt*输入成绩*n);printf(ttt*nn);printf(*输入说明*n);printf(t1.学校编号为1-%d;nt 项目编号为1-%dnt (1-%d为男子项目,%d-%d为女子项目).n,N,bm+gm,bm,bm+1,bm+gm);printf(t2.成绩只能是0或1nt (0表示没获得该项目的该名次,1表示获得了该项目的该名次.)n,N);printf(t3.请以Tab键切换下一次输入nnn);printf(*输入数据*n);for(i=0;iN;i+)/以学校编号为顺序输入数据printf(*请输入学校编号:);lo
11、op3:scanf(%d,&schi.schoolnum);/获取一个学校编号if(schi.schoolnumN)printf(输入错误(只能是1-%d)请重新输入:,N);goto loop3;printf(项目编号 );for(k=0;kbm+gm;k+)printf(%d ,schi.matk.matchnum);printf(n);for(j=0;j3;j+) /输入每一个学校每一个项目是否在前三名获得成绩,需要添加一个前五名的情况 loop: printf(第(%d)名:t,j+1); for(k=0;kbm+gm;k+)scanf( %d,&schi.matk.rankj);fo
12、r(k=0;kbm+gm;k+)if(schi.matk.rankj!=0&schi.matk.rankj!=1)printf(输入错误,请重新输入,成绩只能是0或1n);goto loop;void totaljisuan() /总分计算,学校总分,以及男女团体的总分计算fflush(stdin);int i,k,b;for(i=0;iN;i+)for(k=0,b=0;kbm+gm;k+) b=schi.matk.rank0*5+schi.matk.rank1*3+schi.matk.rank2*2;schi.total=schi.total+b;if(k=bm)schi.girltotal
13、=schi.girltotal+b;void mulu()printf(nn *系统目录*n); /目录printf(tt*n);printf(tt* 1.统计各学校总分 *t n);printf(tt* 2.按学校编号排序输出 *t n);printf(tt* 3.按学校总分排序输出 *t n);printf(tt* 4.按男团体总分排序输出 *t n);printf(tt* 5.按女团体总分排序输出 *t n);printf(tt* 6.按学校编号查询学校某个项目情况 *t n);printf(tt* 7.按项目编号查询取得名次的学校 *t n);printf(tt* 0.退出 *t n)
14、;printf(tt*n);void funct0() /退出系统printf(ntt*n);printf(tt* 谢谢使用! *n);printf(tt*n);exit(0);void funct1() /统计各学校总分 int i,q;printf( *统计各学校总分*n);printf( *学校编号*tttt*总分*n);for(i=0;iN;i+)printf(t%dtttt%dn,schi.schoolnum,schi.total);printf(nn);printf(# 0:退出;1:返回目录。n);printf(*请选择: );loop2:scanf(%d,&q);if(q=0)
15、 funct0();if(q=1) xunhuan(); else printf(输入错误(只能是0或1),请重新输入:);goto loop2;void funct2() /按学校编号排序(冒泡排序)struct school sch1;int i,j,q;for(j=0;jN-1;j+)for(i=0;ischi+1.schoolnum)sch1=schi;schi=schi+1;schi+1=sch1;printf( *按学校编号排序*n); printf(*学校编号*ttt*总分*n);for(i=0;iN;i+)printf(t%dtttt%dn,schi.schoolnum,sch
16、i.total);printf(n);printf(n);printf(# 0:退出;1:返回目录。n);printf(*请选择: );loop2: scanf(%d,&q);if(q=0) funct0();if(q=1) xunhuan(); else printf(输入错误(只能是0或1),请重新输入:);goto loop2;void funct3() /按学校总分排序struct school sch1;int i,j,q;for(j=0;jN-1;j+)for(i=0;iN-j-1;i+)if(schi.totalschi+1.total)sch1=schi;schi=schi+1
17、;schi+1=sch1;printf( *按学校总分排序*n); printf( *学校编号*tttt*总分*n);for(i=0;iN;i+)printf(t%dtttt%dn,schi.schoolnum,schi.total);printf(n);printf(n);printf(# 0:退出;1:返回目录。n);printf(*请选择: );loop2: scanf(%d,&q);if(q=0) funct0();if(q=1) xunhuan(); else printf(输入错误(只能是0或1),请重新输入:);goto loop2;void funct4() /按男团体总分排序
18、struct school sch1;int i,j,q;for(j=0;jN-1;j+)for(i=0;iN-j-1;i+)if(schi.boytotalschi+1.boytotal)sch1=schi;schi=schi+1;schi+1=sch1;printf( *按男团体总分排序*n); printf( *学校编号*tt*总分*n);for(i=0;iN;i+)printf(t%dtttt%dn,schi.schoolnum,schi.boytotal);printf(n);printf(n);printf(# 0:退出;1:返回目录。n);printf(*请选择: );loop2
19、: scanf(%d,&q);if(q=0) funct0();if(q=1) xunhuan(); else printf(输入错误(只能是0或1),请重新输入:);goto loop2;void funct5() /按女团体总分排序struct school sch1;int i,j,q;for(j=0;jN-1;j+)for(i=0;iN-j-1;i+)if(schi.girltotalschi+1.girltotal)sch1=schi;schi=schi+1;schi+1=sch1;printf( *按女团体总分排序*n); printf( *学校编号*tt*总分*n);for(i=
20、0;iN;i+)printf(t%dtttt%dn,schi.schoolnum,schi.girltotal);printf(n);printf(n);printf(# 0:退出;1:返回目录。n);printf(*请选择: );loop2:scanf(%d,&q);if(q=0) funct0();if(q=1) xunhuan();else printf(输入错误(只能是0或1),请重新输入:);goto loop2;void funct6() /按学校编号查询学校某个项目情况int i,n,m,q;printf( *按学校编号查询学校某个项目情况*n);loop1: printf(*请
21、输入所要查询的学校编号: );scanf(%d,&n);if(n!=1&n!=2)printf(!输入错误,学校编号只能是0或1,请重新输入!n);goto loop1;printf(*请输入所要查询的项目编号: );scanf(%d,&m);for(i=0;iN;i+) /需要添加前五名的情况if(n=schi.schoolnum) printf(学校编号: %dt项目编号%dn,n,m);if(schi.matm.rank0=1)printf(第一名(获得) t);if(schi.matm.rank1=1)printf(第二名(获得) t);if(schi.matm.rank2=1)pri
22、ntf(第三名(获得) t);if(schi.matm.rank0=0&schi.matm.rank1=0&schi.matm.rank1=0)printf(本校该项目未进入前三名);printf(n);printf(n);printf(# 0:退出;1:返回目录;2:返回上一级。n);printf(*请选择: );loop2: scanf(%d,&q);if(q=1) xunhuan();if(q=0) funct0();if(q=2) goto loop1;else printf(输入错误(只能是0或1或2),请重新输入:);goto loop2;void funct7() /按项目编号查询取得名次的学校 int i,t,q;printf( *按项目编号查询取得名次的学校*
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1