运动会分数统计系统大数据结构课程设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

石家庄经济学院华信学院
课程设计报告
学院:
专业:
班级:
学号:
姓名:
运动会分数统计系统的设计与实现
一.问题描述
大学作为一个提供学生全面发展的高等教育机构,不仅要培养学生的学习能力,而且更要注重学生的德智体美全面发展。

在大学中有很多丰富多彩的比赛和活动,例如运动会,演讲比赛,歌唱比赛,书法比赛等,在比赛和竞争中,我们的这些素质和能力更容易得到培养提升。

但是比赛最后的分数统计和查询往往是举办者头疼的事情,分数的统计和查询需要快速准确,因此我们设计了这个运动会分数统计系统,以方便分数的统计查询。

参加运动会的n个学校编号为1~n。

比赛分成m个男子项目和w个女子项目,项目编号分别为1~m和m+1~m+w。

由于各项目参加人数差别较大,有些项目取前五名,得分顺序为7,5,3,2,1;还有些项目只取前三名,得分顺序为5,3,2。

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

二.需求分析
系统功能描述:
(1)可以输入各个项目的前三名或前五名的成绩;
(2)能统计各学校总分;
(3)可以按学校编号或名称、学校总分、男女团体总分排序输出;
(4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五
名的学校。

三.概要设计
3.1链表结构的ADT的定义
ADT List{
数据对象:D={a i|a i∈ElemSet,i=1,2,…,n,n≥0}
数据关系:R1={<a i-1,a i>|a i-1,a i∈D,i=2,…,n}
基本操作:
InitList(&L)
操作结果:构造一个空的线性表L。

GetElem(L,i,&e)
初始条件:线性表L已存在,1≦i≦ListLength(L)
操作结果:用e返回L中第i个数据元素的值。

LocateElem(L,e,compare())
初始条件:线性表L已存在,compare()是数据元素判定函数。

操作结果:返回L中第1个与e满足关系compare()的数据元
素的位序。

若这样的数据元素不存在,则返回值为
0。

PriorElem(L,cur_e,&pre_e)
初始条件:线性表L已存在。

操作结果:若cur_e是L的数据元素,且不是第一个,则用
pre_e返回它的前驱,否则操作失败,pre_e无定
义。

NextElem(L,cur_e,&next_e)
初始条件:线性表L已存在。

操作结果:若cur_e是L的数据元素,且不是最后一个,则用
next_e返回它的后继,否则操作失败,next_e无
定义。

ListInsert(&L,I,e)
初始条件:线性表L已存在,1≦i≦ListLength(L)+1
操作结果:在L中第i个位置之前插入新的元素e,L是表长
度加1
ListTraverse(L,visit())
初始条件:线性表L已存在。

操作结果:依次对L的每个数据元素调用函数visit()。

一旦
visit()失败,则操作失败。

}ADT List
3.2系统功能模块设计
3.4主界面设计
为了实现运动会分数统计系统,需要设计一个含有多菜单项的主控菜单子程序,以链接系统中各个子项目的调用,为了方便用户使用本系统,本系统主控菜单的运行界面如图3-3所示。

四.详细设计
实现运动会分数统计系统的开发,采用链表结构类型存储运动会学校名称、男子女子运动项目以及男子女子项目成绩的信息。

4.1数据类型定义
//每一个学校的信息
typedef struct Lnode//结点
{
char data[20];//学校名称
int da,d1,d2; //学校编号、学校总分、
男女团体分
struct Lnode *next;//指向下一学校
} Lnode,*LinkList;
int sz[20];
//每一个项目的信息存取
typedef struct Lnode1
{
char data[20],data1[20],data2[20],data3[20],data4[20],data5[20];
//该项目前五名学校的名称
int da1,da2,da3,da4,da5;//该项目前五名学校的编号
struct Lnode1 *next;//指向下一项目
} Lnode1,*LinkList1;
4.2 系统子程序详细设计
输入各学校名称的算法:
//按从头到尾的顺序依次建立线性链表L1共有n个节点
void schoolname(LinkList &L1,int n)
{
int i;
LinkList p,q;
//输入头结点信息,即输入第一个学校的名字
L1=(LinkList)malloc(sizeof(Lnode));//malloc是动态开辟内存,函数返回为void型指针(指向开辟的内存空间);(LinkList)定义的指针的类型;
(sizeof(Lnode)malloc开辟的内存空间的大小
printf("请输入这%d 个学校的名字:\n",n);
p=(LinkList)malloc(sizeof(Lnode));//指向一个有意义的地方
L1->next=p;//把p的值赋给next next指向实际的空间 p时指针
scanf("%s",&p->data);//修改空间的值,&取p的数据域的地址
//从第二个节点开始依次输入到第n个节点信息
for(i=2;i<=n;i++)//p是第一个,所以i=2从2开始先指出第一个,然后第一个在指出剩下的
{
q=p; //q指向p开辟的空间即 q指向p指向的地方
p=(LinkList)malloc(sizeof(Lnode));//给新开辟的空间赋值
输入男子运动项目名字的算法:
//按从头到尾的顺序依次建立线性链表L2共有n2个节点void mansports(LinkList1 &L2,int n2)
{
//输入第一个节点的信息,即第一个男子项目的名字
int i;
LinkList1 r,s;
L2=(LinkList1)malloc(sizeof(Lnode1));
printf("请输入这%d 个项目的名字:\n",n2);
r=(LinkList1)malloc(sizeof(Lnode1));
//把新开辟的空间data1-5初始化
for(int t=0;t<20;t++)
r->data1[t] = '\0';
for( t=0;t<20;t++)
r->data2[t] = '\0';
for( t=0;t<20;t++)
r->data3[t] = '\0';
for( t=0;t<20;t++)
r->data4[t] = '\0';
for( t=0;t<20;t++)
r->data5[t] = '\0';
L2->next=r;
scanf("%s",&r->data);
//从第二个节点开始输入到第n2个节点的信息
for(i=2;i<=n2;i++)
{
s=r; //s指向r指向的地方
r=(LinkList1)malloc(sizeof(Lnode1));
for(int t=0;t<20;t++)
r->data1[t] = '\0';
for( t=0;t<20;t++)
r->data2[t] = '\0';
for( t=0;t<20;t++)
r->data3[t] = '\0';
for( t=0;t<20;t++)
r->data4[t] = '\0';
for( t=0;t<20;t++)
r->data5[t] = '\0';
scanf("%s",&r->data);
s->next=r;
}
}
输入女子运动项目名字的算法:
//按从头到尾的顺序依次建立线性链表L3共有n1个节点void womansports(LinkList1 &L3,int n1)
{
//输入第一个节点的信息,即第一个女子项目的名字
int i;
LinkList1 r,s;
L3=(LinkList1)malloc(sizeof(Lnode1));
printf("请输入这%d 个项目的名字:\n",n1);
r=(LinkList1)malloc(sizeof(Lnode1));
L3->next=r;
scanf("%s",&r->data);
//从第二个节点开始依次输入到第n1个节点信息
for(i=2;i<=n1;i++)
{
s=r;
r=(LinkList1)malloc(sizeof(Lnode1));
scanf("%s",&r->data);
s->next=r;
参加比赛的学校的总分排名的算法:
void schoolrankings(LinkList &L1,int n)
{
LinkList p; 学校的数据类型上边
int z,i,j,y;
printf("参加这次比赛的学校的总分排名:\n");
p=L1->next; //下一个地方的指针给p p是学校的数据类型p是一个节点,L1下一个节点给p
//先把每个学校的总分依次遍历,存放在数组sz中。

一个一个取,一个一个找先让p指向一个链表
for(i=0;i<=n-1;i++)
{
sz[i]=p->da; //节点的信息指向一个数组,data学校总数的数据域,把所有的学校的总分
p=p->next;
}
//再对数组sz用冒泡排序法进行从小到大排序
for(i=1;i<=n-1;i++)
{
for(j=1;j<=n-i;j++)
{
if(sz[j-1]>sz[j])
{
y=sz[j-1];
sz[j-1]=sz[j];
sz[j]=y;
}
}
}
z=1; //初始化
//把线性链表L1按项目总分从大到小的顺序排列,并打印名次
for(i=n-1;i>=0;i--)
{
p=L1->next; // L1表示一个节点,取出里面一个数据,那个数据的名字是
next,next也是一个节点,p也是一个节点,
if(i>0) // 意义是判断下一个是不是
//如果值相等则链表指针直接指向下一个,不用交换位置
while(sz[i]==sz[i-1]) 相邻的两个数组素不素相等
{
i--; //从大到小,从最后一个比较
}
//在链表L1中找到与sz[i] 相等的节点的位置,并打印出名次信息
for(j=1;j<=n;j++)
{
if(sz[i]==p->da) //数组里面的值从最后一个开始取{
printf("第%d 名%s :%d 分\n",z,p->data,p->da);
z++;
}
p=p->next;
}
}
}
参加这次比赛的学校的男子项目的成绩排名的算法:
//男子项目排名算法代码与上述学校总分的排名算法完全一致,其中男子项目排序的过程为比较男子项目总分
void manrankings(LinkList &L1,int n)
{
LinkList p;
int z,i,j,y;
printf("参加这次比赛的学校的男子项目的成绩排名:\n");
p=L1->next;
//先把每个学校的男子项目总分依次遍历,存放在数组sz中。

for(i=0;i<=n-1;i++)
{
z[i]=p->d1;
p=p->next;
}
//再对数组sz用冒泡排序法进行从小到大排序
for(i=1;i<=n-1;i++)
{
for(j=1;j<=n-i;j++)
{
if(sz[j-1]>sz[j])
{
y=sz[j-1];
sz[j-1]=sz[j];
sz[j]=y;
}
}
}
z=1;
//把线性链表L1按男子项目总分从大到小的顺序排列,并打印名次
for(i=n-1;i>=0;i--)
{
p=L1->next;
if(i>0)
while(sz[i]==sz[i-1])
{
i--;
}
//在链表L1中找到与sz[i] 相等的节点的位置,并打印出名次信息
for(j=1;j<=n;j++)
{
if(sz[i]==p->d1)
{
printf("第%d 名%s :%d 分\n",z,p->data,p->d1);
z++;
}
p=p->next;
}
}
}
参加这次比赛的学校的女子项目的成绩排名的算法:
//女子项目排名算法代码与上述学校总分的排名算法完全一致,其中女子项目排序的过程为比较女子项目总分
void womanrankings(LinkList &L1,int n)
{
LinkList p;
int z,i,j,y;
printf("参加这次比赛的学校的女子项目的成绩排名:\n");
p=L1->next;
//先把每个学校的女子项目总分依次遍历,存放在数组sz中
for(i=0;i<=n-1;i++)
{
sz[i]=p->d2;
p=p->next;
}
//再对数组sz用冒泡排序法进行从小到大排序
for(i=1;i<=n-1;i++)
{
for(j=1;j<=n-i;j++)
{
if(sz[j-1]>sz[j])
{
y=sz[j-1];
sz[j-1]=sz[j];
sz[j]=y;
}
}
}
z=1;
//把线性链表L1按女子项目总分从大到小的顺序排列,并打印名次
for(i=n-1;i>=0;i--)
{
p=L1->next;
if(i>0)
//如果值相等则链表指针直接指向下一个,不用交换位置
while(sz[i]==sz[i-1])
{
i--;
}
//在链表L1中找到与sz[i] 相等的节点的位置,并打印出名次信息for(j=1;j<=n;j++)
{
if(sz[i]==p->d2)
{
printf("第%d 名%s :%d 分\n",z,p->data,p->d2);
z++;
}
p=p->next;
}
}
}
五.编码实现及系统测试
六.结果分析
注:m为学校个数,n为项目个数。

七.学习体会
通过这次数据结构课程设计,我收获了很多:
一.经过这几天的学习,进一步提升了C语言的应用能力,巩固了数据结构上课所学习的内容,数据结构知识的应用能力有了一定的提升,并且对C语言和数据结构有了更深层次的认识。

二.这次课程设计我们选的课题是运动会分数统计,涉及到线性链表以及C语言的一些基本的知识。

在以前的学习中,对知识只是掌握了大概的内容,基础知识掌握的不牢固,所以编写程序的过程非常的困难,通过这次课程设计,让我知道基础知识非常重要。

在进行概要设计的时候要注意结合问题的需求分析,函数调用要和系统功能相结合。

在书写程序时,要认真细心,很多错误都是因为自己的粗心,调试程序就花费了非常多的时间。

三.通过这次课程设计,让我明白了独立思考的重要性。

一个东西只有经过自己的思考,自己明白了才是真的明白了。

在思考的过程中,对一个问题思考的越深入,可以挖掘的东西就越多。

在解决问题时要结合多方面的因素,不能只单方面思考问题。

八.源程序清单
#include <stdio.h>
#include <malloc.h>
#include <string.h>
typedef struct Lnode 类型定义
{
char data[20];//学校名称
int da,d1,d2; //学校编号、学校总分、
男女团体分
struct Lnode *next;//指向下一学校
} Lnode,*LinkList;
int sz[20];
//每一个项目的信息
typedef struct Lnode1
{
char data[20],data1[20],data2[20],data3[20],data4[20],data5[20];
//该项目前五名学校的名称
int da1,da2,da3,da4,da5;//该项目前五名学校的编号
struct Lnode1 *next;//指向下一项目
} Lnode1,*LinkList1;
输入各学校名称的算法:
//按从头到尾的顺序依次建立线性链表L1共有n个节点
void schoolname(LinkList &L1,int n)
{
int i;
LinkList p,q;
//输入头结点信息,即输入第一个学校的名字
L1=(LinkList)malloc(sizeof(Lnode));
printf("请输入这%d 个学校的名字:\n",n);
p=(LinkList)malloc(sizeof(Lnode));
L1->next=p;
scanf("%s",&p->data);
//从第二个节点开始依次输入到第n个节点信息
for(i=2;i<=n;i++)
{
q=p;
p=(LinkList)malloc(sizeof(Lnode));
scanf("%s",&p->data);
q->next=p;
}
}
输入男子运动项目名字的算法:
//按从头到尾的顺序依次建立线性链表L2共有n2个节点
void mansports(LinkList1 &L2,int n2)
{
//输入第一个节点的信息,即第一个男子项目的名字
int i;
LinkList1 r,s;
L2=(LinkList1)malloc(sizeof(Lnode1));
printf("请输入这%d 个项目的名字:\n",n2);
r=(LinkList1)malloc(sizeof(Lnode1));
for(int t=0;t<20;t++)
r->data1[t] = '\0';
for( t=0;t<20;t++)
r->data2[t] = '\0';
for( t=0;t<20;t++)
r->data3[t] = '\0';
for( t=0;t<20;t++)
r->data4[t] = '\0';
for( t=0;t<20;t++)
r->data5[t] = '\0';
L2->next=r;
scanf("%s",&r->data);
//从第二个节点开始输入到第n2个节点的信息
for(i=2;i<=n2;i++)
{
s=r;
r=(LinkList1)malloc(sizeof(Lnode1));
for(int t=0;t<20;t++)
r->data1[t] = '\0';
for( t=0;t<20;t++)
r->data2[t] = '\0';
for( t=0;t<20;t++)
r->data3[t] = '\0';
for( t=0;t<20;t++)
r->data4[t] = '\0';
for( t=0;t<20;t++)
r->data5[t] = '\0';
scanf("%s",&r->data);
s->next=r;
}
}
输入女子运动项目名字的算法:
//按从头到尾的顺序依次建立线性链表L3共有n1个节点void womansports(LinkList1 &L3,int n1)
{
//输入第一个节点的信息,即第一个女子项目的名字
int i;
LinkList1 r,s;
L3=(LinkList1)malloc(sizeof(Lnode1));
printf("请输入这%d 个项目的名字:\n",n1);
r=(LinkList1)malloc(sizeof(Lnode1));
L3->next=r;
scanf("%s",&r->data);
//从第二个节点开始依次输入到第n1个节点信息
for(i=2;i<=n1;i++)
{
s=r;
r=(LinkList1)malloc(sizeof(Lnode1));
scanf("%s",&r->data);
s->next=r;
}
}
参加比赛的学校的总分排名的算法:
void schoolrankings(LinkList &L1,int n)
{
LinkList p;
int z,i,j,y;
printf("参加这次比赛的学校的总分排名:\n");
p=L1->next;
//先把每个学校的总分依次遍历,存放在数组sz中。

for(i=0;i<=n-1;i++)
{
sz[i]=p->da;
p=p->next;
}
//再对数组sz用冒泡排序法进行从小到大排序
for(i=1;i<=n-1;i++)
{
for(j=1;j<=n-i;j++)
{
if(sz[j-1]>sz[j])
{
y=sz[j-1];
sz[j-1]=sz[j];
sz[j]=y;
}
}
}
z=1;
//把线性链表L1按项目总分从大到小的顺序排列,并打印名次
for(i=n-1;i>=0;i--)
{
p=L1->next;
if(i>0)
//如果值相等则链表指针直接指向下一个,不用交换位置
while(sz[i]==sz[i-1])
{
i--;
}
//在链表L1中找到与sz[i] 相等的节点的位置,并打印出名次信息
for(j=1;j<=n;j++)
{
if(sz[i]==p->da)
{
printf("第%d 名%s :%d 分\n",z,p->data,p->da);
z++;
}
p=p->next;
}
}
}
参加这次比赛的学校的男子项目的成绩排名的算法:
//男子项目排名算法代码与上述学校总分的排名算法完全一致,其中男子项目排序的过程为比较男子项目总分
void manrankings(LinkList &L1,int n)
{
LinkList p;
int z,i,j,y;
printf("参加这次比赛的学校的男子项目的成绩排名:\n");
p=L1->next;
//先把每个学校的男子项目总分依次遍历,存放在数组sz中。

for(i=0;i<=n-1;i++)
{
z[i]=p->d1;
p=p->next;
}
//再对数组sz用冒泡排序法进行从小到大排序
for(i=1;i<=n-1;i++)
{
for(j=1;j<=n-i;j++)
{
if(sz[j-1]>sz[j])
{
y=sz[j-1];
sz[j-1]=sz[j];
sz[j]=y;
}
}
}
z=1;
//把线性链表L1按男子项目总分从大到小的顺序排列,并打印名次
for(i=n-1;i>=0;i--)
{
p=L1->next;
if(i>0)
while(sz[i]==sz[i-1])
{
i--;
}
//在链表L1中找到与sz[i] 相等的节点的位置,并打印出名次信息
for(j=1;j<=n;j++)
{
if(sz[i]==p->d1)
{
printf("第%d 名%s :%d 分\n",z,p->data,p->d1);
z++;
}
p=p->next;
}
}
}
参加这次比赛的学校的女子项目的成绩排名的算法:
//女子项目排名算法代码与上述学校总分的排名算法完全一致,其中女子项目排序的过程为比较女子项目总分
void womanrankings(LinkList &L1,int n)
{
LinkList p;
int z,i,j,y;
printf("参加这次比赛的学校的女子项目的成绩排名:\n");
p=L1->next;
//先把每个学校的女子项目总分依次遍历,存放在数组sz中
for(i=0;i<=n-1;i++)
{
sz[i]=p->d2;
p=p->next;
}
//再对数组sz用冒泡排序法进行从小到大排序
for(i=1;i<=n-1;i++)
{
for(j=1;j<=n-i;j++)
{
if(sz[j-1]>sz[j])
{
y=sz[j-1];
sz[j-1]=sz[j];
sz[j]=y;
}
}
}
z=1;
//把线性链表L1按女子项目总分从大到小的顺序排列,并打印名次for(i=n-1;i>=0;i--)
{
p=L1->next;
if(i>0)
//如果值相等则链表指针直接指向下一个,不用交换位置
while(sz[i]==sz[i-1])
{
i--;
}
//在链表L1中找到与sz[i] 相等的节点的位置,并打印出名次信息for(j=1;j<=n;j++)
{
if(sz[i]==p->d2)
{
printf("第%d 名%s :%d 分\n",z,p->data,p->d2);
z++;
}
p=p->next;
}
}
}
void main ()
{
int i,j,z,x,n,m,w;
//声明学校链表
LinkList p,q,L1; //p,q没有实际意义,L1是有实际意义,是储存学校信息//声明项目链表
LinkList1 r,s,L2,L3; // 同上男子男子链表,女子想么链表
do
{
printf("*************************************\n");
printf("****1 输入基本信息****\n");
printf("****2 查询某校各个项目的成绩****\n");
printf("****3 查询某个项目的比赛结果****\n");
printf("****4 结束本程序****\n");
printf("*************************************\n");
printf("请选择您想进行的操作\n");
//输入1,或2或3 选择功能
scanf("%d",&z);
//z=2查询某校各个项目的成绩
if(z==2)
{
r=L2->next;
printf("请输入您想查寻的学校的名字:\n");
//输入待查询学校的名称
s = (LinkList1)malloc(sizeof(Lnode1));//存储学校的名字
scanf("%s",&s->data);//输出查询结果
//输出查询信息
for(i=1;i<=m;i++) // m为男子项目个数字符串比较里面的是否相
等,相等=0,不相等不=0 第一名的成绩第一名学校
{
if(strcmp(r->data1,s->data)==0) printf("贵校荣获男子项目%s 的第1
名,他该项目的成绩是:%d\n",r->data,r->da1);
if(strcmp(r->data2,s->data)==0) printf("贵校荣获男子项目%s 的第2
名,他该项目的成绩是:%d\n",r->data,r->da2);
if(strcmp(r->data3,s->data)==0) printf("贵校荣获男子项目%s 的第3
名,他该项目的成绩是:%d\n",r->data,r->da3);
if(strcmp(r->data4,s->data)==0) printf("贵校荣获男子项目%s 的第4
名,他该项目的成绩是:%d\n",r->data,r->da4);
if(strcmp(r->data5,s->data)==0) printf("贵校荣获男子项目%s 的第5
名,他该项目的成绩是:%d\n",r->data,r->da5);
r=r->next; //男子项目的链表
}
r=L3->next;
for(i=1;i<=w;i++)
{
if(strcmp(r->data1,s->data)==0) printf("贵校荣获女子项目%s 的第1
名,她该项目的成绩是:%d\n",r->data,r->da1);
if(strcmp(r->data2,s->data)==0) printf("贵校荣获女子项目%s 的第2
名,她该项目的成绩是:%d\n",r->data,r->da2);
if(strcmp(r->data3,s->data)==0) printf("贵校荣获女子项目%s 的第3
名,她该项目的成绩是:%d\n",r->data,r->da3);
if(strcmp(r->data4,s->data)==0) printf("贵校荣获女子项目%s 的第4
名,她该项目的成绩是:%d\n",r->data,r->da4);
if(strcmp(r->data5,s->data)==0) printf("贵校荣获女子项目%s 的第5
名,她该项目的成绩是:%d\n",r->data,r->da5);
r=r->next;
}
}
//查询学校结束
//z=3查询某个项目的比赛结果
if(z==3)
{
printf("请输入您想查寻的项目的名字:\n");
//输入待查询的项目名称
s = (LinkList1)malloc(sizeof(Lnode1));
scanf("%s",&s->data); //存data里
r=L2->next;
for(i=1;i<=m;i++)
{
if(strcmp(r->data,s->data)==0)
{
if(strlen(r->data4)==0) printf("第1名%s ,第2名%s,第3
名%s\n",r->data1,r->data2,r->data3);
if(strlen(r->data4)>0) printf("第1名%s ,第2名%s,第3名%s,第4
名%s,第5名%s\n",r->data1,r->data2,r->data3,r->data4,r->data5);
}
r=r->next;
}
r=L3->next;
//打印项目比赛结果
for(i=1;i<=w;i++)
{
if(strcmp(r->data,s->data)==0)
{
if(strlen(r->data4)==0) printf("第1名%s ,第2名%s,第3
名%s\n",r->data1,r->data2,r->data3); //字长没有输入第四
名strlen(r->data4)==0
if(strlen(r->data4)>0) printf("第1名%s ,第2名%s,第3名%s,第4
名%s,第5名%s\n",r->data1,r->data2,r->data3,r->data4,r->data5);
}
r=r->next;
}
}
if(z==1)
//输入部分
{
//输入学校的个数n
printf("请输入参加这次比赛的学校的个数:\n");
scanf("%d",&n);
//构建链表L1,依次输入n个学校的名称。

schoolname(L1,n);
q=L1->next;
//把L1链表中的总分da全部初始化为0
for(i=1;i<=n;i++)
{
q->da=0; //初始化
q->d1=0;
q->d2=0;
q=q->next;
}
//输入男子个项目总数m
printf("\n请输入这次比赛的男子项目的个数:\n");
scanf("%d",&m);
//构建男子项目链表L2输入m个男子运动项目名字
mansports(L2,m);
r=L2->next;
//依次m个男子项目的结果
for(i=1;i<=m;i++)
{
printf("如果此次%s 比赛只取前3名的成绩请输入1,若只取前5
名的成绩请输入2!\n",r->data);
//输入1或2 选择成绩记录的方式
scanf("%d",&z);
printf("请输入第1名所来自的学校的名字和他该项目的成绩:\n");
//输入第1名学校名称和项目成绩
scanf("%s%d",&r->data1,&r->da1);
q=L1->next;
for(j=1;j<=n;j++)
{
if(strcmp(r->data1,q->data)==0)
{
if(z==1) {q->da=q->da+r->da1;q->d1=q->d1+r->da1;}//把项
目的成绩把对应的项目的成绩加到学校里先把第一名
的成绩加到对应的学校加到男子项目总分
if(z==2) {q->da=q->da+r->da1;q->d1=q->d1+r->da1;}
}
q=q->next;
}
printf("请输入第2名所来自的学校的名字和他该项目的成绩:\n"); //输入第2名学校名称和项目成绩
scanf("%s%d",&r->data2,&r->da2);
q=L1->next;
for(j=1;j<=n;j++)
{
if(strcmp(r->data2,q->data)==0)
{
if(z==1) {q->da=q->da+r->da2;q->d1=q->d1+r->da2;}
if(z==2) {q->da=q->da+r->da2;q->d1=q->d1+r->da2;} }
q=q->next;
}
printf("请输入第3名所来自的学校的名字和他该项目的成绩:\n"); //输入第3名学校名称和项目成绩
scanf("%s%d",&r->data3,&r->da3);
q=L1->next;
for(j=1;j<=n;j++)
{
if(strcmp(r->data3,q->data)==0)
{
if(z==1) {q->da=q->da+r->da3;q->d1=q->d1+r->da3;}
if(z==2) {q->da=q->da+r->da3;q->d1=q->d1+r->da3;} }
q=q->next;
}
//如果z=2,则继续输入第四,第五名的学校名称和项目成绩。

if(z==2)
{
printf("请输入第4名所来自的学校的名字和他该项目的成绩\n");//输入第4名的学校名称和项目成绩。

scanf("%s%d",&r->data4,&r->da4);
q=L1->next;
for(j=1;j<=n;j++)
{
if(strcmp(r->data4,q->data)==0)
{q->da=q->da+r->da4;q->d1=q->d1+r->da4;}
q=q->next;
}
printf("请输入第5名所来自的学校的名字和他该项目的成绩:
\n");//输入第5名的学校名称和项目成绩。

scanf("%s%d",&r->data5,&r->da5);
q=L1->next;
for(j=1;j<=n;j++)
{
if(strcmp(r->data5,q->data)==0)
{q->da=q->da+r->da4;q->d1=q->d1+r->da4;}
q=q->next;
}
}
r=r->next;
}
//输入男子项目完毕
printf("\n请输入这次比赛的女子项目的个数:\n");
//输入女子项目的的个数w
scanf("%d",&w);
//构建链表L3,输入w个项目名称
womansports(L3,w);
r=L3->next;
//依次对w个女子项目进行结果记录
for(i=1;i<=w;i++)
{
printf("如果此次%s 比赛只取前3名的成绩请输入1,若只取前5名的成绩请输入2!\n",r->data);
//输入1或2 选择记录的个数
scanf("%d",&x);
printf("请输入第1名所来自的学校的名字和他该项目的成绩:\n");
//输入第1 名所来自的学校的名字和他该项目的成绩
scanf("%s%d",&r->data1,&r->da1);
q=L1->next;
for(j=1;j<=n;j++)
{
if(strcmp(r->data1,q->data)==0)
{
if(x==1) {q->da=q->da+r->da1;q->d2=q->d2+r->da1;}
if(x==2) {q->da=q->da+r->da1;q->d2=q->d2+r->da1;} }
q=q->next;
}
printf("请输入第2名所来自的学校的名字和他该项目的成绩:\n"); //输入第2名所来自的学校的名字和他该项目的成绩
scanf("%s%d",&r->data2,&r->da2);
q=L1->next;
for(j=1;j<=n;j++)
{
if(strcmp(r->data2,q->data)==0)
{
if(x==1) {q->da=q->da+r->da2;q->d2=q->d2+r->da2;}
if(x==2) {q->da=q->da+r->da2;q->d2=q->d2+r->da2;} }
q=q->next;
}
printf("请输入第3名所来自的学校的名字和他该项目的成绩:\n"); //输入第3名所来自的学校的名字和他该项目的成绩
scanf("%s%d",&r->data3,&r->da3);
q=L1->next;
for(j=1;j<=n;j++)
{
if(strcmp(r->data3,q->data)==0)
{
if(x==1) {q->da=q->da+r->da3;q->d2=q->d2+r->da3;}
if(x==2) {q->da=q->da+r->da3;q->d2=q->d2+r->da3;} }
q=q->next;
}
if(x==2)
{
printf("请输入第4名所来自的学校的名字和他该项目的成绩:\n");//输入第4名所来自的学校的名字和他该项目的成绩
scanf("%s%d",&r->data4,&r->da4);
q=L1->next;
for(j=1;j<=n;j++)
{
if(strcmp(r->data4,q->data)==0)
{q->da=q->da+r->da4;q->d2=q->d2+r->da4;}
q=q->next;
}
printf("请输入第5名所来自的学校的名字和他该项目的成绩:\n");//输入第5 名所来自的学校的名字和他该项目的成绩
scanf("%s%d",&r->data5,&r->da5);
q=L1->next;
for(j=1;j<=n;j++)
{
if(strcmp(r->data5,q->data)==0)
{q->da=q->da+r->da5;q->d2=q->d2+r->da5;}
q=q->next;
}
}
r=r->next;
}
//输入女子项目完毕
p=L1->next;
printf("参加这次比赛的学校的成绩为:\n");
//输出n个学校的分数
for(i=1;i<=n;i++) //n个学校第一个节点开始一直打印到n个
{
printf("%s :总分:%d 分男子团体总分:%d 分女子团体总分:%d
分\n",p->data,p->da,p->d1,p->d2); //学校的名字……..
p=p->next; // p指向学校的链表打印完之后指向下一个节点}
//把团体总分按照从大到小进行排序并打印
schoolrankings (L1,n);
//把男子总分按照从大到小进行排序并打印
manrankings (L1,n);
//把女子总分按照从大到小进行排序并打印
womanrankings (L1,n);
}
//输入部分结束
}
while(z!=4); //
printf("\n");
}。

相关文档
最新文档