运动会分数统计课程设计.docx

上传人:b****6 文档编号:3318553 上传时间:2022-11-21 格式:DOCX 页数:31 大小:268.98KB
下载 相关 举报
运动会分数统计课程设计.docx_第1页
第1页 / 共31页
运动会分数统计课程设计.docx_第2页
第2页 / 共31页
运动会分数统计课程设计.docx_第3页
第3页 / 共31页
运动会分数统计课程设计.docx_第4页
第4页 / 共31页
运动会分数统计课程设计.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

运动会分数统计课程设计.docx

《运动会分数统计课程设计.docx》由会员分享,可在线阅读,更多相关《运动会分数统计课程设计.docx(31页珍藏版)》请在冰豆网上搜索。

运动会分数统计课程设计.docx

运动会分数统计课程设计

 

青岛大学软件技术学院

 

游戏算法实践报告

 

姓名杜威

专业数字媒体艺术

班级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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1