⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 运动会分数统计源程序.cpp

📁 数据结构课程设计:运动会分数统计。压缩包里包括全部的源代码和试验报告。拿出来大家一起分享啊
💻 CPP
字号:
#include"stdio.h"
#include"malloc.h"
#include"stdlib.h"
#include"string.h"

typedef struct Item
{int serial;//项目编号
 char name[10];//项目名称
 int count;//该项目得分人数
}Item_Table;

typedef struct Student
{char name[10];
 int sex;
 int item;//参加的项目
 int score;//成绩
 int range;//名次
}Student;

typedef struct SchoolNode
{int serial;//学校编号
 char name[10];
 int count;//运动员人数
 int boyscore;//男子团体总分
 int girlscore;//女子团体总分
 int totalscore;//团体总分
 int integral;//积分
 Student students[20];//参赛学生
 struct SchoolNode *next;
}SchoolNode,*School;

int SchoolCount=0;//学校总数
int BoyItem=0;//男生项目总数
int GirlItem=0;//女生项目总数
int TotalItem=0; //项目总数
Item_Table item_T[41];//项目表

void CreatSchoolLink(School &head)
{//创建学校的链表
 School p;
 int i;
 head=p=(School)malloc(sizeof(SchoolNode));
 for(i=1;i<=SchoolCount;i++)
 { p=p->next=(School)malloc(sizeof(SchoolNode));
   printf("请输入编号为%d的学校的名称:\n",i);
   scanf("%s",p->name);
   p->serial=i;
   p->count=0;
   p->boyscore=0;
   p->girlscore=0;
   p->totalscore=0;
   p->integral=0;
 }
 p->next=NULL;//使指针指向空
 head=head->next;//头指针后移
}
   
void AddStudentLink(School &head)
{//添加获奖学生
 School L,p;
 int School_ID;  //学校编号
 char StudentName[20];  //学生姓名
 int sex;//性别
 int Item_ID; //项目编号
 int score;   //成绩
 int range;  //名次
 printf("请输入学生的姓名:\n");
 scanf("%s",StudentName);
 printf("请输入该学生所在学校的编号:\n");
 scanf("%d",&School_ID);
 printf("请输入该学生的性别(0--女,1--男):\n");
 scanf("%d",&sex);
 printf("请输入该学生参加的项目编号:\n");
 scanf("%d",&Item_ID);
 if(sex==0) GirlItem=Item_ID;
 if(sex==1) BoyItem=Item_ID;
 printf("请输入该学生该项目的得分:\n");
 scanf("%d",&score);
 printf("请输入该学生在该项目中的名次:\n");
 scanf("%d",&range);
 L=head;
 while(L)
 { if(L->serial==School_ID)
        {   p=L;
            p->count=p->count+1;  //运动员数+1
            strcpy(p->students[p->count].name, StudentName); //学生姓名
            p->students[p->count].item=Item_ID ;//得分项目
            item_T[Item_ID].count=item_T[Item_ID].count+1;  //该项目得分人数+1
            p->students[p->count].range=range;//得分名次
            p->students[p->count].score=score;//得分
            p->students[p->count].sex=sex;  //性别
            break;
        }
        else L=L->next;
    }
}

void ScoreTJ(School &head)
{//成绩统计
    School p;
    p=head;  //保存链表头指针
    int boyscore=0;                //男子团体总分
    int girlscore=0;              //女子团体总分
    int totalscore=0;              //团体总分
    int i;
    int item_i=0;
    int integral=0;//积分
    while(p)
    {  for(i=1;i<=p->count;i++)
        {//计算分数
           totalscore=totalscore+p->students[i].score;  //计算总分
            if(p->students[i].sex==0) girlscore=girlscore+p->students[i].score;////女子团体总分
               else  boyscore=boyscore+p->students[i].score;//男子团体总分
        //计算积分
           item_i=p->students[i].item;
               if(item_T[item_i].count>=5)
                {//取前5名
                   if(p->students[i].range==1)integral=integral+7;
                   else if(p->students[i].range==2)integral=integral+5;
                   else if(p->students[i].range==3)integral=integral+3;
                   else if(p->students[i].range==4)integral=integral+2;
                   else if(p->students[i].range==5)integral=integral+1;
               }
               if(item_T[item_i].count<5)
                {//取前3名
                      if(p->students[i].range==1)integral=integral+5;
                   else if(p->students[i].range==2)integral=integral+3;
                   else if(p->students[i].range==3)integral=integral+2;
               }
         }//for
        p->integral=integral; //计算积分
        p->girlscore=girlscore;//保存 女子总分
        p->boyscore=boyscore;//保存 男子总分
        p->totalscore=totalscore;//保存总分

        integral=0;
        boyscore=0;   //男子团体总分
        girlscore=0; //女子团体总分
        totalscore=0; //总分

        p=p->next;  //向后移动指针
   }//while
}

void Find_Item_ID(School &head,int Item_ID){ //按项目编号查询取得前三或前五名的学校。
    School h,p;
    p=h=head;  //保存链表头指针
    int i;
    printf("查询结果如下:\n");
    while(h){
       for(i=1;i<=h->count;i++)
        { if(h->students[i].item==Item_ID)
            {   printf("学校:%s    姓名:%s   名次:%d\n",h->name,h->students[i].name,h->students[i].range);
                printf("\n--------------------------------------\n");
            }
        }
      h=h->next;
    }
}

