C语言课程设计报告运动会分数统计系统学校:东北大学秦皇岛分校班级:50809班姓名:石行学号:5080906一.需求分析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).运动员评奖3.测试数据《1》输入:1进入添加系的界面,根据提示,再输入:汽车系。再输入:8,成功添加了一个系。再输入:2进入运动项目添加界面,根据提示,再输入:跳高;1;0;1;2;3。之后输入0。再次进入系统界面。《2》输入:3查看输出结果。《3》:输入:4查看输出结果。《4》:输入:5查看输出结果。《5》:输入:6查看输出结果。《6》:输入:7根据提示输入项目编号:2。查看输出结果。《7》:输入:8根据提示输入系编号:3。查看输出结果。二、概要设计1.数据结构1系:名称,编号,男子团体总分,女子团体总分。2运动项目:项目编号,名称,男子项目,女子项目,前三名,前五名,第一名系的编号,第二名系的编号,第三名系的编号,第四名系的编号,第五名系的编号。2.程序模块及之间的调用关系三、详细设计1、数据类型定义(1)系的定义:typedefstructDepartment//系的结构{charname[20];//系的名称intnumber;//系的编号intboy;//男子团体总分intgirl;//女子团体总分Department*next;}Department;(2)运动项目定义:typedefstructSport//运动项目结构{charname[20];//运动项目名称intisboy;//0为女项目,1为男项目intis3;//0为取前五名,1为取前五名intnumber;//项目编号intfirst;//第一名系的编号intsecond;//第二名系的编号intthird;//第三名系的编号intfourth;//第四名系的编号intfifth;//第五名系的编号Sport*next;}Sport;、2、函数之间的调用关系(1)系调用图department_adddepartment_Order1Departmentdepartment_searchdepartment_addmarkdepartment_showdepartment_isexistdepartment_outputdepartment_readdepartment_writedepartment_getlongsport_isexistsport_addsport_getlongsport_write2Sportsport_readsport_outputsport_search3、算法设计主要算法的设计思想:本程序主要是使用链表来实现操作。一个运动会包括运动项目和参加运动会的成员。因此构造两个链表Department,Sport。为了操作的方便,并且能够保存输入数据,所以通过文件操作来实现数据的写和读。每次添加新的数据后都要输入0退出,数据才能保存。对于总分的排序使用了冒泡排序。为了使整个程序看起来更加友好,又添加了程序启动画面。四、调试分析本程序相对来说比较容易看明白,其中涉及到的一些函数相对来说比较容易。通过调试,运行,基本上达到了要求,但还存在一些缺点。如:不够人性化等。五、测试结果1多组数据输入与输出:(1)输入:3输出:系名编号男团总分女团总分总分法律系6000电子系5325数学系4606历史系39716中文系2151126计算机系1211132旅游系7077(2)输入:4输出:系名编号男团总分女团总分总分法律系6000电子系5325数学系4606旅游系7077历史系39716中文系2151126计算机系1211132(3)输入:5输出:法律系6000电子系5325数学系4606旅游系7077历史系39716中文系2151126计算机系1211132(4)输入:6输出:法律系6000电子系5325数学系4606旅游系7077历史系39716中文系2151126计算机系1211132(5)输入:7输出:请输入项目编号:输入:1回车输出:项目名:100m项目类型:女子项目第一名:计算机系第二名:中文系第三名:法律系第四名:无第五名:无(6)输入:8输出:请输入系的编号:再输入2则输出:系名:中文系男子团体总分:3女子团体部分:10总分:13(7)输入:0退出六、用户手册1、运行环境Windows,VC++6.02、用户界面4、操作过程(1)用户进入程序启动界面,等load完成后进入主菜单.主菜单有以下9个选项1.输入系别2.输入运动项目3.按系别编号输出总分4.按总分排序5.按男团体总分排序6.按女团体总分排序7.按项目编号查询8.按系别编号查询0.退出(2)输入0~8中的一个数(3)输入1,进行添加系操作,分别输入系的名称和编号(4)输入2,进行添加运动项目操作,分别输入项目名称,编号,项目类型,名次选取,排名情况(5)输入0,则退出系统,并且保存输入的信息.每次添加完都要输入0退出系统才有效(6)输入3,输出按系编号总分排名.(7)输入4,输出按总分排名(8)输入5,输出按男团体总分排序(9)输入6,输出按女团体总分排序(10)输入7,进入按项目编号查询界面.输入要查询的项目编号(11)输入8,进入按系别编号查询界面,输入要查询的系的编号七、参考文献【1】《C++程序设计》作者:郑莉,董渊,张瑞丰出版社:清华大学出版社时间:2003/12【2】《数据结构》作者:严蔚敏,吴伟民出版社:清华大学出版社时间:2006/10【3】《数据结构教程上机实验指导》作者:严蔚敏,吴伟民,米宁出版社:清华大学出版社时间:2006/5【4】网址:八、附录1、源程序#includeiostream.h#includeiomanip.h#includestring.h#includefstream.h#includestdlib.h#includectype.h#includestdio.h#includeconio.htypedefstructDepartment//系的结构{charname[20];//系的名称intnumber;//系的编号intboy;//男子团体总分intgirl;//女子团体总分Department*next;}Department;typedefstructSport//运动项目结构{charname[20];//运动项目名称intisboy;//0为女项目,1为男项目intis3;//0为取前五名,1为取前五名intnumber;//项目编号intfirst;//第一名系的编号intsecond;//第二名系的编号intthird;//第三名系的编号intfourth;//第四名系的编号intfifth;//第五名系的编号Sport*next;}Sport;intgetint(inta)//字符转换成数字{return(int)(a-'0');}Department*head1;//-------启动画面函数----------voidCover(){system(color1b);charline[]={程序读取中请耐心等待...};charbar[]={....};inti,j,k=0,x=0,y=0;for(i=0;i=strlen(line)/2;){system(cls);for(j=0;j9;j++)//改变行坐标coutendl;for(j=0;j(75-strlen(line))/2;j++)//改变列坐标cout;for(j=1;j=i;j++)//进度显示器cout●;for(x=strlen(line)/2;xi;x--)cout○;if(k==4)i++;coutendl;for(j=0;j(75-strlen(line))/2;j++)//行坐标定位cout;coutline;//输出线条coutendl;for(j=0;j(65-strlen(bar))/2;j++)cout;cout(i+7)*5%Loading;cout.write(bar,k);coutendl;for(j=0;j10;j++)coutendl;for(j=0;j24;j++)cout;cout程序设计员5080906石行endl;for(j=0;j24;j++)cout;for(j=0;j=18;j++)cout─;coutendl;for(j=0;j10000000;j++);//延时效果k++;if(k4)k=0;}}voiddepartment_add()//添加系{Department*p;intmark=0;p=newDepartment;cout请输入系的名称:;cinp-name;charc;while(mark!=1){cout请输入系的编号:;cinc;if(!isdigit(c))//是否为数字{cout数据非法endl;}else{mark=1;p-number=c;}}p-boy=0;p-girl=0;p-next=head1-next;head1-next=p;cout成功添加了一个系endl;}intdepartment_getlong(Department*first)//得到链表长度{inti=0;while(first-next!=NULL){i++;first=first-next;}returni;}voiddepartment_write()//将系数据写入文本{Department*p;p=head1;p=p-next;ofstreamoutfile(Department.txt,ios::out);outfiledepartment_getlong(p)+1;while(p!=NULL){outfilep-namep-numberp-boyp-girl;p=p-next;}outfile.close();coutWriteSuccess!endl;}voiddepartment_read()//从文本读入系数据{inti;ifstreaminfile(Department.txt,ios::in);infilei;while(i0){Department*p;p=newDepartment;infilep-namep-numberp-boyp-girl;p-next=head1-next;head1-next=p;i--;}coutDepartmentDataReadSuccess!endl;}voiddepartment_output(Department*p)//输出系{cout系名编号男团总分女团总分总分\t\n;while(p){coutp-name\tgetint(p-number)\tp-boy\tp-girl\t(p-girl+p-boy)endl;p=p-next;}}intdepartment_isexist(inta)//检验系是否存在{intb=0;Department*p;p=head1;p=p-next;while(p){if(p-number==a){return1;}p=p-next;}return0;