数据结构大作业--运动会分数统计.doc

上传人:小飞机 文档编号:2792881 上传时间:2023-02-25 格式:DOC 页数:20 大小:1.24MB
返回 下载 相关 举报
数据结构大作业--运动会分数统计.doc_第1页
第1页 / 共20页
数据结构大作业--运动会分数统计.doc_第2页
第2页 / 共20页
数据结构大作业--运动会分数统计.doc_第3页
第3页 / 共20页
数据结构大作业--运动会分数统计.doc_第4页
第4页 / 共20页
数据结构大作业--运动会分数统计.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《数据结构大作业--运动会分数统计.doc》由会员分享,可在线阅读,更多相关《数据结构大作业--运动会分数统计.doc(20页珍藏版)》请在三一办公上搜索。

1、精选优质文档-倾情为你奉上 数据结构课程设计大作业班 题 目 运动会分数统计 专 业 计算机科学与技术 学生姓名 赵志强 学 号 39 指导教师 唐国民 完成日期 2010.12.2 湖州师院信息与工程学院专心-专注-专业目 录运动会分数统计【内容摘要】问题描述:参加运动会有n个学校,学校编号为1n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1m,女子m+1m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m=20,n=20)功能要求:1) 可以输入各个项目的前三名或前五名的成绩;2

2、) 能统计各学校总分,3) 可以按学校编号或名称、学校总分、男女团体总分排序输出;4) 可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前 三或前五名的学校。5) 数据存入文件并能随时查询 6) 规定:输入数据形式和范围:可以输入学校的名称,运动项目的名称 输出形式:有中文提示,各学校分数为整形 界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构;测试数据:

3、要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明。【关键字】运动会分数统计,线性表,链表,遍历【Abstract】Description:There are various schools participate in the games, and stamp them from 1. n. Competition is divided into N male project, and N female project. Project Numbers for man from 1 to M, womens f

4、rom m + 1 to M + w. Different project take the top five or top three points; The top five points respectively is: 7, 5, 3, 2, 1,and the top three points respectively is: 5, 3, 2,;Which to take the top five or top three set by the students themselves. (m = 20, n = 20)Functional requirements:1) can en

5、ter each item the top three or top five result,2) can calculate each schools total score,3) men and women groups total score sorting results can output according to the school numbers or name, school total score. 4) can follow the school Numbers inquires the school for a specific project; Can be obt

6、ained by project Numbers inquires topthree or top five schools.5) data files, and can deposit enquiries6) regulation: input data form and scope: can enter the school name, the name of the sportOutput format: Chinese clew, each school grades for plasticInterface requirements: there is a reasonable hi

7、nt, each function may establish menu, according to the prompt, can complete the relevant function requirement.Storage structure: the students themselves according to your own design system function requirements, but it will require games and related data to stored in data file. (data file of reading

8、 and writing data method and other related content in c language program design book, please self-study solve) please last due in material storage structure of where you use,Test data: require all legal data; 1, 2, the overall illegal data; 3, local illegal data. Test procedures, to ensure the stabi

9、lity of the program. Test data and test results of material in submission, please state.【Key words】Sports scores statistics,Linear list,Linked list,seek一、 实验内容概述这次课程设计题目是运动会的分数统计系统,它要求参加运动会的n个学校编号为1n。比赛分成m个男生项目和w个女生项目,项目编号为1-m和m+1-m+w。由于各项目参加人数差别比较大,有些项目取前五名,得分的顺序为7,5,3,2,1;还有些项目只能取前三名,得分顺序为5,3,2。需要

