运动会成绩统计分析

运动会成绩统计分析
运动会成绩统计分析

成绩________

2008——2009学年第二学期第一周上机实习报告

学院:12

专业:12

班级:12

姓名:12

学号:12

指导教师:

1、运动会分数统计

任务:参加运动会有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、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明;

2、需求分析:

需要能够一个能达到输入、查询、统计、输出运动会信息,以及自动进行名词排定等功能的运动会分数统计系统。需要输入时,应加一个新的结构体来直接进行输入工作。其中查询需要输出学校或项目的编号,成绩(可以自拟),排名等,需要的就是一个输出函数,和输出时用指针数组就可以解决。统计者可以先输入各项目中每个学校参赛者的成绩,用一个比较函数进行比较,按照项目排名、学校总成绩排名、男女团体排名输出,供使用者进行参考。

3、概要设计

在此说明每个部分的算法设计说明(可以是描述算法的流程图),每个程序中使用的存储结构设计说明(如果指定存储结构请写出该存储结构的定义)。

3.按学校编号排序输出各学校得成绩

继续 y 退出 n

4.按学校总分排序输出

继续 y 退出 n

5.按男团体总分排序输出

继续 y退出 n

6.按女团体总分排序输出

继续 y退出 n

7.按学校编号查询学校某个项目的成绩

输入学校编号输入项目编号

显示成绩

8.按项目编号查询取得前三或前五名的学校

输入项目编号显示前3或前5的学校

4、详细设计

#include

#include

int a,b,c,d,i,j;

struct node

{

int num;

};

struct node *f[22];

void exit0()

{

FILE *fp;

int k;

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

{

printf("creat error\n"); /*创建文件失败*/

printf(" 1*****try again\n"); /* 重试*/

printf(" 2*****tui chu\n"); /* 强制退出(数据将不会保存到文件)*/ printf(" 3*****return menu\n"); /*回到主菜单*/

alj: scanf("%d",&k);

if(k==1)

goto alp;

else if(k==2)

exit(0);

else if(k==3)

return;

else

{

printf("put in error,pleaseshuru again:"); /* 输入错误,请重新输入*/ goto alj;

}

}

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

fprintf(fp," fenshu tongji biao\n\n\n"); /*运动会分数统计表*/

fprintf(fp," xiangmu number"); /*项目代号 */

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

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

fprintf(fp," ");

fprintf(fp,"\n school number\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," the %d school numbers\n\n",a); /*注:本次运动会有%d个学校参赛 */

fprintf(fp," 1 ~ %dman sport zu,%d ~ %dwoman sport zu \n",c,c+1,c+d); /*其中1 ~ %d组是男子组,%d ~ %d组是女子组*/

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

fclose(fp);

exit(1);

}

int choose()

{

int choo;

printf("\n\n 1******shuru chengji\n"); /* 输入成绩*/

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

printf(" 3******an xuexiao biaohao shuchu\n"); /*按学校编号排序输出*/ printf(" 4******an xuexiao zhongfen shuchu\n"); /*按学校总分排序输出*/

printf(" 5******an man sport zu shuchu\n"); /*按男团体总分排序输出 */ printf(" 6******an woman sport zu shuchu\n"); /*按女团体总分排序输出*/

printf(" 7******an xuexiao bianhao chaxun xiangmu chengji\n"); /*按学

校编号查询学校某个项目的成绩 */

printf(" 8******an xiangmu bianhao chaxun qian3 hou qian5 xuexiao\n");/*按项目编号查询取得前三或前五名的学校 */

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

printf("please enter you choise");/*请选择:*/

scanf("%d",&choo);

return(choo-1);

}

void input()

{

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

printf("\nshuru xiangmu bianhao:"); /*请输入项目代号:*/

ale:scanf("%d",&ab);

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

{

printf("\nxiangmu bu cunzai,please shuru again\n"); /*此项目代号不存在,重新输入 */

goto ale;

}

ae=0;

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

{

if(f[i][ab].num!=0)

{

ae=1;

break;

}

}

if(ae==1)

{

al2: printf("\nchengji yijing luru,chongxin luru:\n");

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

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

printf(" 2++++dai chazheng zai luru\n\n");/*不要,待查证后再录入 */ scanf("%d",&af);

if(af==2)

{

printf("ni yi luru!!!!!\n"); /*您已取消录入*/

return;

}

else if(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)

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;

}

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

}

}

else

goto al2;

}

al: printf("\nqian ji ming win:\n\n"); /*此项目是以前几名为胜出者*/ printf(" 3-------qian 3\n"); /*以前三名*/

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

scanf("%d",&ac);

if(ac==3)

