数据结构 运动会分数统计

实习报告

题目:写一个统计程序产生各种成绩单和得分报表。

需求分析

(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;

}

经验分享 程序员 微信小程序 职场和发展