1课程设计题选一:运动会分数统计系统一.需求分析1问题描述运动会分数统计参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1~m,女子m+1~m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些项目取前五名或前三名由学生自己设定。(m=20,n=20)2.基本要求:1)可以输入各个项目的前三名或前五名的成绩;2)能统计各学校总分;3)可以按学校编号、学校总分、男女团体总分排序输出;4)可以按学校编号查询学校某个项目的情况;5)可以按项目编号查询取得前三或前五名的学校。3.测试数据1)首先进入成绩录入界面,先输入学校编号1,再输入学校1各个项目成绩0或1(‘0’表示没获得该项目的该名次,‘1’表示获得了该项目的该名次);然后再输入第二个学校编号2,再输入成绩;当输入其他的学校编号和成绩会提示错误输入,重新输入。2)然后进入总目录,输入:1统计各学校总分并输出;3)输入:2按学校编号排序输出;4)输入:3按学校总分排序输出;5)输入:4按男团体总分排序输出;6)输入:5按女团体总分排序输出;7)输入:6按学校编号查询学校某个项目情况;8)输入:7按项目编号查询取得名次的学校;9)输入:0退出系统;10)输入其他数据会提示错误输入,重新输入。2二.概要设计1结构体运动项目{项目编号;名次;};学校{学校编号;项目;团体总分;男团体总分;女团体总分;};2主程序(main)包括登陆欢迎程序,分数录入程序,查询程序,退出程序3程序模块机之间的调用流程图启动程序录入分数显示主目录统计各学校总分按学校编号排序按学校总分排序按女团体总分排序按学校编号查询学校某个项目情况查询学校某个项目情况按男团体总分排序按项目编号查询取得名次的学校退出系统用户选择某命令,产生相应的操作显示结果,用户选择返回主目录或退出退出程序3三.详细设计1、宏定义:#defineN2#definebm4#definegm32、数据类型定义(1)运动项目的定义:structmatch{intmatchnum;intrank[3];}mat[bm+gm];(2)学校的定义:structschool{intschoolnum;structmatchmat[bm+gm];inttotal;intboytotal;intgirltotal;}sch[N];3、函数之间的调用关系mainxunhuantotaljisuaninputhuanyingnifunct4funct6funct5funct3funct2funct1funct0mulufunct7system44、算法设计主要算法的设计思想:本程序主要是使用顺序表来实现操作。一个运动会包括运动项目和参加运动会的学校。因此构造顺序表match,school。为了操作的方便,设计了一个总目录,选择相应序号进入各个操作,并有错误提示,每完成一个操作程序会提示选择返回目录或退出程序,对于总分的排序使用了冒泡排序。为了使整个程序界面看起来更加惬意,又添加了背景和字体颜色设置的程序语句。每个操作前都有操作指南,易于使用。四.测试分析1、由于刚开始程序比较简单,虽能运行,但处理错误的能力很低,后来经过反复的添加修改,使程序能处理了错误,提高了健壮性。2、开始编时由于不太规范,编译出错后由于程序长,很难找到错误,后来规范了格式,错误容易找到了,以后编程要规范。3、算法的时空分析线性表使用的是顺序结构,各种算法的时间复杂度相对比较合理4、本程序相对来说比较容易看明白,其中涉及到的一些函数相对来说比较容易。通过调试,运行,基本上达到了要求,但还存在一些缺点。如:不够人性化等。5五.测试结果1数据输入(输入成绩如图)输入:请输入学校编号:1项目编号1234567第1名:1101100第2名:第3名:0000111请输入学校编号:2项目编号1234567第1名:0110011第2名:0001101第3名:11110006输入成绩后出现总目录(下图);输出:(1)输入:1输出:7(2)输入:1返回总目录,再输入:2输出:(3)输入:1返回总目录,再输入:3输出:8(4)输入:1返回总目录,再输入:4输出:(5)输入:1返回总目录,再输入:5输出:9(6)输入:1返回总目录,再输入:6,学校编号输入:1,项目编号输入:1输出:(7)输入:2,返回上一级,再输入学校编号:2,项目编号:3输出:10(8)输入:1,返回总目录;再输入:7,输入项目编号:7输出:(9)如果输入提示外的数字,例如输入:4则输出错误提示:(10)输入:0输出:六.参考文献(1)《C程序设计》(第三版)谭浩强著清华大学出版社(2)《数据结构》(C语言版)作者:严蔚敏,吴伟民出版社:清华大学出版社(3)《数据结构题集》(C语言版)作者:严蔚敏,吴伟民出版社:清华大学出版社七.源程序清单#includestdio.h11#includeprocess.h#defineN2//学校个数#definebm4//男团体个数#definegm3//女团体个数voidxuanze();voidxunhuan();structmatch//项目{intmatchnum;intrank[3];}mat[bm+gm];structschool//学校{intschoolnum;structmatchmat[bm+gm];inttotal;intboytotal;intgirltotal;}sch[N];voidhuanyingni()/*开始界面,欢迎使用*/{printf(\n\n东华大学信息科学与技术学院电气0910班周涛涛\n\n\n);printf(\t***^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^***\n\n);printf(欢迎使用运动会分数统计系统\n\n);printf(\t***^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^***\n\n);}voidinput()//输入成绩{inti,j,k;for(i=0;iN;i++)//初始化分数{sch[i].total=0;sch[i].boytotal=0;sch[i].girltotal=0;for(k=0;kbm+gm;k++){sch[i].mat[k].rank[0]=0;sch[i].mat[k].rank[1]=0;sch[i].mat[k].rank[2]=0;sch[i].mat[k].matchnum=k+1;}12}printf(*********输入成绩**********\n);printf(###输入说明:\n);printf(1.学校编号为1--%d;项目编号为1--%d(1-%d为男子项目,%d-%d为女子项目).\n,N,bm+gm,bm,bm+1,bm+gm);printf(2.成绩只能是‘0’或‘1’\n(‘0’表示没获得该项目的该名次,‘1’表示获得了该项目的该名次.以'Tab'键前进。)\n,N);for(i=0;iN;i++){printf(******请输入学校编号:);loop3:scanf(%d,&sch[i].schoolnum);if(sch[i].schoolnum0||sch[i].schoolnumN){printf(输入错误(只能是1-%d)请重新输入:,N);gotoloop3;}printf(项目编号);for(k=0;kbm+gm;k++)printf(%d,sch[i].mat[k].matchnum);printf(\n);for(j=0;j3;j++){loop:printf(第(%d)名:,j+1);for(k=0;kbm+gm;k++)scanf(%d,&sch[i].mat[k].rank[j]);for(k=0;kbm+gm;k++)if(sch[i].mat[k].rank[j]!=0&&sch[i].mat[k].rank[j]!=1){printf(输入错误,请重新输入,成绩只能是‘0’或‘1’\n);gotoloop;}}}}voidtotaljisuan(){inti,k,b;for(i=0;iN;i++)for(k=0,b=0;kbm+gm;k++){13b=sch[i].mat[k].rank[0]*5+sch[i].mat[k].rank[1]*3+sch[i].mat[k].rank[2]*2;sch[i].total=sch[i].total+b;if(kbm)sch[i].boytotal=sch[i].boytotal+b;if(k=bm)sch[i].girltotal=sch[i].girltotal+b;}}voidmulu(){printf(\n\n**系统目录**\n);//目录printf(\t\t************************************\n);printf(\t\t*1.统计各学校总分*\t\n);printf(\t\t*2.按学校编号排序输出*\t\n);printf(\t\t*3.按学校总分排序输出*\t\n);printf(\t\t*4.按男团体总分排序输出*\t\n);printf(\t\t*5.按女团体总分排序输出*\t\n);printf(\t\t*6.按学校编号查询学校某个项目情况*\t\n);printf(\t\t*7.按项目编号查询取得名次的学校*\t\n);printf(\t\t*0.退出*\t\n);printf(\t\t************************************\n);}voidfunct0()//退出系统{printf(\n\t\t*******谢谢使用!*******\n);printf(\n\t\t*******谢谢使用!*******\n);exit(0);}voidfunct1()//统计各学校总分{inti,q;printf(**********统计各学校总分**********\n);printf(**学校编号**\t\t\t\t**总分**\n);for(i=0;iN;i++)printf(\t%d\t\t\t\t%d\n,sch[i].schoolnum,sch[i].total);printf(\n);printf(\n);printf(##########0:退出;1:返回目录。\n);printf(****请选择:);loop2:scanf(%d,&q);if(q==0)funct0();if(q==1)xunhuan();else{printf(输入错误(只能是0或1),请重新输入:);14gotoloop2;}}voidfunct2()//按学校编号排序{structschoolsch1;inti,j,q;for(j=0;jN-1;j++)for(i=0;iN-j-1;i++)if(sch[i].schoolnumsch[i+1].schoolnum){sch1=sch[i];sch[i]=sch[i+1];sch[i+1]=sch1;}printf(**********按学校编号排序**********\n);printf(**学校编号**\t\t\t\t**总分**\n);for(i=0;iN;i++)printf(\t%d\t\t\t\t%d\n,sch[i].schoolnum,sch[i].total);printf(\n);printf(\n);printf(##########0:退出;1:返回目录。\n);printf(****请选择:);loop2:scanf(%d,&q);if(q==0)funct0();if(q==1)xunhuan();else{printf(输入错误(只能是0或1),请重新输入:);