《应用软件综合设计多用途数据对象类的设计.doc》由会员分享,可在线阅读,更多相关《应用软件综合设计多用途数据对象类的设计.doc(37页珍藏版)》请在三一办公上搜索。
1、武汉工程大学 计算机科学与工程学院综合设计报告设计名称: 应用软件综合设计 设计题目: 多用途数据对象类的设计 学生学号: 专业班级: 学生姓名: 学生成绩: 指导教师(职称): 课题工作时间: 2009年9月14日 至 2009年9月25日说明:1、报告中的第一、二、三项由指导教师在综合设计开始前填写并发给每个学生;四、五两项(中英文摘要)由学生在完成综合设计后填写。2、学生成绩由指导教师根据学生的设计情况给出各项分值及总评成绩。3、指导教师评语一栏由指导教师就学生在整个设计期间的平时表现、设计完成情况、报告的质量及答辩情况,给出客观、全面的评价。4、所有学生必须参加综合设计的答辩环节,凡不
2、参加答辩者,其成绩一律按不及格处理。答辩小组成员应由2人及以上教师组成。5、报告正文字数一般应不少于5000字,也可由指导教师根据本门综合设计的情况另行规定。6、平时表现成绩低于6分的学生,其综合设计成绩按不及格处理。7、此表格式为武汉工程大学计算机科学与工程学院提供的基本格式(适用于学院各类综合设计),各教研室可根据本门综合设计的特点及内容做适当的调整,并上报学院批准。成绩评定表学生姓名: 学号: 班级: 类别合计分值各项分值评分标准实际得分合计得分备注平时表现1010按时参加综合设计,无旷课、迟到、早退、违反实验室纪律等情况。完成情况3020按设计任务书的要求完成了全部任务,能完整演示其设
3、计内容,符合要求。10能对其设计内容进行详细、完整的介绍,并能就指导教师提出的问题进行正确的回答。报告质量3510报告文字通顺,内容翔实,论述充分、完整,立论正确,结构严谨合理;报告字数符合相关要求,工整规范,整齐划一。5课题背景介绍清楚,综述分析充分。5设计方案合理、可行,论证严谨,逻辑性强,具有说服力。5符号统一;图表完备、符合规范要求。5能对整个设计过程进行全面的总结,得出有价值的结论或结果。5参考文献数量在3篇以上,格式符合要求,在正文中正确引用。答辩情况2510在规定时间内能就所设计的内容进行阐述,言简意明,重点突出,论点正确,条理清晰。15在规定时间内能准确、完整、流利地回答教师所
4、提出的问题。总评成绩: 分 补充说明: 指导教师: 刘军 (签字)日 期: 2008 年 1 月 19 日答辩记录表学生姓名: 学号: 班级: 答辩地点: 答辩内容记录:答辩成绩合计分值各项分值评分标准实际得分合计得分备注2510在规定时间内能就所设计的内容进行阐述,言简意明,重点突出,论点正确,条理清晰。15在规定时间内能准确、完整、流利地回答教师所提出的问题。答辩小组成员(签字): 2009 年 9 月 25 日指导教师评语指导教师: (签字)日 期: 年 月 日一、综合设计目的、条件、任务和内容要求:课题目的:为了巩固、加深面向对象程序设计的理解,并在此基础上能够从实际问题出发设计编制一
5、个中小型应用系统;能够熟练运用面向对象思想来解决一些实际问题。同时也为了检验学生对面向对象程序设计这门课的掌握程度,按照面向对象程序设计原理完成了此次课程设计。课题条件:已掌握向对象程序设计的基本方法、一台装有Windows95,Windows NT 4.0或更高的操作系统和某种高级语言开发环境(例如VC+)的PC机。课题任务:利用某种高级语言(例如VC+)设计开发一个多用途数据对象类的设计,以加深对面向对象和模板原理的理解,掌握基于模板的程序设计的实现方法和技术。课题内容要求:(1)该项目主要功能有:1.建立一个存放数据对象的表的类 DataTable,数据对象的属性字段的类型可以是int,
6、string,float,double和char这五种类型,其中数据对象的各个属性字段的定义存放于类 DataTable的私有数据成员ve中;数据对象的记录存放于私有数据成员lis中.2.成员函数insertField()可实现增加数据对象的属性字段,包括字段名和字段类型;3.成员函数insertRecoed()可实现增加数据对象的记录.4.成员函数readFieldRecord();可由文件data.txt中读取记录,保存在ve,和lis中.5.成员函数outToFile()可将ve和lis中的相关记录保存到输出文件中,文件名由用户指定,但是,用户提供文件名时一定要连文件扩展名一起提供.6.
7、成员函数outAllRecord();将数据对象的各属性和记录值一起输出到控制台.7.成员函数removeField();会提示用户输入你想删除的字段名,就可以删除该字段名,字段类型,以及各个记录中该字段的值.8.成员函数searchRecord();可以查找记录,会提示用户输入查找条件,注意输入条件的格式,比如想查找字段name值为5的记录,就要写name = 5作为查找条件,在name与=之间要有空格间隔,=与5之间也要有空格间隔;=可换成!=表示查找某字段不等于某值;或换成,表示要查找某字段的值大于某值;也可换成,表示要查找某字段的值大于某值;也可换成.该函数可输入多重查找条件.9.成员
8、函数modifyField()可修改某个字段的定义,会提示有3种修改方式,输入1或2或3进行选择.10.成员函数modifyRecord();可以修改记录的某字段的值,会提示用户输入想要修改的记录满足的条件,可输入多重查找条件,然后找到符合条件的记录后,会提示用户输入想要修改的字段名和字段新的值,如要想将字段id的值改为10,可根据提示输入id 10即可.11.成员函数removeRecord()会提示用户输入想要删除的记录满足的条件,就可将满足条件的记录删除.输出提示语:Delete success!表示删除成功.(2)根据实际设计要求 自行装配和调试,并能发现问题和解决问题。(3)编写设计
9、报告 写出设计与调试的全过程,附上有关资料和心得体会。第二章 设计简介及设计方案论述2.1对象数据Object Data通过将文字和数字数据附着到对象的方法,使用对象数据在地图中创建简单的数据库。 对象数据可以与任何对象(不只是块)协同工作,其功能远比块属性强大。 要使用对象数据,请首先定义该表的格式,然后在将对象数据附着到对象时再在表中创建相应记录。2.1.1使用对象数据使用对象数据表可以保存任何类型的信息,例如,管道的直径、交通流量或电源插座的成本。 可以存储批量大小、财产值或每位雇员桌面上计算机的品牌。可以运行基于表中信息的查询。 例如,如果将安装日期附着到炼油厂布局的每个进给阀上,日后
10、查询该图形时,则可以仅显示在某一日期之前安装的阀门。 还可以使用对象数据创建专题图,例如,根据安装日期更改阀门的颜色,或将所有已铺设的道路显示为实线,将所有沙石路显示为点划线。 对象数据可以将对象与其他应用程序中的文档相关联。 例如,一块土地的编号可以链接到土地记录文档、税收评估、扫描图像、照片或视频剪辑上。 用户可以选择一个对象并查看附着的文档。编辑附着了对象数据的对象的提示如果用户使用 BREAK 或 TRIM 命令编辑具有对象数据的对象,并将对象打断成多个部分,对象数据将只保留在包含初始对象起点的那个部分中。 当用户复制附着了对象数据的对象时,对象数据也同时被复制。 如果用户将带有对象数
11、据的对象置于块中,则对象数据会仍然附着在置于块中的此对象上。 可以选择“编辑对象数据”对话框中的“嵌套的数据”选项来访问对象数据。 2.1.2步骤1.实现对象数据库结构(字段)的定义与编辑2.记录的添加与编辑3.查询4.转换:object data txt.file object data excel/access 5.object data 和AutoCAD 的对象的链接,请研究xdata,xrecord第三章 详细设计3.1设计过程3.1.1理论依据本设计主要是为了巩固、加深面向对象程序设计的理解,让学生能够熟练运用面向对象思想来解决一些实际问题。同时也为了检验学生对面向对象程序设计这门课
12、的掌握程度,按照面向对象程序设计原理完成了此次课程设计。那么这里提供一个一个经过千锤百炼、可移植、提供源代码的C+库Boost库,是作为标准库的后备,是C+标准化进程的发动机之一。Boost库由C+标准委员会库工作组成员发起,在C+社区中影响甚大,其成员已近2000人。 Boost库为我们带来了最新、最酷、最实用的技术,是不折不扣的“准”标准库。Boost库本身功能强大,这里给出其中部分功能: 正则表达式,可以与POSIX API和Perl语言处理正则表达式的功能相媲美,而且还能支持各种字符类型(如char、wchar_t,甚至还可以是自定义字符类型); 多线程,想了很久的跨平台多线程库了;
13、数据结构“图”,再加上即将加入标准的hash_set、hash_map、hash_multiset、hash_multimap等等(事实上不少STL实作,如SGI STL,已经支持以上数据结构),C+对数据结构的支持已近完备; python,没错,对Python语言的支持; 智能指针,与std:auto_ptr一起善加使用,可杜绝内存泄露,效率更不可和垃圾收集机制GC同日而语; 更有循环冗余的CRC、可轻松定义返回多个值函数的元组tuple、可容纳不同类型值的any、对标准库各方面的补充 还在迅速扩大中,部分内容有望进入C+标准库本综合设计使用了其中一个通用的数据类型boost:any来实现存
14、放数据对象的表的类 DataTable。3.1.2 Boost:anyboost:any是一种通用的数据类型,可以将各种类型包装后统一放入容器内。最重要的它是类型安全的。有点象COM里面的variant.boost:any使用方法如下:any:type() 返回包装的类型any_cast可用于any到其他类型的转化 C+是强类型语言,所有强类型语言对型别的要求都是苛刻的,型别一有不合编译器就会抱怨说不能将某某型别转换为某某型别,当然如果在型别之间提供了转换操作符或是标准所允许的一定程度的隐式转换(如经过非explicit构造函数创建临时变量的隐式转换或是在int,long这些基本型别间的)又另
15、当别论。总的说来,为了保持型别安全,C+有严厉的要求。然而有时候程序员可能有这样的需要: 考虑这样的一个“泛型指针类”该如何设计是很有趣的事情。 1它本身不能是模板类,因为如果它是模板,你必须为它的具现化提供模板参数。而事实上你并不想这样做。你想让同一个对象接受任意型别的数据。在上面的代码中这个对象是anyVal。然而,如果你必须为它提供模板参数,那么上面的代码看起来就会像这样: 这显然已经丧失了anyVal的优势-以单个对象接受所有型别的数据。与其这样还不如直接写: 所以,any不能是模板类。 2它必须提供某些有关它所保存的对象型别的信息。 3. 它必须提供某种方法将它保存的数值“取出来”。
16、 事实上,Boost库已经提供了这样的类boost:any,下面我就为你讲述它的原理及构造。 。 其次,数据的存放之所是个问题,显然你不能将它保存在any类中,那会导致any类成为模板类,后者是明确不被允许的。数据应该动态存放,即动态分配一个数据的容器来存放数据,而any类中则保存指向这个容器的指针,明确地说,是指向这个容器的基类的指针,这是因为容器本身必须为模板,而any类中的指针成员又必须不是泛型的(因为any不能是泛型的,所以any中所有数据成员都不能是泛型的),所以,结论是:为容器准备一个非泛型的基类,而让指针指向该基类。 这虽然并非any的全部源代码,但是所有重要的思想已经表露无遗。
17、剩下的部分只是一些简单的细节,请参见boost库的原文件。 这将通过编译,且运行期通常竟然也不会出错,下面我为你解释为什么会这样。 boost:anyVal=i;其实将anyVal.content指针指向了一个holder对象(请回顾上面的代码)。然后any_cast(anyVal)实际上调用了any_cast针对指针的重载版本,并将anyVal的地址传递过去,也就是转到1处,因为调用的是any_cast,所以1处的代码被编译器特化为 但是前面说过,operand-content实际指向的是any:holder,所以这个static_cast是“非法”的,然而事实是:它能通过编译!原因很简单,
18、holder和holder都是placeholder的基类。将基类指针向派生类指针转换被认为是合法的。但这却酿成大错,因为表达式2的型别将因此被推导为double!原先holder只给int held;成员分配了sizeof(int)个字节的内存,而现在却要将int型的held当作double型来使用,也就是说使用sizeof(double)个字节内存。所以这就相当于: 使用typeinfo让我们有可能在运行时发现这种型别不符并及时抛出异常。但有个违反直观的事情是上面的那行错误的代码仍能通过编译,并且你也无法阻止它通过编译,因为holder和holder都是placeholder的基类。所以只
19、能期望程序员们清楚自己在做什么,要不然就给他个异常瞧瞧。 使用boost:any实现virtual template成员函数 如你所知,C+中没有提供virtual template function。然而有时候你的确会有这种需要,any可以一定程度上满足这种需要,例如, 这样的Accept函数能够接受任意类型的数据,并且是virtual函数 总之,Boost:Any的实现比较简单,Any拥有一个模版构造函数,这使它可以接受任何类型的对象。真正的变量内容被封装在嵌套类类型的成员变量中,并且在嵌套类中使用typeid来记录真正的类型信息。 1) any& swap(any& other);交换存
20、在两个 any 对象中的值。 2) any& operator=(const any& other);如果any实例非空,则丢弃所存放的值,并存入other值的拷贝。 3)template any& operator=(const ValueType& value);如果any实例非空,则丢弃所存放的值,并存入 value 的一份拷贝,value可以是任意符合any要求的类型。 4) bool empty() const;给出any实例当前是否有值,不管是什么值。因而,当any持有一个指针时,即使该指针值为空,则 empty也返回 false 。 5) const std:type_info&
21、 type() const;给出所存值的类型。如果 any 为空,则类型为 void. 6) any_cast()将any类型转化为真实的类型,如果是指针返回的可能是空指针,如果指针,则可能会抛出异常。第四章 设计结果及分析4.1运行结果程序实现结果与预期相符合,首先程序从所给的文件中读取数据:图4.1 运行程序 根据提示要输入要存储的数据名称和数据类型,输入存储的名称性别“sex” 和身高“hight” ,选择不继续输入:图4.2 运行程序输入所要存储的完整数据:图4.3 运行程序输入所要删除的数据名称:grade图4.4 运行程序选择3修改名称和数据类型并把性别“sex”修改为“score
22、”数据类型改为“double”:图4.5 运行程序修改所要存储的数据名称,首先查找所要修改的人员年龄(age=22),修改其成绩(score)为99分,程序运行如图4.6、4.7:图4.6 运行程序图4.7 运行程序删除id为32的信息,运行如图:图4.8 运行程序输入所要存储位置的文件名称:图4.8 运行程序运行结束。总 结在刚开始进行课程设计的时候,我非常兴奋,这是学校和老师给我一个运用和展现自己平常所学知识的一个千载难逢的机会。我非常感慨,因为我始终相信,这次机会像生命一样是一种奖赏。这生命,只盛开一季,却是我们在黑暗中跋涉万里,在寂寞中挣扎千年所得,它凝结了我们的渴求与努力,绚烂而短暂
23、,是燃烧的热情,也是焚灭的美丽。因此。我非常珍惜这次百年不遇的良机。在设计过程中,我非常狂热的投入其中,努力地去发现并解决问题。努力完成任务的理智在我脑海中形成强烈的自豪感,我体内跳动的热血像英雄在战场上豪情不灭的壮举。也许,那永生的天神在漠不可知的天空,用刻苦的羡慕看着我,希图获得如我一样的机会来淀放,哪怕只要一瞬。于是我用我的思想,我的灵魂,我的一切去尽情地展现着热火,尽情燃烧着风华。在设计过程中,我非常狂热的投入其中,努力地去发现并解决问题。努力完成任务的理智在我脑海中形成强烈的自豪感,我体内跳动的热血像英雄在战场上豪情不灭的壮举。经过努力地探索,在同学和老师的帮助下,我终于成功的完成了
24、此次课程设计。细细数来,在这次课程设计的过程中,我的收获还是很大的,首先一点就是我在此次试验中认识到了自己在编程能力上的不足,尤其是在刚开始阶段是的时候,我感到非常的棘手,完全无从下手,尽管后来通过查找资料渐渐懂得了一些眉目,但是还是说明了自己在编程上的不足,知识面不广,等等一些缺点。所以说我的目标就是在今后的学习当中努力去克服这些缺点。只有这样才能为今后的工作打下坚实的基础,同时也是完善自我的表现。同时令人感到欣慰的是在本次课程设计当中我们充分体现了团队合作的重要性。此次试验中我们同学之间互相帮助,谁有不懂得地方可以相互进行讯问,可以说这次课程设计同学们给了我很大的帮助。当然老师给我的帮助也
25、是很大的,当有问题同学们无法弄清楚的时候我们通过请教老师,最终得到了自己想要的结果,这才使得我的实验能够顺利地完成。总之这次实验我的收获非常大,既认识到了自己编程能力的不足,也增进了与同学之间的交流,与老师之间的交流。经过这次试验,使我的热血在不断地燃烧,燃烧成一朵绚烂的夏花,这便是我如火的生命;使我的精神和理念提醒我应该努力地追求罂栗之颜色,火之热情,酒之沉醉,星辰之明亮。体 会通过软件的综合设计和加以探讨,我有很多收获。它让我认识到宇宙的的本质,每当看着那些程序代码,就仿佛看着无法预知的星空,隐藏着无穷的奥妙。软件设计的瞬息万变犹如天地万物的变化多端程序。按照人们的所求,设计各种各样的功能
26、以实现目标,满足人们的需求。其作用之强大、应用之广泛犹如宇宙的生生不息。于是我敲着键盘,让电脑再度在我记忆中活现中。我所在的城市(武汉)有一条江,江上盛开的,是世上最灿烂的云霞,我也想让我手上的键盘盛开同样的绚烂。我要用自己的方式,自己的梦幻般的思想,编写有着魔法一样的代码构造一个神奇瑰丽、恢宏恣肆的水晶宫殿。让我的朋友,我的视野都快乐徜徉于这非非妙境,而我独自蜗居在殿顶的阁楼上,享受造物主的快乐。这次课程设计,使我深刻的认识到生命不要蜷居在蝇营狗窝中,不要糜烂在无所事是里。它一定要妖艳绝代,循着独我的轨迹,一直滑到星星的光辉里,将那沉沉的天幕灼上永恒的烙印。它能够让我看到更大的光明与自由,能
27、够让我回忆起那膜拜的虔诚,能够成为我需要的那道光芒,火热地涤洗我慵懒的灵魂。于是我选择这次课程设计来作为我远大的理想的起步点。这是暮阳还是朝日我分辨不清,我只需要这一束光,照亮最深邃处尚蜷缩的灵魂之躯。我要的是最极限的想象,以及最狂野的情绪。大河奔流,我持剑而舞,剑锋染满层层飘起的雾渫。我需要醉醒后最惨烈的放纵,要在云霞中游移,写出最令人震撼的文章,飞扬出层峦般的鳞角,一奋而裂六龙之高标,再奋而催藐故射之山。我始终疑惑从程序代码中看到的并不是虚幻世界,而是星光。通过这次课的设计和探索后,我便微妙的感觉到武汉的上空仅有的依稀星光。这星光或者能引动我恒而久远的血脉中的记忆,那就更像极了我的程序代码
28、,不管它是天地万物也好,宇宙的生生不息也好,江湖奇幻般的旅程也好,我总要尽力使它熠熠闪耀着,就如这千年不变的星火一般,垂照我固执着不肯醒来的灵魂。致 谢在这次课程设计中,老师亲自给我指导,给我指明了前进的道路。同时,同学们也给我很多帮助。我非常感动,在此,我由衷地感谢他们的细心照顾和指点。参考文献1朱站立. 数据结构 使用C语言M. 西安:西安交通大学出版社2殷人昆. 数据结构 用面向对象方法描述M. 北京:清华大学出版社3严蔚敏. 数据结构M. 北京:清华大学出版社4Donald Knuth. The Art of Computer Programming. Vol.1: Fundamental Algorithms,Vol.3: Sorting and SearchingM.5Bjarne Stroustrup. The C+ Programming LanguageM. Prentice Hall.6王红梅. 数据结构 C+描述M. 北京:清华大学出版社7应用软件综合设计参考教材曹渠江等编2004.98信息系统开发案例(第四辑)张基温 曹渠江清华大学出版社2003-09-019软件项目管理 王克仁 陈允明 陈养正, 科学出版社 2002-10-1代码#include stdafx.h#include