运动会分数统计程序实验报告.docx

上传人:b****1 文档编号:11172677 上传时间:2023-05-29 格式:DOCX 页数:25 大小:176.65KB
下载 相关 举报
运动会分数统计程序实验报告.docx_第1页
第1页 / 共25页
运动会分数统计程序实验报告.docx_第2页
第2页 / 共25页
运动会分数统计程序实验报告.docx_第3页
第3页 / 共25页
运动会分数统计程序实验报告.docx_第4页
第4页 / 共25页
运动会分数统计程序实验报告.docx_第5页
第5页 / 共25页
运动会分数统计程序实验报告.docx_第6页
第6页 / 共25页
运动会分数统计程序实验报告.docx_第7页
第7页 / 共25页
运动会分数统计程序实验报告.docx_第8页
第8页 / 共25页
运动会分数统计程序实验报告.docx_第9页
第9页 / 共25页
运动会分数统计程序实验报告.docx_第10页
第10页 / 共25页
运动会分数统计程序实验报告.docx_第11页
第11页 / 共25页
运动会分数统计程序实验报告.docx_第12页
第12页 / 共25页
运动会分数统计程序实验报告.docx_第13页
第13页 / 共25页
运动会分数统计程序实验报告.docx_第14页
第14页 / 共25页
运动会分数统计程序实验报告.docx_第15页
第15页 / 共25页
运动会分数统计程序实验报告.docx_第16页
第16页 / 共25页
运动会分数统计程序实验报告.docx_第17页
第17页 / 共25页
运动会分数统计程序实验报告.docx_第18页
第18页 / 共25页
运动会分数统计程序实验报告.docx_第19页
第19页 / 共25页
运动会分数统计程序实验报告.docx_第20页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

运动会分数统计程序实验报告.docx

《运动会分数统计程序实验报告.docx》由会员分享,可在线阅读,更多相关《运动会分数统计程序实验报告.docx(25页珍藏版)》请在冰点文库上搜索。

运动会分数统计程序实验报告.docx

运动会分数统计程序实验报告

1设计目的

1.了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;

2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;

3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;

训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。

2设计内容

参加运动会有n个学校,学校名对应的编号为1……n。

比赛分成m个男子项目,和w个女子项目。

项目编号为男子1……m,女子m+1……m+w。

不同的项目取前五名或前三名积分;取前五名的积分分别为:

7、5、3、2、1,前三名的积分分别为:

5、3、2;哪些取前五名或前三名自己设定(数据可以存储在一个数据文件中,数据结构、具体数据自定)。

具体功能有:

1)可以输入各个项目的前三名或前五名的成绩;2)能统计各学校总分;3)可以按学校编号或名称、学校总分、男女团体总分排序输出;4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。

5)数据存入文件并能随时查询。

3设计要求

(1)符合课题要求,实现相应功能;

(2)要求界面友好美观,操作方便易行;

(3)注意程序的实用性、安全性;

4.本设计所采用的数据结构

数组:

是一组具有相同数据类型的数据的有序集合。

5.功能模块详细设计

5.1详细设计思想

建立一个文件夹,在文件夹中利用数组指针将需要的数据输入文件夹中,按照需求将数据归类、排序。

对用户的错误输入进行提示与纠正。

根据用户选择的类型将数据输出从而实现程序的实用性。

5.2核心代码

#include

#include

#include

#include

inta,b,c,d,i,j,z;

structnode

{

intnum;

};

structnode*f[22];

voidexit0()//建立文件存储数据和退出程序运行

