运动会成绩统计__实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验说明
题目:运动会分数统计
一.需求分析:
1.在该程序中,参赛学校编号为1~n(n<=20)。比赛分成m(m<=30)个
男子项目和w(w<=20)个女子项目,分别编号为1~m和m+1~m+w,
姓名长度不超过20个字符;
2.输入各个项目信息的详细信息,包括项目号,姓名,性别,学校和名
次。
3.对于项目编号为奇数的取前五名,得分顺序为7,5,3,2,1;为偶数
的取前三名,得分顺序为5,3,2。
4.程序执行的命令包括:
1)构造线性表的存储结构。
2)根据每个学生的名次确定相应的得分。
3)输出各个学校的成绩单和男子团体总分,女子团体总分和团体总分。二.概要设计
1.该程序包含两个结构体分别为:
结构体(1)运动员信息
结构体(2)学校信息
2.本程序包括4个模块:
1>初始化学校信息。
2>依次输入每个运动员的信息。
3>根据每个学生的成绩计算对应的得分,及个学校的总得分、男团总分、
女团总分。
4>生成个学校的成绩单,并输出。三.详细设计
1.数据结构的定义:
○1描述运动员的线性表
typedef struct
{
int item[MAXSIZE]; //参赛项目号
char thletename[MAXSIZE][20];//姓名
char sex[MAXSIZE];//性别
int schoolnum[MAXSIZE];//所在学校编号
int num[MAXSIZE];//名次
int point[MAXSIZE];//得分
int last;
}Thlete;
○2描述学校的线性表
typedef struct
{
int schoolnum[MAXSIZE];//学校编号
int Tgirl[MAXSIZE];//女生团体总分
int Tboy[MAXSIZE];//男生团体总分
int Tall[MAXSIZE];//学校总成绩
int last;
}School;
○3.控制输入的函数
int input(Thlete *S1,int n,int m,int w)
{
cout<<"项目号"<<'\t' <<"姓名"<<'\t' <<"性别"<<'\t' <<"学校号"<<'\t' <<"名次"<< '\t' < int i=0,j=1,k=0; if(S1->last==MAXSIZE-1) { cout<<"运动员人数已满,无法继续输入!"< return RIGHT; } while(cin>>S1->item[i]&&S1->item[i]!=0) { cin>>S1->thletename[i] >>S1->sex[i] >>S1->schoolnum[i] >>S1->num[i]; i++; if(i==100-1) { cout<<"运动员人数已满,无法继续输入!"< return RIGHT; } } S1->last=i; for(i=0;i { if(S1->schoolnum[i]>n) { cout<<"您的输入有误,输入学校个数不能超过"< 入!"< input(S1,n,m,w); return ERROR; } if(S1->sex[i]!='g'&&S1->sex[i]!='b') { cout<<"您的输入有误,输入运动员性别只能用'g'(女)或'b'(男)表示请重新输入!"< input(S1,n,m,w); return ERROR; } if(S1->item[i]>=0&&S1->item[i]<=m&&S1->sex[i]!='b') { cout<<"您的输入有误,项目号与性别不匹配,请重新输入!"< input(S1,n,m,w); return ERROR; } if(S1->item[i]>=m+1&&S1->item[i]<=m+w&&S1->sex[i]!='g') { cout<<"您的输入有误,项目号与性别不匹配,请重新输入!"< input(S1,n,m,w); return ERROR; } } return RIGHT; } ○3.用于计算学校各项成绩的函数 void mark(Thlete *L1,School *L2,int n,int m,int w) { int i,j; for(i=0;i { if(L1->item[i]%2==1)//项目编号为奇数的按第一种评分方法计算得分 { if(L1->num[i]==1) L1->point[i]=7; if(L1->num[i]==2) L1->point[i]=5; if(L1->num[i]==3) L1->point[i]=3; if(L1->num[i]==4) L1->point[i]=2; if(L1->num[i]==5) L1->point[i]=1; if(L1->num[i]>5) L1->point[i]=0; } if(L1->item[i]%2==0)//项目编号为偶数的按第二种评分方法计算得分 { if(L1->num[i]==1) L1->point[i]=5;