1、运动会分数统计滨江学院数据结构课程设计学 号 20102308022 学生姓名 李兆梅 院 系 计算机 专 业 计算机科学与技术 指导老师 宣文霞 二一二 年 五 月 二十五 日运动会分数统计 (一)题目的内容及要求参加运动会有n个学校,学校编号为1n。比赛分成m个男子项目和w个女子项目。项目编号为男子1m和女子m+1m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m=20,n=20)【功能要求】(1)可以输入各个项目的前三名或前五名的成绩;(2)能统计各学校总分,(3)可以按学校编号、学校
2、总分、男女团体总分排序输出;(4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。【规定】输入数据形式和范围:20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)【输出形式】有中文提示,各学校分数为整形【界面要求】有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。【存储结构】学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构。(二)需求分析本系统主要是运动会分数统计方案设计。运动会分数统计方案适
3、合采用结构体数组,为了实现系统功能,主要应实现以下几部分:比赛成绩输入、比赛成绩输出、查询比赛成绩和调用统计结果。 需要输入学校编号,项目编号,取得的名次,以及哪些名次。(三)概要设计1、算法的设计思想:本程序主要是使用顺序表来实现操作。一个运动会包括运动项目和参加运动会的学校。因此构造顺序表match,school。为了操作的方便,设计了一个总目录,选择相应序号进入各个操作,并有错误提示,每完成一个操作程序会提示选择返回目录或退出程序,对于总分的排序使用了冒泡排序。为了使整个程序界面看起来更加惬意,又添加了背景和字体颜色设置的程序语句。每个操作前都有操作指南,易于使用。2、 结构体运动项目
4、项目编号 ;名次;学校 学校编号;项目;团体总分;男团体总分;女团体总分;3、 主程序(main) 包括登陆欢迎程序,分数录入程序,查询程序,退出程序4、程序模块机之间的调用关系 (四)详细设计1、宏定义:#define N 2#define bm 4#define gm 32、 数据类型定义 (1)运动项目的定义: struct matchint matchnum; int rank3;matbm+gm;(2) 学校的定义: struct school int schoolnum; struct match matbm+gm; int total; int boytotal; int gir
5、ltotal;schN; 3、文件存储文件的存储我用到了fprintf函数和fscanf 函数进行数据的逐步读入读出代码如下;Status Writedata()/存到文件中 FILE *report; int i,j; if(report=fopen(sportdata.txt,w)=null) fprintf(不能打开文件n); exit(1); fprintf(report,%dn,n); fprintf(report,%dn,m); fprintf(report,%dn,w); for(i=0;in;i+) fprintf(report,%dn,hi.schoolnum); fprin
6、tf(report,%sn,hi.name); fprintf(report,%dn,hi.score); fprintf(report,%dn,hi.mscore); fprintf(report,%dn,hi.wscore); for(j=0;jm+w;j+) fprintf(report,%dn,hi.cj.itemnum); fprintf(report,%sn,hi.cj.name); fprintf(report,%dn,hi.cj.top); fprintf(report,%dn,hi.cj.rangej); fprintf(report,nn); fclose(report);
7、 return OK;(五)源代码#include #include #include #includeusing namespace std; int n; /n个学校 int m; /m个男子项目 int w; /w个女子项目 struct pro /表示项目的结构体 string name; /项目名称 int snum6; /前5名学校的编号 p21; struct school /表示学校的结构体 int num; string name; /学校名称 int score; /学校总分 int male; /男子总分 int female; /女子总分 sch21; int inte
8、gral5=7,5,3,2,1;/前五名得分 void input() int i,j,y,x; printf(请输入学校数目:); y=0; while(1) scanf(%d,&n); if(n=1&n=20)y=1; if(y)break; else printf(如输入数据有误,请重新输入:); for(i=1;ischi.name; schi.score=0; /学校总分schi.female=0; schi.male=0; schi.num=i; printf(请输入男子项目数和女子项目数:); y=0; while(1) scanf(%d%d,&m,&w); if(m=1&w=1
9、)y=1; if(y)break; else printf(请输入数据有误,请重新输入:); for(i=1;ipi.name; printf(请输入第%d个项目的前5名的学校编号:n,i); for(j=1;j=1&x=20)y=1; if(y)break; else printf(请输入数据有误,请重新输入:); pi.snumj=x; schx.score+=integralj-1; if(i=m)schx.male+=integralj-1; else schx.female+=integralj-1; void print(int i) coutschi.numsetw(10)sch
10、i.namesetw(8)schi.scoresetw(9) schi.malesetw(10)schi.femaleendl; void bianhao() /按编号排序 int i,j; school t; for(i=1;in;i+) for(j=i;jschj.num) t=schi;schi=schj;schj=t; printf(n按编号排列:n); printf(编号 学校名称 总分 男子总分 女子总分n); for(i=1;i=n;i+) print(i); void zongfen() /按学校总分排序 int i,j; school t; for(i=1;in;i+) fo
11、r(j=i;j=n;j+) if(schi.scoreschj.score) t=schi;schi=schj;schj=t;printf(n按学校总分排printf(编号 学校名称 总分 男子总分 女子总分n); for(i=1;i=n;i+) print(i); ofstream fout;fout.open(运动会分数统计.txt); fout编号 学校名称 总分 男子总分 女子总分endl;for(i=1;i=n;i+) foutschi.numsetw(13)schi.namesetw(8)schi.scoresetw(9) schi.malesetw(10)schi.femalee
12、ndl; fout.close(); void malezf() /按学校男总分排序 int i,j; school t; for(i=1;in;i+) for(j=i;j=n;j+) if(schi.maleschj.male) t=schi;schi=schj;schj=t; printf(n按学校男子总分排列:n); printf(编号 学校名称 总分 男子总分 女子总分n); for(i=1;i=n;i+) print(i); void femalezf() /按学校女总分排序 int i,j; school t; for(i=1;in;i+) for(j=i;j=n;j+) if(s
13、chi.femaleschj.female) t=schi;schi=schj;schj=t; printf(n按学校女子总分排列:n); printf(编号 学校名称 总分 男子总分 女子总分n); for(i=1;i=n;i+) print(i); cout=1&s=n)y=1; if(y)break; else printf(如输入数据有误,请重新输入:); printf(该学校相关信息:n); printf(编号 学校名称 总分 男子总分 女子总分n); for(i=1;i=n;i+) if(schi.num=s) print(i); break; cout=1&s=n)y=1; if
14、(y)break; else printf(输入数据有误,请重新输入:); coutps.name前5名学校编号及名称为:endl; printf(名次 编号 学校名称n); for(i=1;i=5;i+) cout i ps.snumisetw(12)sch ps.snumi .nameendl; coutendl; void solve() /菜单函数 int z; while(1) printf(n选择您需要的操作(选择序号):n); printf(1.按学校编号排序输出n); printf(2.按学校总分排序输出n); printf(3.按学校男总分排序输出n); printf(4.按
15、学校女总分排序输出n); printf(5.查询某个学校成绩n); printf(6.查询某个项目成绩n); printf(7.结束nn); 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; int main() /主函数 input(); solve(); return 0; (六)运行结果及分析1、运行结果(1)录入学校信息(2)按学校编号输出(3)按学校总分排名(4)按男子总分排
16、名 (5)按女子总分排名(6)输入学校编号查询(7)输入项目编号查询2、运行分析本系统调试过程中遇到的主要问题、原因和解决方法如下面绍。调试过程中出现的问题和处理方式:(1) 程序出现语法错误发现是输入名次信息的地方忘带地址符&。 添加取地址符。 rintf(*名次:); scanf(%d,&hi.cj.ranges);(2)在输出模块不能将全部的学校信息输出,属于算法编写错误,正确的程序应该为:if(hrememberi.mscorehj.mscore) k=rememberi;rememberi=rememberj;rememberj=k;(七)个人体会与总结本程序的主要运用了C语言开发。从这次实践中我们对数据结构的知识更近了一成,能更好的实现利用数据结构来解决实际问题。更加巩固了我们的专业知识。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1