课程设计报告课程名称数据结构课程设计专业班级软件1241姓名屠舒剑学号1204431126指导教师丁柏秀赵洁红起止时间2014.2.25~2014.2.28成绩评定考核内容设计表现设计报告答辩综合评定成绩计算机技术与工程学院课程设计考核和成绩评定办法1.课程设计的考核由指导教师根据设计表现、设计报告、设计成果、答辩等几个方面,给出各项权重,综合评定。该设计考核教研室主任审核,主管院长审批备案。2.成绩评定采用五级分制,即优、良、中、及格、不及格。3.参加本次设计时间不足三分之二或旷课四天以上者,不得参加本次考核,按不及格处理。4.课程设计结束一周内,指导教师提交成绩和设计总结。5.设计过程考核和成绩在教师手册中有记载。课程设计报告内容课程设计报告内容、格式各专业根据专业不同统一规范,经教研室主任审核、主管院长审批备案。注:1.课程设计任务书和指导书在课程设计前发给学生,设计任务书放置在设计报告封面后和正文目录前。2.为了节省纸张,保护环境,便于保管实习报告,统一采用A4纸,实习报告建议双面打印(正文采用宋体五号字)或手写。一、课程设计目的本次课程设计的目的就是要达到理论与实际应用相结合,使我们能过根据数据对象的特性,学会数据组织的方法,能把现实世界中的实际问题在计算机内部表示出来,并培养基本的、良好的程序设计技能。掌握基本的输入、输出方法,理解程序的分支结构,实现条件判断和循环程序的设计。掌握线性表的应用。二、课程设计要求《数据结构课程设计》则要培养、训练学生选用合适的数据结构并运用程序设计语言(C/C++)编写质量高的应用程序。并建立初步评价算法程序的能力。为编译技术、操作系统、数据库及算法设计与分析等后继课程的学习以及为应用软件特别是非数值应用软件的开发打下良好的理论基础和实践基础重点和难点:1.针对具体问题如何选择或设计合适的数据结构;2.如何根据一定的存储策略实现数据的存储表示;3.基于上述数据结构设计并实现完成具体要求的算法;4.对算法的时间性能进行分析。针对每一个设计题目写出1.问题分析和任务定义:根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么?(而不是怎么做?)限制条件是什么?2.逻辑设计:对问题描述中涉及的操作对象定义相应的数据类型,并按照以数据结构为中心的原则划分模块,定义主程序模块和各抽象数据类型。逻辑设计的结果应写出每个抽象数据类型的定义(包括数据结构的描述和每个基本操作的功能说明),各个主要模块的算法,并画出模块之间的调用关系图;3.详细设计:定义相应的存储结构并写出各函数的伪码算法。在这个过程中,要综合考虑系统功能,使得系统结构清晰、合理、简单和易于调试,抽象数据类型的实现尽可能做到数据封装,基本操作的规格说明尽可能明确具体。详细设计的结果是对数据结构和基本操作作出进一步的求精,写出数据存储结构的类型定义,写出函数形式的算法框架;4.程序编码:把详细设计的结果进一步求精为程序设计语言程序。同时加入一些注解和断言,使程序中逻辑概念清楚;5.程序调试与测试:采用自底向上,分模块进行,即先调试低层函数。能够熟练掌握调试工具的各种功能,设计测试数据确定疑点,通过修改程序来证实它或绕过它。调试正确后,认真整理源程序及其注释,形成格式和风格良好的源程序清单和结果;三、具体设计题目1.问题描述运动会分数统计系统设计目的:用《数据结构》中的线性表作数据结构,结合语言基本知识。编写一个运动会分数管理系统。以把所学数据结构知识应用到实际软件开发中去。设计内容:可以输入各个项目的前三名或前五名的成绩;能统计各学校总分,可以按学校编号、学校总分、男女团体总分排序输出;可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名;设计要求:输入数据形式和范围:20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)输出形式:有中文提示,各学校分数为整形界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的数据结构;测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,已保证程序的稳定。测试数据及测试结构请在上交的资料中写明;2.问题分析和任务定义本程序主要是使用链表来实现操作,一个运动会运动项目和参加运动会的成员。因此构造两个链表。为了操作的方便,并且能够保存输入数据,所以通过文件操作来实现数据的读和写。每次添加新的数据后都要输入“0”退出,数据才能保存。对于排序功能,采用了冒泡排序法。该题是要求通过巩固线性表,在所学C++语言基础上用其设计运动会分数统计系统,包括运动会参加者及其成绩信息的输入,显示,查找,删除,存盘和装入功能。限制条件是要有较好的界面和较强的容错能力而且上机能正常运行。3.逻辑设计设计该题需要两个类,一个是School类包括信息的内容有学校名字(name)、学校编号(number)、男团总分(boy)、女团总分(girl)和一个头结点的前驱指针,另一个是Sport类包括项目名称(name)、性别(isboy)、名次(is3)、项目编号(number)、第一名(first)、第二名(second)、第三名(third)、第四名(fourth)、第五名(fifth)和一个结点的前驱指针,后继指针和数据。各模块需对两个结构体中的内容进行操作,该系统包括add()模块,output()模块,search()模块,order()模块,save()模块,load()模块。模块之间调用关系如下图所示:4.详细设计1)输入信息的伪代码描述如下:First申请空间建立双链表空头结点;while(flag=='Y'||flag=='y')工作指针p申请空间向双链表中动态增加节点2)显示信息的伪代码描述如下:双链表节点p初始化While(p!=first)工作指针p后移3)查找信息的伪代码描述如下:工作指针p初始化while(p!=first&&p&&p的姓名和已存在的名字不同)工作指针p后移4)删除信息的伪代码描述如下:工作指针p初始化查找到所要删除的姓名的信息摘链5)存盘的伪代码描述如下:以二进制写的方式打开文件While(p!=first)工作指针p后移向文件中写入结点个数逐个写入作息关闭文件6)装入的伪代码描述如下:建立双链表空头结点以二进制读的方式打开文件工作指针p初始化从文件中动态载入节点数据关闭文件5.程序源代码如下:#includeiostream.h#includeiomanip.h#includestring.h#includefstream.h#includestdlib.h#includestdio.h#includeconio.h#includectype.hclassSchool{private:charname[25];intnumber;intboy;intgirl;public:School*next;voidSchool_add();voidSchool_sort();voidSchool_output(School*p);intSchool_isexist(inta);voidSchool_show(inta);voidSchool_search(inta);voidSchool_addmark(inta,intb,intc);//a为分数,b为学校编号,c为性别编号voidSchool_order(School*temp,inttype);};classSport{private:charname[20];intisboy;intis3;intnumber;intfirst;intsecond;intthird;intfourth;intfifth;public:Sport*next;intSport_isexist(inta);voidSport_add();voidSport_output(Sport*p);voidSport_search(inta);};School*head1;Sport*head2;voidSchool::School_add(){School*p;intmark=0;p=newSchool;cout请输入学校名称:endl;cinp-name;intc;while(mark!=1){cout请输入学校编号:endl;cinc;p-number=c;mark=1;p-boy=0;p-girl=0;p-next=head1-next;head1-next=p;cout成功添加一条信息!endl;cout是否继续添加?(y/n)endl;charinput,y,n;cininput;switch(input){case'y':mark=0;School_add();case'n':mark=1;return;}}deletep;}voidSchool::School_output(School*p){cout学校名称编号男团总分女团总分团体总分endl;p=head1;p=p-next;while(p){coutp-name\t\tp-number\t\tp-boy\t\tp-girl\t\t(p-boy+p-girl)endl;p=p-next;}}intSchool::School_isexist(inta){intb=0;School*p;p=head1;p=p-next;while(p){if(p-number==a){return1;}p=p-next;}return0;}voidSchool::School_show(inta){School*p;p=head1;p=p-next;while(p){if(p-number==a){coutp-nameendl;return;}p=p-next;}cout无endl;}voidSchool::School_search(inta){School*p;p=head1;p=p-next;while(p){if(p-number==a){cout学校名称p-name男团总分p-boy女团总分p-girl团体总分(p-boy+p-girl)endl;return;}p=p-next;}cout无此编号!endl;}voidSchool::School_addmark(inta,intb,intc){School*p;p=head1;p=p-next;while(p){if(p-number==b){if(c==1){p-boy=p-boy+a;}else{p-girl=p-girl+a;}}p=p-next;}}voidSchool::School_sort(){School*q,*small;School*temp1;temp1=newSchool;temp1-next=NULL;q=head1;q=q-next;small=head1;small=small-next;temp1-girl=q-girl;q-girl=small-girl;small-girl=temp1-girl;temp1-boy=q-boy;q-boy=small-boy;small-boy=temp1-boy;strcpy(temp1-name,q-name);strcpy(q-name,small-name);strcpy(small-name,temp1-name);temp1-number=q-number;q-