- 455.00 KB
- 2022-09-27 发布
- 1、本文档由用户上传,淘文库整理发布,可阅读全部内容。
- 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,请立即联系网站客服。
- 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细阅读内容确认后进行付费下载。
- 网站客服QQ:403074932
怀化学院计算机系《数据结构》课程设计报告书运动会分数统计系统的设计与实现学生姓名:学号:年级专业及班级:09级计算机科学与技术一班指导老师及职称:副教授专业:计算机科学与技术专业湖南·怀化提交日期:2011年6月-45-\n运动会分数统计系统的设计与实现学生:指导老师:(怀化学院计算机系,怀化)摘要:运动会分数统计系统通过运用结构体、文件读取以及数据保存、定义运动会类、以及调用函数、运用库函数实现了指定的输入文本读取数据;根据输入文件得到各学校的总分;按学校编号、学校总分、男女团体总分排序;查询功能按学校编号查询某个项目的情况、按项目编号查询取得前三或前五名的学校;实现了数据的增加、删除、修改以及对数据的保存的功能。该系统的用户主要是提供给管理、学校的。对于管理用户提供了所有的操作,而对学校拥护只提供查询和查看操作,这样安全性能比较高,该系统是通过输入文本读取来获取数据,较少了输入数据的繁杂通过运用定义运动会类,进行对函数的定义,使整个代码看起来清晰整洁,通过调用库函数,使代码更简洁。该系统为用户提供了总分计算,排序方便,为学校用户提供了查询和查看的方便。关键词:运动会分数统计系统;结构体;排序;查询1前言该系统实现了简单的运动会分数统计,是一个面向对象的设计,使用了结构体,输入文本读取数据以及库函数的调用来完成整个系统的设计,是繁多的数据操作变得简单。该系统为联合运动会提供服务减少了不必要的人力物力的浪费,通过写一段程序实现简单运动会分数统计系统的设计来实现几个功能。该系统实现了以下几个功能:1)根据指定的输入文件读取数据;2)输入文件数据格式和文件数目由学生自行设计,主体体现学校名称、项目编号、项目名称、男子女子项目类别、前三或前五名积分;3)根据输入文件得到各学校总分,4)可以按学校编号或名称、学校总分、男女团体总分排序;5)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。6)实现数据的增加、删除、修改,并将相关数据进行保存;7)各操作结果能保存到文件,以便查询。通过这次的课程设计,可以加深对库函数,以及结构体的了解,以及各个函数的功能以及实现,更进一步了解其原理。2需求分析2.1范围2.1.1标识文件状态:文件标识:需求分析报告-45-\n【】草稿【√】正式发布【】正在修改当前版本:1.0作者:吴红林完成日期:2011-05-252.1.2系统概述1.软件名称:运动会分数统计系统2.软件功能:1)根据指定的输入文件读取数据;2)输入文件数据格式和文件数目由学生自行设计,主体体现学校名称、项目编号、项目名称、男子女子项目类别、前三或前五名积分;3)根据输入文件得到各学校总分,4)可以按学校编号或名称、学校总分、男女团体总分排序;5)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。6)实现数据的增加、删除、修改,并将相关数据进行保存;7)各操作结果能保存到文件,以便查询。3.用户:管理员、学校4.开发者:吴红林2.1.3文档概述需求分析采用面向对象的方法,在文档中主要采用了用例、E-R图、数据字典等表示方法来描述需求,用这些方法来表达需求分析便于理解,将自己的系统推荐给用户.2.2引用文件无2.3需求概述2.3.1系统目标本系统的总体目标是通过该系统的实施,可以对学生综合测评信息更加有效地进行管理。系统设计实施过程中,力争做到以下几点:1.具有较高的可靠性和可用性;-45-\n2.系统易于管理维护;3.使用方便,易学易用;4.良好的性能价格比;2.3.2运行环境1.系统硬件需求Pentium4800MHz或更高主频CPU512MB以上内存。2.系统软件需求IIS5.0以上的WEB服务、安装有Myeclipse8.5与Mysql5.1数据库等、WindowsXP以及更高版本的操作系统、IE5.0以上的版本浏览器。2.3.3用户的特点管理员,具备基本的电脑操作技能和简单的系统维护工作以及学校用户具备基础的计算机操作技能。2.4功能需求通过前期对运动会分数统计领域实际业务需求的调研,经分析确定系统功能主要为以下:管理员操作:1、有各个运动项目以及各个学校以及运动员信息管理。2、认证信息管理、密码管理、对每个学校进行总分统计、对各个信息(如按学校名称或编号查询某项的情况)进行查询、增加、删除、修改以及对按不同规定(学校编号或名称、学校总分、男女团体总分)进行排序。3、实现文件读取数据以及文件保存数据操作。学校用户操作:用户信息完善、认证信息的查看。2.4.1系统用例图根据需求分析,分析出系统的具体操作步骤及功能,从而确定系统流程图及各个步骤中具体内容,具体描述如下。(1)系统整体用例图,系统主要有两类用户包括:管理员、学校用户。见图2.1。-45-\n运动会分数统计系统管理员学校文件输入学校总分统计排序操作查询操作增加、删除、修改操作查询操作密码认证用户选择文本保存图2.1系统整体用例图2.4.2系统各项功能描述1、【应该以用例为单位进行功能描述】1)用例1用例名:文件输入行为者:管理员目的:实现数据的读入,输入相关的学校信息,相关的项目信息级别:一级过程描述:a)欢迎进入运动会分数统计系统的设计与实现系统b)选择菜单,选择录入数据文件c)文件录入学校名称、项目编号、项目名称、男子女子项目类别、前三或前五名d)录入成功,退出到菜单选项。与其它用例的关联:本用例是后面的操作的基础。异常处理:无2)用例3用例名:学校总分统计行为者:管理员-45-\n目的:根据输入文件得到各学校总分级别:一级过程描述:a)根据输入的文件统计各学校的总分b)利用直接插入函数对个学校的总分进行排序c)输出各学校的总分,记录入文件item_info.txt中d)退出菜单选项异常处理:无1)用例4用例名:排序操作行为者:管理员目的:可以按学校编号或名称、学校总分、男女团体总分排序;级别:一级过程描述:a)利用算法分别实现按学校编号排序b)按学校编号或名称排序c)按学校总分排序d)按男女团体总分排序e)利用一个选择的菜单实现这些排序f)后台显示,用户选择g)显示结果h)退出系统异常处理:无2)用例5用例名:查询操作行为者:管理员、学校目的:可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。级别:一级过程描述:a)输入学校编号以及要查询的项目进行查询b)输入项目编号查询获奖情况f)退出系统。异常处理:无3)用例6用例名:数据的增加、删除、修改,并将相关数据进行保存行为者:管理员目的:实现数据的增加、删除、修改,并将相关数据进行保存;级别:一级过程描述:a)对文件进行数据的增加,删除,修改等操作b)查看是否操作成功,输出修改后的数据c)退出系统异常处理:无-45-\n1)用例7用例名:各个操作数据的文件保存行为者:管理员目的:各操作结果能保存到文件,以便查询级别:一级2.5数据下面仅列出主要实体。(1)学校实体学校实体包括学校名称、学校编号、学校总分、女团体总分、男团体总分,如图学生实体E-R图2.5所示。学校学校总分女团体总分男团体总分学校名称学校编号图2.5学校实体E-R图(2)活动项目实体项目实体包括项目编号、取前三或前五、项目类别、项目获名者。如图项目实体E-R图2.6所示。-45-\n活动项目项目编号项目类别取前三或前五项目获名者图2.6活动项目实体E-R图2.6拟采用的技术实现本系统用到了C/C++基础程序设计,数据结构。本系统将采用文件存储、结构存储、链表方法以及调用不同函数来实现系统功能,算法中主要采用是链表操作如:查询、增加、删除、修改以及链表的插入排序等,输入与读取都是以文件的形式进行。在系统设计的过程中,才会知道哪一种技术比较好用,但是具体的用到的技术应该不会太偏离我以上讲的技术。3详细设计根据题目要求及本次课程设计的目的,采用结构体来存储每组数据,定义运动会类和调用库函数进行相应的操作。现把相应的设计思路及各个函数解析如下。3.1数据结构设计分析3.1.1存储学校信息的结构体学校信息有学校名称、学校编号、学校总分、男女团体总分。具体结构如下:structSchool//学校信息{stringschool_name;stringschool_id;inttotal_score;intwomen_score;-45-\nintman_score;School()//初始化{school_name="";school_id="";total_score=women_score=man_score=0;}};3.1.2存储项目信息的结构体项目信息有项目编号、项目取前三或前五、项目类别、项目获名者。具体结构如下:structItem//项目信息{stringitem_id;intrange_num;charsex;stringwinner_id[6];Item()//初始化{item_id="";sex='\0';range_num=0;memset(winner_id,0,sizeof(winner_id));}};3.13运动会类定义一个运动会类,定义和调用起成员函数,成员变量,完成系统的功能。代码如下:classSportMeeting{public:-45-\nvoidload();voidsave();voidsort();voidsearch();voidadd();voiddel();voidmodify();private:voidupdate();voidsort_by_id();voidsort_by_total();voidsort_by_man();voidsort_by_women();voidsearch_by_school();voidsearch_by_item();multimapschool;//定义个学校的map类multimapitem;//定义项目的map类};3.2各个函数分析3.2.1主函数函数原型:intmain()main()函数主要是整个系统的控制端,主要功能是控制整个程序的运行。从主函数开始调用各相关函数来达到相应的功能。由于有多个不同的选项,所以用一个while(){swithch()}语句控制每个函数调用,控制起来方便、明了。关键代码如下:while(1){cout<<"1.修改项目信息"<>select;switch(select){case1:meet.modify();break;case2:meet.add();break;case3:meet.del();break;case4:meet.search();break;case5:meet.sort();break;case0:break;default:cout<<"输入错误!"<>sh.school_id){fin1>>sh.school_name;school.insert(pair(sh.school_id,sh));}fin1.close();ifstreamfin2("item_info.txt");//从文件中读取项目信息数据Itemit;while(fin2>>it.item_id){fin2>>it.sex;fin2>>it.range_num;inti;for(i=1;i<=it.range_num;i++)fin2>>it.winner_id[i];item.insert(pair(it.item_id,it));}fin2.close();update();}3.2.3菜单函数-45-\n本系统没有单纯的菜单函数,因为本系统比较的简单,可以不用菜单函数,要是选用菜单函数,太过于繁杂,因为每个主菜单下还有很多小的菜单,不采用菜单函数,是代码通俗易懂。虽然没有菜单函数,但是在各个界面展示整个系统可供用户选择的功能选项一步一步的层层递进,清晰明了,使用户对系统的操作更容易掌握。显示各个选项,把后台功能显示在显示器上,给用户以提醒。3.2.4增加函数函数原型:voidSportMeeting::add()此函数用来增加项目,调用该函数可以使管理员对项目进行增加操作。代码如下:voidSportMeeting::add(){system("cls");Itemit;cout<<"请输入你要添加的项目编号:";cin>>it.item_id;if(item.find(it.item_id)!=item.end()){cout<<"该项目已经存在!"<>it.sex;cout<<"请输入该项目是取前三名还是取前五名?(输入3或者5)"<>it.range_num;if(it.range_num==3){cout<<"请依次输入获得该项目1-3名的学校编号:"<>it.winner_id[1]>>it.winner_id[2]>>it.winner_id[3];}elseif(it.range_num==5){-45-\ncout<<"请依次输入获得该项目1-5名的学校编号:"<>it.winner_id[1]>>it.winner_id[2]>>it.winner_id[3]>>it.winner_id[4]>>it.winner_id[5];}else{cout<<"输入错误!"<(it.item_id,it));update();cout<<"添加项目成功!"<>itm.item_id;multimap::iteratorit=item.find(itm.item_id);if(it==item.end()){cout<<"该项目不存在!"<>(it->second).sex;cout<<"请输入该项目是取前三名还是取前五名?(输入3或者5)"<>(it->second).range_num;if((it->second).range_num==3){cout<<"请依次输入获得该项目男子组1-3名的学校编号:"<>(it->second).winner_id[1]>>(it->second).winner_id[2]>>(it->second).winner_id[3];}elseif((it->second).range_num==5){cout<<"请依次输入获得该项目男子组1-5名的学校编号:"<>(it->second).winner_id[1]>>(it->second).winner_id[2]>>(it->second).winner_id[3]>>(it->second).winner_id[4]>>(it->second).winner_id[5];}else{cout<<"输入错误!"<>select;switch(select){case1:search_by_school();//根据学校编号查询某个项目的情况break;case2:search_by_item();//根据项目编号查询获前三或前五的学校情况break;case0:break;default:cout<<"输入错误!"<>sch.school_id;multimap::iteratorit_school=school.find(sch.school_id);if(it_school==school.end()){cout<<"没有此学校"<>itm.item_id;multimap::iteratorit_item=item.find(itm.item_id);if(it_item==item.end()){cout<<"没有此项目"<second).range_num;i++){if((it_item->second).winner_id[i]==sch.school_id){cout<>itm.item_id;multimap::iteratorit_item=item.find(itm.item_id);if(it_item==item.end()){cout<<"没有此项目"<second).range_num;i++){cout<<"第"<second).winner_id[i]<>itm.item_id;multimap::iteratorit_item=item.find(itm.item_id);if(it_item==item.end()){cout<<"没有此项目编号!"<>select;switch(select){case1:sort_by_id();break;case2:sort_by_total();break;case3:sort_by_man();break;case4:sort_by_women();break;case0:system("pause");return;default:cout<<"输入错误!"<::iteratorit_school;cout<second).school_id<second).school_name<second).total_score<second).man_score<second).women_score<::iteratorit_school;multimapschool_temp;Schoolsch;for(it_school=school.begin();it_school!=school.end();it_school++){sch=it_school->second;school_temp.insert(pair(sch.total_score,sch));}cout<::iteratorit_temp;for(it_temp=school_temp.begin();it_temp!=school_temp.end();it_temp++){-45-\ncout<second).school_id<second).school_name<second).total_score<second).man_score<second).women_score<::iteratorit_school;multimapschool_temp;Schoolsch;for(it_school=school.begin();it_school!=school.end();it_school++){sch=it_school->second;school_temp.insert(pair(sch.man_score,sch));}cout<::iteratorit_temp;for(it_temp=school_temp.begin();it_temp!=school_temp.end();it_temp++){cout<second).school_id<second).school_name<second).total_score<second).man_score<second).women_score<::iteratorit_school;multimapschool_temp;-45-\nSchoolsch;for(it_school=school.begin();it_school!=school.end();it_school++){sch=it_school->second;school_temp.insert(pair(sch.women_score,sch));}cout<::iteratorit_temp;for(it_temp=school_temp.begin();it_temp!=school_temp.end();it_temp++){cout<second).school_id<second).school_name<second).total_score<second).man_score<second).women_score<::iteratorit_school=school.begin();for(it_school;it_school!=school.end();it_school++){(it_school->second).total_score=0;(it_school->second).women_score=(it_school->second).man_score=0;}multimap::iteratorit_item=item.begin();for(it_item;it_item!=item.end();it_item++)-45-\n{int*score;if((it_item->second).range_num==3){score=score_three;}else{score=score_five;}if((it_item->second).sex=='m'){for(inti=1;i<=(it_item->second).range_num;i++){it_school=school.find((it_item->second).winner_id[i]);(it_school->second).total_score+=score[i];(it_school->second).man_score+=score[i];}}else{for(inti=1;i<=(it_item->second).range_num;i++){it_school=school.find((it_item->second).winner_id[i]);(it_school->second).total_score+=score[i];(it_school->second).women_score+=score[i];}}}}3.3.2数据操作保存函数-45-\n函数原型:voidSportMeeting::save()此函数,对各个数据操作的结果保存在文本里,以便查询,具体代码如下:voidSportMeeting::save(){ofstreamfout("school_info.txt");multimap::iteratorit_school;fout<second).school_id<second).school_name<::iteratorit_item;fout<second;fout<second).item_id<second).sex<second).range_num;for(i=1;i<=(it_item->second).range_num;i++)fout<second).winner_id[i];fout<>choice;if(choice==1){system("cls");cout<<"请输入密码:";cin>>i;if(i==12345){system("cls");while(1){cout<<"1.修改项目信息"<>select;switch(select){case1:meet.modify();break;case2:meet.add();break;case3:meet.del();-45-\nbreak;case4:meet.search();break;case5:meet.sort();break;case0:break;default:cout<<"输入错误!"<>choice;switch(choice){case1:meet.search();break;case2:meet.sort();break;case0:break;default:cout<<"输入错误!"<school;mapitem;改为multimapschool;multimapitem;信息就没有丢失的情况了。当然,在编写代码调试程序的时候,还碰到很多大大小小的问题,但在自己一遍又一遍的调试中改正了,从而使系统的功能更加完善,使系统的功能更从人性化,容错能力更加强大。但是系统还有可能有这样或那样的问题,只是自己没有发现,在测试过程中,没有用到一些特别的样例,可能会使系统崩溃,我想这也是可能的,希望老师加以指正和指导。6系统的使用说明书6.1主界面说明当运行系统时,首先进入的是主界面,显示了整个系统所提供的用户选项,在最后一行有提示让您输入你所要选择的功能项。如下所示:6.2显示用户选择界面说明-45-\n键入1后,选择是管理用户,进入下面界面中:对于管理用户来说是要密码输入的,密码输入后进入下面管理用户可以操作的功能界面中:-45-\n如果在主界面中键入2,用户选择中你选择学校用户,将直接进入学校用户的功能操作界面。如下所示:6.3管理用户信息界面说明从管理用户功能操作界面选择第1个功能时,则会出现下面的界面:根据数据说明书进行数据的的输入,输入你要修改的项目编号如:10001根据提示一次进行下列修改操作:-45-\n按任意键回到管理用户功能操作界面,再进行其他的操作,如果按“0”,则退出系统,操作数据将保存在文本item_info.txt中。选择“2”进行项目添加操作,进入添加界面,根据提示一次进行添加操作:按任意键回到管理用户功能操作界面,再进行其他的操作,如果按“0”,则退出系统,操作数据将保存在文本item_info.txt中。选择“3”进行项目删除操作,进入删除界面,根据提示一次进行删除操作:-45-\n按任意键回到管理用户功能操作界面,再进行其他的操作,如果按“0”,则退出系统,操作数据将保存在文本item_info.txt中。选择“4”进行查询操作,进入查询界面,根据你的需要选择,再根据提示一次进行查询操作:选择1,则是根据学校的编号来查询学校某个项目的情况,根据提示完成查询操作,出现如下界面:-45-\n如果选择“2”则是根据项目编号来查询获得前三或前五的学校情况,根据提示完成本次查询操作,出现界面如下:按任意键回到管理用户功能操作界面,再进行其他的操作,如果按“0”,则退出系统,操作数据将保存在文本item_info.txt中。选择“5”进行排序操作,进入排序界面,根据你的需要选择,再根据提示一次进行排序操作:(下面的排序进过数据的改变后进行的排序)-45-\n如果选择“1”是根据学校编号排序,查看学校总分,男女团体总分:如果选择的是“2”是根据学校总分排序:-45-\n如果选择的是“3”是根据男子团体总分排序:如果选择的是“4”是根据女子团体总分排序:-45-\n6.4学校用户操作信息界面说明从主界面键入2选项,则直接进入学校用户信息操作界面:根据提示进行查询和查看操作。-45-\n如果选择“1”则进行的是查询操作,进入查询界面:选择1,则是根据学校的编号来查询学校某个项目的情况,根据提示完成查询操作,出现如下界面:-45-\n如果选择“2”则是根据项目编号来查询获得前三或前五的学校情况,根据提示完成本次查询操作,出现界面如下:按任意键回到学校用户功能操作界面,再进行其他的操作,如果按“2”,则进行查看操作,进入下列查看排名操作界面:-45-\n如果选择“1”是根据学校编号排序,查看学校总分,男女团体总分:-45-\n如果选择的是“2”是根据学校总分排序:如果选择的是“3”是根据男子团体总分排序:-45-\n如果选择的是“4”是根据女子团体总分排序:7结论经过几天的忙碌,最终把课程设计任务完成了。要做好一件事,只能一步一步的去做,不可能一下子就完成。本来以为简单的几个功能,要实现以为很容易,首先还构思着,要用链表来做,觉得比较的容易,可是在真正实现起来才知道有些东西用链表实现有些困难,后面还是改用结构体和库函数写比较容易实现、有些库函数是我接触比较少的,为了了解它们我还花了一些时间,在编写的过程中还把题意理解错误,让自己困死在里面,最后还是和其他人一起讨论进一步深刻了解了题目的意思。在写函数的时候,由于对map容器不是很熟悉,以致定义的map类型的变量出错,虽然程序中没有错误但是执行的结果有错误,经过改正,自己对其进一步的了解,是执行结果正确。要做好一个系统,一个严谨的思维是不可以或缺的,每一个联系都要考虑,每个细节都需要注意,每一种错误都要会解决。只有把每一种问题都解决了,才能做出一个完善的系统出来。每做一个项目都会让我学到很多的东西,这些东西是日常的学习中无法获得的。参考文献[1]谭浩强.C程序设计(第三版).北京:清华大学出版社,2005[2]严蔚敏著.吴伟民.数据结构(C语言版).北京:清华大学出版社,2007-45-\n[3]谭浩强著.C++程序设计.北京:清华大学出版社,2004.6致谢本报告是在叶青老师的悉心指导和热情关怀下完成的,在她上课中,跟着她的节奏,一步步深入学习了数据结构整个课程,让本来很枯燥的东西变得有趣,本来很难理解的东西,变得容易理解,在此真心感谢叶青老师的指导及其帮助,同时也感谢给予我帮助的各位同学。-45-