A:运动会分数统计
一、实验原理
(1)实验目的:运动会分数统计
任务:参加运动会有n个学校,学校编号为1??n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1??m,女子m+1??m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m<=20,n<=20) (2)实验要求:
1).可以输入各个项目的前三名或前五名的成绩; 2).能统计各学校总分;
3).可以按学校编号、学校总分、男女团体总分排序输出;
4).可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
规定:输入数据形式和范围:20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)
输出形式:有中文提示,各学校分数为整型
界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。 存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构;
测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明; 二、实验程序
1、需求分析
根据运动会分数统计系统的问题分析及设计要求,可以将此系统分为四个模块:信息统计模块、信息输出模块、信息查询模块、信息调用模块。 (1)、信息统计模块实现信息的输入、统计、存档。 (2)、信息输出模块实现信息的输出。 (3)、信息查询模块实现信息的查询。 (4)、信息调用模块实现信息的调用,即从文件中读出信息并输出。 2、概要设计
此系统采用顺序存储结构存储,定义了一个结构体数组存放参赛学校的信息。之所以采
用顺序存储结构,是因为用它来实现信息的存储、查询比较方便,节省时间,效率高,而且也方便把信息写入文件以及读取文件。 三、系统实现 源代码:
# include
# define M 1 //男子项目个数 # define W 1 //女子项目个数 # define N 2 //学校个数 # define NULL 0
void Menu(); //函数声明 typedef struct {
char proname[10]; //项目名称 int pronum; //项目编号
int top; //取前3名或前5名积分,由用户自己定义 int range[5]; //名次 int mark[5]; //分数
}Pronode; //项目结点类型定义 typedef struct {
char schname[20]; //学校名称 int schnum; //学校编号 int score; //总分
int Mscore; //男团体总分
int Wscore; //女团体总分 Pronode a[M+W]; //项目数组
}Schnode; //学校结点类型定义
Schnode s[N]; //定义一个学校结点类型的结构体数组
void Head() //头菜单界面 {
cout<<\*************************************************\ cout<<\***** 欢迎使用 *****\ cout<<\***** 运动会分数统计系统 *****\ cout<<\*************************************************\ cout< void MainMenu() //主菜单界面 { cout<<\*************************************************\ cout<<\***** 主菜单 *****\ cout<<\*************************************************\ cout<<\***** 1.输入信息 *****\ cout<<\***** 2.输出信息 *****\ cout<<\***** 3.查询信息 *****\ cout<<\***** 4.调用信息 *****\ cout<<\***** 5.关于 *****\ cout<<\***** 6.退出系统 *****\ cout<<\*************************************************\ cout<<\***** 注:第一次运行本程序时请选择1号功能 *****\ cout<<\*************************************************\void SubMenu() //总分显示菜单界面 { cout<<\*************************************************\ cout<<\***** 运动会总分显示菜单 *****\ cout<<\*************************************************\ cout<<\***** 1.按学校名称输出 *****\ cout<<\***** 2.按学校总分输出 *****\ cout<<\***** 3.按男团总分输出 *****\ cout<<\***** 4.按女团总分输出 *****\ cout<<\***** 5.退出返回主菜单 *****\ cout<<\***** 6.直接退出本系统 *****\ cout<<\*************************************************\} void InitSch() //初始化信息 { int i; for(i=0;i s[i].score=0; s[i].Mscore=0; s[i].Wscore=0; } } void InfoInput() //信息输入模块 { int i,j,k,m; InitSch(); //初始化信息 for(i=0;i cout<<\学校名称:\ cin>>s[i].schname; cout<<\学校编号:\ cin>>s[i].schnum; for(j=0;j cout<<\项目名称:\ 分 cin>>s[i].a[j].proname; cout<<\项目编号:\cin>>s[i].a[j].pronum; cout<<\取前3名还是前5名:\cin>>s[i].a[j].top; cout<<\此项目获得的名次个数:\cin>>k; for(m=0;m<5;m++) //初始化排名和分数 { s[i].a[j].range[m]=0; s[i].a[j].mark[m]=0; } for(m=0;m cout<<\名次:\ cin>>s[i].a[j].range[m]; if(s[i].a[j].top==3) //匹配各名次对应的分数 { switch(s[i].a[j].range[m]) { case 0: s[i].a[j].mark[m]=0; break; case 1: s[i].a[j].mark[m]=5; break; case 2: s[i].a[j].mark[m]=3; break; case 3: s[i].a[j].mark[m]=2; break; } } else { switch(s[i].a[j].range[m]) { case 0: s[i].a[j].mark[m]=0; break; case 1: s[i].a[j].mark[m]=7; break; case 2: s[i].a[j].mark[m]=5; break; case 3: s[i].a[j].mark[m]=3; break; case 4: s[i].a[j].mark[m]=2; break; case 5: s[i].a[j].mark[m]=1; break; } } s[i].score=s[i].score+s[i].a[j].mark[m]; //统计学校总 if(j<=M-1) s[i].Mscore=s[i].Mscore+s[i].a[j].mark[m]; //统计男团总分 else s[i].Wscore=s[i].Wscore+s[i].a[j].mark[m]; //统计女团总分 } cout< void Output(int b[]) //输出各学校运动会分数信息 { int i; for(i=0;i cout<<\学校名称:\ cout<<\学校编号:\ cout<<\学校总分:\ cout<<\男团总分:\ cout<<\女团总分:\ cout< system(\程序暂停,以显示结果 system(\清屏 } void InfoOutput() //信息输出模块 { FILE *fp; int number,i,j,k,b[N]; if((fp=fopen(\以读方式打开文本文件 //并判定能否正常打开 { cout<<\文件打不开!\不能正常打开文件的处理 exit(0); //调用函数exit终止程序运行 } while(1) { Head(); //头菜单界面 SubMenu(); //总分显示菜单界面 cout<<\ 请选择:\ cin>>number; switch(number) { case 1: //按学校名称输出 system(\ Head(); //头菜单界面 cout<<\运动会各学校信息按学校名称输出如下:\