数据结构 运动会分数统计
实习报告
题目:写一个统计程序产生各种成绩单和得分报表。
需求分析
(1) 用户从键盘上首先录入若干运动员的参赛项目和成绩得分等数据,再输入学校清单;
(2) 通过Dev-c++ 调试编译 命令提示符方式屏幕输出;
(3) 产生各学校的成绩单,内容包括各学校所取得的每项成绩的项目号、名次(成绩)、姓名和得分;产生团体总分报表,内容包括校号、男子团体总分、女子团体总分和团体总分;
(4) 测试数据:见实验报告末;
详细设计
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define n 5//运动员编号
#define m 2//学校编号
typedef struct project
{
int id;
char name[11];
char projectname[11];
char schoolname[13];
char sex[3];
int grade;
int score;
}Project;
typedef struct school
{
char schoolname[13];
int malescore;
int femalescore;
int sum;
}School;//团体总分报表
typedef struct projects
{
Project data;
struct projects *next;
}Projects;//实现链表的顺序存储
typedef struct schools
{
School data[100];
int length;
}Schools;
void input(Projects *p)
{
Projects *p1=(Projects *)malloc(sizeof(Projects));
if(p->next == NULL) p1->data.id=1;
else p1->data.id=(p->next->data.id)+1;
printf("请输入运动员姓名: ");
scanf("%s",p1->data.name);
printf("请输入项目名称: ");
scanf("%s",p1->data.projectname);
printf("请输入学校名称: ");
scanf("%s",p1->data.schoolname);
printf("请输入运动员性别(F/M): ");
scanf("%s",p1->data.sex);
printf("请输入运动员名次: ");
scanf("%d",&(p1->data.grade));
printf("请输入运动员成绩: ");
scanf("%d",&(p1->data.score));
p1->next=p->next;
p->next=p1;
}
void inputSchools(Schools *s)
{
for(int i=0;i<m;i++)
{
printf("请输入第%d个学校名:",i+1);
scanf("%s",s->data[i].schoolname);
//printf("%s",s->data[i].schoolname);
s->data[i].femalescore=0;
s->data[i].malescore=0;
s->data[i].sum=0;
}
s->length=m;
}
void math(Projects P,Schools *x)
{
Projects *p1=P.next;int i;
while(p1)
{
for(i=0;i<x->length;i++)
{
if(!strcmp(p1->data.schoolname,x->data[i].schoolname))
{
if(!strcmp(p1->data.sex,"F"))x->data[i].femalescore+=p1->data.score;
else x->data[i].malescore+=p1->data.score;
x->data[i].sum+=x->data[i].femalescore+x->data[i].malescore;
}
}p1=p1->next;
}
}
void output(Projects P,Schools *x)
{
Projects *p1=P.next;
for(int i=0;i<x->length;i++)
{
p1=P.next;//重置链表指针
printf("学校名称:%s ",x->data[i].schoolname);
while(p1)
{
if(!strcmp(p1->data.schoolname,x->data[i].schoolname))
{
printf("运动员姓名:%s",p1->data.name);
printf("项目名称:%s",p1->data.projectname);
printf("运动员名次:%d",p1->data.grade);
printf("运动员成绩:%d ",p1->data.score);
}p1=p1->next;
}
printf("男子团体总分:%d ",x->data[i].malescore);
printf("女子团体总分:%d ",x->data[i].femalescore);
printf("学校总分:%d ",x->data[i].sum);
}
}
int main(){
Projects P,*p1;Schools x;
P.next=NULL;//指针初始化
for(int i=0;i<n;i++)
{
printf("录入第%d个运动员的信息: ",i+1);
input(&P);
}//输入项目
inputSchools(&x);//输入学校
math(P,&x);//计算
output(P,&x);//打印
system("PAUSE");
return 0;
}