当前位置:文档之家› 运动会分数统计

运动会分数统计

运动会分数统计【问题描述】参加运动会有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、局部非法数据。

进行程序测试,以保证程序的稳定。

测试数据及测试结果请在上交的资料中写明;【测试数据】自行设定,注意边界等特殊情况。

*/目录一、需求分析 (3)二、概要设计 (1)三、详细设计 (3)四、程序调试与实现 (7)五、用户使用说明.....................................................................错误!未定义书签。

六、附录.....................................................................................错误!未定义书签。

一、需求分析(一)问题分析该系统所应包含的信息为:学校编号、学校名称、运动项目编号、运动项目名称、学校总分、男团总分和女团总分等。

(二)系统功能分析1.根据基本数据输入相关的信息2.根据要求输出所需信息3.查找所需信息4.结束运行二、概要设计根据运动会分数统计系统问题的分析和设计要求,可以将该系统分为四大模块:输入信息模块、输入信息模块、查询信息模块和退出系统模块(1)输入信息模块实现信息的输入和存档(2)输出信息是根据要求实现相关信息的排序输出(3)查询信息根据要求查询信息(4)退出系统结束系统运动会分数统计系统三、详细设计(一)主控模块设计{ main ();}case1 case2 case3 case4default(二)输出信息模块设计{ design1( );}选择操作 查询信息 退出系统输入信息输出信息 输入有误 学校编号学校名称项目编号开始输入Yes Noyes项目名称名次 是否循环 统计总分是否循环结束数据存入文件(三)输出信息模块设计{ design2( );}Yes开始按学校总分排序按学校编号排序 排序按男团总分排序按女团总分排序选择输出 结束 是否继续(四)查询模块{ design3();}YesYesNo No开始按项目编号查询按学校编号查询 选择 输出 结束 是否继续 是否继续四、程序调试与实现1、全部合法数据2、整体非法数据3、局部非法数据五、用户使用说明1. 首先,请根据要求输入所需数据。

2. 系统自动设置学校个数:3个;男子项目:2个;女子项目:1个。

如果需要更改其个数,只需将#define n 3(学校数目)、#define m 2(男子项目数目)、#define w 1(女子项目数目)中的个数进行更改,即可解决问题。

3.输入的数据存入名叫num.txt的文档中,如有需要可以查询。

