数据结构 运动会分数统计

实习报告

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

   

需求分析

(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("请输入运动员姓名:\n");

scanf("%s",p1->data.name);

printf("请输入项目名称:\n");

scanf("%s",p1->data.projectname);

printf("请输入学校名称:\n");

scanf("%s",p1->data.schoolname);

printf("请输入运动员性别(F/M):\n");

scanf("%s",p1->data.sex);

printf("请输入运动员名次:\n");

scanf("%d",&(p1->data.grade));

printf("请输入运动员成绩:\n");

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\n",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\n",p1->data.score);

           }p1=p1->next;

         } 

       printf("男子团体总分:%d ",x->data[i].malescore);

       printf("女子团体总分:%d ",x->data[i].femalescore);

       printf("学校总分:%d \n",x->data[i].sum);  

       }

   

        

}

int main(){

Projects P,*p1;Schools x;

P.next=NULL;//指针初始化 

for(int i=0;i<n;i++)

 {

    printf("录入第%d个运动员的信息:\n",i+1);

input(&P);

 }//输入项目 

inputSchools(&x);//输入学校

math(P,&x);//计算

output(P,&x);//打印

system("PAUSE");

return 0;

}

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

免费范文

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值