运动会比赛计分系统.docx
- 文档编号:30271945
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:30
- 大小:191.83KB
运动会比赛计分系统.docx
《运动会比赛计分系统.docx》由会员分享,可在线阅读,更多相关《运动会比赛计分系统.docx(30页珍藏版)》请在冰豆网上搜索。
运动会比赛计分系统
数据结构
课程设计报告
设计题目运动会比赛计分系统姓名王永强冯成雪
专业班级计算机1002
学号********、********
指导教师王志艳
成绩____________________
计算机科学与技术专业
2011年12月
运动会比赛计分系统
一、设计目的:
任务:
参加运动会有n个学校,学校编号为1……n。
比赛分成m个男子项目,和w个女子项目。
参加编号为男子1……m,女子m+1……m+w。
不同的项目取前五名或前三名积分、取前五名的积分分别为:
7、5、3、2、1,前三名的积分分别为:
5、3、2;哪些去取五名或前三名由学生自己设定。
(m<=20,n<=20)
功能要求:
1)可以输入各个项目的前三名或前五名的成绩;
2)能统计各学校总分,
3)可以按学校编号或名称、学校总分、男女团体总分排序输出;
4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三名或前五名的学校。
5)数据存入文件并能随时查询
6)规定:
输入数据形式和范围:
可以输入学校的名称,运动项目的名称输出形式:
有中文提示,各学校分数为整形。
二、总体设计
编写目的:
根据要求分析文档,初步提出问题的解决方案,以及软件系统的体系结构和数据结构的设计方案并写出书面文档总体设计说明书,为下一步进行详细设计做准备。
2.1总体设计
该系统可以按功能进行模块划分,其模块图如下:
系统模块图
其中:
****菜单选择模块完成用户命令的接收,此模块是运动会比赛计分系统的入口,用户所要进行的各种操作均需在此模块中进行选择而调用其他模块实现相应的功能;
****信息输入模块完成学校、比赛项目(以及运动员的信息)输入功能,输入信息包括各参赛学校的编号、名称和每个学校在各比赛项目的编号、类型、名称、获奖次数、排名,以及(运动员姓名)等必要信息;
****计分模块是对输入信息的处理,是一种必要的辅助模块;
****输出模块包括:
1不输出信息,读入文件中;2输出信息,不读入文件。
其中输出的信息有:
学校编号、名称以及其所获奖项的项目编号、类型、名称、排名、男子总分、女子总分还有学校的总分等;
****文件读入模块是为了满足客户需要,为了储存信息,方便使用;
****信息查询模块完成对各信息的查询,查询时对应有两种选择以确定用户进行哪种查询。
2.2数据结构
本系统中主要的数据结构就是以学校为结点建立一个链式存储结构,结点中包括学校编号、学校名称、男子项目总分、女子项目总分、学校总分;再定义一个新的结构体是以项目信息为基础,通过指针实现学校来对项目信息的调用,无论是计分,输出还是查找均以链式存储结构来实现。
数据结构:
学校信息:
typedefstructschool
{
intsclnum;//学校编号
charsclname[20];//学校名称
sca[m+w];
intmscore;//男子团体总分
intwscore;//女子团体总分
intsum;//学校项目总分
structschool*next;
}scl;
scl*p,*q,*head,*g,*s,*u;//全局指针变量
项目信息(及运动员信息):
typedefstructsco
{
intmark[5];//分数
intitmnum;//项目编号
intitmkind;//项目类型
charitmname[20];//项目名称
charname[10];//运动员姓名
intl;//获奖名次数
intrange[5];//排名
}sc;
2.3程序流程
系统的执行应从输入信息功能开始,再执行菜单功能,依据用户的选择来进行后续的处理,直到用户选择退出系统为止,其间应对用户的选择做出判断及异常处理。
系统的流程图如下:
编写目的:
根据项目概要设计说明书,在项目概要设计的基础之上,对系统进行详细设计,以便下一步进行程序编码工作。
三、详细设计:
对于总设计时的系统模块功能图,各个功能模块的处理逻辑如下:
1)菜单选择模块:
调用voidmenu()//菜单函数
给出信息提示;
绘制菜单(包含查询、退出);
提示菜单选择并输入变量;
根据输入变量的值调用不同的模块函数;
以下是截取的菜单函数:
voidmenu()
{
system("cls");
printf("★================运动会比赛计分系统=================★\n");
printf("***********************welcome*********************\n");
printf("*********************冯成雪编制********************\n");
printf("**1------------------->>键盘输入**\n");
printf("**2------------------->>文件读入**\n");
printf("**3--------------------->>输出**\n");
printf("**4--------------------->>查询**\n");
printf("**5--------------------->>退出**\n");
printf("**男子前五名依次得分:
7分5分3分2分1分 **\n");
printf("**女子前三名依次得分:
5分3分2分**\n");
printf("*******************************************************\n");
printf("=======================================================\n");
}
2)信息输入模块:
调用scl*input()//信息输入函数
在输入信息时要求按照文字提示进行输入,要输入的信息包括:
参赛学校编号,名称以及比赛项目的编号,名称,获奖名次,排名,(运动员姓名)。
建立单链表,以链式存储结构来存放学校,项目等数据;
以下是输入的内容与形式:
scanf("%d",&p->sclnum);//输入学校编号
scanf("%s",p->sclname);//输入学校名称
for(x=0;x { scanf("%d",&p->a[x].itmnum);//输入项目编号 scanf("%d",&p->a[x].itmkind);//输入项目类型 scanf("%s",p->a[x].itmname);//输入项目名称 scanf("%d",&p->a[x].l);//输入获奖名次数 for(i=0;i { scanf("%d",&p->a[x].range[i]);//输入运动员的名次 scanf("%s",p->a[x].name);//运动员姓名 } 输入结束;在输入结束结束后要调用计分模块。 4)计分模块: 计分模块主要是依据输入信息的不同予以判断,并以不同的计分方式来计数将节点中的数据改变,并保存。 if(k==3)//女子项目取前三名 else//男子项目取前五名 3)信息输出模块: 根据用户的需要与选择,给出两种方式: 1、存入文件,不输出;2、输出,不存入文件。 printf("****1---------不输出,存入文件\n"); printf("****2---------输出,不存入文件\n"); scanf("%d",&co); switch(co) { Case1: 运用文件存储内容;break; Case2: 输出相应信息;break; } 4)文件读入模块: ! 此模块只是用来读入文件中的信息,无实际意义,只是满足题目要求,需谨慎使用。 5)信息查询模块: 和输出模块相似,同样有两种选择: 1、按学校编号查询;2、按项目编号查询。 printf("按学校查找请输入1,按项目查找请输入2\n"); scanf("%d",&cha); if(cha==1) { printf("请输入你要查询的学校编号: "); scanf("%d",&num); while(q! =NULL) {按学校输出相应信息;} } if(cha==2) { printf("请输入你要查询的项目编号: "); scanf("%d",&xiang); while(q! =NULL) {按项目输出相应信息;} } 程序的详细清单如下: #include #include #definen2//参赛学校数 #definem1//男子竞赛项目数 #definew1//女子竞赛项目数 typedefstructsco { intmark[5];//分数 intitmnum;//项目编号 intitmkind;//项目类型 charitmname[20];//项目名称 charname[10];//运动员姓名 intl;//获奖名次数 intrange[5];//排名 }sc; typedefstructschool { intsclnum;//学校编号 charsclname[20];//学校名称 sca[m+w]; intmscore;//男子团体总分 intwscore;//女子团体总分 intsum;//学校项目总分 structschool*next; }scl; scl*p,*q,*head,*g,*s,*u;//全局指针变量 /****************************************************************************/ /******************************菜单函数*********************************/ voidmenu() { system("cls"); printf("★================运动会比赛计分系统=================★\n"); printf("***********************welcome*********************\n"); printf("*********************冯成雪编制********************\n"); printf("**1------------------->>键盘输入**\n"); printf("**2------------------->>文件读入**\n"); printf("**3--------------------->>输出**\n"); printf("**4--------------------->>查询**\n"); printf("**5--------------------->>退出**\n"); printf("**男子前五名依次得分: 7分5分3分2分1分 **\n"); printf("**女子前三名依次得分: 5分3分2分**\n"); printf("*******************************************************\n"); printf("=======================================================\n"); } /******************************************************************************/ /*******************************计分函数*******************************/ voidcompute(inti,intx,intk) { if(k==3)//女子项目取前三名 { switch(p->a[x].range[i]) { case0: p->a[x].mark[p->a[x].range[i]]=0;break; case1: p->a[x].mark[p->a[x].range[i]]=5;break; case2: p->a[x].mark[p->a[x].range[i]]=3;break; case3: p->a[x].mark[p->a[x].range[i]]=2;break; default: puts("输入有误! ");exit(0); } } else { switch(p->a[x].range[i])//男子项目取前五名 { case0: p->a[x].mark[p->a[x].range[i]]=0;break; case1: p->a[x].mark[p->a[x].range[i]]=7;break; case2: p->a[x].mark[p->a[x].range[i]]=5;break; case3: p->a[x].mark[p->a[x].range[i]]=3;break; case4: p->a[x].mark[p->a[x].range[i]]=2;break; case5: p->a[x].mark[p->a[x].range[i]]=1;break; default: puts("输入有误! ");break; } } } /***********************输入函数***********************/ scl*input()//创建链表输入函数 { inti,x,y=1,k; p=(scl*)malloc(sizeof(scl));//头结点的初始化 printf("\n**按如下格式输入(相同学校编号不重复输入)**\n"); printf("**项目类型有: 111---男子222---女子**\n"); printf("**学校编号>>\n**学校名称>>\n**项目编号>>项目类型>>项目名称>>获得名次数>>名次>>姓名>>\n"); p->mscore=0;p->wscore=0; scanf("%d",&p->sclnum);//输入学校编号 scanf("%s",p->sclname);//输入学校名称 for(x=0;x { scanf("%d",&p->a[x].itmnum);//输入项目编号 scanf("%d",&p->a[x].itmkind);//输入项目类型 scanf("%s",p->a[x].itmname);//输入项目名称 scanf("%d",&p->a[x].l);//输入获奖名次数 for(i=0;i { scanf("%d",&p->a[x].range[i]);//输入运动员的名次 scanf("%s",p->a[x].name);//运动员姓名 } if(p->a[x].itmkind==222)//计分方式判断 k=3; else k=5; for(i=0;i { compute(i,x,k); if(p->a[x].itmkind==222)//共两种项目: 111(男子项目)222(女子项目) p->wscore+=p->a[x].mark[p->a[x].range[i]]; else p->mscore+=p->a[x].mark[p->a[x].range[i]]; } } p->sum=p->mscore+p->wscore;//求学校总成绩 head=p; q=p; /********************************************************************/ while(y { y++;//计数: 控制输入学校的个数 p=(scl*)malloc(sizeof(scl)); p->mscore=0;p->wscore=0; scanf("%d",&p->sclnum); scanf("%s",p->sclname); for(x=0;x { scanf("%d",&p->a[x].itmnum); scanf("%d",&p->a[x].itmkind); scanf("%s",p->a[x].itmname); scanf("%d",&p->a[x].l); for(i=0;i { scanf("%d",&p->a[x].range[i]); scanf("%s",p->a[x].name); } if(p->a[x].itmkind==222) k=3; else k=5; for(i=0;i { compute(i,x,k); if(p->a[x].itmkind==222) p->wscore+=p->a[x].mark[p->a[x].range[i]]; else p->mscore+=p->a[x].mark[p->a[x].range[i]]; } } p->sum=p->mscore+p->wscore; q->next=p; q=p; } p->next=NULL; menu(); returnhead; } /********************输出函数********************/ voidoutput(scl*head)//输出成绩 { scl*q=head; inti,x,y=1; FILE*fp; intco; printf("****1---------不输出,存入文件\n"); printf("****2---------输出,不存入文件\n"); scanf("%d",&co); switch(co) { case1: { fp=fopen("d: \\abc.txt","w+"); if(fp==NULL) {printf("无法打开文件! ");exit(0);} while(q! =NULL) { fprintf(fp,"%d\n",q->sclnum); for(x=0;x { fprintf(fp,"%d\t\n",q->a[x].itmkind); fprintf(fp,"%d\t\n",q->a[x].l); for(i=0;i fprintf(fp,"%d\t",q->a[x].range[i]); fprintf(fp,"\n"); } q=q->next; } fclose(fp); }break; case2: while(q! =NULL) { printf("===================================\n"); printf("学校编号: \t"); printf("%d\n",q->sclnum); printf("学校名称: \t"); printf("%s\n",q->sclname); for(x=0;x { printf("项目编号: \t"); printf("%d\n",q->a[x].itmnum); printf("项目类型: \t"); printf("%d\n",q->a[x].itmkind); printf("项目名称: \t"); printf("%s\n",q->a[x].itmname); printf("有%d个获奖名次: \t",q->a[x].l); for(i=0;i { printf("第%d名\t",q->a[x].range[i]); } printf("\n\n"); }printf("男子团体项目总分: \t%d\n",q->mscore); printf("女子团体项目总分: \t%d\n",q->wscore); printf("学校项目总得分: \t%d\n\n",q->sum); printf("\n"); q=q->next; }break; default: puts("输入有误! ");exit(0); } } /********************文件读入函数********************/ scl*read() { FILE*fpa=NULL; inti,x,y=1,k; p=(scl*)malloc(sizeof(scl)); p->mscore=0;p->wscore=0; fpa=fopen("d: \\abc.txt","r+");//打开文件 if(fpa==NULL) {puts("对不起,无法打开文件! ");exit(0);} fscanf(fpa,"%d",&p->sclnum); for(x=0;x { printf("已读入%d个项目\n",x+1); fscanf(fpa,"%d%d%d",&p->a[x].itmnum,&p->a[x].itmkind,&p->a[x].l); for(i=0;i fscanf(fpa,"%d",&p->a[x].range[i]); if(p->a[x].itmkind==222) k=3; else k=5; for(i=0;i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 运动会 比赛 计分 系统