六、附录源代码#include<stdio.h>#include<math.h>#include <conio.h>#include <process.h>#define n 3//学校数目#define m 2//男子项目数目#define w 1//女子项目数目#define null 0void design1();void design2();void design3();int choice,sign;typedef struct{int itemnum; //项目编号char name;//项目名称int top; //取名次的数目int range[5]; //名次int mark[5]; //分数}itemnode; //定义项目结点的类型typedef struct{int schoolnum; //学校编号char schoolname[20];//学校名字int score; //学校总分int mscore; //男团体总分int wscore; //女团体总分itemnode c[m+w]; //项目数组}headnode ;//定义头结点类型headnode h[n];//定义一个头结点数组void main() //主函数{printf("============欢迎使用运动会分数统计系统===========\n");printf("***************** 1.输入信息*********************\n");printf("***************** 2.输出信息*********************\n");printf("***************** 3.查询信息*********************\n");printf("***************** 4.退出系统*********************\n");printf("=================================================\n");printf("\n");printf("请选择要实现步骤的编号:");scanf("%d",&choice);printf("\n");switch(choice){case 1: //输入信息design1();break;case 2: //输出信息design2();break;case 3: //查询信息design3();break;case 4://退出系统printf("使用结束\n");break;default://输入有误printf("输入有误,请选择一个正确的编号\n");main();break;}}void design1() //输入信息{FILE *fp1;int i,j,k,s;for(i=0;i<n;i++){h[i].score=0;h[i].mscore=0;h[i].wscore=0;} //初始化头结点for(i=0;i<n;i++){printf("请输入学校编号:");scanf("%d",&h[i].schoolnum);printf(" 学校名称:");scanf("%s",&h[i].schoolname);for(j=0;j<m+w;j++){printf(" 项目编号:");scanf("%d",&h[i].c[j].itemnum);printf(" 项目名称:");scanf("%s",&h[i].c[j].name);printf(" 取前几名(5/3)");scanf("%d",&h[i].c[j].top);printf(" 取得几个名次:");scanf("%d",&k); //输入项目信息for(s=0;s<5;s++)h[i].c[j].range[s]=0, h[i].c[j].mark[s]=0; //初始化排名和分数for(s=0;s<k;s++){if(h[i].c[j].top==3) //取前3名记分{printf(" 取得名次:");scanf("%d",&h[i].c[j].range[s]); //输入所获名次信息printf(" 取得名次:");scanf("%d",&h[i].c[j].range[s]);switch(h[i].c[j].range[s]){case 0:h[i].c[j].mark[s]=0;break;case 1:h[i].c[j].mark[s]=5;break;case 2:h[i].c[j].mark[s]=3;break;case 3:h[i].c[j].mark[s]=2;break;}}else if (h[i].c[j].top==5)//取前5名记分{printf(" 取得名次:");scanf("%d",&h[i].c[j].range[s]); //输入所获名次信息switch(h[i].c[j].range[s]){case 0:h[i].c[j].mark[s]=0;break;case 1:h[i].c[j].mark[s]=7;break;case 2:h[i].c[j].mark[s]=5;break;case 3:h[i].c[j].mark[s]=3;break;case 4:h[i].c[j].mark[s]=2;break;case 5:h[i].c[j].mark[s]=1;break;}}else{printf("输入有误,请重新输入!\n");design1();}h[i].score=h[i].score+h[i].c[j].mark[s]; //记录总分if(j<=m-1) //记录男团总分h[i].mscore=h[i].mscore+h[i].c[j].mark[s];else //记录女团总分h[i].wscore=h[i].wscore+h[i].c[j].mark[s];}printf("\n");}}fp1=fopen("num.txt","a");fprintf(fp1,"************************运动会分数统计系统**********************\n");fprintf(fp1,"学校编号学校名字学校总分男团总分女团总分\n");fprintf(fp1,"****************************************************************\ n");for(i=0;i<n;i++){fprintf(fp1," %2d",h[i].schoolnum); //学校编号fprintf(fp1," %10s",h[i].schoolname); //学校名称fprintf(fp1," %2d",h[i].score);//学校总分fprintf(fp1," %2d",h[i].mscore); //男团总分fprintf(fp1," %2d\n",h[i].wscore); //女团总分}fclose(fp1);main();}void design2() //输出函数{int i,j,k;int remember[n];int sign;do{printf("*******************1.按学校编号输出.\n");printf("*******************2.按学校总分输出.\n");printf("*******************3.按男团总分输出.\n");printf("*******************4.按女团总分输出.\n");printf("\n");printf("请选择编号:");scanf("%d",&choice);switch(choice){case 1: //按学校编号输出for(i=0;i<n;i++){printf("学校编号:%d\n",h[i].schoolnum);printf(" 学校名称:%s\n",h[i].schoolname);printf(" 学校总分:%d\n" ,h[i].score);printf(" 男团总分:%d\n",h[i].mscore);printf(" 女团总分: %d\n\n\n",h[i].wscore);}break;case 2: //按学校总分输出for(i=0;i<n;i++)remember[i]=i;for(i=0;i<n;i++){for(j=i+1;j<n;j++)if(h[remember[i]].score<h[j].score){k=remember[i];remember[i]=remember[j];remember[j]=k;}for(i=0;i<n;i++){printf("学校编号:%d\n",h[remember[i]].schoolnum);printf(" 学校名称:%s\n",h[remember[i]].schoolname);printf(" 学校总分:%d\n" ,h[remember[i]].score);printf(" 男团总分:%d\n",h[remember[i]].mscore);printf(" 女团总分:%d\n",h[remember[i]].wscore);}break;case 3: //按男团总分输出for(i=0;i<n;i++)remember[i]=i;for(i=0;i<n;i++){for(j=i+1;j<n;j++)if(h[remember[i]].mscore<h[j].mscore){k=remember[i];remember[i]=remember[j];remember[j]=k;}}for(i=0;i<n;i++){printf("学校编号:%d\n",h[remember[i]].schoolnum);printf(" 男团总分:%d\n",h[remember[i]].mscore);printf(" 学校名称:%s\n",h[remember[i]].schoolname);printf(" 学校总分:%d\n" ,h[remember[i]].score);printf(" 女团总分:%d\n",h[remember[i]].wscore);}break;case 4: //按女团总分输出for(i=0;i<n;i++)remember[i]=i;for(i=0;i<n;i++){for(j=i+1;j<n;j++)if(h[remember[i]].wscore<h[j].wscore){k=remember[i];remember[i]=remember[j];remember[j]=k;}for(i=0;i<n;i++){printf("学校编号:%d\n",h[remember[i]].schoolnum);printf(" 学校名称:%s\n",h[remember[i]].schoolname);printf(" 女团总分: %d\n\n\n",h[remember[i]].wscore);printf(" 学校总分:%d\n" ,h[remember[i]].score);printf(" 男团总分:%d\n",h[remember[i]].mscore);}break;}printf("请选择(1.继续;2.跳出)\n");scanf("%d",&sign);}while(sign==1);main();}void design3() //查询函数{int i,j,k,s;printf("*******************1.按学校编号查询.\n");printf("*******************2:按项目编号查询.\n");printf("\n");printf("请选择查询方式:");scanf("%d",&choice);printf("\n");switch(choice){case 1:{do{printf("请输入查询的学校编号:");scanf("%d",&i);printf("\n");if(i>n)printf("错误:这个学校没有参加此次运动会!\n");else{printf(" 项目编号:");scanf("%d",&j);printf("\n");printf("\n");if(j>m+w||j==0)printf("此次运动会没有这个项目\n\n\n"); //学校编号超出范围,则输出警告else{printf(" 该项目取前%d名,学校编号为%d的成绩如下:\n", h[0].c[j-1].top,i);for(k=0;k<5;k++)if(h[i-1].c[j-1].range[k]!=0){printf(" 名次:%d\n",h[i-1].c[j-1].range[k]);//输出要查询学校项目的成绩}}}printf("\n");printf("请选择(1.继续;2.跳出)\n");scanf("%d",&sign);}while(sign==1);break;}case 2:{do{printf("请输入查询的项目编号:");scanf("%d",&s);printf("\n");if(s>m+w||s==0) //项目编号超出范围则输出警告printf("此次运动会不包括这个项目.\n\n\n");else //输出该项目取得名次学校的成绩{printf("该项目取前%d名,取得名次的学校\n",h[0].c[s-1].top);for(i=0; i<n;i++)for(j=0;j<5;j++)if(h[i].c[s-1].range[j]!=0)printf(" 学校编号:%d,名次:%d\n",h[i].schoolnum, h[i].c[s-1].range[j]);}printf("请选择(1.继续;2.跳出)\n");scanf("%d",&sign);printf("\n\n\n");}while(sign==1);break;}}main(); }。

相关主题