void Find_School_Item(School &head,int School_ID,int Item_ID){//按学校编号查询学校某个项目
    School h,p;
    int item_i=0;
    int i;
    p=h=head;  //保存链表头指针
    while(h){
        if(h->serial==School_ID){p=h;break;}
    h=h->next;
    }
   for(i=1;i<=p->count;i++)
    {   if(p->students[i].item==Item_ID){
        printf("查询结果如下:\n");
        printf("姓名:%s\n",p->students[i].name);
        item_i=p->students[i].item;
        if(p->students[i].sex==0){
            printf("性别:女\n");
            item_i=item_i+20;
        }
        else {
            printf("性别:男\n");
        }
        printf("项目编号:%d      项目名称%s     该项目得分%d      名次:%d\n",p->students[i].item,item_T[item_i].name,p->students[i].score,p->students[i].range);
        printf("\n------------------------------------------------------------\n");
        }
    }
}

void OutPut_Link(School head)
{  //向屏幕输出数据
    School h;
    h=head;
    int i;
    int item_ID;
    int item_count_i;
    while(h)
    { //遍历学校
        printf("学校编号:%d\n",h->serial);
        printf("学校名称:%s\n",h->name);
        printf("本次运动会积分%d\n",h->integral);
        printf("男子团体总分:%d\n",h->boyscore);
        printf("女子团体总分:%d\n",h->girlscore);
        printf("总分:%d\n",h->totalscore);
        printf("运动员数:%d\n",h->count);
        printf("\n---------------------------------------\n");
        for(i=1;i<=h->count;i++)
        {//输出该校学生运动员情况
            printf("运动员姓名:%s\n",h->students[i].name);
            if(h->students[i].sex==0)printf("性别:女\n");
             else printf("性别:男\n");
                item_ID=h->students[i].item;
                if(h->students[i].sex==0)item_ID=item_ID+20; //如果是女生则项目表向后移动20
            printf("得分项目:%s\n",item_T[item_ID].name);
            printf("得分:%d\n",h->students[i].score);
            printf("得分名次:%d\n",h->students[i].range);
        }
        printf("\n--------------------------------------\n");
        h=h->next; //指针向后移动
    }
    printf("\n--本次运动会的项目清单--\n");
    printf("男生项目清单:\n");
    for(item_count_i=1;item_count_i<=BoyItem;item_count_i++)
    {
        printf("编号:%d    名称:%s    参加人数:%d\n",item_T[item_count_i].serial,item_T[item_count_i].name,item_T[item_count_i].count);
    }
    printf("女生项目清单:\n");
    for(item_count_i=1;item_count_i<=GirlItem;item_count_i++)
    {
       printf("编号:%d    名称:%s    参加人数:%d\n",item_T[item_count_i+20].serial,item_T[item_count_i+20].name,item_T[item_count_i+20].count);
    }
       printf("\n--------------------------------------\n");
  }

void AddStudent(School &head)
{  //添加学生数据
    int i=1;
  while(i)
   { AddStudentLink(head);  //添加学生数据
     printf("\n是否继续添加学生数据?[No=0  Yes=1]\n");
     scanf("%d",&i);
   }
}

int menu()   /*菜单函数*/
{int d;
 printf("\n::::::数据结构---运动会分数统计::::::\n");
 printf("\n:::::1--参数设置   2--添加学生:::::::\n");
 printf("\n:::::3--统计       4--学校查询:::::::\n");
 printf("\n:::::5--项目查询   按其他键退出::::::\n");
 printf("\n:::::::::::::::::::::::::::::::::::::\n");
 scanf("%d",&d);
return(d);
}

int main()
{School head;
 int i,flag=1;
 int a,b,c;
 while(flag)
 {switch(menu())
  {case 1:{
           printf("请输入参赛学校数(n>=2)\nn=");
           scanf("%d",&SchoolCount);
           printf("\n请输男生项目总数(0<n<=20)\nm=");
           scanf("%d",&BoyItem);
           printf("\n请输女生项目总数(0<n<=20)\nw=");
           scanf("%d",&GirlItem);
           TotalItem=BoyItem+GirlItem;

           printf("\n请输入男生项目信息\n");
           for(i=1;i<=BoyItem;i++)
          {
           item_T[i].serial=i;  //项目编号
           item_T[i].count=0;
           printf("项目编号:%d\n",i);
           printf("请输入项目名称:\n");
           scanf("%s",item_T[i].name); //项目名称
          }
           printf("\n请输入女生项目信息\n");
           for(i=1;i<=GirlItem;i++)
           {
            item_T[20+i].serial=i;
            printf("项目编号:%d\n",i); //项目编号
            printf("请输入项目名称:\n");
            scanf("%s",item_T[20+i].name);  //项目名称
            }
           CreatSchoolLink(head);
           break;
          }
  case 2:AddStudent(head);break;
  case 3:{ScoreTJ(head);
          OutPut_Link(head);
          break;
         }
  case 4:{  printf("\n请输入学校编号:");
            scanf("%d",&a);
            printf("\n请输入项目编号:");
            scanf("%d",&b);
            Find_School_Item(head,a,b);
            break;
          }
  case 5:{  printf("\n请输入项目编号:");
            scanf("%d",&c);
            Find_Item_ID(head,c);
            break;
          }
  default:flag=0;
  }
 }
}
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -