课程设计报告--运动会分数统计系统.doc_第1页
课程设计报告--运动会分数统计系统.doc_第2页
课程设计报告--运动会分数统计系统.doc_第3页
课程设计报告--运动会分数统计系统.doc_第4页
课程设计报告--运动会分数统计系统.doc_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

洛 阳 理 工 学 院课 程 设 计 说 明 书课程名称 数据结构课程设计 设计课题 运动会分数统计系统 专 业 计算机科学与技术 班 级 B110503 学 号 B11050322 姓 名 郭鹏鸽 完成日期 2013年06月14日 课 程 设 计 任 务 书设计题目: 运动会分数统计系统 设计内容与要求:一、设计内容:设计一个运动会分数统计系统,其中参加运动会有n个学校,学校编号为1n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1m,女子m+1m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m=20,n=20)二、设计要求:1.可以输入各个项目的前三名或前五名的成绩;2.能统计各学校总分;3.可以按学校编号或名称、学校总分、男女团体总分排序输出;4.可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校;5.数据存入文件并能随时查询; 6.规定:输入数据形式和范围:可以输入学校的名称,运动项目的名称;输出形式:有中文提示,各学校分数为整形;界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求;存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构;测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据,进行程序测试,以保证程序的稳定,并将测试数据及测试结果在上交的资料中写明。 指导教师: 张新颜 2013年 06月 03 日课 程 设 计 评 语 成绩: 指导教师: 年 月 日数据结构课程设计 运动会分数统计系统1. 【问题描述】设计一个运动会分数统计系统,其中参加运动会有n个学校,学校编号为1n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1m,女子m+1m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m=20,n=20)2. 【基本要求】主要有以下几点:1. 可以输入各个项目的前三名或前五名的成绩;2. 能统计各学校总分;3. 可以按学校编号或名称、学校总分、男女团体总分排序输出;4. 可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校;5. 数据存入文件并能随时查询; 6. 规定:输入数据形式和范围:可以输入学校的名称,运动项目的名称;输出形式:有中文提示,各学校分数为整形;界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求;存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构;测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据,进行程序测试,以保证程序的稳定,并将测试数据及测试结果在上交的资料中写明。3. 【测试数据】输入男子项目总数m=3;输入女子项目总数w=1;输入参加运动会的学校总数n=6;项目总数为4,项目1:前三名,学校编号为2、3、5;项目2:前五名,学校编号为2、4、5、6、3; 项目3:前三名,学校编号为5、3、1; 项目4:前五名,学校编号为1、5、6、2、3;测试数据:查询学校编号5项目4的分数;非法数据:主菜单选择输入选项9(非0-8)情况; 选择名次类型时输入3(非1-2)情况;预期结果:学校编号5项目4的分数为5;各学校总分为9、14、8、5、15、5; 按总分学校排序为4、6、3、1、2、5;4. 【算法思想】1.概述:本程序中学校的存储结构为链表,Prev school1 next头结点Prev school(最后) next其中school类为:class school:public athlete /*学校*/ public: int count; /*学校获奖数*/ int serial; /*学校编号*/ int menscore; /*男选手总分*/ int womenscore; /*女选手总分*/ int totalscore; /*总分*/ athlete athMaxSize; /*获奖运动员信息数组,包括分数,名次,项目*/ school *prev;/前指针 school *next; /后指针;其中部分主要的函数:添加操作add(school* &head)查询操作checkFunc(school *head,int &n)文件保存save(school *head)总分快速排序tquicksort(vector& v, int first, int last)总分基数排序 tbaseSort(vector& v, int d) 2.关键算法 添加项目号for ( i = 1 ; i serial =要添加的编号) (first-athfirst-count).item =要添加的项目号;(first-athfirst-count).range =i(名次) First指向的学校的项目加一;更新总分break;first = first-next;3.程序流程图如下所示:开始输入项目编号temp是数字NY0temp18NY输出“项目不存在”学校遍历结束temp存在YNNext schoolNtemp是奇数 NY取3名取5名输入获奖的学校编号se1senext;输出向量中的内容1. 所有学校总分统计表2. 学校成绩查询3. 项目情况查询4. 返回主菜单1. 按学校编号统计2. 按学校名次统计3. 按男团总分统计4. 按女团总分统计5. 返回查询菜单6. 返回主菜单/按学校编号顺序输出所有参赛学校运动会成绩void serialSort(vector& v)for(int i=0;iv.size();i+)cout*vi;5. 【模块划分】 输入各个项目成绩并存储文件:void funct1(ALLitems *g1,ALLNode *g2) 存储函数:void save() 输出各学校总分:void funct2(ALLNode *g2) 按学校编号排序输出:void funct3(ALLNode *g2) 按学校总分排序输出:void funct4(ALLNode *g2) 按男团体总分排序输出:void funct5(ALLNode *g2) 按女团体总分排序输出:void funct6(ALLNode *g2) 按学校编号查询学校某个项目情况:void funct7(ALLNode *g2) 按项目编号查询取得名次的学校:void funct8(ALLitems *g1) 主函数:void main()6. 【数据结构】程序中结构体的定义如下:typedef struct node1 int school; /*学校编号*/ int record; /*项目成绩*/ struct node1 *next; /*链域*/ Schools; typedef struct int item; /*项目编号*/ Schools *firstschool; /*链域指向链表中第一个结点*/ ITEM; typedef struct int z; /* 项目总数 */ ITEM aMAX; ALLitems; typedef struct node2 int item; /*该学校获奖的项目*/ int record; /*项目成绩*/ struct node2 *next; /*链域*/ Items; typedef struct int school; /*学校编号*/ int score; /*学校总分*/ int boys; /*男团体总分*/ int girls; /*女团体总分*/ Items *firstitem; /*链域指向链表中第一个获奖项目的结点*/ SCHNode; typedef struct int n; /* 学校总数 */ SCHNode bMAX; ALLNode;7. 【测试情况】1. 测试结果如下:图1-1 开始菜单图1-2 输入信息图1-3 输入信息图1-4 统计各学校总分图1-5 按学校编号排序输出图1-6 按学校编号排序输出 图1-7 按学校总分排序输出 图1-8 按学校总分排序输出 图1-9 按男团体总分排序输出 图1-10 按男团体总分排序输出 图1-11 按女团体总分排序输出 图1-12 按女团体总分排序输出 图1-13 按学校编号查询某个项目 图1-14 按学校编号查询某个项目 图1-15 按项目编号查询取得名次的学校图1-16 按项目编号查询取得名次的学校图1-17 主菜单非法数据测试图1-18 非法数据测试2. 非法输入处理:对系统进行局部非法数据测试,以找出系统的bug,例如:提示输入数据的地方输入了字符或字符串;提示输入字符y或n的地方输入了数据或字符串。因此设计了如下局部非法数据测试。测试输入测试结果主菜单界面输入非0-8的数字或字符、字符串提示输入异常,要求重新输入添加项目确认界面输入非0-1的数字或字符、字符串提示输入异常,要求重新输入添加项目界面运动项目输入已添加过的项目号或非1-18的数字、字符、字符串输入字符、字符串是提示输入了非数字,输入非1-18的数字时提示输入的项目不存在,输入已添加过的项目号提示该项目成绩已存在,要求重新输入选择是否继续添加是输入数据或非y和n的字符、字符串提示输入异常,要求重新输入查询菜单界面输入非1-4的数字或字符、字符串提示输入异常,要求重新输入统计菜单界面输入非1-6的数字或字符、字符串提示输入异常,要求重新输入确认学校成绩查询或项目成绩查询时输入非0-2的数字或字符、字符串提示输入异常,要求重新输入选择是否继续查询时输入数据或非y和n的字符、字符串提示输入异常,要求重新输入8. 【心得】大二的下期期末,学校要求进行了数据结构专业课的课程设计这一环节,课程设计是培养学生综合运用所学知识,来发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察的过程。运动会分数统计系统的设计,其中主要是分类统计并查询信息的过程比较复杂,其次就是,程序在调试的时候出现的问题特别多。比如头文件问题,一开始的时候出现的几十个错误都是与头文件有关的,因为既用studio.h又用iostream,所以问题比较多,随后统一为studio.h则问题得到解决,从中知道,两个头文件不能混合使用。运动会成绩数据涉及到文件的输入输出,这里也遇到很多问题,首先是文件不能正常的读出,以及一些格式语法性的错误,最后也得到解决。整个程序最主要的是建立学校和项目这两个链表,以及两者之间的具体关系,这方面最需要细心地去分析。类似的编程问题,在课程设计中还遇到了很多。最后在张老师的指导下,和班级其他同学的帮助下,最终问题还是一个一个地解决了,较为顺利完善地完成了本次课程设计的任务。回顾这次课程设计,我从中获益颇多。从理论到实践,在整整一星期的日子里,学到了许多以前甚至一个月都学不到的东西,不仅可以巩固学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,从而提高自己的实际动手编程能力和独立思考的能力。重要的是,通过这次设计,逐步使我具备了走向程序员的基本素质。知道应如何在困难重重中一步一步细心的发现问题,解决问题。并深刻体会到了虚心请教别人的重要性,知道了在软件设计中对界面和功能如何进行平衡,如何达到相对的完美。这些都将成为我以后发展学习过程中的不可或缺的宝贵的经验。9. 【源程序】#include #include #include #include #define MAX 50 typedef struct node1 int school; /*学校编号*/ int record; /*项目成绩*/ struct node1 *next; /*链域*/ Schools; typedef struct int item; /*项目编号*/ Schools *firstschool; /*链域指向链表中第一个结点*/ ITEM; typedef struct int z; /* 项目总数 */ ITEM aMAX; ALLitems; typedef struct node2 int item; /*该学校获奖的项目*/ int record; /*项目成绩*/ struct node2 *next; /*链域*/ Items; typedef struct int school; /*学校编号*/ int score; /*学校总分*/ int boys; /*男团体总分*/ int girls; /*女团体总分*/ Items *firstitem; /*链域指向链表中第一个获奖项目的结点*/ SCHNode; typedef struct int n; /* 学校总数 */ SCHNode bMAX; ALLNode; ALLitems *g1; ALLNode *g2; void funct1(ALLitems *g1,ALLNode *g2) Schools *p1; Items *p2; int i,j,k,m,w,h,x; p1=(Schools *)malloc(sizeof(Schools); p2=(Items *)malloc(sizeof(Items); if(!p1|!p2) exit(1); printf(n *输入各个项目信息 * nn); printf( 输入男子项目总数m:); scanf(%d,&m); if(m20) printf( 输入有误,m是20以内的整数,请重新输入:); scanf(%d,&m); printf( 输入女子项目总数w:); scanf(%d,&w); if(w20) printf( 输入有误,w是20以内的整数,请重新输入:); scanf(%d,&w); printf( 输入参加运动会的学校总数n:); scanf(%d,&g2-n); if(g2-nn20) printf( 输入有误,n是20以内的整数,请重新输入:); scanf(%d,&g2-n); g1-z=m+w; printf( 则项目编号为男子1-%d,女子%d-%d,m,m+1,g1-z); printf(nn *记录运动会成绩*); printf(nn (输入0标志结束)n); for(k=1;kz;k+) g1-ak.item=k; g1-ak.firstschool=NULL; for(k=1;kn;k+) g2-bk.school=k; g2-bk.firstitem=0; g2-bk.score=0; g2-bk.boys=0; g2-bk.girls=0; g2-b0.score=0; g2-b0.boys=0; g2-b0.girls=0; while(i!=0) printf(n 项目:); scanf(%d,&i); if(i!=0) printf( 1.前三名 2.前五名n); printf( 请选择:); scanf(%d,&j); if(j!=1&j!=2) printf( 输入有误,请重新选择:); scanf(%d,&j); if(j=1) h=3; do printf( 第%d名:学校(学校编号为数字),h); scanf(%d,&x); p1=(Schools *)malloc(sizeof(Schools); p1-school=x; p2=(Items *)malloc(sizeof(Items); p2-item=i; if(h=3) p2-record=p1-record=2; if(h=2) p2-record=p1-record=3; if(h=1) p2-record=p1-record=5; p1-next=g1-ai.firstschool; g1-ai.firstschool=p1; p2-next=g2-bx.firstitem; g2-bx.firstitem=p2; g2-bx.score=g2-bx.score+p2-record; /* 累计总分 */ if(ibx.boys=g2-bx.boys+p2-record; /* 累计男团体总分 */ else g2-bx.girls=g2-bx.girls+p2-record; /* 累计女团体总分 */ h-; while(x!=0&h!=0); if(j=2) h=5; do printf( 第%d名:学校(学校编号为数字),h); scanf(%d,&x); p1=(Schools *)malloc(sizeof(Schools); p1-school=x; p2=(Items *)malloc(sizeof(Items); p2-item=i; if(h=5) p2-record=p1-record=1; if(h=4) p2-record=p1-record=2; if(h=3) p2-record=p1-record=3; if(h=2) p2-record=p1-record=5; if(h=1) p2-record=p1-record=7; p1-next=g1-ai.firstschool; g1-ai.firstschool=p1; p2-next=g2-bx.firstitem; g2-bx.firstitem=p2; g2-bx.score=g2-bx.score+p2-record; /* 累计总分 */ if(ibx.boys=g2-bx.boys+p2-record; /* 累计男团体总分 */ else g2-bx.girls=g2-bx.girls+p2-record; /* 累计女团体总分 */ h-; while(x!=0&h!=0); void save() FILE *fp1,*fp2; fp1=(FILE *)malloc(sizeof(FILE); fp2=(FILE *)malloc(sizeof(FILE); if(fp1=fopen(sports1,wb)=NULL) printf(cannot open file.n); return; if(fwrite(g1,sizeof(ALLitems),1,fp1)!=1) printf(file write error.n); fclose(fp1); if(fp2=fopen(sports2,wb)=NULL) printf(cannot open file.n); return; if(fwrite(g2,sizeof(ALLNode),1,fp2)!=1) printf(file write error.n); fclose(fp2); void funct2(ALLNode *g2) /* 输出各学校总分 */ int k; printf(nn * 输出各学校总分 *n); printf( 学校编号t 总分 n); for(k=1;kn;k+) printf( %dttt %dn,k,g2-bk.score); printf(n); system(pause); printf( 按任意键返回主菜单.); getchar(); void funct3(ALLNode *g2) /* 按学校编号排序输出 */ int k; Items *p2; p2=(Items *)malloc(sizeof(Items); printf(nn * 按学校编号排序输出 *n); printf( 学校编号ttt获奖情况 n); scanf(%d,&k); for(k=1;kn;k+) printf(tttttt%dt,k); p2=g2-bk.firstitem; while(p2!=NULL) printf(项目%d:得%d分 ,p2-item,p2-record); p2=p2-next; printf(n); printf(n); system(pause); printf(按任意键返回主菜单.); getchar(); void funct4(ALLNode *g2) /* 按学校总分排序输出 */ int i,j,k; Items *p2; printf(nn * 按学校总分排序输出 *n); printf( 学校编号tt总分 n); scanf(%d,&k); /printf(输入要查询的项目编号:); for(i=2;in;i+) printf(%dt,k); p2=g2-bk.firstitem; while(p2!=NULL) printf(%d tt%dn,g2-bk.school,g2-bk.score); p2=p2-next; printf(n); g2-b0.score=g2-bi.score; g2-b0.boys=g2-bi.boys; g2-b0.girls=g2-bi.girls; g2-b0.school=g2-bi.school; j=i-1; while(g2-b0.scorebj.score&j0) g2-bj+1.score=g2-bj.score; g2-bj+1.boys=g2-bj.boys; g2-bj+1.girls=g2-bj.girls; g2-bj+1.school=g2-bj.school; j-; g2-bj+1.score=g2-b0.score; g2-bj+1.boys=g2-b0.boys; g2-bj+1.girls=g2-b0.girls; g2-bj+1.school=g2-b0.school; for(k=1;kn;k+) printf(%d tt%dn,g2-bk.school,g2-bk.score); system(pause); printf(按任意键返回主菜单.); getchar(); void funct5(ALLNode *g2) /* 按男团体总分排序输出 */ int i,j,k; Items *p2; p2=(Items *)malloc(sizeof(Items); printf(nn * 按男团体总分排序输出 *n); printf(学校编号tt男团体总分 n); scanf(%d,&k); /printf(输入要查询的学校编号:); for(i=2;in;i+) printf(%dt,k); p2=g2-bk.firstitem; while(p2!=NULL) printf(%dtt %dn,g2-bk.school,g2-bk.boys); p2=p2-next; printf(n); g2-b0.score=g2-bi.score; g2-b0.boys=g2-bi.boys; g2-b0.girls=g2-bi.girls; g2-b0.school=g2-bi.school; j=i-1; while(g2-b0.boysbj.boys&j0) g2-bj+1.score=g2-bj.score; g2-bj+1.boys=g2-bj.boys; g2-bj+1.girls=g2-bj.girls; g2-bj+1.school=g2-bj.school; j-; g2-bj+1.score=g2-b0.score; g2-bj+1.boys=g2-b0.boys; g2-bj+1.girls=g2-b0.girls; g2-bj+1.school=g2-b0.school; for(k=1;kn;k+) printf(%dtt %dn,g2-bk.school,g2-bk.boys); system(pause); / 暂停等待 printf(按任意键返回主菜单.); getchar(); void funct6(ALLNode *g2) /* 按女团体总分排序输出 */ int i,j,k; Items *p2; p2=(Items *)malloc(sizeof(Items); printf(nn * 按女团体总分排序输出 *n); printf(学校编号tt女团体总分 n); scanf(%d,&k); / printf(输入要查询的项目编号:); for(i=2;in;i+) printf(%dt,k); p2=g2-bk.firstitem; while(p2!=NULL) printf(%dtt %dn,g2-bk.school,g2-bk.girls); p2=p2-next; printf(n); g2-b0.score=g2-bi.score; g2-b0.boys=g2-bi.boys; g2-b0.girls=g2-bi.girls; g2-b0.school=g2-bi.school; j=i-1; while(g2-b0.girlsbj.girls&j0) g2-bj+1.score=g2-bj.score; g2-bj+1.boys=g2-bj.boys; g2-bj+1.girls=g2-bj.girls; g2-bj+1.school=g2-bj.school; j-; g2-bj+1.score=g2-b0.score; g2-bj+1.boys=g2-b0.boys; g2-bj+1.girls=g2-b0.girls; g2-bj+1.school=g2-b0.school; for(k=1;kn;k+) printf(%dtt %dn,g2-bk.school,g2-bk.girls); system(pause); printf(按任意键返回主菜单.); getchar(); void funct7(ALLNode *g2) /* 按学校编号查询学校某个项目情况 */ int i,j; Items *p2; printf(n * 按学校编号查询学校某个项目情况 *n); printf( 输入要查询的学校编号:); scanf(%d,&i); printf( 输入要查询的项目编号:); scanf(%d,&j); p2=g2-bi.firstitem; while(p2!=NULL) if(p2-item=j) printf( 学校编号:%dt项目%

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论