运动会分数统计系统实验报告_第1页
运动会分数统计系统实验报告_第2页
运动会分数统计系统实验报告_第3页
运动会分数统计系统实验报告_第4页
运动会分数统计系统实验报告_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

运动会分数统计系统的实现09计科(2)班E10914044杨素传一、设计要求1、问题描述参加运动会有n个学校,学校编码为1,2,…,n,比赛分成m个男子项目和w个女子项目。项目编号为男子1,2,…,m,女子m+1,m+2,…,m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为7,5,3,2,1;前三名的积分分别5,3,2;哪些取前五名或前三名由学生自己设定(m<=20,n<=20)。2、需求分析(1)可以输入各个项目的前三名或前五名成绩;(2)能统计各学校成绩;(3)可以按学校编号、学校总分、男女团体总分排序输出;(4)可以按学校编号查询学校某项目情况,可以按项目编号查询取得前三名或前五名的学校。二、概要设计1、主界面设计为了实现运动会分数统计系统,设计一个含有多个菜单项的主控菜单子程序以连接系统的各项子程序,方便用户使用本程序。本系统主控菜单运行界面图1所示。图1运动会分数统计系统程序主菜单2、存储结构设计本程序采用链式存储类型(LNode)存储运动会分数统计系统的节点信息。运动会分数统计系统的链表中的结点包括8个域:项目编号域(objnum)、项目类型(objtype)、运动员编号(athnum)、运动员姓名(athname[20])、学校编号(schnum)、校名(schname[30])、运动员分数(athscore)和指向下一个节点的指针欲(structLNode*next)。3、系统功能设计本系统设置了8个子功能菜单。8个子功能的设计描述如下:(1)录入各项目的成绩。由函数creatLink()实现。当用户选择该功能时,系统会以用户输入的数据运动会分数统计链表。(2)统计各学校分数。由函数schoolScore()实现。当用户选择该功能时,系统会统计各学校分数。(3)按学校编号顺序输出。由函数printfSchoolNumber()实现。当用户选择该功能时,系统会按学校编号顺序输出数据。(4)按学校总分顺序输出。由函数printfSchoolScore()实现。当用户选择该功能时,系统会按学校总分顺序输出数据。(5)按男女团体总分顺序输出。由函数printfManWomanScore()实现。当用户选择该功能时,系统会按男女团体总分顺序输出数据。(6)按学校编号查询学校某项目情况。由函数printfSchoolObject()实现。当用户选择该功能时,系统会按学校编号输出学校某项目情况。(7)按项目编号查询取得前三名或前五名的学校。由函数printfObjectSchool()实现。当用户选择该功能时,系统会按项目编号查询取得前三名或前五名的学校情况。(8)退出。由exit(0)函数实现。三、模块设计1、模块设计本程序包含两个模块:主程序模块和工作区选择模块。其调用关系如图2所示。主程序模块主程序模块工作区选择模块图2模块调用示意图2、系统子程序及功能设计本系统共设置个6子程序,各子程序的函数名及功能说明如下。LinkListcreatLink()//创建链表(录入各项目的成绩)intschoolScore(LinkListL)//统计各学校总分voidprintfSchoolNumber()//按学校编号顺序输出voidprintfSchoolScore()//按学校总分顺序输出voidprintfManWomanScore(LinkListL//按男女团体总分排序输出voidprintfSchoolObject(LinkListL)//按学校编号查询学校某项目情况voidprintfObjectSchool(LinkListL)//按项目编号查询取得前三名或前五名的学校intmain()//主函数3、函数主要调用关系图本系统6个子系统之间的主要调用关系如图3所示,图中数字是各函数的编号。 p=p->next; break; } elseif(school[i].schoolnumber==p->schnum){ school[i].schoolscore+=p->athscore; p=p->next; break; } } } return0;}五、测试分析1、创建链表(录入各项目的成绩)在主菜单下,用户输入1并回车,然后输入数据结点的个数并回车,再输入数据,运行结果如图4所示。图4链表建立(录入各项目的成绩)2、统计各学校总分在主菜单下,用户输入2并回车,运行结果如图5所示。图5统计各学校总分3、按学校编号顺序输出在主菜单下,用户输入3并回车,运行结果如图6所示。图6按学校编号顺序输出的数据4、按学校总分顺序输出在主菜单下,用户输入4并回车,运行结果如图7所示。图7按学校总分顺序输出的数据5、按男女团体总分排序输出在主菜单下,用户输入5并回车,运行结果如图8所示。图8按男女团体总分排序输出的数据6、按学校编号查询学校某项目情况在主菜单下,用户输入6并回车,再输入学校编号回车,然后输入项目编号,运行结果如图9所示。图9按学校编号查询学校某项目情况6、按项目编号查询取得前三名或前五名的学校在主菜单下,用户输入7并回车,再输入项目编号回车,然后输入取名规则,运行结果如图10所示。图10按项目编号查询取得前三名或前五名的学校8、退出在主菜单下,用户输入0并回车,运行结果如图11所示。图11退出程序六、源程序清单#include<stdio.h>#include<stdlib.h>#include<string.h>#defineNULL0#defineLENsizeof(LNode)typedefstructLNode{// 链表节点数据结构 intobjnum; charobjtype; intathnum; charathname[20]; intschnum; charschname[30]; intathscore; structLNode*next;}LNode,*LinkList;//学校情况数据结构struct intschoolnumber; charschoolname[30]; intschoolscore;}school[30];//创建链表LinkListcreatLink(){ LinkListL=(LinkList)malloc(LEN); LinkListp,q; intnum,objnum,n; charobjtype; L->next=NULL; p=L; printf("请输入男女项目总个数:"); scanf("%d",&num); while(num--){ printf("请输入项目编号:"); scanf("%d",&objnum); printf("请输入项目类型:"); getchar(); objtype=getchar(); printf("请输入3(代表取前三名)或5(代表取前五名):"); scanf("%d",&n); printf("请按名次顺序输入运动员编号,姓名,学校编号,校名和成绩\n"); while(n--){ q=(LinkList)malloc(LEN); q->objnum=objnum; q->objtype=objtype; printf("请输入运动员编号:"); scanf("%d",&q->athnum); printf("请输入运动员姓名:"); getchar(); scanf("%s",q->athname); printf("请输入学校编号:"); scanf("%d",&q->schnum); printf("请输入校名:"); getchar(); scanf("%s",q->schname); printf("请输入成绩:"); scanf("%d",&q->athscore); q->next=NULL; p->next=q; p=q; } } return(L);}//统计各学校总分intschoolScore(LinkListL){ LinkListp; inti; p=L->next; for(i=0;i<20;i++){ school[i].schoolscore=0; school[i].schoolnumber=-1; } while(!p==NULL){ for(i=0;i<20;i++){ if(school[i].schoolnumber==-1){ strcpy(school[i].schoolname,p->schname); school[i].schoolnumber=p->schnum; school[i].schoolscore=p->athscore; p=p->next; break; } elseif(school[i].schoolnumber==p->schnum){ school[i].schoolscore+=p->athscore; p=p->next; break; } } } return0;}//按学校编号顺序输出voidprintfSchoolNumber(){ inti,j,num,flag; printf("学校编号校名学校总分\n"); for(i=0;;i++){ if(school[i].schoolnumber==-1)break; num=school[0].schoolnumber; flag=0; for(j=1;;j++){ if(school[j].schoolnumber==-1)break; if(school[j].schoolnumber<num){num=school[j].schoolnumber;flag=j;} } printf("%8d%10s%12d\n",school[flag].schoolnumber,school[flag].schoolname,school[flag].schoolscore); school[flag].schoolnumber=35565; }}//按学校总分顺序输出voidprintfSchoolScore(){ inti,j,sco,flag; printf("学校编号校名学校总分\n"); for(i=0;;i++){ if(school[i].schoolscore==0)break; sco=school[0].schoolscore; flag=0; for(j=1;;j++){ if(school[j].schoolscore==0)break; if(school[j].schoolscore>sco){sco=school[j].schoolscore;flag=j;} } printf("%8d%10s%12d\n",school[flag].schoolnumber,school[flag].schoolname,school[flag].schoolscore); school[flag].schoolscore=-1; }}//按男女团体总分排序输出voidprintfManWomanScore(LinkListL){ LinkListp; intmanscore=0,womanscore=0; p=L->next;while(!p==NULL){ if(p->objtype=='m')manscore+=p->athscore; elsewomanscore+=p->athscore; p=p->next; } printf("团体总分\n"); if(manscore>=womanscore){ printf("男生%8d\n",manscore); printf("女生%8d\n",womanscore); } else{ printf("女生%8d\n",womanscore); printf("男生%8d\n",manscore); } }//按学校编号查询学校某项目情况voidprintfSchoolObject(LinkListL){ LinkListp; intscnum,obnum,sum=0; charscname[30]; p=L->next; printf("请输入要查看的学校编号:"); scanf("%d",&scnum); printf("请输入项目编号:"); scanf("%d",&obnum); while(p!=NULL){ if(p->schnum==scnum&&p->objnum==obnum){sum+=p->athscore;strcpy(scname,p->schname);} p=p->next; } printf("学校编号校名项目编号获得总分\n");printf("%8d%10s%12d%12d\n",scnum,scname,obnum,sum);}//按项目编号查询取得前三名或前五名的学校voidprintfObjectSchool(LinkListL){ LinkListp; intobnum,n,i; p=L->next; printf("请输入要查看的项目编号:"); scanf("%d",&obnum); printf("请输入3(前三名)或5(前五名):"); scanf("%d",&n); for(i=20;i<30;i++){ school[i].schoolscore=0; school[i].schoolnumber=-1; } while(p!=NULL){ for(i=20;i<30;i++){ if(school[i].schoolnumber==-1&&p->objnum==obnum){ strcpy(school[i].schoolname,p->schname); school[i].schoolnumber=p->schnum; school[i].schoolscore=p->athscore; p=p->next; break; } elseif(school[i].schoolnumber==p->schnum&&p->objnum==obnum){ school[i].schoolscore+=p->athscore; p=p->next; break; } else{p=p->next;break;} } }printf("项目编号学校编号校名学校总分\n"); /*i=20; while(n--){ if(school[i].schoolscore!=0){ printf("%8d%12d%10s%12d\n",obnum,school[i].schoolnumber,school[i].schoolname,school[i].schoolscore); i++; } elsebreak; }*/ p=L->next; while(p->objnum!=obnum)p=p->next; while(n--){ printf("%8d%12d%10s%12d\n",obnum,p->schnum,p->schname,p->athscore); p=p->next; }}//主函数intmain(){ LinkListL; intmenu; while(menu!=0){ printf("***********************欢迎使用运动会分数统计系统***********************\n"); printf("1.录入各项目的成绩\n");printf("2.统计各学校分数\n"); printf("3.按学校编号顺序输出\n"); printf("4.按学校总分顺序输出\n"); printf("5.按男女团体总分顺序输出\n"); printf("

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论