内容发布更新时间 : 2025/6/18 7:41:51星期一 下面是文章的全部内容请认真阅读。
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<<\运动会各学校信息按学校名称输出如下:\