10、产生各学校的成绩单和团体总分报表。为了实现这个程序,调用了多个子函数。save函数是实现对数据的存储,getchar函数是从stdin流中读取字符,system函数是向系统发出一个DOS命令程序中用到的system(“pause”);其功能是运行的时候就可以出现:“请按任意键继续”,由于在这个从程序中的下一条命令是返回主菜单界面若不加一条命令的话,就会使显示是清屏。malloc函数的功能是内存分配如:gl=(ALLitems*)malloc(sizeof(ALLitems)g2=(ALLNode*)malloc(sizeof(ALLNode);就是g1和g2指针非配内存地址空间大小。函数fcl

11、ose的功能是关闭数据流,如程序中用到的flose(fp2)就是将fp2文件的数据流关闭,用在本程序的save函数中,当执行funct1输入信息保存后关闭当前信息流。程序中自定义的funct1-8的功能分别是:funct1():输入各个项目成绩并存储文件funct2():统计各学校总分funct3():按学校编号排序输出funct4():按学校总分排序输出funct5():按男团体总分排序输出funct6():按女团体总分排序输出funct7():按学校编号查询学校某个项目情况funct8():按项目编号查询取得名次的学校funct0():退出最后是主函数main()它是所有程序运行的入口二、

12、 实验目的概述“数据结构”是计算机科学与技术专业一门十分重要的专业技术基础课,计算机科学各领域及有关的应用软件都要使用到各种数据结构。在我国,“数据结构与算法”已经作为理工科非计算机专业必修的信息技术基础课程之一。世界上许多科技人员对学习、研究数据结构和算法都非常重视,对于从是计算机科学及其应用的科技工作者来说,数据结构与算法更是必须透彻的掌握的重要基础。 学习数据结构与算法的最终目的是解决实际的应用问题,特别是非数值计算类型的应用问题,课程设计是加强学生实践能力的一个强有力的手段。作为一名计算机专业的学生,通过对计算机课程两年的学习,掌握C+和数据结构,在完成课程设计和变成过程中,要深化对数

13、据结构与算法课程中的基本概念、理论和方法的理解,训练综合运用所学知识处理实际问题的能力,强化面向对象的程序设计理念,在老师的指导下完成最少换车次数问题,把自己所学的理论用具体的问题来解决,更加直接,易懂。提高程序设计与调试水平。在通过学习数据结构,我们要掌握数据结构的各个算法,运用学过的算法去解决实际中的问题,将数据结构用用武之地,也能提高我们的运用能力和编写程序的能力,对我们的技能也有进一步的提高,对我们的未来之路铺路搭桥。在这个实验中,我主要是类的成员函数去解决问题,除了学习到C语言的知识外,同样还学习到C+的知识,对我的知识也有很大扩展,将C和C+相结合,达到共同解决问题的目的。在这个运

14、用中,主要是学会类的定义以及使用,还有类的成员函数的定义和使用,通过用类的对象去调用类的成员函数,最后达到目的,这能够体现出面向对象的编程方法,与以往的面向过程的编程方法有很大的层次性的提高,达到提高思维能力。三、 解题思路的描述1.本程序中学校的存储结构为链表:Prev school1 next头结点Prev school(最后) next其中school类为:class school:public athlete /*学校*/ public: int count; /*学校获奖数*/ int serial; /*学校编号*/ int menscore; /*男选手总分*/ int wome

15、nscore; /*女选手总分*/ 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.关键算法

16、 添加项目号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取5名取3名输入获奖的学校编号se1senext;输出向量中的内容1. 所有学校总分统计表2. 学校成绩查询3. 项目情况查询4.

17、返回主菜单1. 按学校编号统计2. 按学校名次统计3. 按男团总分统计4. 按女团总分统计5. 返回查询菜单6. 返回主菜单/按学校编号顺序输出所有参赛学校运动会成绩void serialSort(vector& v)for(int i=0;iv.size();i+)cout*vi;四、 源程序清单#include#include#include#define LT(a,b) (a)(b)#define LIST_INIT_SIZE 100/线性表存储空间的初始分配量#define LISTINCREMENT 10/线性表存储空间的分配增量typedef int InfoType; / 定义其

18、它数据项的类型typedef int KeyType; / 定义关键字类型为整型struct RedType / 记录类型 KeyType key; / 关键字项 InfoType otherinfo; / 其它数据项,具体类型在主程中定义 ;typedef struct int schnum;/学校的编号 int mscore20;/学校在各个男生项目的积分 int wscore20;/学校在各个女生项目的积分school;/学校记录类型typedef int ElemType;struct SqList ElemType *elem;/ 存储空间基址 int length; / 当前长度

19、int listsize; / 当前分配的存储容量(以sizeof(ElemType)为单位) ;struct List RedType r20; int length; ;int InitList(SqList &L) / 算法.3 / 操作结果:构造一个空的顺序线性表 L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType); if(!L.elem) exit(-1); / 存储分配失败 L.length=0; / 空表长度为 L.listsize=LIST_INIT_SIZE; / 初始存储容量 return 1; int List

20、Insert(SqList &L,int i,ElemType e) / 算法.4 / 初始条件:顺序线性表L已存在,iListLength(L)+1 / 操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加 ElemType *newbase,*q,*p; if(iL.length+1) / i值不合法 return 0; if(L.length=L.listsize) / 当前存储空间已满,增加分配 if(!(newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType) exit(-1)

21、; / 存储分配失败 L.elem=newbase; / 新基址 L.listsize+=LISTINCREMENT; / 增加存储容量 q=L.elem+i-1; / q为插入位置 for(p=L.elem+L.length-1;p=q;-p) / 插入位置及之后的元素右移 *(p+1)=*p; *q=e; / 插入e +L.length; / 表长增 return 1; void InsertSort(List &L) / 对顺序表L作直接插入排序。算法.1 int i,j; for(i=2;i=L.length;+i) if LT(L.ri.key,L.ri-1.key) / ,需将L.

22、ri插入有序子表 L.r0=L.ri; / 复制为哨兵 for(j=i-1;LT(L.r0.key,L.rj.key);-j) L.rj+1=L.rj; / 记录后移 L.rj+1=L.r0; / 插入到正确位置 void print(List L) int i; for(i=1;i=L.length;i+) printf(%d,%d,%d)n,L.length-i+1,L.ri.otherinfo,L.ri.key); printf(n); void main() /规定男生项目前三名分别积分、,女生项目前五名分别积分、 /规定没有名次则积分为,不考虑并列的情况 /请正确输入各学校对应项目的

23、积分 int n,m,w,i,j; school a20; int summscore20,sumwscore20,sumscore20;/定义存储各个学校男团、女团、总分 RedType d20;/定义排序所需的数组为RedType型 SqList L,Lm,Lw;/定义存放各个学校总分、男团、女团积分的顺序线性表 List Lr;/定义积分排序所需的顺序线性表 InitList(L);/初始化各线性表 InitList(Lm); InitList(Lw); cout请输入参加运动会的学校数目(20):n; while(n20) cout输入学校数目有误,请重新输入!endl; cout请输

24、入参加运动会的学校数目(20):n; cout请分别输入男生、女生的项目数目(20):mw; cout规定男生项目前三名分别积分、endl; cout女生项目前五名分别积分、endl; cout没有名次则积分为,且本程序不涉及并列排名的情况!endl; cout请正确输入各学校对应项目的积分!nendl; for(i=1;i=n;i+) ai-1.schnum=i;/赋给学校对应的编号 printf(请输入学校%d 男生各个项目的成绩:n,i); for(j=1;jai-1.mscorej-1; printf(请输入学校%d 女生各个项目的成绩:n,i); for(j=1;jai-1.wsco

25、rej-1; for(i=0;in;i+) summscorei=ai.mscore0; for(j=1;jm;j+) summscorei+=ai.mscorej;/求出学校男团总分并存储到数组中对应位置 ListInsert(Lm,i+1,summscorei);/将学校男团总分插入存放在线性表对应位置 sumwscorei=ai.wscore0; for(j=1;jch; switch(ch) case 1:/查看各学校总分统计,并按学校编号排序输出查看 for(i=0;in;i+) printf(学校编号:%d 学校总分:%dn,i+1,L.elemi); break;case 2:/

26、按学校总分排序输出查看 Lr.length=n; for(i=0;in;i+) di.key=L.elemi; di.otherinfo=i+1; Lr.ri+1=di; InsertSort(Lr); cout按学校总分排序后以(名次,学校编号,学校总分)形式输出为:endl; print(Lr); break;case 3:/按男团总分排序输出查看 Lr.length=n; for(i=0;in;i+) di.key=Lm.elemi; di.otherinfo=i+1; Lr.ri+1=di; InsertSort(Lr); cout按男团总分排序后以(名次,学校编号,男团总分)形式输出

27、为:endl; print(Lr); break; case 4:/按女团总分排序输出查看 Lr.length=n; for(i=0;in;i+) di.key=Lw.elemi; di.otherinfo=i+1; Lr.ri+1=di; InsertSort(Lr); cout按女团总分排序后以(名次,学校编号,女团总分)形式输出为:endl; print(Lr); break;case 5:/按学校编号查询学校某个项目的情况 int s,t; cout请输入要查询的学校编号:s; while(sn)/输入学校编号不在初始定义范围之内 cerr输入学校编号有误,请重新正确输入!endl;

28、cout请输入要查询的学校编号:s;/重新输入 i=0; while(ai.schnum!=s) +i;/通过循环找到输入编号的对应学校在数组a中的位置 cout请输入要查询的项目序号:t; while(tm+w)/输入项目序号不在初始定义范围之内 cout输入项目序号有误,请重新正确输入!endl; cout请输入要查询的项目序号:t;/重新输入 if(t=m)/该项目属于男生项目 printf(该学校该项目积分为:%dn,ai.mscoret-1);/从学校男生项目积分数组里输出 else /该项目属于女生项目 printf(该学校该项目积分为:%dn,ai.wscoret-m-1);/从

29、学校女生项目积分数组里输出 break; case 6:/按项目编号查询取得前三或前五名的学校 cout请输入要查询的项目序号:t; while(tm+w)/输入项目序号不在初始定义范围之内 cout输入项目序号有误,请重新正确输入!endl; cout请输入要查询的项目序号:t;/重新输入 if(t=m)/该项目属于男生项目 i=0; while(ai.mscoret-1!=5) +i;/通过循环找到该项目第一名学校在a中的位置 printf(获得该项目第一名的是学校:%d 号n,i+1); i=0; while(ai.mscoret-1!=3) +i;/通过循环找到该项目第二名学校在a中的

30、位置 printf(获得该项目第二名的是学校:%d 号n,i+1); i=0; while(ai.mscoret-1!=2) +i;/通过循环找到该项目第三名学校在a中的位置 printf(获得该项目第三名的是学校:%d 号n,i+1); else/该项目属于女生项目 i=0; while(ai.wscoret-m-1!=7) +i;/通过循环找到该项目第一名学校在a中的位置 printf(获得该项目第一名的是学校:%d 号n,i+1); i=0; while(ai.wscoret-m-1!=5) +i;/通过循环找到该项目第二名学校在a中的位置 printf(获得该项目第二名的是学校:%d

31、号n,i+1); i=0; while(ai.wscoret-m-1!=3) +i;/通过循环找到该项目第三名学校在a中的位置 printf(获得该项目第三名的是学校:%d 号n,i+1); i=0; while(ai.wscoret-m-1!=2) +i;/通过循环找到该项目第四名学校在a中的位置 printf(获得该项目第四名的是学校:%d 号n,i+1); i=0; while(ai.wscoret-m-1!=1) +i;/通过循环找到该项目第五名学校在a中的位置 printf(获得该项目第五名的是学校:%d 号n,i+1); break; default:flag=0;printf(程

32、序结束,按任意键退出!n);/退出程序 getchar();五、 程序调试及测试结果1.输入学校数目及其名称2.分别输入男、女项目数,在项目总排序中对应项的学校编号排名,及弹出菜单3.菜单:选择14.菜单:选择25.菜单:选择36.菜单:选择47.菜单:选择58.菜单:选择69.菜单:选择7六、 结论与体会1、调试中所遇到的较重要问题的回顾(1)、问题:每一次查到文件中保存的资料,发现只有一条记录,而且该条记录是最近输入的一条记录 分析原因:每一次打开该文件进行写入操作时,文件中原有内容被清空了!解决办法:该文件要由iso:app参数规定的按追加输出方式打开,文件中原有内容就会保持不变,文件指

33、针被自动移到文件的末尾。(2)、问题:怎样可以按项目编号查询取得前三或前五名的学校呢?一般的遍历输出很难达到预期效果, 发现过程:能完整的输出前三或前五名的学校,但不能按排名的次序依次输出,这就很不完美! 分析原因:我原来是这么来实现,检查每个学校该项目的得分,一旦得分不为零就把该学校输出。解决办法:设置了一个局部变量flag来标记名次,初始值设为1,然后利用do while语句来实现循环查找,第一次查找该项目第一名的学校,找到后flag自增来实现查找第二名,直到找到所有符合条件的学校。2、心得和体会通过对数据结构和课程设计的学习,使我们能够以问题求解方法、程序设计方法以及一些典型的数据结构算

34、法为研究对象,分析数据对象的特征,掌握数据组织的方法和在计算机中的表示方法,为数据选择适当的逻辑结构、存储结构以及相应的处理算法,使我们初步掌握了算法的时间、空间复杂度的分析技巧,并逐步培养了良好的程序设计风格以及进行复杂程序设计的技能。数据结构一科的重要内容和主要难点是让我们理解、习惯和熟悉算法构造性思维方法。在课设过程中,我深刻认识到算法的逻辑性对程序的重要影响,算法的准确度对程序运行结果的重要影响,构建最小代价生成树时,一个细微的循环控量的错误都能影响到程序的正确性,而所有的代码机制都是为一个目标的实现而运作的,所以,细致是实现算法和程序准确性必不可少的。七、 参考文献a) 姜学军,朱筠.数据结构(C语言描述).北京:中国轻工业出版社,2004.9b) 谭浩强.C语言程序设计.北京:清华大学出版社,1991c) 谭浩强.C+程序设计.北京:清华大学出版社,2005d) 徐孝凯.数据结构简明教程.北京:清华大学出版社,1995e) 殷人昆.数据结构(用面向对象方法与C+描述).北京:清华大学出版社,1997 指导教师: 日期 实验成绩:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号