范文课程设计成果说明书.docx
- 文档编号:29007170
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:11
- 大小:68.58KB
范文课程设计成果说明书.docx
《范文课程设计成果说明书.docx》由会员分享,可在线阅读,更多相关《范文课程设计成果说明书.docx(11页珍藏版)》请在冰豆网上搜索。
范文课程设计成果说明书
课程设计成果说明书
题目:
集合的并交差运算
学生姓名:
***
学号:
********
院系:
达内IT学院
班级:
***
指导教师:
***
东海科学技术学院课程设计成绩评定表
2013—2014学年第二学期
学院东海科学技术学院班级C13达内专业达内IT
学生姓名(学号)
****
(******)
课程名称
面向对象程序设计应用实训
题目
集合的并交差运算
指导教师评语
指导教师签名:
年月日
答辩评语及成绩
答辩小组教师签名:
年月日
东海科学技术学院课程设计任务书
2013—2014学年第二学期
学院东海科学技术学院班级C13达内专业达内IT
学生姓名(学号)
****
(******)
课程
名称
面向对象程序设计应用实训
设计
题目
集合的并交差运算
完成
期限
自2014年6月16日至2009年7月4日共3周
设
计
依
据
选这个课题的原因,背景介绍,目的及意义
利用有序链表表示整数集合,在有序表的基础上扩展出集合类的操作,通过链表的定义来锻炼对指针的驾驭能力,提升内存空间的掌控能力,并且通过包含指针数据的类的操作巩固对类的创建及相关知识的运用。
设
计
要
求
及
主
要
内
容
涉及:
设计思路和方法、总体框架的说明,功能设计要求;对类给出成员并有文字说明。
对函数给出功能及调用关系。
此程序可以创建多个集合,并能根据菜单选择进行集合的并交差的操作,以及元素的查找,插入,删除常规操作。
输入元素时自动对数据值进行排序,建立有序的集合。
主要内容是节点类,有序链表类,集合类的创建,核心问题是成员函数的编写。
参
考
资
料
[1]钱能.C++程序设计教程.清华大学出版社.2013
[2]严蔚敏陈文博编著.数据结构及应用算法教程.清华大学出版社.2008.
[3]C++Primer(第四版).人民邮电出版社.
指导教
师签字
日期
2014.6.10
摘要
面向对象设计是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,是建立在“对象”概念基础上的方法学。
对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。
而每继承性是对具有层次关系的类的属性和操作进行共享的一种方式。
所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。
按照BjarneSTroustRUP的说法,面向对象的编程范式:
l决定你要的类;2给每个类提供完整的一组操作;3明确地使用继承来表现共同点。
本文主要介绍有序集合的并交差运算的实现,按照上述的编程范式,介绍了需要哪些类,类中包含哪些数据成员,每个类需要提供怎样的一组操作,类和类之间继承关系如何表示。
主要分为5个部分,第一部分介绍了选题及需求分析;第二部分介绍了概要设计;第三部分结束了详细设计需要考虑的问题;第四部分介绍了重要的代码;第五部分课程设计的总结。
【关键词】面向对象设计,类,对象,继承
1问题描述与需求分析
由于集合的操作仅限于求并交差,因此在本选题中以有序表表示集合,但进一步将集合本身设计成抽象数据类型,以便以后可以在集合类型的操作基础上,构造高一层的算法,一遍完成更复杂的应用。
该选题的主要内容是利用有序链表表示正整数集合,实现集合的并交差的运算;其中集合的数据可以来源于键盘输入,也可以从文件中读取。
程序包括功能如下:
1.能在屏幕中显示合适的提示信息告知用户可以执行的行为和操作;
2.用户根据提示信息输入数据,程序能判断输入的数据是否符合要求;
3.程序能自动判断有无重复的数据,如果有,则自动滤去;
4.根据用户的选择进行集合的某种运算,并将结构显示在屏幕中。
2概要设计
为了实现上述程序功能,应以有序链表表示集合。
为此需要有序表和集合两个抽象数据类型。
有序表也链表的形式来存储数据可以动态添加数据和删除数据,不受存储空间的影响,所以对有序表的类型设计中包含的元素类型应该是一个可以包含存储的数据元素以及可以指明下一个元素的位置。
根据以上分析,需要一个类表示链表的结点Node,一个类表示链表Orderlist,一个类表示集合Set
节点类数据成员定义如下:
classNode{intdata;public:
Node*next;};
链表类数据成员定义如下:
classOrderlist{protected:
Node*head,*tail;intnsize;public:
};
Set类数据成员定义如下:
classOrderSet:
publicOrderlist{};
3详细设计
每个类中的数据成员已经确定好了,对这些数据成员的初始化工作以及其他的操作都交给了构造函数和成员函数来实现,所以设计这些类的成员函数便是设计的重点,如何确保在链表中可以随意的插入数据元素,或者删除数据元素,在插入数据的时候还要判断要插入的数据是否已经存在链表中,如果存在,则拒绝插入。
如何遍历该链表中的数据,如何保证插入的数据永远都是有序的。
如何定位某一数据在此链表中的位置。
所有这些都需要设计合理的成员函数来实现。
除此以外,该程序的功能是对集合的并交差的实现,那么还应提供一个功能供用户选择需要进行运算的操作。
操作完毕之后,主函数还应该考虑合适的输出的格式将结果输出。
为了提供友好的用户界面,该程序的用户交互界面设计如图3-1,图3-2,图3-3所示:
图3-1功能显示及输入界面
图3-2功能选择界面
图3-3结果输出界面
4主要代码:
classNode{
intdata;
public:
Node*next;
Node(intv=0):
data(v),next(0){}
intgetdata(){returndata;}
};
classOrderlist
{
protected:
Node*head,*tail;
intnsize;
public:
Orderlist():
head(0),tail(0),nsize(0){}
~Orderlist()
{
while(head){Node*p=head;head=head->next;deletep;}
}
Orderlist&initlist(istream&in);
intinselem(intv);
intdelelem(intv);
intlocat(intv);
intsize(){
returnnsize;
}
voiddisp();
};
Orderlist&Orderlist:
:
initlist(istream&in)
{intvalue;
in>>value;
while(value!
=-1){inselem(value);in>>value;}
return*this;
}
intOrderlist:
:
locat(intv)
{
//if(!
head)return0;
for(Node*p=head;p;p=p->next)
if(v==p->getdata())return1;
return0;
}
intOrderlist:
:
inselem(intv)
{
Node*np=newNode(v);
if(!
np)return0;
if(!
head){head=np;tail=np;}
else
{if(v
elseif(v>tail->getdata()){tail->next=np;tail=np;}
elsefor(Node*p=head;p;p=p->next)
{if(p->getdata()==v)return0;
if(p->next->getdata()>v){np->next=p->next;p->next=np;}}
}
nsize++;return1;
}
intOrderlist:
:
delelem(intv)
{Node*p=head;
if(head->getdata()==v){head=head->next;deletep;}
elsefor(Node*q=p;p;q=p,p=p->next)
if(p->getdata()==v){q->next=p->next;deletep;break;}
nsize--;
return1;
}
voidOrderlist:
:
disp()
{
for(Node*p=head;p;p=p->next)
cout<
cout< } classOrderSet: publicOrderlist { public: OrderSet(){} OrderSet(OrderSet&set) { head=newNode(set.head->getdata()); tail=head; for(Node*p=set.head->next;p;p=p->next) {Node*np=newNode(p->getdata()); tail->next=np; tail=np;} } OrderSet&operator=(OrderSet&set) { if(this==&set)returnset; while(head){Node*p=head;head=head->next;deletep;} head=newNode(set.head->getdata()); tail=head; for(Node*p=set.head->next;p;p=p->next) {Node*np=newNode(p->getdata()); tail->next=np; tail=np;} return*this; } OrderSet&setunion(OrderSet&,OrderSet&); OrderSet&setdiff(OrderSet&,OrderSet&); OrderSet&setinter(OrderSet&,OrderSet&); voidclear() { while(head){ Node*p=head;head=head->next;deletep;} nsize=0; } }; OrderSet&OrderSet: : setunion(OrderSet&s1,OrderSet&s2) { for(Node*q=s1.head;q;q=q->next) inselem(q->getdata()); for(Node*p=s2.head;p;p=p->next) if(! locat(p->getdata()))inselem(p->getdata()); } OrderSet&OrderSet: : setdiff(OrderSet&s1,OrderSet&s2) { for(Node*q=s1.head;q;q=q->next) inselem(q->getdata()); for(Node*p=s2.head;p;p=p->next) if(locat(p->getdata()))delelem(p->getdata()); } OrderSet&OrderSet: : setinter(OrderSet&s1,OrderSet&s2) { for(Node*p=s2.head;p;p=p->next) if(s1.locat(p->getdata()))inselem(p->getdata()); } 5课程设计总结 课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。 通过这次课程设计增加很多认识,在拿到课程设计题目时,没有像以前一样马上开始动手写代码,我先做了整体的分析,把要设计的类,类的数据成员,对这些数据成员可能进行的操作,以及类和类之间的关系理清楚,了解了设计的整体框架。 在编写代码过程中,根据实现设计好的类及类的成员一步步进行,相对思路比较清晰;具体实现过程中,也会出现各种细节问题,借助XX,谷歌等搜索引擎以及与周围师生的讨论也能一一解决。 通过不断发现问题,不断解决问题,从而提高对面向对象概念的认识,对编程结构的理解。 在编写代码的同时,还参考了很多的源代码的编写,阅读其他高级程序员的源代码的过程,也是一个学习的过程,包括学习更优秀的编程理念,还有更规范的编程风格。 通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,但是没有理论知识,单纯对代码的理解还是非常困难的。 理论可以使我们面对实践的时候更容易入手,而实践可以使我们更深刻的理解理论知识。 总之,只有通过不断的实践,并在实践中经常性的去领悟其中的理论知识,才能够提高自己的实际动手能力和独立思考的能力。 参考文献
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 范文 课程设计 成果 说明书