{

printf("\nwin school number:"); /*请依次输入获胜学校代号*/

af=5;

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

{

alq: scanf("%d",&ae);

if(ae>a||ae<1)

{

printf("%dxuexiao bu cunzai,chongxin shuru %dming xuexiao bianma\n",ae,g); /*%d学校代号不存在,重新输入第%d名的学校代号 */

goto alq;

}

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

{

if(ae==get[b])

{

printf("tongxuexiao cannot zai tongyi xiangmu you liangge mingci ,chongxin shuru%dming xuexiao bianma!!!\n",g); /*同一个学校不能在同一项目中有两个名次,请重新输入第%d名的学校代号*/

goto alq;

}

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

}

}

else if(ac==5)

{

printf("please yici shuru win school number:"); /*请依次输入获胜学校代号 */

af=7;

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

{

alw: scanf("%d",&ae);

if(ae>a||ae<1)

{

printf("%dschool number bu cunzai,chongxin shuru%dming schoolnumber\n",ae,g); /*学校代号不存在,重新输入第%d名的学校代号*/ goto alw;

}

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

{

if(ae==get[b])

{

printf("tongxuexiao cannot zai tongyi xiangmu you liangge mingci ,chongxin shuru%dming xuexiao bianma!!!\n",g); /*同一个学校不能在同一项目中有两个名次,请重新输入第%d名的学校代号*/

goto alw;

}

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

}

}

else

goto al;

printf("\n\n shuru wancheng ! ! ! ! \n"); /* 输入完成*/

}

void each()

{

printf("\n duiying geshi:\n school numbers:tongti chengji\n\n "); /*对应的格式为:学校代号:团体总成绩*/

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

{

printf("%2d:%3d ",i,f[i][0].num);

if(i%3==0)

printf("\n ");

}

}

void biaohao()

{

printf("\nxiangmu"); /*项目代号*/

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

{

if(i>9)

printf("%4d ",i);

else

printf("%5d ",i);

}

printf("\n");

printf("school\n");/*学校代号 */

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

{

printf(" %d ",i);

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

{

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

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

else

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

}

printf("\n");

}

}

void zongfen()

{

struct nod

{

int ke;

int num;

};

int ha;

struct nod *de;

de=(struct nod *)malloc(sizeof(struct nod)*a+1);

printf("\an xuexiao biaohao shuchu\n\n"); /*按学校编号排序输出 */ printf(" xuexiao bianhao zhongfen\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;

}

}

}

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

{

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

}

}

void nanzong()

{

struct nod

{

int ke;

int num;

};

int ha;

struct nod *de;

de=(struct nod *)malloc(sizeof(struct nod)*a+1);

printf("\n an man sport zu shuchu\n\n"); /*按男子团体总分排序输出 */ printf(" xuexiao bianhao manzu zhongfen\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("%13d%12d\n",de[i].ke,de[i].num);

}

}

void nvzong()

{

struct nod

{

int ke;

int num;

};

int ha;

struct nod *de;

de=(struct nod *)malloc(sizeof(struct nod)*a+1);

printf(" an woman sport zu shuchu\n\n"); /*按女子团体总分排序输出 */ printf(" xuexiao bianhao womanzu zhongfen\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("%15d%13d\n",de[i].ke,de[i].num);

}

}

void xuexiao()

{

int dr,dt;

printf("\nshuru ni chaxun school number:");/*请输入您要查询的学校代号*/

aly:scanf("%d",&dr);

if(dr>a||dr<1)

{

printf("school number bu cunzai,chongxin shuru\n"); /*学校代号不存在,重新输入*/

goto aly;

}

printf("chaxun xiangmu de haoma:"); /*请输入您要查询的项目代号*/ alo:scanf("%d",&dt);

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

{

printf("xiangma bianma bu cunzai,chongxin churu\n"); /*项目代号不存在,重新输入 */

goto alo;

}

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

}

void xiangmu()

{

int ge,sedy=0;

printf("\n shuru chaxun xiangmu bianma:"); /*请输入您要查询的项目代号*/

all:scanf("%d",&ge);

printf("end");

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

{

printf("meiyou xiangmu daihao,chongxin shuru\n"); /*没有此项目代号,重新输入*/

goto all;

}

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

{

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

sedy=1;

}

if(sedy==0)

{

printf("xiangmu meiyou luru chengji\n"); /* 此项目没有录入成绩*/ return;

}

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

{

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

{

printf(" qu qian5ming win\n"); /*此项目取前5名获奖者 */

break;

}

}

if(i==a+1)

printf(" qu qian3ming win\n"); /*此项目取前3名获奖者*/

printf("\n win mingdan gao dao di paixun:\n\n "); /*获胜名单由成绩高

到低依次为*/

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

{

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

{

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

printf("%5d",b);

}

}

}

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

void main()

{

int choos;

printf("\n\n * * * sports games datas * * *\n\n\n"); /*运动会分数统计*/

printf("you duoshao xuexiao cenjia:"); /*共有多少个学校参赛 */ scanf("%d",&a);

while(a<=0||a>20)

{

if(a<=0)

{

printf("\n cenjia geshu buneng shi0huo fushu\n\n"); /*参赛学校个数不能是负数或零 */

printf("you duoshao xuexiao cenjia:");/*共有多少个学校参赛*/

scanf("%d",&a);

}

if(a>20)

{

printf("\ncenjia de xuexiao budayu 20\n\n");/* 参赛学校个数不能大于20*/

printf("you duoshao xuexiao cenjia:");/* 共有多少个学校参赛*/

scanf("%d",&a);

}

}

printf("you ji ge man zu:"); /*有几个男子组*/

scanf("%d",&c);

printf("you ji ge woman zu:"); /*有几个女子组*/

scanf("%d",&d);

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

{

f[i]=(struct node *)malloc(sizeof(struct node)*(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])();

printf("end");

choos=choose();

}

}

5、调试分析

输入运动会数据:包括学校数目、名称,男子项目数、女子项目数,各项目前5名(或前3名)的学校编号。

按照要求,设计可供使用者选择的界面:

按照使用者的选择,输出对应的成绩排名,如:

6、实习总结:

通过第二周的上机实习,我巩固了已有的C语言、数据结构的知识,学会用已有的算法知识编写程序;综合应用数据结构、程序设计理论知识;提高了自身综合解决问题、协调工作的能力;通过这次实习进一步激发了我的学习热情,培养了我的编程能力,为后续的学习和发展奠定基础。

相关主题
相关文档
最新文档