运动会成绩统计分析
成绩________
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++) {