李微090214运动会分数统计问题.docx
《李微090214运动会分数统计问题.docx》由会员分享,可在线阅读,更多相关《李微090214运动会分数统计问题.docx(20页珍藏版)》请在冰豆网上搜索。
李微090214运动会分数统计问题
数据结构课程设计
题目:
运动会分数统计问题
学院:
理学院
班级:
09-2
学生姓名:
李微
学生学号:
14
指导教师:
张太发
2011年12月19日
课程设计任务书
姓名
李微
班级
09-2
学号
14
设计题目
运动会分数统计问题
理论要点
运动会管理系统是用C语言编写的,根据C语言中结构体对它结构成员的封装性,可以保证数据的完备性。
最关键的部分是利用数据结构中的排序和查找,我用的是起泡排序和直接查找方法。
还有数据文件的数据读写方法等相关内容。
设计目标
能把这个程序应用到高校的运动会中,使全民运动起来。
也使各大高校的运动会达到实时性,安全性,准确性,可靠性。
研究方法步骤
1、分析题目2、查找数据及收集资料3、确定思路4、编写程序
5、调试程序6、设计报告
预期结果
根据用户的需要,能提示用户输入运动会的参数,根据输入的参数,能得到用户需要的结果。
而且输出的结果格式优美,一目了然。
计划与进步的安排
第一天:
分析题目,确定需要查询的数据
第二天:
去图书馆或者边度文档收集资料
第三天:
整理资料,选出对自己有用的资料
第四天:
确定大致思路。
列出编程提纲
第五天:
编写程序第六天:
调试程序
第七天:
设计报告,做最后的检查
摘要
针对运动会在全国范围内普遍展开,许多学校定期举行不同规模的运动会。
但是在运动会举行过程中,一直存在着参赛人数多,项目设置复杂,时间紧凑的问题。
而且,另一方面,人们对比赛的实时性,安全性,准确性,可靠性要求是越来越高。
而单凭人工操作是达不到这些要求的。
最重要的是这些问题能否解决直接关系到运动会的成功与否。
所以为了能使各高校大学生能有一个更好的施展平台,我上网上搜集资料,了解全国各大高校举办运动会的情况,在结合自己所在城市的环境及经济发展情况,自己本学校运动会开展情况,给出了一下调查结果。
根据调查,现在全国已经有不少学校在田径运动会中采用了现代化的计算机技术进行运动会的系管理,有的已经达到了一个相当高的水平,但是我们发现这些运动会实现的标准不一,参差不齐,而且更多的情况下这些系统只是实现了对运动会的分数统计功能,人性化,自动化服务等方面还有许多不足和欠缺。
而在当今的社会,单凭人力是不够的,已经满足不了现在的人们对发展的需要了。
所以我们更多的应该添加计算机技术。
通过现代化技术控制整个运动会流程,才可能达到我们的要求。
我根据自己学校运动会的开展和组织情况,结合运动会的组织原则和相关规定,运用现代计算机技术,以全新的模式设计开发了适合田径运动会的运动会的管理系统。
为了解决这些问题,本文让运动员比赛前由本学校统一输入个人信息即可,这样就方便了运动员的报名,裁判员单独对各个项目进行管理,促使了比赛的公平公正原则。
在程序查询页面中,可以准确及时的查询各参赛队伍,各项目,个人信息,比赛成绩,排名,及团队加分情况。
以上各个环节的任务量如果用人工操作都是相当繁琐。
用计算机程序实现大大的减少了运动会工作人员的工作量,节省了大量人力,物力,材力,提高了工作效率,保证了运动会数据的实时性,安全性,准确性,可靠性,充分体现了现代化计算机技术的在信息采集,处理,和管理等方面的无可比拟的优越性。
关键词运动会,分数,管理,查询,统计
目录
摘要I
运动会分数统计问题-1-
1.需求分析:
-1-
1.1输入的形式和输入值的范围:
-1-
1.2输出的形式:
-2-
1.3程序所能达到的功能:
-2-
1.4测试数据:
-2-
2.概要设计:
-2-
3.详细设计:
-3-
4.调试分析:
-11-
4.1遇到的问题-11-
4.2算法的时空分析-11-
4.3经验和体会-11-
5.用户使用说明:
-12-
5.1输入符合标准-12-
5.2添加数据符合实际-12-
5.3输出结果及时打印-12-
5.4结束时请关闭程序-12-
6.测试结果:
-12-
运动会分数统计问题
参加运动会有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以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)
1.需求分析:
通过题目分析,我这次设计的主要目的是把复杂繁琐的运动会过程用计算机实现,既减轻了运动会的工作人员的工作量,也提高了运动的实现效率,节省了时间。
然而运动会最大的工作量就是在统计分数与查询每个学校的分数情况。
所以我们的主要的任务是编写程序,使之在查询与排序的方面实现,只要工作人员输入数据就可实现。
1.1输入的形式和输入值的范围:
系统提示你输入共有几个项目供比赛,且这些项目中又有多少为男子项目,且这些都为整型数据。
接下来还有输入参赛学校的数目,也为整型数据,之后要输入的就是参赛的学校的名称,用户直接从键盘输入汉字即可。
之后出现一系列清单,用户根据提示和需要,输入自己将要查和添加的选项。
1.2输出的形式:
根据你做的选项,系统相应的给出你的需要。
如果你选择了添加选项,系统将提示你添加,根据提示添加之后,将打印出来你所添加的数据经过整理成的清单,如果你直接选的就是查询,也会列出各项清单,只不过各项数据均为初值0.
1.3程序所能达到的功能:
对你所添加的数据进行整理,直接计算出各个学校的分数,而且根据不同的选项,学校编号,项目编号,学校总分,男子团体总分,女子团体总分的顺序排列,方便运动会工作人员查找获奖人员的名单,对各个团队进行排名。
1.4测试数据:
我在调试程序过程中,输入五个项目,分别为100米到500米,其中两个被我人为的定义为男子项目,之后我又输入了五个学校的名称。
我首先添加数据,取前三名成绩,根据提示继续输入,就打印出来我输入的数据。
如果我在查询的选项卡中输入5,程序将提示我输入错误。
经过测试我的程序还是比较严谨的。
2.概要设计:
我在程序中加入了一些头文件#include,#include,
#include,#include,#include在这些头文件中我可以直接调用一些像malloc一样的函数。
之后我定义了三个结构体,分别代表学校,项目,及排序。
在主函数中,我首先实现了数据的输入,输入项目的总数和参赛学校的总数。
定义接受数据的两个变量xm和suml,通过变量作为参数,调用各个需要的函数。
主函数的关键部分是,通过调用inputchoice函数,来实现对整个程序的控制,通过该函数调用的返回值来作为用户的选项,用户根据自己的需要来输入选项。
而控制这个选项卡的主要函数是switch函数。
这样实现了主程序在主函数中的实现。
在各个选项卡中,1、添加数据,2、显示数据,3、查询数据,4、排列输出。
在选项1中,该系统提示用户输入选取成绩的前三名或者前五名,再根据各个获得前三名或者前五名的项目的学校编号,及分数。
输入结束后,将打印出一个清单,清单中按学校编号,学校名称,项目编号顺序列出用户输入的数据。
用户的添加工作也完成了。
显示数据也是查询的一种形式,不过它只是单纯的罗列不会像查询那样根据条件输出。
对于选项卡3查询选项,系统将会提示用户按学校编号查询还是按项目编号打印输出。
最复杂的就是选项卡4,它又分为四个选项卡,提示用户选择。
有按学校编号输出,按各个学校分数排序输出,男子团体总分和女子团体总分排序输出,这样就使用户一目了然。
对结果统计节省了很多时间,对运动会排名提供了方便。
3.详细设计:
#include
#include
#include
#include
#include
structordernum
{
intid;
intnumber;
}odn;
structproject
{
charpname[40];//装有项目名称的数组
charsex[4];//项目分为男子项目和女子项目
intgrade;//每个项目的分数
};
structschool
{
charname[40];//装有各个参赛学校的名称
intfssum;//每个学校的总分
structproject*pro;//每个学校指向成绩的指针
};
intinputchoice()
{
intmychoice;
printf("请输入你的选择:
\n(1-添加新的数据2-显示所有数据3-查询4-排列输出0-退出程序\n)");
scanf("%d",&mychoice);
returnmychoice;
}
voidorder(structordernums[],intxm,intsumsl)
{
inti,j,index;
structordernumtemp;
for(i=0;i{
index=i;
for(j=i+1;i{
if(s[j].number
{
index=j;
}
}
printf("程序执行至此\n");
temp=s[index];
s[index]=s[i];
s[i]=temp;
}
}
voidOrderbyschid(structschoolsh[],intxm,intsumsl)
{
inti;
for(i=0;i{
printf("学校编号学校名称\n");
printf("%4d%6s\n",i+1,sh[i].name);
}
}
voidOrderbyschgrade(structschoolsh[],intxm,intsumsl)
{
structordernum*p;
inti;
p=(structordernum*)malloc(sizeof(structordernum));/*malloc函数的使用*/
if(p==NULL)
{
printf("分配失败!
\n");
exit
(1);/*当分配失败时,exit可以终止程序*/
}
for(i=0;i{
p[i].id=i;
p[i].number=sh[i].fssum;
}
printf("学校编号学校名称学校总成绩\t\n");
order(p,xm,sumsl);
for(i=0;i{
printf("%4d%6s%4d\n",i+1,sh[i].name,p[i].number);
}
}
voidOrderbyboy(structschoolsh[],intxm,intsumsl)
{
structordernum*p;
inti,j;
p=(structordernum*)malloc(sizeof(structordernum));/*mcalloc函数的使用*/
if(p==NULL)
{
printf("分配失败!
\n");
exit
(1);/*当分配失败时,exit可以终止程序*/
}
for(i=0;i{
j=0;
p[i].id=i;
while(sh[i].pro[j].sex=="男")
{
p[i].number+=sh[i].pro[j].grade;
j++;
}
}
printf("学校编号\t学校名称\t男子总分\t\n");
order(p,xm,sumsl);
for(i=0;i{
printf("%4d%6s%4d\n",i+1,sh[i].name,p[i].number);
}
}
voidOrderbygirl(structschoolsh[],intxm,intsumsl)
{
structordernum*p;
inti,j;
p=(structordernum*)malloc(sizeof(structordernum));/*calloc函数的使用*/
if(p==NULL)
{
printf("分配失败!
\n");
exit
(1);/*当分配失败时,exit可以终止程序*/
}
for(i=0;i{
j=xm-1;
p[i].id=i;
while(sh[i].pro[j].sex!
="女")
{
p[i].number+=sh[i].pro[j].grade;
j--;
}
}
printf("学校编号\t学校名称\t女子总分\t\n");
order(p,xm,sumsl);
for(i=0;i{
printf("%4d%6s%4d\n",i+1,sh[i].name,p[i].number);
}
}
voidprintforder(structschoolsh[],intxm,intsumsl)
{
intchoice;
printf("1.按学校编号输出\n2.按学校总分输出\n3.按男女团体总分输出\n");
printf("请输入操作数:
");
scanf("%d",&choice);
switch(choice)
{
case1:
Orderbyschid(sh,xm,sumsl);//按学校编号输出
break;
case2:
Orderbyschgrade(sh,xm,sumsl);//按学校总分输出
break;
case3:
Orderbyboy(sh,xm,sumsl);//按男团体总分输出
break;
case4:
Orderbygirl(sh,xm,sumsl);//按女团体总分输出
break;
}
}
voidshowschooldata(structschoolsh[],intxm,intsumsl)//该函数为显示按学校编号为主要顺序的输出
{
inti,j;
printf("学校编号学校名称学校总分数项目编号项目名称项目属性项目得分\n");
printf("------------------------------------------------------------\n");
for(i=1;i<=sumsl;i++)
{
for(j=1;j<=xm;j++)
{
printf("%4d\t%4s\t%5d",i,sh[i-1].name,sh[i-1].fssum);
printf("\t%4d\t%10s",j,sh[0].pro[j-1].pname);
printf("\t%8s\t%8d\n",sh[0].pro[j-1].sex,sh[i-1].pro[j-1].grade);
}
}
printf("----------------------------------------------------------\n");
}
voidwritedata(FILE*fp,structschoolsh[],intxm,intsumsl)//向文件中写入信息
{
inti;
intj;
for(i=0;i{
printf("学校编号学校名称项目名称项目属性项目得分\n");
for(j=0;j{
printf("%d\t%s\t",i,sh[i].name);
printf("%s\t%s\t%d\n",sh[i].pro[j].pname,sh[i].pro[j].sex,sh[i].pro[j].grade);
}
printf("\n");
}
}
voidAddgrade(structschoolsh[],intxm,intsumsl)
{
intnum,t,n;//n成绩取前五名或者前三名,
inti,shid,proid;//proid项目的名称编号,shid学校名称编号
//showschooldata(sh,xm,sumsl);//显示学校数据信息(新增加数据前的数据)
printf("请输入你要添加的成绩的个数(3或5):
");
scanf("%d",&n);
if(n==3)
{
for(i=1;i<=n;i++)
{
printf("请输入%d等奖的学校编号、项目名称编号:
",i);
scanf("%d%d",&shid,&proid);
switch(i)
{
case1:
sh[shid-1].pro[proid-1].grade=5;
sh[shid-1].fssum+=5;
break;
case2:
sh[shid-1].pro[proid-1].grade=3;
sh[shid-1].fssum+=3;
break;
case3:
sh[shid-1].pro[proid-1].grade=2;
sh[shid-1].fssum+=2;
break;
}
}
}
elseif(n==5)
{
for(i=1;i<=n;i++)
{
printf("请输入%d等奖的学校编号、项目名称编号:
",i);
scanf("%d%d",&shid,&proid);
//sh[shid-1].pro[proid-1].grade=0;
switch(i)
{
case1:
sh[shid-1].pro[proid-1].grade=7;
sh[shid-1].fssum+=7;
break;
case2:
sh[shid-1].pro[proid-1].grade=5;
sh[shid-1].fssum+=5;
break;
case3:
sh[shid-1].pro[proid-1].grade=3;
sh[shid-1].fssum+=3;
break;
case4:
sh[shid-1].pro[proid-1].grade=2;
sh[shid-1].fssum+=2;
break;
case5:
sh[shid-1].pro[proid-1].grade=1;
sh[shid-1].fssum+=1;
break;
}
}
}
showschooldata(sh,xm,sumsl);//显示学校数据信息(新增加数据后的数据)
}
voidQuery(structschoolp[],intxm,intsumsl)
{
intm,n,k,i;//k学校编号,m项目编号,n查询方式
printf("1.按学校编号查询\n2.按项目编号查询\n");
printf("请选择查询方式(1或2):
");
scanf("%d",&n);
//showschooldata(p,xm,sumsl);
switch(n)
{
case1:
//按学校编号查询学校某个项目的情况.
printf("请输入学校编号和项目的编号:
");
scanf("%d%d",&k,&m);
printf("项目编号\t项目名称\t项目属性\t项目得分\n\n");
printf("%4d\t%6s\t",m,p[k-1].pro[m-1].pname);
printf("%6s\t%6d\n",p[k-1].pro[m-1].sex,p[k-1].pro[m-1].grade);
break;
case2:
//按项目编号查询取得前三或前五名的学校.
printf("请输入项目编号:
");
scanf("%d",&m);
printf("学校编号学校名称项目编号项目得分\n");
for(i=0;i{
printf("%4d\t%6s\t%4d\t",i+1,p[i].name,m);
printf("%6s\t%4d\n",p[i].pro[m-1].pname,p[i].pro[m-1].grade);
}
break;
}
}
intmain(void)
{
intxm,sumsl;//xm:
项目总数sumsl:
学校总数
//system("reset");
FILE*fp;
intchoice;
structschoolsh[20];//用结构体变量定义一个数组
structproject*p,*q;
longlogcount;
intk=1,boy,i;//boy男子项目总数
if((fp=fopen("sportsgrade.txt","a+"))==NULL)
{
printf("不能打开文件\n");
exit(0);
}
//readdata(fp,sh,xm,sumsl);
printf("输入项目的总数和男子项目数:
");
scanf("%d%d",&xm,&boy);
p=(structproject*)malloc(sizeof(structproject));/*malloc函数的使用*/
if(p==NULL)
{
printf