运动会分数统计课程设计.docx
《运动会分数统计课程设计.docx》由会员分享,可在线阅读,更多相关《运动会分数统计课程设计.docx(31页珍藏版)》请在冰豆网上搜索。
运动会分数统计课程设计
青岛大学软件技术学院
游戏算法实践报告
姓名杜威
专业数字媒体艺术
班级10级4班
指导教师刘春秋
2013年1月16日
1问题定义与描述
1.1问题定义
运动会分数统计系统
1.2问题描述
参加运动会有n个学校,学校编号为1……n。
比赛分成m个男子项目和w个女子项目。
项目编号为男子1……m,女子m+1……m+w。
不同的项目取前前三名积分;前三名的积分分别为:
5、3、2(m、w<=20,n<=10)。
1.可以输入各个项目的前三名或前五名的成绩;
2.能统计各学校总分;
3.可以按学校编号、学校总分、男女团体总分排序输出;
4.可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
规定:
输入数据形式和范围:
20以内的整数。
2关键技术
C语言数组链表
3数据的组织
需要输入学校编号,项目编号,取得的名次,以及哪些名次
3.1数据类型定义
typedefstructnode1
{
intschool;/*学校编号*/
intrecord;/*项目成绩*/
structnode1*next;/*链域*/
}Schools;
typedefstruct
{
intitem;/*项目编号*/
Schools*firstschool;/*链域指向链表中第一个结点*/
}ITEM;
typedefstruct
{
intz;/*项目总数*/
ITEMa[MAX];
}ALLitems;
typedefstructnode2
{
intitem;/*该学校获奖的项目*/
intrecord;/*项目成绩*/
structnode2*next;/*链域*/
}Items;
typedefstruct
{
intschool;/*学校编号*/
intscore;/*学校总分*/
intboys;/*男团体总分*/
intgirls;/*女团体总分*/
Items*firstitem;/*链域指向链表中第一个获奖项目的结点*/
}SCHNode;
typedefstruct
{
intn;/*学校总数*/
SCHNodeb[MAX];
}ALLNode;
3.2数据存储结构
以链表和数组实现
4总体设计
4.1系统模块图
图4.1系统模块图
4.2数组和链表的基本操作
输入阶段,数组作为链表的数据域,将数据存放在数组的各个成员中。
输出阶段,将存储在数组中的数据进行调用,通过按数组中同一成员不同项目的大小不同来进行比较,来进行排序。
5详细设计
5.1主函数流程图
图5.1主函数流程图
5.2输入各个项目成绩的函数流程图
图5.2输入各个项目成绩的函数流程图
5.3比赛成绩排序输出函数流程图
图5.3比赛成绩排序输出函数流程图
6测试结果及分析
6.1主菜单窗口
图6.1主菜单窗口
6.2输入各个项目成绩并存储文件
请选择(0~8):
1进入输入各个项目成绩并存储文件
图6.21进入输入各个项目成绩界面
输入男子项目总数m:
2
输入女子项目总数w:
2
输入参加运动会的学校总数n:
3
图6.22输入项目和学校总数
输入项目:
1请选择1(1.前三名2.前五名)
第3名:
学校<学校编号为数字>3
第2名:
学校<学校编号为数字>2
第1名:
学校<学校编号为数字>1
项目:
2请选择1(1.前三名2.前五名)
第3名:
学校<学校编号为数字>1
第2名:
学校<学校编号为数字>2
第1名:
学校<学校编号为数字>3
项目:
3请选择1(1.前三名2.前五名)
第3名:
学校<学校编号为数字>3
第2名:
学校<学校编号为数字>1
第1名:
学校<学校编号为数字>2
项目:
4请选择1(1.前三名2.前五名)
第3名:
学校<学校编号为数字>3
第2名:
学校<学校编号为数字>1
第1名:
学校<学校编号为数字>2
图6.23输入项目信息
输入项目:
0返回到主菜单窗口
图6.24返回主界面
6.3统计各学校总分
请选择(0~8):
2进入统计各学校总分
图6.3统计各学校总分
6.4按学校编号排序输出
请按任意键继续0返回到主菜单窗口
请选择(0~8):
3按学校编号排序输出
图6.4按学校编号排序输出
6.5按学校总分排序输出
请按任意键继续0返回到菜单主界面
请选择(0~8):
4按学校总分排序输出
图6.5按学校总分排序输出
6.6按男团体总分排序输出
请按任意键继续0返回到菜单主界面
请选择(0~8):
5按男团体总分排序输出
图6.6按男团体总分排序输出
6.7按女团体总分排序输出
请按任意键继续0返回到菜单主界面
请选择(0~8):
6按女团体总分排序输出
图6.7按女团体总分排序输出
6.8按学校编号查询学校某个项目情况
请按任意键继续0返回到菜单主界面
请选择(0~8):
7按学校编号查询学校某个项目情况
图6.8按学校编号查询学校某个项目情况
6.9按项目编号查询取得名次的学校
请按任意键继续0返回到菜单主界面
请选择(0~8):
8按项目编号查询取得名次的学校
图6.9按项目编号查询取得名次的学校
7心得体会
本次课程设计,不仅检验了我的实践能力,也让自己可以很明确的了解到自己哪些知识点掌握的比较好,哪些知识点运用的还不够熟练。
同时通过与组员和老师之间的交流,学到了很多自己所不了解的知识,多问,多学,实践与团队合作,才是关键。
附录:
程序代码
#include
#include
#include
#include
#defineMAX50
typedefstructnode1
{
intschool;/*学校编号*/
intrecord;/*项目成绩*/
structnode1*next;/*链域*/
}Schools;
typedefstruct
{
intitem;/*项目编号*/
Schools*firstschool;/*链域指向链表中第一个结点*/
}ITEM;
typedefstruct
{
intz;/*项目总数*/
ITEMa[MAX];
}ALLitems;
typedefstructnode2
{
intitem;/*该学校获奖的项目*/
intrecord;/*项目成绩*/
structnode2*next;/*链域*/
}Items;
typedefstruct
{
intschool;/*学校编号*/
intscore;/*学校总分*/
intboys;/*男团体总分*/
intgirls;/*女团体总分*/
Items*firstitem;/*链域指向链表中第一个获奖项目的结点*/
}SCHNode;
typedefstruct
{
intn;/*学校总数*/
SCHNodeb[MAX];
}ALLNode;
ALLitems*g1;
ALLNode*g2;
/************************************
*函数名:
funct1*
*函数功能:
输入各项目成绩*
*形参:
LLitems*g1,ALLNode*g2*
*返回值:
无*
************************************/
voidfunct1(ALLitems*g1,ALLNode*g2)
{
Schools*p1;
Items*p2;
inti,j,k,m,w,h,x;
p1=(Schools*)malloc(sizeof(Schools));
p2=(Items*)malloc(sizeof(Items));
if(!
p1||!
p2)
exit
(1);
printf("\n******输入各个项目信息******\n\n");
printf("输入男子项目总数m:
");
scanf("%d",&m);
if(m<0||m>20)
{
printf("输入有误,m是20以内的整数,请重新输入:
");
scanf("%d",&m);
}
printf("输入女子项目总数w:
");
scanf("%d",&w);
if(w<0||w>20)
{
printf("输入有误,w是20以内的整数,请重新输入:
");
scanf("%d",&w);
}
printf("输入参加运动会的学校总数n:
");
scanf("%d",&g2->n);
if(g2->n<0||g2->n>20)
{
printf("输入有误,n是20以内的整数,请重新输入:
");
scanf("%d",&g2->n);
}
g1->z=m+w;
printf("则项目编号为男子1-%d,女子%d-%d",m,m+1,g1->z);
printf("\n\n****记录运动会成绩****");
printf("\n\n(输入0标志结束)\n");
for(k=1;k<=g1->z;k++)
{
g1->a[k].item=k;
g1->a[k].firstschool=NULL;
}
for(k=1;k<=g2->n;k++)
{
g2->b[k].school=k;
g2->b[k].firstitem=0;
g2->b[k].score=0;
g2->b[k].boys=0;
g2->b[k].girls=0;
}
g2->b[0].score=0;
g2->b[0].boys=0;
g2->b[0].girls=0;
while(i!
=0)
{
printf("\n项目:
");
scanf("%d",&i);
if(i!
=0)
{
printf("1.前三名2.前五名\n");
printf("请选择:
");
scanf("%d",&j);
if(j!
=1&&j!
=2)
{
printf("输入有误,请重新选择:
");
scanf("%d",&j);
}
if(j==1)
{
h=3;
do{printf("第%d名:
学校(学校编号为数字)",h);
scanf("%d",&x);
p1=(Schools*)malloc(sizeof(Schools));
p1->school=x;
p2=(Items*)malloc(sizeof(Items));
p2->item=i;
if(h==3)p2->record=p1->record=2;
if(h==2)p2->record=p1->record=3;
if(h==1)p2->record=p1->record=5;
p1->next=g1->a[i].firstschool;
g1->a[i].firstschool=p1;
p2->next=g2->b[x].firstitem;
g2->b[x].firstitem=p2;
g2->b[x].score=g2->b[x].score+p2->record;/*累计总分*/
if(i<=m)g2->b[x].boys=g2->b[x].boys+p2->record;/*累计男团体总分*/
elseg2->b[x].girls=g2->b[x].girls+p2->record;/*累计女团体总分*/
h--;
}while(x!
=0&&h!
=0);
}
if(j==2)
{
h=5;
do{
printf("第%d名:
学校(学校编号为数字)",h);
scanf("%d",&x);
p1=(Schools*)malloc(sizeof(Schools));
p1->school=x;
p2=(Items*)malloc(sizeof(Items));
p2->item=i;
if(h==5)p2->record=p1->record=1;
if(h==4)p2->record=p1->record=2;
if(h==3)p2->record=p1->record=3;
if(h==2)p2->record=p1->record=5;
if(h==1)p2->record=p1->record=7;
p1->next=g1->a[i].firstschool;
g1->a[i].firstschool=p1;
p2->next=g2->b[x].firstitem;
g2->b[x].firstitem=p2;
g2->b[x].score=g2->b[x].score+p2->record;/*累计总分*/
if(i<=m)g2->b[x].boys=g2->b[x].boys+p2->record;/*累计男团体总分*/
elseg2->b[x].girls=g2->b[x].girls+p2->record;/*累计女团体总分*/
h--;
}while(x!
=0&&h!
=0);
}
}
}
}
/************************************
*函数名:
save*
*函数功能:
保存文件*
*形参:
无*
*返回值:
无*
************************************/
voidsave()
{
FILE*fp1,*fp2;
fp1=(FILE*)malloc(sizeof(FILE));
fp2=(FILE*)malloc(sizeof(FILE));
if((fp1=fopen("sports1","wb"))==NULL)
{
printf("cannotopenfile.\n");
return;
}
if(fwrite(g1,sizeof(ALLitems),1,fp1)!
=1)
printf("filewriteerror.\n");
fclose(fp1);
if((fp2=fopen("sports2","wb"))==NULL)
{
printf("cannotopenfile.\n");
return;
}
if(fwrite(g2,sizeof(ALLNode),1,fp2)!
=1)
printf("filewriteerror.\n");
fclose(fp2);
}
/************************************
*函数名:
funct2*
*函数功能:
统计各学校总分*
*形参:
ALLNode*g2*
*返回值:
无*
************************************/
voidfunct2(ALLNode*g2)/*输出各学校总分*/
{
intk;
printf("\n\n******输出各学校总分******\n");
printf("学校编号\t总分\n");
for(k=1;k<=g2->n;k++)
printf("%d\t\t\t%d\n",k,g2->b[k].score);
printf("\n");
system("pause");
printf("按任意键返回主菜单......");
getchar();
}
/************************************
*函数名:
funct3*
*函数功能:
按学校编号排序输出*
*形参:
ALLNode*g2*
*返回值:
无*
************************************/
voidfunct3(ALLNode*g2)/*按学校编号排序输出*/
{
intk;
Items*p2;
p2=(Items*)malloc(sizeof(Items));
printf("\n\n******按学校编号排序输出******\n");
printf("学校编号\t\t\t获奖情况\n");
scanf("%d",&k);
for(k=1;k<=g2->n;k++)
{
printf("\t%d\t",k);
p2=g2->b[k].firstitem;
while(p2!
=NULL)
{
printf("项目%d:
得%d分",p2->item,p2->record);
p2=p2->next;
}
printf("\n");
}
printf("\n");
system("pause");
printf("按任意键返回主菜单......");
getchar();
}
/************************************
*函数名:
funct4*
*函数功能:
按学校总分排序输出*
*形参:
ALLNode*g2*
*返回值:
无*
************************************/
voidfunct4(ALLNode*g2)/*按学校总分排序输出*/
{
inti,j,k;
Items*p2;
printf("\n\n******按学校总分排序输出******\n");
printf("学校编号\t\t总分\n");
scanf("%d",&k);
for(i=2;i<=g2->n;i++)
{
printf("%d\t",k);
p2=g2->b[k].firstitem;
while(p2!
=NULL)
{
printf("%d\t\t%d\n",g2->b[k].school,g2->b[k].score);
p2=p2->next;
}
printf("\n");
g2->b[0].score=g2->b[i].score;
g2->b[0].boys=g2->b[i].boys;
g2->b[0].girls=g2->b[i].girls;
g2->b[0].school=g2->b[i].school;
j=i-1;
while(g2->b[0].scoreb[j].score&&j>0)
{
g2->b[j+1].score=g2->b[j].score;
g2->b[j+1].boys=g2->b[j].boys;
g2->b[j+1].girls=g2->b[j].girls;
g2->b[j+1].school=g2->b[j].school;
j--;
}
g2->b[j+1].score=g2->b[0].score;
g2->b[j+1].boys=g2->b[0].boys;
g2->b[j+1].girls=g2->b[0].girls;
g2->b[j+1].school=g2->b[0].school;
}
for(k=1;k<=g2->n;k++)
printf("%d\t\t%d\n",g2->b[k].school,g2->b[k].score);
system("pause");
printf("按任意键返回主菜单......");
getchar();
}
/************************************
*函数名:
funct5*
*函数功能:
按男团体总分排序输出*
*形参:
ALLNode*g2*
*返回值:
无*
************************************/
voidfunct5(ALLNode*g2)/*按男团体总分排序输出*/
{
inti,j,k;
Items*p2;
p2=(Items*)malloc(sizeof(Items));
printf("\n\n******按男团体总分排序输出******\n");
printf("学校编号\t\t男团体总分\n");
scanf("%d",&k);
for(i=2;i<=g2->n;i++)
{
printf("%d\t",k);
p2=g2->b[k].firstitem;
while(p2!
=NULL)
{
printf("%d\t\t%d\n",g2->b[k].school,g2->b[k].boys);
p2=p2->next;
}
printf("\n");
g2->b[0].score=g2->b[i].score;
g2->b[0].boys=g2->b[i].boys;
g2->b[0].girls=g2->b[i].girls;
g2->b[0].school=g2->b[i].school;
j=i-1;
while(g2->b[0].boysb[j].boys&&j>0)
{
g2->b[j+1].score=g2->b[j].score;
g2->b[j+1].boys=g2->b[j].boys;
g2->b[j+1].girls=g2->b[j].girls;
g2->b[j+1].schoo