运动会分数统计系统.docx
- 文档编号:25612756
- 上传时间:2023-06-10
- 格式:DOCX
- 页数:37
- 大小:202.77KB
运动会分数统计系统.docx
《运动会分数统计系统.docx》由会员分享,可在线阅读,更多相关《运动会分数统计系统.docx(37页珍藏版)》请在冰豆网上搜索。
运动会分数统计系统
课程设计评审表
姓名
学院
学号
专业班级
题目
运动会分数统计系统
评
审
意
见
评审成绩
指导教师签名
职称
评审时间
年月日
课程设计作品验收表
题目
运动会分数统计系统
参与人员
姓名
班级
学号
设计任务与要求:
1) 可以输入各个学校各个项目的前三名或前五名的成绩;
2) 能统计各学校总分;
3) 可以按学校编号或名称、学校总分、男女团体总分排序输出;
4) 可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校;
5) 数据存入文件并能随时查询。
作品完成情况:
能按要求实现信息的输入、统计,按多种方式输出、查询等基本功能。
能将输入的信息存入文档,可供随时调用。
能够正确应对部分不合理的输入。
验收情况:
验收教师签名:
___________
年月日
注:
1.除“验收情况”栏外,其余各栏均由学生在作品验收前填写。
2.“验收情况”栏由验收小组按实际验收的情况如实填写。
1问题描述与分析……………………………………….…………………..………1
课程设计的目的…………………………….……………………...……………1
系统需求分析………………………………………….………………………...1
2概要设计…………….……………………………………………………………...2
系统功能设计……………...…………………………………………………….2
函数构造…………………………….…………………………………………..2
3详细设计……………………………………………………………………………...3
3.1数据类型及重要变量的定义……………………………………………………...3
3.2函数的设计和实现……………………………………………………………….4
4测试…………………………………………………………………………………...7
5课程设计总结………………………………………………………………………...11
5.1调试中遇到的较重要问题的回忆………………………………………………..11
5.2算法的效率及改良思想…………………………………………………………12
5.3心得体会……………………………………………………………………….12
参考文献……………………….………………………………………………..13
附录……………………………….……………………………………………..13
运动会分数统计系统
1问题描述与分析
1.1课程设计目的
为了稳固我们数据结构知识,加强我们的实际动手能力和提高我们综合素质,提高我们对电脑软件工程的认识学院组织我们进行了数据结构课程设计。
此次课程设计要到达以下几点目的:
〔1〕了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力。
〔2〕提高程序设计和调试能力。
学生通过上机实习,验证自己设计的算法的正确性。
学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。
〔3〕培养算法分析能力。
分析所设计算法的时间复杂度和空间复杂度,进一步提高程序设计水平。
〔4〕初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能。
1.2系统需求分析
问题描述:
参加运动会有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概要设计
2.1系统功能设计
根据运动会分数统计系统问题的分析和设计要求,可以将该系统可以分为三个模块:
信息统计模块、信息输出模块、信息查询模块,其系统功能结构图如图1所示。
〔1〕信息统计模实现信息的输入、统计、存档。
〔2〕信息输出模块,实现信息的输出。
〔3〕信息查询实现信息的查询。
图1系统功能结构图
2.2函数构造
根据系统功能结构图的描述,可以构造出该系统的几个基本的函数,其方法名和功能如表1所示。
表1函数功能表
函数
功能
voidinputinformation()
输入和统计信息函数
voidoutput()
输出信息函数
voidinquiry()
查询信息函数
voidwritedata()
数据存储函数
voidreaddata()
读入数据函数
3详细设计
3.1数据类型及重要变量的定义
〔1〕定义运动项目数据类型,用于存放运动项目,包括项目编号、项目所取名次数、名次、分数。
//定义项目结点的类型
typedefstruct
{
intitemnum;//项目编号
inttop;//项目取名次的数目,由用户定义3或5
intrange[5];//名次
intmark[5];//分数
}itemnode;
〔2〕定义学校数据类型,用来存储参赛学校信息,包括学校编号、学校总分、男团总分、女团总分、项目数组。
//定义学校结点类型
typedefstruct
{
intschoolnum;//学校编号
intscore;//学校总分
intmscore;//男团体总分
intwscore;//女团体总分
itemnodec[m+w];//项目数组
}schoolnode;
〔3〕定义学校数组schoolnodeh[n]。
采用数组结构有利于随机的存储和查询。
定义全局标志变量intflag1、flag2,分别用以标志是否已经向系统输入了信息和标志系统中是否已经存在信息。
定义文件指针FILE*report,用来指向存档的文件。
函数的设计和实现
在概要设计中已经对该系统涉及的抽象数据类型和函数及其功能做了说明,这里就不在对每个函数进行一一说明,只对其中比较重要的功能模块进行描述。
〔1〕信息输入及分数统计功能
voidinputinformation()为输入信息及分数统计函数。
在输入信息的同时进行分数的统计。
可以输入各个学校各项目前三名或前五名的成绩。
在输入学校的参赛项目时,结果取前三名还是前五名自己定,用一个选择语句实现。
利用swith语句前三名的分数赋为5、3、2,前五名的成绩赋为7,5、3、2、1,未取得成绩则赋为0。
并统计团体总分,男团总分和女团总分。
其主要功能代码如下:
for(s=0;s {printf("*****名次: "); scanf("%d",&h[i].c[j].range[s]);//输入所获名次信息 if(h[i].c[j].top==3) switch(h[i].c[j].range[s]) {case0: h[i].c[j].mark[s]=0;break; case1: h[i].c[j].mark[s]=5;break; case2: h[i].c[j].mark[s]=3;break; case3: h[i].c[j].mark[s]=2;break; } else switch(h[i].c[j].range[s]) {case0: h[i].c[j].mark[s]=0;break; case1: h[i].c[j].mark[s]=7;break; case2: h[i].c[j].mark[s]=5;break; case3: h[i].c[j].mark[s]=3;break; case4: h[i].c[j].mark[s]=2;break; case5: h[i].c[j].mark[s]=1;break; } h[i].score=h[i].score+h[i].c[j].mark[s]; 〔2〕信息输出功能 voidoutput()为输出函数。 列出一个输出目录利用swich语句使函数按学校编号输出或按学校总分、男团总分、女团总分由高到低排序输出。 利用辅助数组remember[]和冒泡排序的方法使之按分数的由高到低输出。 利用循环语句dowhile()当输入2时返回输出目录,输入0是跳出循环返回主菜单。 其流程图如图2所示。 图2输出信息模块流程图 〔3〕信息查询功能 voidinquiry()为查询函数。 列车一个查询目录利用swich语句使函数按学校编号或项目编号查询,输出某学校的某个项目的得分情况或某个项目的前几名的学校。 再利用循环语句dowhile()当输入2是返回查询目录,输入0时跳出循环返回主菜单。 其程序流程图如图3所示。 图3查询信息模块程序流程图 〔5〕主函数 voidmain()是主函数。 列出主菜单,利用switch语句调用以上函数实现各个菜单的功能。 想在每次查询结束想返回主菜单进行其它项时,应在main()函数中调用其它函数时再调用main()函数,如: switch(choice) { case1: printf("输入信息: \n");inputinformation();writedata();printf("信息已存入档案! ");main(); case2: printf("输出信息: \n");if(flag1)readdata();output();main(); 在进入主菜单后为了确保系统中已经输入了信息,用标志标量flag1和flag2来控制循环。 如果系统中没有任何信息,用户就不能选择输入或查询操作,此时会输出提示信息,并返回主菜单。 直到用户输入了信息或退出系统。 其实现代码如下: do{printf("======================欢送使用======================\n"); printf("\n\n*****************运动会分数统计系统********************\n"); printf("\n\n********************1.输入信息*************************\n"); printf("********************2.输出信息*************************\n"); printf("********************3.查询信息*************************\n"); printf("********************4.退出系统*************************\n\n\n"); printf("================================================\n\n"); printf("********请选择要实现步骤的编号(请确保已经输入信息! ): \n\n"); scanf("%d",&choice); if(choice==4)break; elseif(choice==1)flag1=0; elseif((report=fopen("sportsdata.txt","r"))! =null)flag2=0; else {system("cls"); printf("\n\n\n\n系统中无任何信息! \n\n请先输入信息! ! ! \n\n\n\n"); } }while(flag1&&flag2); 4测试 运行程序,进入系统主菜单。 用户可以选择输入、输出、查询信息或退出系统,界面如图4所示。 图4系统主界面 〔1〕输入信息 输入1得到进入输入信息模块。 根据系统提示将以下信息输入系统中: 学校编号1,项目编号1,取前5名,获得1个名次,是第5名;项目编号2,取前3名,获得3个名次,分别是1、2、3名。 学校编号2,项目编号1,取前5名,获得4个名次,分别是1、2、3、4名;项目编号2,取前5名,获得0个名次。 输入信息后,会自动存档,并提示存档成功,然后自动返还主菜单,如图5所示。 图5信息成功输入系统并存入了文档 〔2〕输出信息 输入2进入输出信息模块,该模块分四项,分别代表一种输出方式,如图6所示。 图6输入信息模块界面 用户可以按照自己的喜好,选择一种方式输入信息,输入2返回输出信息模块,输入0返回主菜单。 如图7~9分别是按照学校编号、学校总分、女团总分输出的情况。 图7按学校总分输出 图8按学校总分输出 图9按女团总分输出 〔3〕查询信息 输入3进入信息查询模块,该模块分为两项,如图10所示。 图10信息查询模块 用户可以选择不同菜单进行查询,如图11和图12分别是按照学校编号和项目编号查询的情况。 图11按学校编号查询 图12按项目编号查询 〔4〕退出系统 在主菜单下输入4可以退出系统,并有中文提示,如下图。 图13退出系统 5课程设计总结 5.1调试中遇到的较重要问题回忆 〔1〕提出问题: 所有输入输出内容只能在一屏内显示,学过c语言,很知道”\n”是换行,”\f”是换屏的,可是在这里就是无法实现。 解决问题: 输入clrscr(); 〔2〕提出问题: 设置选项,供用户输入选择时,当按任意键时都会跳入下一步操作,或者直接退出系统。 分析问题: 在供用户选择时,提供了几个选项,就写几个case语句,但是当用户输入的并不是这几个数字时,系统就不能做出正确判断。 解决问题: 修改case语句,添加default语句提示出错,要求重新输入。 源代码如下: Default: { clrscr();/*清屏*/ printf("输入错误,请重新选择"); } 〔3〕提出问题: 用户在系统主菜单上进行选择时,假设没有输入任何初始信息,而选择输出或查询操作,系统也会做出相应操作。 解决问题: 增加标识变量作为循环终止变量,用来判断系统中是否已经输入了信息。 假设没有就提示用户先输入信息。 5.2算法的效率及改良设想 算法的效率: 总的来讲,严重引响执行速度的便是查找,查找任意一个数据,便要将其所在的结构从头至尾遍历一次,消耗大量的时间。 改良设想: 因大部分显示均是以学校为单位,所以将以由有关人的各种信息为集合的结构改为以由有关学校的各种信息为集合的结构。 5.3心得体会 在这次上机过程中遇到过一些问题,但经过不懈努力,解决了部分,还有的现在不能解决,留待日后思考和解决。 比方说在运用数据结构排序的时候,方法的选择上,总是想用时间复杂度小的算法,但结果出了问题,最后还是用了我们熟悉的选择法排序。 在编写之前,做整体规划和详细设计很重要。 只有思路清晰,设计合理可行,编码才有可能有的放矢,才能更加有效的完成任务。 本次集中上机实验,对我来说可以算是一次挑战,因为在理论学习中没有好好的掌握,现在要独立完成一个较复杂的程序编写,确实有一点困难。 但我对于难度一向是以积极迎战的态度来面对,认真积极努力完成这次集中上机的任务。 对我来说这是一次很好的时机,同时我也很好的把握了这次时机,认真的完成了此次上机学习的任务,对自己今后在程序编写方面以及文档撰写方面相信会有很大的帮助,在此也对学校安排这样一次学习表示感谢,最后希望自己在数据结构以及电脑的其他学习方面能够得到很好的提高。 参考文献 [1]李云清、杨庆红、揭安全.数据结构〔C语言版〕[M].人民邮电大学出版社,200 [2]潘彦.算法设计与分析基础[M].北京: 清华大学出版社,200 ——原理、方法与应用[M].中国水利水电出版社,200 [4]吕凤翥.C++语言程序设计〔第2版〕.电子工业出版社,200 [5]严蔚敏、吴伟民.数据结构〔C语言版〕[M].清华大学出版社,200 附录 源代码: #include #include #include #include #definen2//学校数目 #definem1//男子项目数目 #definew1//女子项目数目 #definenull0 intflag1=1; intflag2=1;//全局变量,用来标识是否已经向系统输入信息 FILE*report; //定义项目结点的类型 typedefstruct { intitemnum;//项目编号 inttop;//项目取名次的数目,由用户定义3或5 intrange[5];//名次 intmark[5];//分数 }itemnode; //定义学校结点类型 typedefstruct { intschoolnum;//学校编号 intscore;//学校总分 intmscore;//男团体总分 intwscore;//女团体总分 itemnodec[m+w];//项目数组 }schoolnode; schoolnodeh[n];//定义一个学校结点数组 //信息输入模块,用来输入信息,建立系统 voidinputinformation() { inti,j,k,s; for(i=0;i { h[i].score=0; h[i].mscore=0; h[i].wscore=0; }//初始化各结点 for(i=0;i { do { printf("*****学校编号: "); scanf("%d",&h[i].schoolnum); }while(h[i].schoolnum>n||h[i].schoolnum<=0);//输入学校结点信息 for(j=0;j { do { printf("*****项目编号: "); scanf("%d",&h[i].c[j].itemnum); }while(h[i].c[j].itemnum>m+w||h[i].c[j].itemnum<=0); do { printf("*****取前3名or前5名: "); scanf("%d",&h[i].c[j].top); }while(h[i].c[j].top! =3&&h[i].c[j].top! =5); printf("*****获得几个名次: "); scanf("%d",&k);//输入项目信息 for(s=0;s<5;s++) h[i].c[j].range[s]=0,h[i].c[j].mark[s]=0;//初始化排名和分数 for(s=0;s { printf("*****名次: "); scanf("%d",&h[i].c[j].range[s]);//输入所获名次信息 if(h[i].c[j].top==3) switch(h[i].c[j].range[s]) { case0: h[i].c[j].mark[s]=0;break; case1: h[i].c[j].mark[s]=5;break; case2: h[i].c[j].mark[s]=3;break; case3: h[i].c[j].mark[s]=2;break; } else switch(h[i].c[j].range[s]) { case0: h[i].c[j].mark[s]=0;break; case1: h[i].c[j].mark[s]=7;break; case2: h[i].c[j].mark[s]=5;break; case3: h[i].c[j].mark[s]=3;break; case4: h[i].c[j].mark[s]=2;break; case5: h[i].c[j].mark[s]=1;break; } h[i].score=h[i].score+h[i].c[j].mark[s]; //按取前三名还是取前五名分别记分 if(j<=m-1) h[i].mscore=h[i].mscore+h[i].c[j].mark[s]; //是男子项目则记到男子分数里面去 else h[i].wscore=h[i].wscore+h[i].c[j].mark[s]; //是女子项目则记到女子项目里面去 } printf("\n"); } } } //信息输出模块,用来输出信息,可以选择按不同的方式输出信息 voidoutput() { intchoice,i,j,k; intremember[n]; intsign; do { printf("*******************1.按学校编号输出.*******************\n"); printf("*******************2.按学校总分输出.*******************\n"); printf("*******************3.按男团总分输出.*******************\n"); printf("*******************4.按女团总分输出.*******************\n"); printf("\n\n*******************请选择编号*************************\n\n: "); scanf("%d",&choice); switch(choice) { case1: //按编号顺序输出 for(i=0;i { printf("\n\n*****学校编号: %d\n",h[i].schoolnum); printf("*****学校总分: %d\n",h[i].score); printf("*****男团总分: %d\n",h[i].mscore); printf("*****女团总分: %d\n\n\n",h[i].wscore);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 运动会 分数 统计 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)