《2022年运动会分数统计系统.docx》由会员分享,可在线阅读,更多相关《2022年运动会分数统计系统.docx(47页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选学习资料 - - - - - - - - - 课程设计评审表姓 名学 院学 号专业班级题 目运动会分数统计系统评审意见评审成果名师归纳总结 指导老师签名职称评审时间年月日第 1 页,共 29 页- - - - - - -精选学习资料 - - - - - - - - - 课程设计作品验收表题目 运动会分数统计系统姓 名参与人员 班 级学 号设计任务与要求:1 可以输入各个学校各个项目的前三名或前五名的成果;2 能统计各学校总分;3 可以按学校编号或名称、学校总分、男女团体总分排序输出;4 可以按学校编号查询学校某个项目的情形;可以按项目编号查询取得前三或前五名的学校;5 数据存入文件并能随时
2、查询;作品完成情形:能按要求实现信息的输入、统计,按多种方式输出、查询等基本功能;能将输入的信息存入文档,可供随时调用;能够正确应对部分不合理的输入;验收情形:验收老师签名: _ 年月日注:1. 除“ 验收情形” 栏外,其余各栏均由同学在作品验收前填写;2. “ 验收情形” 栏由验收小组按实际验收的情形照实填写;名师归纳总结 - - - - - - -第 2 页,共 29 页精选学习资料 - - - - - - - - - 目 录1 问题描述与分析 . . 1 课程设计的目的 . . 1 系统需求分析 . .1 2 概要设计 . . .2 系统功能设计 . .2 函数构造 . .2 3 具体设
3、计 .3 3.1 数据类型及重要变量的定义 .3 3.2 函数的设计和实现 .4 4 测试 .7 5 课程设计总结 .11 5.1 调试中遇到的较重要问题的回忆 .11 5.2 算法的效率及改良思想 12 5.3 心得体会 .12 名师归纳总结 参考文献 . .13 附录 . .13 第 3 页,共 29 页- - - - - - -精选学习资料 - - - - - - - - - 运动会分数统计系统1 问题描述与分析1.1 课程设计目的为 了 稳 固 我 们 数 据 结 构 知 识 , 加 强 我 们 的 实 际 动 手 能 力 和 提 高 我 们 综合 素 质 , 提高我们对电脑软件工程的
4、熟识学 计 ; 此次课程设计要到达以下几点目的:院 组 织 我 们 进 行 了 数 据 结 构 课 程 设1明白并把握数据结构与算法的设计方法,具备初步的独立分析和设计才能;2提高程序设计和调试才能;同学通过上机实习,验证自己设计的算法的正确 性;学会有效利用基本调试方法,快速找出程序代码中的错误并且修改;3培育算法分析才能;分析所设运算法的时间复杂度和空间复杂度,进一步提 高程序设计水平;4初步把握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法 和技能;1.2 系统需求分析问题描述:参与运动会有n 个学校,学校编号为1 n;竞赛分成 m个男子项目,和 w 个女子项目;项目编号为男
5、子1 m,女子 m+1 m+w;不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为: 5、3、2;哪些取前五名或前三名由同学自己设定; m=20,n=20;功能要求:1 可以输入各个学校各个项目的前三名或前五名的成果;2 能统计各学校总分;3 可以按学校编号或名称、学校总分、男女团体总分排序输出;4 可以按学校编号查询学校某个项目的情形;可以按项目编号查询取得前三或前五名的学校;1 . 名师归纳总结 - - - - - - -第 4 页,共 29 页精选学习资料 - - - - - - - - - 5 数据存入文件并能随时查询;6 规定:输入数据形式和
6、范畴:可以输入学校的名称,运动项目的名称;输出形式:有中文提示,各学校分数为整形;界面要求:有合理的提示,每个功能可以设立菜单,依据提示,可以完成相关的功能要求;2 概要设计2.1 系统功能设计依据运动会分数统计系统问题的分析和设计要求,可以将该系统可以分为三个模块:信息统计模块、信息输出模块、信息查询模块,其系统功能结构图如图 1 所示;1信息统计模实现信息的输入、统计、存档;2信息输出模块,实现信息的输出;3信息查询实现信息的查询;运动会分数统计系统信息统计模块信息输出模块信息查询模块信 息 输 入分 数 统 计信 息 存 档图 1 系统功能结构图2.2 函数构造根 据 系 统 功 能 结
7、 构 图 的 描 述 , 可 以 构 造 出 该 系 统 的 几 个 基 本 的 函 数 ,其 方 法 名 和 功 能 如 表 1 所 示 ;2 . 名师归纳总结 - - - - - - -第 5 页,共 29 页精选学习资料 - - - - - - - - - 表 1 函数功能表函数 功能void inputinformation 输入和统计信息函数void output 输出信息函数void inquiry 查询信息函数void writedata 数据储备函数void readdata 读入数据函数3 具体设计3.1 数据类型及重要变量的定义1定义运动项目数据类型,用于存放运动项目,包括
8、项目编号、项目所取名次数、名次、分数 ;/定义项目结点的类型typedef struct int itemnum; / 项目编号int top; /项目取名次的数目,由用户定义3 或 5 int range5; / 名次int mark5; /分数itemnode; 2定义学校数据类型,用来储备参赛学校信息,包括学校编号、学校总分、男团总分、女团总分、项目数组;/定义学校结点类型typedef struct int schoolnum; /学校编号int score; /学校总分int mscore; /男团体总分int wscore; /女团体总分itemnode cm+w; / 项目数组s
9、choolnode; 3 . 名师归纳总结 - - - - - - -第 6 页,共 29 页精选学习资料 - - - - - - - - - 3定义学校数组 schoolnode hn ;采纳数组结构有利于随机的储备和查询;定义全局标志变量 int flag1 、flag2 ,分别用以标志是否已经向系统输入了信息和标志系统中是否已经存在信息;定义文件指针FILE * report,用来指向存档的文件;函数的设计和实现在概要设计中已经对该系统涉及的抽象数据类型和函数及其功能做了说明,这里就不在对每个函数进行一一说明,只对其中比较重要的功能模块进行描述;1信息输入及分数统计功能void inpu
10、tinformation 为输入信息及分数统计函数;在输入信息的同时进行分数的统计;可以输入各个学校各项目前三名或前五名的成果;在输入学校的参赛项目时,结果取前三名仍是前五名自己定,用一个挑选语句实现;利用swith 语句前三名的分数赋为 5、3、2,前五名的成果赋为 7,5、3、2、1,未取得成果就赋为 0;并统计团体总分,男团总分和女团总分;其主要功能代码如下:fors=0;sk;s+ printf*名次 :; /输入所获名次信息scanf%d,&hi.cj.ranges; ifhi.cj.top=3 switchhi.cj.ranges case 0: hi.cj.marks=0; br
11、eak; case 1: hi.cj.marks=5; break; case 2: hi.cj.marks=3; break; case 3: hi.cj.marks=2; break; else switchhi.cj.ranges case 0: hi.cj.marks=0; break; case 1: hi.cj.marks=7; break; case 2: hi.cj.marks=5; break; 4 . 名师归纳总结 - - - - - - -第 7 页,共 29 页精选学习资料 - - - - - - - - - case 3: hi.cj.marks=3; break;
12、case 4: hi.cj.marks=2; break; case 5: hi.cj.marks=1; break; hi.score=hi.score+hi.cj.marks; 2信息输出功能void output 为输出函数;列出一个输出目录利用swich 语句使函数按学校编号输出或按学校总分、男团总分、女团总分由高到低排序输出;利用帮助数组 remember和冒泡排序的方法使之按分数的由高到低输出;利用循环语句 do while 当输入 2 时返回输出目录,输入 0 是跳出循环返回主菜单;其流程图如图 2 所示;开头显示挑选菜单输入选项 否按学校编号输出Case 1 Case 2Cas
13、e 3Case 4按女团总分输出按学校总分输出按男团总分输出是否跳出是跳出 -终止图 2 输出信息模块流程图3信息查询功能void inquiry 为查询函数;列车一个查询目录利用swich 语句使函数按学校编号或项目编号查询,输出某学校的某个项目的得分情形或某个项目的前几名的学校;再利用5 . 名师归纳总结 - - - - - - -第 8 页,共 29 页精选学习资料 - - - - - - - - - 循环语句 do while 当输入 2 是返回查询目录,输入 流程图如图 3 所示;开头显示挑选菜 单0 时跳出循环返回主菜单;其程序Case 1输入选项Case 2否按学校编号查询按项目
14、编号查询是否跳出是跳出 - 终止图 3 查询信息模块程序流程图5主函数void main 是主函数; 列出主菜单, 利用 switch 语句调用以上函数实现各个菜单的功能;想在每次查询终止想返回主菜单进行其它项时,再调用 main 函数,如:switchchoice case 1: 6 . 应在 main 函数中调用其它函数时名师归纳总结 - - - - - - -第 9 页,共 29 页精选学习资料 - - - - - - - - - printf 输入信息 :n;inputinformation;writedata;printf信息已存入档案.;main; case 2: printf 输
15、出信息 :n;ifflag1readdata;output;main; 在进入主菜单后为了确保系统中已经输入了信息,用标志标量 flag1 和 flag2 来掌握循环;假如系统中没有任何信息,用户就不能挑选输入或查询操作,此时会输出提示信息,并返回主菜单;直到用户输入了信息或退出系统;其实现代码如下 : do printf= 欢送使用 =n; printfnn* 运动会分数统计系统 *n; printfnn*1. printf*2. printf*3. printf*4.输入信息 *n; 输出信息 *n; 查询信息 *n; 退出系统 *nnn; printf=nn; printf*请挑选要实现
16、步骤的编号 请确保已经输入信息. :nn; scanf%d,&choice; ifchoice=4break; else ifchoice=1flag1=0; else ifreport=fopensportsdata.txt,r.=null flag2=0; else systemcls; 系统中无任何信息.nn 请先输入信息 .nnnn; printfnnnn whileflag1 & flag2; 4 测试运行程序,进入系统主菜单;用户可以挑选输入、输出、查询信息或退出系统,界 面如图 4 所示;7 . 名师归纳总结 - - - - - - -第 10 页,共 29 页精选学习资料 -
17、- - - - - - - - 图 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 所
18、示;8 . 名师归纳总结 - - - - - - -第 11 页,共 29 页精选学习资料 - - - - - - - - - 图 6 输入信息模块界面用户可以依据自己的喜好,挑选一种方式输入信息,输入 2 返回输出信息模块,输入 0 返回主菜单;如图 79 分别是依据学校编号、学校总分、女团总分输出的情形;图 7 按学校总分输出图 8 按学校总分输出9 . 名师归纳总结 - - - - - - -第 12 页,共 29 页精选学习资料 - - - - - - - - - 图 9 按女团总分输出3查询信息输入 3 进入信息查询模块,该模块分为两项,如图 10 所示;图 10 信息查询模块用户可
19、以挑选不同菜单进行查询,查询的情形;如图 11和图 12 分别是依据学校编号和项目编号图 11 按学校编号查询10 . 名师归纳总结 - - - - - - -第 13 页,共 29 页精选学习资料 - - - - - - - - - 图 12 按项目编号查询4退出系统 在主菜单下输入 4 可以退出系统,并有中文提示,如下图;图 13 退出系统5 课程设计总结5.1 调试中遇到的较重要问题回忆1提出问题:全部输入输出内容只能在一屏内显示,学过c 语言,很知道”n”是换行,” f” 是换屏的,可是在这里就是无法实现;解决问题 : 输入 clrscr; 2提出问题:设置选项,供用户输入挑选时,当按
20、任意键时都会跳入下一步操 作,或者直接退出系统;分析问题:在供用户挑选时,供应了几个选项,就写几个 case语句,但是当用户输 入的并不是这几个数字时,系统就不能做出正确判定;case语句,添加 default 语句提示出错,要求重新输入;源代码如 解决问题:修改 下:Default : 11 . 名师归纳总结 - - - - - - -第 14 页,共 29 页精选学习资料 - - - - - - - - - clrscr; /* 清屏 */ printf 输入错误,请重新挑选 ; 3提出问题:用户在系统主菜单上进行挑选时,假设没有输入任何初始信息,而挑选输出或查询操作,系统也会做出相应操作
21、;解决问题:增加标识变量作为循环终止变量, 用来判定系统中是否已经输入了信息;假设没有就提示用户先输入信息;5.2 算法的效率及改良设想算法的效率:总的来讲,严峻引响执 行速度的便是查找,查找任意一个数据,便要将其所在的结构从头至尾遍历一次,消耗大量的时间;改良设想:因大部分显示均是以学校为单位,所以将以由有关人的各种信息为集合 的结构改为以由有关学校的各种信息为集合的结构;5.3 心得体会在这次上机过程中遇到过一些问题,但经过不懈努力,解决了部分,仍有的现在不 能解决,留待日后摸索和解决;比方说在运用数据结构排序的时候,方法的挑选上, 总是想用时间复杂度小的算法,但结果出了问题,最终仍是用了
22、我们熟识的挑选法排序;在编写之前,做整体规划和具体设计很重要;只有思路清楚,设计合理可行,编码 才有可能有的放矢,才能更加有效的完成任务;本次集中上机试验,对我来说可以算是一次挑战,由于在理论学习中没有好好的掌 握,现在要独立完成一个较复杂的程序编写,的确有一点困难;但我对于难度一向是以 积极迎战的态度来面对,仔细积极努力完成这次集中上机的任务;对我来说这是一次很 好的时机,同时我也很好的把握了这次时机,仔细的完成了此次上机学习的任务,对自 在此也对学校支配这样 己今后在程序编写方面以及文档撰写方面信任会有很大的帮忙,一次学习表示感谢, 最终期望自己在数据结构以及电脑的其他学习方面能够得到很好
23、的 提高;12 . 名师归纳总结 - - - - - - -第 15 页,共 29 页精选学习资料 - - - - - - - - - 参考文献1李云清、杨庆红、揭安全.数据结构 C 语言版 M. 人民邮电高校出版社 ,200 2潘彦 .算法设计与分析基础 M. 北京:清华高校出版社 ,200 原理、方法与应用 M. 中国水利水电出版社 ,200 4 吕凤翥 .C+语言程序设计第2 版 .电子工业出版社 ,200 5 严蔚敏、吴伟民 .数据结构 C 语言版 M. 清华高校出版社 ,200 附录源代码:#include #include #include #include #define n 2
24、/ 学校数目 #define m 1/ 男子项目数目 #define w 1/ 女子项目数目 #define null 0 int flag1=1; int flag2=1;/ 全局变量,用来标识是否已经向系统输入信息 FILE *report; /定义项目结点的类型 typedef struct int itemnum; / 项目编号int top; /项目取名次的数目,由用户定义3 或 5 int range5; / 名次 int mark5; /分数 itemnode; /定义学校结点类型 typedef struct int schoolnum; /学校编号 int score; /学
25、校总分 int mscore; /男团体总分 int wscore; /女团体总分 itemnode cm+w; / 项目数组13 . 名师归纳总结 - - - - - - -第 16 页,共 29 页精选学习资料 - - - - - - - - - schoolnode; schoolnode hn;/ 定义一个学校结点数组/信息输入模块,用来输入信息,建立系统 void inputinformation int i,j,k,s; fori=0;in;i+ hi.score=0; hi.mscore=0; hi.wscore=0; / 初始化各结点 fori=0;in | hi.school
26、num=0;/ 输入学校结点信息 forj=0;jm+w | hi.cj.itemnum=0; do printf* 取前 3 名 or 前 5 名:; scanf%d,&hi.cj.top; whilehi.cj.top.=3 & hi.cj.top.=5; printf*获得几个名次:; scanf%d,&k; / 输入项目信息fors=0;s5;s+ hi.cj.ranges=0, hi.cj.marks=0; /初始化排名和分数 fors=0;sk;s+ printf* 名次 :; scanf%d,&hi.cj.ranges; /输入所获名次信息 ifhi.cj.top=3 14 .
27、名师归纳总结 - - - - - - -第 17 页,共 29 页精选学习资料 - - - - - - - - - switchhi.cj.ranges case 0: hi.cj.marks=0; break; case 1: hi.cj.marks=5; break; case 2: hi.cj.marks=3; break; case 3: hi.cj.marks=2; break; else switchhi.cj.ranges case 0: hi.cj.marks=0; break; case 1: hi.cj.marks=7; break; case 2: hi.cj.marks
28、=5; break; case 3: hi.cj.marks=3; break; case 4: hi.cj.marks=2; break; case 5: hi.cj.marks=1; break; hi.score=hi.score+hi.cj.marks; /按取前三名仍是取前五名分别记分 ifj=m-1 hi.mscore=hi.mscore+hi.cj.marks; /是男子项目就记到男子分数里面去 else hi.wscore=hi.wscore+hi.cj.marks; /是女子项目就记到女子项目里面去 printfn; /信息输出模块,用来输出信息,可以挑选按不同的方式输出信息
29、 void output int choice,i,j,k; int remembern; int sign; do printf*1.按学校编号输出.*n; printf*2.按学校总分输出.*n; printf*3.按男团总分输出.*n; printf*4.按女团总分输出.*n; 15 . 名师归纳总结 - - - - - - -第 18 页,共 29 页精选学习资料 - - - - - - - - - printfnn* scanf%d,&choice; switchchoice case 1: /按编号次序输出 fori=0;in;i+ 请挑选编号 *nn:; printfnn* 学校
30、编号 :%dn,hi.schoolnum; printf* 学校总分 :%dn ,hi.score; printf* 男团总分 :%dn,hi.mscore; printf* 女团总分 : %dnnn,hi.wscore; break; case 2: /按学校总分输出 fori=0;in;i+ rememberi=i; fori=0;in;i+ forj=i+1;jn;j+ ifhrememberi.scorehj.score k=rememberi; rememberi=rememberj; rememberj=k; / 用冒泡排序方法,用帮助数组记住学校结点下标fori=0;in;i+
31、printfnn* 学校编号: %dn,hrememberi.schoolnum; printf* 学校总分 :%dn ,hrememberi.score; printf* 男团总分 :%dn,hrememberi.mscore; printf* 女团总分 : %dnnn,hrememberi.wscore; /按所登记标次序输出 break; case 3: /按男团总分输出 fori=0;in;i+ rememberi=i; fori=0;in;i+ forj=i+1;jn;j+ 16 . 名师归纳总结 - - - - - - -第 19 页,共 29 页精选学习资料 - - - - -
32、- - - - ifhrememberi.scorehj.score k=rememberi; rememberi=rememberj; rememberj=k; fori=0;in;i+ printfnn* 学校编号 :%dn,hrememberi.schoolnum; printf* 学校总分 :%dn ,hrememberi.score; printf* 男团总分 :%dn,hrememberi.mscore; printf* 女团总分 : %dnnn,hrememberi.wscore; break; case 4: /按女团总分输出 fori=0;in;i+ rememberi=i;
33、 fori=0;in;i+ forj=i+1;jn;j+ ifhrememberi.scorehj.score k=rememberi; rememberi=rememberj; rememberj=k; fori=0;in;i+ printfnn* 学校编号 :%dn,hrememberi.schoolnum; printf* 学校总分 :%dn ,hrememberi.score; printf* 男团总分 :%dn,hrememberi.mscore; printf* 女团总分 : %dnnn,hrememberi.wscore; break; printf 请挑选 2 连续 ,0 跳出 n; scanf%d,&sign; whilesign=2; /循环执行输出语句 17 . 名师归纳总结 - - - - - - -第 20 页,共 29 页精选学习资料 - - - - - - - - - /查询模块,用来查询信息 void inquiry int choice; 按学校编号查询n; /供应两种查询方式int i,j,k,s; printfn*1:printfn*2:按项目编号查询n; printfnn*请挑选查询方式:; scanf%d,&choice; switchchoice case 1: do printf 要查
限制150内