1、运动会分数统计课程设计青岛大学软件技术学院游戏算法实践报告姓 名 杜威 专 业 数字媒体艺术 班 级 10级4班 指导教师 刘春秋 2013年 1 月 16日1 问题定义与描述1.1 问题定义运动会分数统计系统1.2 问题描述参加运动会有n个学校,学校编号为1n。比赛分成m个男子项目和w个女子项目。项目编号为男子1m,女子m+1m+w。不同的项目取前前三名积分;前三名的积分分别为:5、3、2(m、w=20,n=10)。1.可以输入各个项目的前三名或前五名的成绩;2.能统计各学校总分;3.可以按学校编号、学校总分、男女团体总分排序输出;4.可以按学校编号查询学校某个项目的情况;可以按项目编号查询
2、取得前三或前五名的学校。规定:输入数据形式和范围:20以内的整数。2 关键技术C语言 数组 链表3 数据的组织需要输入学校编号,项目编号,取得的名次,以及哪些名次3.1数据类型定义typedef struct node1 int school; /*学校编号*/ int record; /*项目成绩*/ struct node1 *next; /*链域*/Schools; typedef struct int item; /*项目编号*/ Schools *firstschool; /*链域指向链表中第一个结点*/ITEM; typedef struct int z; /* 项目总数 */ I
3、TEM aMAX; ALLitems; typedef struct node2 int item; /*该学校获奖的项目*/ int record; /*项目成绩*/ struct node2 *next; /*链域*/ Items; typedef struct int school; /*学校编号*/ int score; /*学校总分*/ int boys; /*男团体总分*/ int girls; /*女团体总分*/ Items *firstitem; /*链域指向链表中第一个获奖项目的结点*/ SCHNode; typedef struct int n; /* 学校总数 */ SC
4、HNode bMAX; 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
5、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、 6.3统计各学校总分请选择(08):2 进入统计各学校总分图6.3统计各学校总分6.4按学校编号排序输出请按任意键继续 0 返回到主菜单窗口 请选择(08):3 按学校编号排序输出图6.4按学校编号排序输出6.5按学校总分排序输出请按任意键继续 0 返回到菜单主界面请选择(08):4 按学校总分排序输出图6.5按学校总分排序输出6.6按男团体总分排序输出请按任意键继续 0 返回到菜单主界面 请选择(08):5 按男团体总分排序输出图6.6按男团体总分排序输出6.7按女团体总分排序输出请按任意键继续 0 返回到菜单主界面 请选择(08):6 按女团体总分排序输出图6.7按女团体总分排序输出6.
7、8按学校编号查询学校某个项目情况 请按任意键继续 0 返回到菜单主界面请选择(08):7 按学校编号查询学校某个项目情况图6.8按学校编号查询学校某个项目情况6.9按项目编号查询取得名次的学校请按任意键继续 0 返回到菜单主界面请选择(08):8 按项目编号查询取得名次的学校图6.9按项目编号查询取得名次的学校7 心得体会本次课程设计,不仅检验了我的实践能力,也让自己可以很明确的了解到自己哪些知识点掌握的比较好,哪些知识点运用的还不够熟练。同时通过与组员和老师之间的交流,学到了很多自己所不了解的知识,多问,多学,实践与团队合作,才是关键。附录:程序代码#include #include #in
8、clude #include #define MAX 50 typedef struct node1 int school; /*学校编号*/ int record; /*项目成绩*/ struct node1 *next; /*链域*/Schools; typedef struct int item; /*项目编号*/ Schools *firstschool; /*链域指向链表中第一个结点*/ITEM; typedef struct int z; /* 项目总数 */ ITEM aMAX; ALLitems; typedef struct node2 int item; /*该学校获奖的项
9、目*/ int record; /*项目成绩*/ struct node2 *next; /*链域*/ Items; typedef struct int school; /*学校编号*/ int score; /*学校总分*/ int boys; /*男团体总分*/ int girls; /*女团体总分*/ Items *firstitem; /*链域指向链表中第一个获奖项目的结点*/ SCHNode; typedef struct int n; /* 学校总数 */ SCHNode bMAX; ALLNode; ALLitems *g1; ALLNode *g2; /*函数名:funct1
10、 *函数功能:输入各项目成绩 *形参:LLitems *g1,ALLNode *g2 *返回值:无 */ void funct1(ALLitems *g1,ALLNode *g2) Schools *p1; Items *p2; int i,j,k,m,w,h,x; p1=(Schools *)malloc(sizeof(Schools); p2=(Items *)malloc(sizeof(Items); if(!p1|!p2) exit(1); printf(n *输入各个项目信息 * nn); printf( 输入男子项目总数m:); scanf(%d,&m); if(m20) prin
11、tf( 输入有误,m是20以内的整数,请重新输入:); scanf(%d,&m); printf( 输入女子项目总数w:); scanf(%d,&w); if(w20) printf( 输入有误,w是20以内的整数,请重新输入:); scanf(%d,&w); printf( 输入参加运动会的学校总数n:); scanf(%d,&g2-n); if(g2-nn20) printf( 输入有误,n是20以内的整数,请重新输入:); scanf(%d,&g2-n); g1-z=m+w; printf( 则项目编号为男子1-%d,女子%d-%d,m,m+1,g1-z); printf(nn *记录运
12、动会成绩*); printf(nn (输入0标志结束)n); for(k=1;kz;k+) g1-ak.item=k; g1-ak.firstschool=NULL; for(k=1;kn;k+) g2-bk.school=k; g2-bk.firstitem=0; g2-bk.score=0; g2-bk.boys=0; g2-bk.girls=0; g2-b0.score=0; g2-b0.boys=0; g2-b0.girls=0; while(i!=0) printf(n 项目:); scanf(%d,&i); if(i!=0) printf( 1.前三名 2.前五名n); print
13、f( 请选择:); 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) p
14、2-record=p1-record=5; p1-next=g1-ai.firstschool; g1-ai.firstschool=p1; p2-next=g2-bx.firstitem; g2-bx.firstitem=p2; g2-bx.score=g2-bx.score+p2-record; /* 累计总分 */ if(ibx.boys=g2-bx.boys+p2-record; /* 累计男团体总分 */ else g2-bx.girls=g2-bx.girls+p2-record; /* 累计女团体总分 */ h-; while(x!=0&h!=0); if(j=2) h=5; d
15、o 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-n
16、ext=g1-ai.firstschool; g1-ai.firstschool=p1; p2-next=g2-bx.firstitem; g2-bx.firstitem=p2; g2-bx.score=g2-bx.score+p2-record; /* 累计总分 */ if(ibx.boys=g2-bx.boys+p2-record; /* 累计男团体总分 */ else g2-bx.girls=g2-bx.girls+p2-record; /* 累计女团体总分 */ h-; while(x!=0&h!=0); /*函数名:save *函数功能:保存文件 *形参:无 *返回值:无 */ vo
17、id save() FILE *fp1,*fp2; fp1=(FILE *)malloc(sizeof(FILE); fp2=(FILE *)malloc(sizeof(FILE); if(fp1=fopen(sports1,wb)=NULL) printf(cannot open file.n); return; if(fwrite(g1,sizeof(ALLitems),1,fp1)!=1) printf(file write error.n); fclose(fp1); if(fp2=fopen(sports2,wb)=NULL) printf(cannot open file.n);
18、return; if(fwrite(g2,sizeof(ALLNode),1,fp2)!=1) printf(file write error.n); fclose(fp2);/*函数名:funct2 *函数功能:统计各学校总分 *形参:ALLNode *g2 *返回值:无 */ void funct2(ALLNode *g2) /* 输出各学校总分 */ int k; printf(nn * 输出各学校总分 *n); printf( 学校编号t 总分 n); for(k=1;kn;k+) printf( %dttt %dn,k,g2-bk.score); printf(n); system(
19、pause); printf( 按任意键返回主菜单.); getchar(); /*函数名:funct3 *函数功能:按学校编号排序输出 *形参:ALLNode *g2 *返回值:无 */ void funct3(ALLNode *g2) /* 按学校编号排序输出 */ int k; Items *p2; p2=(Items *)malloc(sizeof(Items); printf(nn * 按学校编号排序输出 *n); printf( 学校编号ttt获奖情况 n); scanf(%d,&k); for(k=1;kn;k+) printf(t%dt,k); p2=g2-bk.firstit
20、em; while(p2!=NULL) printf(项目%d:得%d分 ,p2-item,p2-record); p2=p2-next; printf(n); printf(n); system(pause); printf(按任意键返回主菜单.); getchar(); /*函数名:funct4 *函数功能:按学校总分排序输出 *形参:ALLNode *g2 *返回值:无 */ void funct4(ALLNode *g2) /* 按学校总分排序输出 */ int i,j,k; Items *p2; printf(nn * 按学校总分排序输出 *n); printf( 学校编号tt总分
21、n); scanf(%d,&k); for(i=2;in;i+) printf(%dt,k); p2=g2-bk.firstitem; while(p2!=NULL) printf(%d tt%dn,g2-bk.school,g2-bk.score); p2=p2-next; printf(n); g2-b0.score=g2-bi.score; g2-b0.boys=g2-bi.boys; g2-b0.girls=g2-bi.girls; g2-b0.school=g2-bi.school; j=i-1; while(g2-b0.scorebj.score&j0) g2-bj+1.score
22、=g2-bj.score; g2-bj+1.boys=g2-bj.boys; g2-bj+1.girls=g2-bj.girls; g2-bj+1.school=g2-bj.school; j-; g2-bj+1.score=g2-b0.score; g2-bj+1.boys=g2-b0.boys; g2-bj+1.girls=g2-b0.girls; g2-bj+1.school=g2-b0.school; for(k=1;kn;k+) printf(%d tt%dn,g2-bk.school,g2-bk.score); system(pause); printf(按任意键返回主菜单.);
23、getchar(); /*函数名:funct5 *函数功能:按男团体总分排序输出 *形参:ALLNode *g2 *返回值:无 */ void funct5(ALLNode *g2) /* 按男团体总分排序输出 */ int i,j,k; Items *p2; p2=(Items *)malloc(sizeof(Items); printf(nn * 按男团体总分排序输出 *n); printf(学校编号tt男团体总分 n); scanf(%d,&k); for(i=2;in;i+) printf(%dt,k); p2=g2-bk.firstitem; while(p2!=NULL) printf(%dtt %dn,g2-bk.school,g2-bk.boys); p2=p2-next; printf(n); g2-b0.score=g2-bi.score; g2-b0.boys=g2-bi.boys; g2-b0.girls=g2-bi.girls; g2-b0.school=g2-bi.school; j=i-1; while(g2-b0.boysbj.boys&j0) g2-bj+1.score=g2-bj.score; g2-bj+1.boys=g2-bj.boys; g2-bj+1.girls=g2-bj.girls; g2-bj+1.schoo
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1