{

FILE*fp;

intk;

alp:

if((fp=fopen("sore.txt","w"))==NULL)

{

printf("创建文件失败\n");

printf("1*****重试\n");

printf("2*****强制退出(数据将不会保存到文件)\n");

printf("3*****回到主菜单\n");

alj:

scanf("%d",&k);

if(k==1)

gotoalp;

elseif(k==2)

exit(0);

elseif(k==3)

return;

else

{

printf("输入错误,请重新输入:

");

gotoalj;

}

}

fprintf(fp,"\n\n");

fprintf(fp,"运动会分数统计表\n\n\n");

fprintf(fp,"项目代号");

for(i=1;i<=c+d;i++)

fprintf(fp,"%5d",i);

fprintf(fp,"");

fprintf(fp,"\n学校代号\n");

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

{

fprintf(fp,"%10d",i);

for(b=1;b<=c+d;b++)

{

fprintf(fp,"%5d",f[i][b].num);

}

fprintf(fp,"\n");

}

fprintf(fp,"\n\n");

fprintf(fp,"注:

本次运动会有%d个学校参赛\n\n",a);

fprintf(fp,"其中1~~~%d组是男子组,%d~~~%d组是女子组\n",c,c+1,c+d);

printf("\n比赛成绩已保存到当前路径下的“sore.txt”文件中\n\n");

fclose(fp);

exit

(1);

}

intchoose()//选择菜单

{

intchoo;

printf("\n\n1******输入成绩\n");

printf("2******统计各学校的总分\n");

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

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

printf("5******按男团体总分排序输出\n");

printf("6******按女团体总分排序输出\n");

printf("7******按学校编号查询学校某个项目的成绩\n");

printf("8******按项目编号查询取得前三或前五名的学校\n");

printf("9******退出\n\n");

printf("请选择:

");

scanf("%d",&choo);

return(choo-1);

}

voidinput()//输入成绩

{

intab,ac,ae,af,g=1,get[5]={0,0,0,0,0};

printf("\n请输入项目代号:

");

ale:

scanf("%d",&ab);

if(ab>c+d||ab<1)//ab表示输入的项目代号,输入的项目代号应大于1且小于男女项目数之和

{

printf("\n此项目代号不存在,重新输入\n");

gotoale;

}

ae=0;//ae=0表示成绩以前没有被录入过

for(i=0;i<=a;i++)

{

if(f[i][ab].num!

=0)

{

ae=1;//ae=1表示成绩以前被录入过

break;

}//endif()

}//endfor()

if(ae==1)

{

al2:

printf("\n此项目成绩曾经已被录入过,是否要重新录入(您输入的项目代号可能有误,强烈建议您查证后再录入):

\n");

printf("1++++重新录入(若重新录入,以前的该项目成绩将被删除)\n");

printf("2++++不要,待查证后再录入\n\n");

scanf("%d",&af);

if(af==2)//不重新输入成绩

{

printf("您已取消录入!

\n");

return;

}

elseif(af==1)//重新录入成绩

{

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

{

if(f[i][ab].num!

=0)

{

f[i][0].num=f[i][0].num-f[i][ab].num;

if(ab<=c)//ab<=c表示此时是男生的项目

f[i][c+d+1].num=f[i][c+d+1].num-f[i][ab].num;

else

f[i][c+d+2].num=f[i][c+d+2].num-f[i][ab].num;

}//endif()

f[i][ab].num=0;

}//endfor()

}//endelseif()

else

gotoal2;//返回到al2重新选择

}

al:

printf("\n此项目是以前几名为胜出者:

\n\n");//选择取前几名为胜出者

printf("3-------前三名\n");

printf("5-------以前五名\n\n");

scanf("%d",&ac);

if(ac==3)

{

printf("\n请依次输入获胜学校代号:

");

af=5;

for(i=0;i<3;i++)

{

alq:

scanf("%d",&ae);//ae表示学校的代号

if(ae>a||ae<1)//学校的代号不可以大于a和小于1

{

printf("%d学校代号不存在,重新输入第%d名的学校代号\n",ae,g);

gotoalq;

}

for(b=0;b<5;b++)

{

if(ae==get[b])//再次输入时,不能输入相同的学校代号

{

printf("同一个学校不能在同一项目中有两个名次,请重新输入第%d名的学校代号!

\n",g);

gotoalq;

}

else

get[b]=ae;

}

f[ae][0].num=f[ae][0].num+af;

f[ae][ab].num=af;

if(ab<=c)

f[ae][c+d+1].num=f[ae][c+d+1].num+af;

else

f[ae][c+d+2].num=f[ae][c+d+2].num+af;

if(af>3)

af=af-2;

else

af--;

g++;

}//endfor()

}//endif()

elseif(ac==5)

{

printf("请依次输入获胜学校代号:

");

af=7;

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

{

alw:

scanf("%d",&ae);

if(ae>a||ae<1)

{

printf("%d学校代号不存在,重新输入第%d名的学校代号\n",ae,g);

gotoalw;

}

for(b=0;b<5;b++)

{

if(ae==get[b])

{

printf("同一个学校不能在同一项目中有两个名次,请重新输入第%d名的学校代号!

\n",g);

gotoalw;

}

else

get[b]=ae;

}

f[ae][0].num=f[ae][0].num+af;

f[ae][ab].num=af;

if(ab<=c)

f[ae][c+d+1].num=f[ae][c+d+1].num+af;

else

f[ae][c+d+2].num=f[ae][c+d+2].num+af;

if(af>3)

af=af-2;

else

af--;

g++;

}//endfor()

}//endelseif()

else

{

printf("你的输入错误,请输入“3”或“5”");

gotoal;

}

printf("\n\n输入完成!

!

!

!

\n");

}//endvoidinput()

voideach()//按团体总成绩排序输出

{

printf("\n对应的格式为:

\n学校代号:

团体总成绩\n\n");

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

{

printf("%2d:

%3d\n",i,f[i][0].num);

//if(i%3==0)

//printf("\n");

}

}//endvoideach()

voidbiaohao()//按学校编号排序输出

{

printf("\n项目代号");

for(i=1;i<=c+d;i++)

{

if(i>9)

printf("%4d",i);

else

printf("%5d",i);

}

printf("\n");

printf("学校代号\n");

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

{

printf("%d",i);

for(b=1;b<=c+d;b++)

{

if(f[i][b].num>9)

printf("%4d",f[i][b].num);

else

printf("%5d",f[i][b].num);

}//endfor()

printf("\n");

}//endfor()

}//endvoidbiaohao()

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

{

structnod

{

intke;

intnum;

};

intha;

structnod*de;

de=(structnod*)malloc(sizeof(structnod)*a+1);

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

printf("\n名次学校号总分\n\n");

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

{

de[i].ke=i;

de[i].num=f[i][0].num;

}

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

{

for(b=i;b

{

if(de[b].num>de[i].num)

{

ha=de[b].ke;

de[b].ke=de[i].ke;

de[i].ke=ha;

ha=de[b].num;

de[b].num=de[i].num;

de[i].num=ha;

}//endif()

}//endfor()

}//endfor()

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

{

printf("%d",i);

printf("%13d%8d\n",de[i].ke,de[i].num);

}

}//endvoidzongfen()

voidnanzong()//按男子团体总分排序

{

structnod

{

intke;

intnum;

};

intha;

structnod*de;

de=(structnod*)malloc(sizeof(structnod)*a+1);

printf("\n按男子团体总分排序输出\n\n");

printf("名次学校代号男子团体总分\n\n");

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

{

de[i].ke=i;

de[i].num=f[i][c+d+1].num;

}

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

{

for(b=i;b

{

if(de[b].num>de[i].num)

{

ha=de[b].ke;

de[b].ke=de[i].ke;

de[i].ke=ha;

ha=de[b].num;

de[b].num=de[i].num;

de[i].num=ha;

}

}

}

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

{

printf("%d",i);

printf("%13d%12d\n",de[i].ke,de[i].num);

}

}//endvoidnanzong()

voidnvzong()//按女子团体总分排序

{

structnod

{

intke;

intnum;

};

intha;

structnod*de;

de=(structnod*)malloc(sizeof(structnod)*a+1);

printf("按女子团体总分排序输出\n\n");

printf("名次学校代号女子团体总分\n\n");

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

{

de[i].ke=i;

de[i].num=f[i][c+d+2].num;

}

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

{

for(b=i;b

{

if(de[b].num>de[i].num)

{

ha=de[b].ke;

de[b].ke=de[i].ke;

de[i].ke=ha;

ha=de[b].num;

de[b].num=de[i].num;

de[i].num=ha;

}

}

}

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

{

printf("%d",i);

printf("%15d%13d\n",de[i].ke,de[i].num);

}

}//endvoidnvzong()

voidxuexiao()//按学校编号查询学校某个项目的情况

{

intdr,dt;

printf("\n请输入您要查询的学校代号:

");

aly:

scanf("%d",&dr);

if(dr>a||dr<1)

{

printf("学校代号不存在,重新输入\n");

gotoaly;

}

printf("请输入您要查询的项目代号:

");

alo:

scanf("%d",&dt);

if(dt>c+d||dt<1)

{

printf("项目代号不存在,重新输入\n");

gotoalo;

}

printf("\n\n%3d学校的%3d项目成绩为%3d\n",dr,dt,f[dr][dt].num);

}//endvoidxuexiao()

voidxiangmu()//按项目编号查询取得前三或前五名的学校排序

{

intge,sedy=0;

printf("\n请输入您要查询的项目代号:

");

all:

scanf("%d",&ge);

cout<

if(ge>c+d||ge<1)

{

printf("没有此项目代号,重新输入\n");

gotoall;

}

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

{

if(f[b][ge].num==2)

sedy=1;

}

if(sedy==0)

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

{

if(f[i][ge].num==7)

{

printf("此项目取前5名获奖者\n");

break;

}

}

if(i==a+1)

printf("此项目取前3名获奖者\n");

printf("\n获胜名单由成绩高到低依次为:

\n\n");

for(i=7;i>0;i--)

{

for(b=1;b<=a;b++)

{

if(f[b][ge].num==i)

printf("%5d",b);

}

}

}//endvoidxiangmu()

void(*g[])()={input,each,biaohao,zongfen,nanzong,nvzong,xuexiao,xiangmu,exit0};

voidmain()//运动会分数统计主函数

{

intchoos;

printf("\n\n***运动会分数统计***\n\n\n");

printf("共有多少个学校参赛:

");

scanf("%d",&a);//a表示参赛的学校数

while(a<=0||a>20)//输入学校是数应该在1--20之间

{

if(a<=0)

{

printf("\n参赛学校个数不能是负数或零\n\n");

printf("共有多少个学校参赛:

");

scanf("%d",&a);

}//endif()

if(a>20)

{

printf("\n参赛学校个数不能大于20\n\n");

printf("共有多少个学校参赛:

");

scanf("%d",&a);

}//endif()

}//endwhile()

printf("有几个男子组:

");//男子组数目为c

scanf("%d",&c);

printf("有几个女子组:

");//女子组数目为d

scanf("%d",&d);

for(i=0;i<=a;i++)//存储数据初始化

{

f[i]=(structnode*)malloc(sizeof(structnode)*(c+d+3));

for(j=0;j<=c+d+2;j++)

f[i][j].num=0;

}

choos=choose();

while

(1)

{

while(choos<0||choos>8)

choos=choose();

(*g[choos])();

cout<

choos=choose();

}

}//endvoidmain()

 

1),输入参赛学校及参赛的男子女子组个数

2)选择胜出方式输入成绩

若要重新录入成绩重新输入项目编号

3)统计各学校总分

4)按学校编号排序输出

5)按学校总分排序

6)男团体总分排序输出

7)按女团体总分排序输出

8)按学校编号查询学校某个项目成绩

9)按项目编号查询得前三名或前五名的学校

10)退出

6.课程设计心得及存在问题

通过这次课程设计我掌握了如何利用数组对数据进行排序,如何在文件中进行数据的写入和输出。

上机让我了解到如何调试程序,并对程序中的问题进行修改使程序更加完美。

 

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

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2