运动会分数统计.docx

上传人:b****6 文档编号:7100585 上传时间:2023-01-17 格式:DOCX 页数:13 大小:278.44KB
下载 相关 举报
运动会分数统计.docx_第1页
第1页 / 共13页
运动会分数统计.docx_第2页
第2页 / 共13页
运动会分数统计.docx_第3页
第3页 / 共13页
运动会分数统计.docx_第4页
第4页 / 共13页
运动会分数统计.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

运动会分数统计.docx

《运动会分数统计.docx》由会员分享,可在线阅读,更多相关《运动会分数统计.docx(13页珍藏版)》请在冰豆网上搜索。

运动会分数统计.docx

运动会分数统计

 

滨江学院

《数据结构》课程设计

 

学号20102308022

学生姓名李兆梅

院系计算机

专业计算机科学与技术

指导老师宣文霞

二O一二年五月二十五日

运动会分数统计

(一)题目的内容及要求

参加运动会有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)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。

【规定】

输入数据形式和范围:

20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)

【输出形式】

有中文提示,各学校分数为整形

【界面要求】

有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。

【存储结构】

学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。

(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构。

(二)需求分析

本系统主要是运动会分数统计方案设计。

运动会分数统计方案适合采用结构体数组,为了实现系统功能,主要应实现以下几部分:

比赛成绩输入、比赛成绩输出、查询比赛成绩和调用统计结果。

需要输入学校编号,项目编号,取得的名次,以及哪些名次。

(三)概要设计

1、算法的设计思想:

本程序主要是使用顺序表来实现操作。

一个运动会包括运动项目和参加运动会的学校。

因此构造顺序表match,school。

为了操作的方便,设计了一个总目录,选择相应序号进入各个操作,并有错误提示,每完成一个操作程序会提示选择返回目录或退出程序,对于总分的排序使用了冒泡排序。

为了使整个程序界面看起来更加惬意,又添加了背景和字体颜色设置的程序语句。

每个操作前都有操作指南,易于使用。

2、结构体

运动项目

{项目编号;名次;};

学校

{学校编号;项目;团体总分;男团体总分;女团体总分;};

3、主程序(main)

包括登陆欢迎程序,分数录入程序,查询程序,退出程序

4、程序模块机之间的调用关系

(四)详细设计

1、宏定义:

#defineN2

#definebm4

#definegm3

2、数据类型定义

(1)运动项目的定义:

structmatch{intmatchnum;

intrank[3];

}mat[bm+gm];

(2)学校的定义:

structschool{

intschoolnum;

structmatchmat[bm+gm];

inttotal;

intboytotal;

intgirltotal;

}sch[N];

 

3、文件存储

文件的存储我用到了fprintf函数和fscanf函数进行数据的逐步读入读出

代码如下;

StatusWritedata()

{//存到文件中

FILE*report;

inti,j;

if((report=fopen("sportdata.txt","w"))==null){

fprintf("不能打开文件\n");

exit

(1);}

fprintf(report,"%d\n",n);

fprintf(report,"%d\n",m);

fprintf(report,"%d\n",w);

for(i=0;i

fprintf(report,"%d\n",h[i].schoolnum);

fprintf(report,"%s\n",h[i].name);

fprintf(report,"%d\n",h[i].score);

fprintf(report,"%d\n",h[i].mscore);

fprintf(report,"%d\n",h[i].wscore);

for(j=0;j

fprintf(report,"%d\n",h[i].c[j].itemnum);

fprintf(report,"%s\n",h[i].c[j].name);

fprintf(report,"%d\n",h[i].c[j].top);

fprintf(report,"%d\n",h[i].c[j].range[j]);}

fprintf(report,"\n\n");}

fclose(report);

returnOK;}

(五)源代码

#include

#include

#include

#include

usingnamespacestd;

intn;//n个学校

intm;//m个男子项目

intw;//w个女子项目

structpro//表示项目的结构体

{

stringname;//项目名称

intsnum[6];//前5名学校的编号

}p[21];

structschool//表示学校的结构体

{

intnum;

stringname;//学校名称

intscore;//学校总分

intmale;//男子总分

intfemale;//女子总分

}sch[21];

intintegral[5]={7,5,3,2,1};//前五名得分

voidinput(){

inti,j,y,x;

printf("请输入学校数目:

");

y=0;

while

(1){

scanf("%d",&n);

if(n>=1&&n<=20)y=1;

if(y)break;

elseprintf("如输入数据有误,请重新输入:

");}

for(i=1;i<=n;i++){

printf("请输入第%d个学校的名称:

",i);把

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].name;

printf("请输入第%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];

elsesch[x].female+=integral[j-1];}

}

}

voidprint(inti){

cout<

<

}

voidbianhao()//按编号排序

{

inti,j;

schoolt;

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);}

voidzongfen()//按学校总分排序

{

inti,j;

schoolt;

for(i=1;i

for(j=i;j<=n;j++)

if(sch[i].score

{t=sch[i];sch[i]=sch[j];sch[j]=t;}

printf("\n按学校总分排

printf("编号学校名称总分男子总分女子总分\n");

for(i=1;i<=n;i++)

print(i);

ofstreamfout;

fout.open("运动会分数统计.txt");

fout<<"编号学校名称总分男子总分女子总分"<

for(i=1;i<=n;i++)

{fout<

<

fout.close();}

voidmalezf()//按学校男总分排序

{

inti,j;

schoolt;

for(i=1;i

for(j=i;j<=n;j++)

if(sch[i].male

{t=sch[i];sch[i]=sch[j];sch[j]=t;}}

printf("\n按学校男子总分排列:

\n");

printf("编号学校名称总分男子总分女子总分\n");

for(i=1;i<=n;i++)

print(i);}

voidfemalezf()//按学校女总分排序

{

inti,j;

schoolt;

for(i=1;i

for(j=i;j<=n;j++)

if(sch[i].female

{t=sch[i];sch[i]=sch[j];sch[j]=t;}}

printf("\n按学校女子总分排列:

\n");

printf("编号学校名称总分男子总分女子总分\n");

for(i=1;i<=n;i++)

print(i);

cout<

voidcxsch()//查询学校信息{

inti,y,s;

printf("请输入需要查询的学校编号:

");

y=0;

while

(1){

scanf("%d",&s);

if(s>=1&&s<=n)y=1;

if(y)break;

elseprintf("如输入数据有误,请重新输入:

");}

printf("该学校相关信息:

\n");

printf("编号学校名称总分男子总分女子总分\n");

for(i=1;i<=n;i++){

if(sch[i].num==s){

print(i);

break;}

}

cout<

voidcxxm()//查询项目信息

{

inti,y,s;

printf("输入需要查询的项目编号:

");

y=0;

while

(1){

scanf("%d",&s);

if(s>=1&&s<=n)y=1;

if(y)break;

elseprintf("输入数据有误,请重新输入:

");}

cout<

"<

printf("名次编号学校名称\n");

for(i=1;i<=5;i++)

cout<<""<

cout<

voidsolve()//菜单函数

{

intz;

while

(1){

printf("\n选择您需要的操作(选择序号):

\n");

printf("1.按学校编号排序输出\n");

printf("2.按学校总分排序输出\n");

printf("3.按学校男总分排序输出\n");

printf("4.按学校女总分排序输出\n");

printf("5.查询某个学校成绩\n");

printf("6.查询某个项目成绩\n");

printf("7.结束\n\n");

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;}

}

intmain()//主函数

{input();

solve();

return0;}

(六)运行结果及分析

1、运行结果

(1)录入学校信息

(2)按学校编号输出

(3)按学校总分排名

(4)按男子总分排名

(5)按女子总分排名

(6)输入学校编号查询

(7)输入项目编号查询

2、运行分析

本系统调试过程中遇到的主要问题、原因和解决方法如下面绍。

调试过程中出现的问题和处理方式:

(1)程序出现语法错误

发现是输入名次信息的地方忘带地址符&。

添加取地址符。

rintf("*****名次:

");scanf("%d",&h[i].c[j].range[s]);

(2)在输出模块不能将全部的学校信息输出,属于算法编写错误,正确的程序应该为:

if(h[remember[i]].mscore

k=remember[i];remember[i]=remember[j];remember[j]=k;

(七)个人体会与总结

本程序的主要运用了C语言开发。

从这次实践中我们对数据结构的知识更近了一成,能更好的实现利用数据结构来解决实际问题。

更加巩固了我们的专业知识。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1