应用软件综合设计多用途数据对象类的设计_第1页
应用软件综合设计多用途数据对象类的设计_第2页
应用软件综合设计多用途数据对象类的设计_第3页
应用软件综合设计多用途数据对象类的设计_第4页
应用软件综合设计多用途数据对象类的设计_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

1、武汉工程大学 计算机科学与工程学院综合设计报告设计名称:设计名称: 应用软件综合设计应用软件综合设计 设计题目:设计题目: 多用途数据对象类的设计多用途数据对象类的设计 学生学号:学生学号: 专业班级:专业班级: 学生姓名:学生姓名: 学生成绩:学生成绩: 指导教师(职称):指导教师(职称): 课题工作时间:课题工作时间: 2009 年年 9 月月 14 日日 至至 2009 年年 9 月月 25 日日说明:1、报告中的第一、二、三项由指导教师在综合设计开始前填写并发给每个学生;四、五两项(中英文摘要)由学生在完成综合设计后填写。2、学生成绩由指导教师根据学生的设计情况给出各项分值及总评成绩。

2、3、指导教师评语一栏由指导教师就学生在整个设计期间的平时表现、设计完成情况、报告的质量及答辩情况,给出客观、全面的评价。4、所有学生必须参加综合设计的答辩环节,凡不参加答辩者,其成绩一律按不及格处理。答辩小组成员应由 2 人及以上教师组成。5、报告正文字数一般应不少于 5000 字,也可由指导教师根据本门综合设计的情况另行规定。6、平时表现成绩低于 6 分的学生,其综合设计成绩按不及格处理。7、此表格式为武汉工程大学计算机科学与工程学院提供的基本格式(适用于学院各类综合设计) ,各教研室可根据本门综合设计的特点及内容做适当的调整,并上报学院批准。成绩评定表学生姓名: 学号: 班级: 类别合计分

3、值各项分值评分标准实际得分合计得分备注平时表现1010按时参加综合设计,无旷课、迟到、早退、违反实验室纪律等情况。20按设计任务书的要求完成了全部任务,能完整演示其设计内容,符合要求。完成情况3010能对其设计内容进行详细、完整的介绍,并能就指导教师提出的问题进行正确的回答。10报告文字通顺,内容翔实,论述充分、完整,立论正确,结构严谨合理;报告字数符合相关要求,工整规范,整齐划一。5课题背景介绍清楚,综述分析充分。5设计方案合理、可行,论证严谨,逻辑性强,具有说服力。5符号统一;图表完备、符合规范要求。5能对整个设计过程进行全面的总结,得出有价值的结论或结果。报告质量355参考文献数量在 3

4、 篇以上,格式符合要求,在正文中正确引用。10在规定时间内能就所设计的内容进行阐述,言简意明,重点突出,论点正确,条理清晰。答辩情况2515在规定时间内能准确、完整、流利地回答教师所提出的问题。总评成绩: 分 补充说明: 指导教师: 刘军 (签字)日 期: 2008 年 1 月 19 日答辩记录表学生姓名: 学号: 班级: 答辩地点: 答辩内容记录:合计分值各项分值评分标准实际得分合计得分备注答辩成绩2510在规定时间内能就所设计的内容进行阐述,言简意明,重点突出,论点正确,条理清晰。15在规定时间内能准确、完整、流利地回答教师所提出的问题。答辩小组成员(签字): 2009 年 9 月 25

5、日指导教师评语指导教师: (签字)日 期: 年 月 日一、综合设计目的、条件、任务和内容要求:课题目的:为了巩固、加深面向对象程序设计的理解,并在此基础上能够从实际问题出发设计编制一个中小型应用系统;能够熟练运用面向对象思想来解决一些实际问题。同时也为了检验学生对面向对象程序设计这门课的掌握程度,按照面向对象程序设计原理完成了此次课程设计。课题条件:已掌握向对象程序设计的基本方法、一台装有 windows95,windows nt 4.0 或更高的操作系统和某种高级语言开发环境(例如 vc+)的 pc 机。课题任务:利用某种高级语言(例如 vc+)设计开发一个多用途数据对象类的设计,以加深对面

6、向对象和模板原理的理解,掌握基于模板的程序设计的实现方法和技术。课题内容要求:(1)该项目主要功能有:1.建立一个存放数据对象的表的类 datatable,数据对象的属性字段的类型可以是int,string,float,double 和 char 这五种类型,其中数据对象的各个属性字段的定义存放于类 datatable 的私有数据成员 ve 中;数据对象的记录存放于私有数据成员 lis 中.2.成员函数 insertfield()可实现增加数据对象的属性字段,包括字段名和字段类型;3.成员函数 insertrecoed()可实现增加数据对象的记录.4.成员函数 readfieldrecord(

7、);可由文件 data.txt 中读取记录,保存在 ve,和 lis 中.5.成员函数 outtofile()可将 ve 和 lis 中的相关记录保存到输出文件中,文件名由用户指定,但是,用户提供文件名时一定要连文件扩展名一起提供.6.成员函数 outallrecord();将数据对象的各属性和记录值一起输出到控制台.7.成员函数 removefield();会提示用户输入你想删除的字段名,就可以删除该字段名,字段类型,以及各个记录中该字段的值.8.成员函数 searchrecord();可以查找记录,会提示用户输入查找条件,注意输入条件的格式,比如想查找字段 name 值为 5 的记录,就要

8、写 name = 5 作为查找条件,在 name 与=之间要有空格间隔,=与 5 之间也要有空格间隔;=可换成!=表示查找某字段不等于某值;或换成,表示要查找某字段的值大于某值;也可换成,表示要查找某字段的值大于某值;也可换成.该函数可输入多重查找条件.9.成员函数 modifyfield()可修改某个字段的定义,会提示有 3 种修改方式,输入 1或 2 或 3 进行选择.10.成员函数 modifyrecord();可以修改记录的某字段的值,会提示用户输入想要修改的记录满足的条件,可输入多重查找条件,然后找到符合条件的记录后,会提示用户输入想要修改的字段名和字段新的值,如要想将字段 id 的

9、值改为 10,可根据提示输入 id 10 即可.11.成员函数 removerecord()会提示用户输入想要删除的记录满足的条件,就可将满足条件的记录删除.输出提示语:delete success!表示删除成功.(2)根据实际设计要求 自行装配和调试,并能发现问题和解决问题。(3)编写设计报告 写出设计与调试的全过程,附上有关资料和心得体会。第二章第二章 设计简介及设计方案论述设计简介及设计方案论述2.1 对象数据对象数据 object data通过将文字和数字数据附着到对象的方法,使用对象数据在地图中创建简单的数据库。 对象数据可以与任何对象(不只是块)协同工作,其功能远比块属性强大。 要

10、使用对象数据,请首先定义该表的格式,然后在将对象数据附着到对象时再在表中创建相应记录。2.1.1 使用对象数据使用对象数据使用对象数据表可以保存任何类型的信息,例如,管道的直径、交通流量或电源插座的成本。 可以存储批量大小、财产值或每位雇员桌面上计算机的品牌。可以运行基于表中信息的查询。 例如,如果将安装日期附着到炼油厂布局的每个进给阀上,日后查询该图形时,则可以仅显示在某一日期之前安装的阀门。 还可以使用对象数据创建专题图,例如,根据安装日期更改阀门的颜色,或将所有已铺设的道路显示为实线,将所有沙石路显示为点划线。 对象数据可以将对象与其他应用程序中的文档相关联。 例如,一块土地的编号可以链

11、接到土地记录文档、税收评估、扫描图像、照片或视频剪辑上。 用户可以选择一个对象并查看附着的文档。编辑附着了对象数据的对象的提示如果用户使用 break 或 trim 命令编辑具有对象数据的对象,并将对象打断成多个部分,对象数据将只保留在包含初始对象起点的那个部分中。 当用户复制附着了对象数据的对象时,对象数据也同时被复制。 如果用户将带有对象数据的对象置于块中,则对象数据会仍然附着在置于块中的此对象上。 可以选择“编辑对象数据”对话框中的“嵌套的数据”选项来访问对象数据。 2.1.2 步骤步骤1.实现对象数据库结构(字段)的定义与编辑2.记录的添加与编辑3.查询4.转换:object data

12、 txt.file object data excel/access 5.object data 和 autocad 的对象的链接,请研究 xdata,xrecord第三章第三章 详细设计详细设计3.1 设计过程设计过程3.1.1 理论依据理论依据本设计主要是为了巩固、加深面向对象程序设计的理解,让学生能够熟练运用面向对象思想来解决一些实际问题。同时也为了检验学生对面向对象程序设计这门课的掌握程度,按照面向对象程序设计原理完成了此次课程设计。那么这里提供一个一个经过千锤百炼、可移植、提供源代码的 c+库boost 库,是作为标准库的后备,是c+标准化进程的发动机之一。boost 库由 c+标准

13、委员会库工作组成员发起,在 c+社区中影响甚大,其成员已近 2000 人。 boost 库为我们带来了最新、最酷、最实用的技术,是不折不扣的“准”标准库。boost 库本身功能强大,这里给出其中部分功能:正则表达式,可以与 posix api 和 perl 语言处理正则表达式的功能相媲美,而且还能支持各种字符类型(如 char、wchar_t,甚至还可以是自定义字符类型); 多线程,想了很久的跨平台多线程库了; 数据结构“图”,再加上即将加入标准的hash_set、hash_map、hash_multiset、hash_multimap 等等(事实上不少 stl 实作,如 sgi stl,已经

14、支持以上数据结构),c+对数据结构的支持已近完备; python,没错,对 python 语言的支持; 智能指针,与 std:auto_ptr 一起善加使用,可杜绝内存泄露,效率更不可和垃圾收集机制 gc 同日而语; 更有循环冗余的 crc、可轻松定义返回多个值函数的元组 tuple、可容纳不同类型值的 any、对标准库各方面的补充 还在迅速扩大中,部分内容有望进入 c+标准库本综合设计使用了其中一个通用的数据类型 boost:any 来实现存放数据对象的表的类 datatable。3.1.2 boost:anyboost:any 是一种通用的数据类型,可以将各种类型包装后统一放入容器内。最重

15、要的它是类型安全的。有点象 com 里面的 variant.boost:any 使用方法如下:any:type() 返回包装的类型any_cast 可用于 any 到其他类型的转化 c+是强类型语言,所有强类型语言对型别的要求都是苛刻的,型别一有不合编译器就会抱怨说不能将某某型别转换为某某型别,当然如果在型别之间提供了转换操作符或是标准所允许的一定程度的隐式转换(如经过非 explicit 构造函数创建临时变量的隐式转换或是在 int,long 这些基本型别间的)又另当别论。总的说来,为了保持型别安全,c+有严厉的要求。然而有时候程序员可能有这样的需要: 考虑这样的一个“泛型指针类”该如何设计

16、是很有趣的事情。 1它本身不能是模板类,因为如果它是模板,你必须为它的具现化提供模板参数。而事实上你并不想这样做。你想让同一个对象接受任意型别的数据。在上面的代码中这个对象是 anyval。然而,如果你必须为它提供模板参数,那么上面的代码看起来就会像这样: 这显然已经丧失了 anyval 的优势-以单个对象接受所有型别的数据。与其这样还不如直接写: 所以,any 不能是模板类。 2它必须提供某些有关它所保存的对象型别的信息。 3. 它必须提供某种方法将它保存的数值“取出来”。 事实上,boost 库已经提供了这样的类 boost:any,下面我就为你讲述它的原理及构造。 。 其次,数据的存放之

17、所是个问题,显然你不能将它保存在 any 类中,那会导致 any类成为模板类,后者是明确不被允许的。数据应该动态存放,即动态分配一个数据的容器来存放数据,而 any 类中则保存指向这个容器的指针,明确地说,是指向这个容器的基类的指针,这是因为容器本身必须为模板,而 any 类中的指针成员又必须不是泛型的(因为 any 不能是泛型的,所以 any 中所有数据成员都不能是泛型的),所以,结论是:为容器准备一个非泛型的基类,而让指针指向该基类。 这虽然并非 any 的全部源代码,但是所有重要的思想已经表露无遗。剩下的部分只是一些简单的细节,请参见 boost 库的原文件。 这将通过编译,且运行期通常

18、竟然也不会出错,下面我为你解释为什么会这样。 boost:anyval=i;其实将 anyval.content 指针指向了一个 holder 对象(请回顾上面的代码)。然后 any_cast(anyval)实际上调用了 any_cast针对指针的重载版本,并将 anyval 的地址传递过去,也就是转到 1 处,因为调用的是 any_cast,所以 1 处的代码被编译器特化为 但是前面说过,operand-content 实际指向的是 any:holder,所以这个static_cast是“非法”的,然而事实是:它能通过编译!原因很简单,holder 和holder 都是 placeholde

19、r 的基类。将基类指针向派生类指针转换被认为是合法的。但这却酿成大错,因为表达式 2 的型别将因此被推导为 double!原先 holder 只给 int held;成员分配了 sizeof(int)个字节的内存,而现在却要将 int 型的 held 当作double 型来使用,也就是说使用 sizeof(double)个字节内存。所以这就相当于: 使用 typeinfo 让我们有可能在运行时发现这种型别不符并及时抛出异常。但有个违反直观的事情是上面的那行错误的代码仍能通过编译,并且你也无法阻止它通过编译,因为 holder 和 holder 都是 placeholder 的基类。所以只能期望

20、程序员们清楚自己在做什么,要不然就给他个异常瞧瞧。 使用 boost:any 实现 virtual template 成员函数 如你所知,c+中没有提供 virtual template function。然而有时候你的确会有这种需要,any 可以一定程度上满足这种需要,例如, 这样的 accept 函数能够接受任意类型的数据,并且是 virtual 函数 总之,boost:any 的实现比较简单,any 拥有一个模版构造函数,这使它可以接受任何类型的对象。真正的变量内容被封装在嵌套类类型的成员变量中,并且在嵌套类中使用 typeid 来记录真正的类型信息。 1) any& swap(

21、any& other);交换存在两个 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 持有一个指针时,即使该

22、指针值为空,则 empty 也返回 false 。 5) const std:type_info& type() const;给出所存值的类型。如果 any 为空,则类型为 void. 6) any_cast()将 any 类型转化为真实的类型,如果是指针返回的可能是空指针,如果指针,则可能会抛出异常。第四章第四章 设计结果及分析设计结果及分析4.1 运行结果运行结果程序实现结果与预期相符合,首先程序从所给的文件中读取数据:图图 4.1 运行程序运行程序 根据提示要输入要存储的数据名称和数据类型,输入存储的名称性别“sex” 和身高“hight” ,选择不继续输入:图图 4.2 运行程

23、序运行程序输入所要存储的完整数据:图图 4.3 运行程序运行程序输入所要删除的数据名称:grade图图 4.4 运行程序运行程序选择 3 修改名称和数据类型并把性别“sex”修改为“score”数据类型改为“double”:图图 4.5 运行程序运行程序修改所要存储的数据名称,首先查找所要修改的人员年龄(age=22) ,修改其成绩(score)为 99 分,程序运行如图 4.6、4.7:图图 4.6 运行程序运行程序图图 4.7 运行程序运行程序删除 id 为 32 的信息,运行如图:图图 4.8 运行程序运行程序输入所要存储位置的文件名称:图图 4.8 运行程序运行程序运行结束。总总 结结

24、在刚开始进行课程设计的时候,我非常兴奋,这是学校和老师给我一个运用和展现自己平常所学知识的一个千载难逢的机会。我非常感慨,因为我始终相信,这次机会像生命一样是一种奖赏。这生命,只盛开一季,却是我们在黑暗中跋涉万里,在寂寞中挣扎千年所得,它凝结了我们的渴求与努力,绚烂而短暂,是燃烧的热情,也是焚灭的美丽。因此。我非常珍惜这次百年不遇的良机。在设计过程中,我非常狂热的投入其中,努力地去发现并解决问题。努力完成任务的理智在我脑海中形成强烈的自豪感,我体内跳动的热血像英雄在战场上豪情不灭的壮举。也许,那永生的天神在漠不可知的天空,用刻苦的羡慕看着我,希图获得如我一样的机会来淀放,哪怕只要一瞬。于是我用

25、我的思想,我的灵魂,我的一切去尽情地展现着热火,尽情燃烧着风华。在设计过程中,我非常狂热的投入其中,努力地去发现并解决问题。努力完成任务的理智在我脑海中形成强烈的自豪感,我体内跳动的热血像英雄在战场上豪情不灭的壮举。经过努力地探索,在同学和老师的帮助下,我终于成功的完成了此次课程设计。细细数来,在这次课程设计的过程中,我的收获还是很大的,首先一点就是我在此次试验中认识到了自己在编程能力上的不足,尤其是在刚开始阶段是的时候,我感到非常的棘手,完全无从下手,尽管后来通过查找资料渐渐懂得了一些眉目,但是还是说明了自己在编程上的不足,知识面不广,等等一些缺点。所以说我的目标就是在今后的学习当中努力去克

26、服这些缺点。只有这样才能为今后的工作打下坚实的基础,同时也是完善自我的表现。同时令人感到欣慰的是在本次课程设计当中我们充分体现了团队合作的重要性。此次试验中我们同学之间互相帮助,谁有不懂得地方可以相互进行讯问,可以说这次课程设计同学们给了我很大的帮助。当然老师给我的帮助也是很大的,当有问题同学们无法弄清楚的时候我们通过请教老师,最终得到了自己想要的结果,这才使得我的实验能够顺利地完成。总之这次实验我的收获非常大,既认识到了自己编程能力的不足,也增进了与同学之间的交流,与老师之间的交流。经过这次试验,使我的热血在不断地燃烧,燃烧成一朵绚烂的夏花,这便是我如火的生命;使我的精神和理念提醒我应该努力

27、地追求罂栗之颜色,火之热情,酒之沉醉,星辰之明亮。体体 会会通过软件的综合设计和加以探讨,我有很多收获。它让我认识到宇宙的的本质,每当看着那些程序代码,就仿佛看着无法预知的星空,隐藏着无穷的奥妙。软件设计的瞬息万变犹如天地万物的变化多端程序。按照人们的所求,设计各种各样的功能以实现目标,满足人们的需求。其作用之强大、应用之广泛犹如宇宙的生生不息。于是我敲着键盘,让电脑再度在我记忆中活现中。我所在的城市(武汉)有一条江,江上盛开的,是世上最灿烂的云霞,我也想让我手上的键盘盛开同样的绚烂。我要用自己的方式,自己的梦幻般的思想,编写有着魔法一样的代码构造一个神奇瑰丽、恢宏恣肆的水晶宫殿。让我的朋友,

28、我的视野都快乐徜徉于这非非妙境,而我独自蜗居在殿顶的阁楼上,享受造物主的快乐。这次课程设计,使我深刻的认识到生命不要蜷居在蝇营狗窝中,不要糜烂在无所事是里。它一定要妖艳绝代,循着独我的轨迹,一直滑到星星的光辉里,将那沉沉的天幕灼上永恒的烙印。它能够让我看到更大的光明与自由,能够让我回忆起那膜拜的虔诚,能够成为我需要的那道光芒,火热地涤洗我慵懒的灵魂。于是我选择这次课程设计来作为我远大的理想的起步点。这是暮阳还是朝日我分辨不清,我只需要这一束光,照亮最深邃处尚蜷缩的灵魂之躯。我要的是最极限的想象,以及最狂野的情绪。大河奔流,我持剑而舞,剑锋染满层层飘起的雾渫。我需要醉醒后最惨烈的放纵,要在云霞中

29、游移,写出最令人震撼的文章,飞扬出层峦般的鳞角,一奋而裂六龙之高标,再奋而催藐故射之山。我始终疑惑从程序代码中看到的并不是虚幻世界,而是星光。通过这次课的设计和探索后,我便微妙的感觉到武汉的上空仅有的依稀星光。这星光或者能引动我恒而久远的血脉中的记忆,那就更像极了我的程序代码,不管它是天地万物也好,宇宙的生生不息也好,江湖奇幻般的旅程也好,我总要尽力使它熠熠闪耀着,就如这千年不变的星火一般,垂照我固执着不肯醒来的灵魂。致致 谢谢在这次课程设计中,老师亲自给我指导,给我指明了前进的道路。同时,同学们也给我很多帮助。我非常感动,在此,我由衷地感谢他们的细心照顾和指点。参考文献参考文献1朱站立. 数

30、据结构 使用 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应用软件综合设计参考教材曹渠江等编

31、2004.98信息系统开发案例(第四辑) 张基温 曹渠江清华大学出版社 2003-09-019软件项目管理 王克仁 陈允明 陈养正, 科学出版社 2002-10-1代码代码#include stdafx.h#include#include #include#include#include #include #include using namespace std;using namespace boost;using boost :any_cast;stringstream st;class fieldpublic: field(string name,string type)mname=na

32、me;mtype=type;string mname;string mtype;class datatablevector ve;listvector lis;vector vli;public:datatable()datatable()if(!ve.empty() ve.clear();if (!vli.empty() vli.clear();if(!lis.empty() lis.clear();int readfieldrecord();void outtofile(); void insertfield();void insertrecoed();void outallrecord(

33、);void removefield();void removerecord();int searchrecord();void modifyrecord();void modifyfield();void defaultany(string & type,any & aa)int i=0;string s= ;double d=0.0;float f=0.0;char c= ; if(type=int) aa=i; else if(type=float)aa=f; else if(type=double) aa=d; else if(type=char)aa=c; else

34、if(type=string)aa=s; else coutthe type was error!i; a=i; else if(type=float)cinf; a=f; else if(type=double) cind; a=d; else if(type=char)cinc;a=c; else if(type=string)cins;a=s; else coutthe type was error!i; a=i;else if(type=float)stf; a=f;else if(type=double) std; a=d;else if(type=char)stc;a=c;else

35、 if(type=string)sts;a=s;else coutthe type was error!endl;int datatable: readfieldrecord() int p=0;int ff=0;string name;string type;any aa;vector:iterator vi;vectorva;vector:iterator vai;list vector :iterator listi;ifstream infile;int flag=0;infile.open(data.txt);infile.clear();if(!infile)coutlllllll

36、endl;cerrunable to open input file:copy.txt-bailing out!n;return -1;char ch;while (infile.get(ch) if (ch!= &ch!=n&ch!=&ch!=*) st.put(ch); else if(ch=*) return 0;else if(ch=) flag=1; infile.get(ch);else if(ch= ) if(flag=0) name=st.str();else if(flag =1)vi=ve.begin()+ff;cinanystr(*vi).mtyp

37、e,aa);va.push_back(aa);ff+;st.clear();st.str( );else if(ch=n)if(flag=0) type=st.str();field pro(name,type);ve.push_back(pro);else if (flag=1) vi=ve.begin()+ff;cinanystr(*vi).mtype,aa);va.push_back(aa);lis.push_back(va);va.clear();ff=0;st.clear();st.str( );infile.close();infile.clear();return 0;void

38、printlistany(const any &val)if (val.type() = typeid(int)coutany_cast(val);else if (val.type() = typeid(string)coutany_cast(val);else if (val.type() = typeid(double)coutany_cast(val);else if (val.type() = typeid(float)coutany_cast(val);else if (val.type() = typeid(char)coutany_cast(val); coutt;bo

39、ol compareany(string type,string compare,any va,any aa)if(type=int) if(compare=) return( any_cast(va)=any_cast(aa) ); else if(compare=!=) return(any_cast(va)!=any_cast(aa); else if(compare=) return(any_cast(va)any_cast(aa); else if(compare=) return(any_cast(va)any_cast(aa); else coutinput error comp

40、are condition!endl; return false; if(type=float) if(compare=) return(any_cast(va)=any_cast(aa); else if(compare=!=) return(any_cast(va)!=any_cast(aa); else if(compare=) return(any_cast(va)any_cast(aa); else if(compare=) return(any_cast(va)any_cast(aa);else coutinput error compare condition!endl; ret

41、urn false; if(type=double) if(compare=) return(any_cast(va)=any_cast(aa); else if(compare=!=) return(any_cast(va)!=any_cast(aa); else if(compare=) return(any_cast(va)any_cast(aa); else if(compare=) return(any_cast(va)any_cast(aa); else coutinput error compare condition!endl; return false; if(type=st

42、ring) if(compare=) return(any_cast(va)=any_cast(aa); else if(compare=!=) return(any_cast(va)!=any_cast(aa); else if(compare=) return(any_cast(va)any_cast(aa); else if(compare=) return(any_cast(va)any_cast(aa); else coutinput error compare condition!endl; return false; if(type=char) if(compare=) retu

43、rn(any_cast(va)=any_cast(aa); else if(compare=!=) return(any_cast(va)!=any_cast(aa); else if(compare=) return(any_cast(va)any_cast(aa); else if(compare=) return(any_cast(va)any_cast(aa); else coutinput error compare condition!endl; return false; void datatable: insertfield() any aa;string name;strin

44、g type;string judge;listvector :iterator listi;docoutinput the fields name and type you want to insert:nametype;field pp(name,type);ve.push_back(pp); if(lis.empty()=0) for (listi=lis.begin();listi!=lis.end();listi+) defaultany(type,aa);(*listi).push_back(aa);coutcontinue?judge;while(judge=y|judge=y)

45、;coutendl;void datatable: insertrecoed() any aa;vectorva;vector:iterator vi;string judge;coutinput the records value you want to insert:endl;do for(vi=ve.begin();vi!=ve.end();vi+) cout(*vi).mnamet; coutendl;for (vi=ve.begin();vi!=ve.end();vi+) cinany(*vi).mtype,aa);va.push_back(aa);lis.push_back(va)

46、;va.clear();coutcontinue?judge; while(judge=y|judge=y);coutendl;void datatable: outallrecord()vector:iterator vi;vector:iterator vai;listvector :iterator listi;coutall records information :endl;for (vi=ve.begin();vi!=ve.end();vi+) cout(*vi).mnamet ;cout endl;for(listi=lis.begin();listi!=lis.end();li

47、sti+)for (vai=(*listi).begin();vai!=(*listi).end();vai+) printlistany(*vai);coutendl;coutendl;void datatable: removefield()string s;int i;vector:iterator vi;vector:iterator vai;listvector :iterator listi;coutinput the name of field you want to delete:s;for (vi=ve.begin();vi!=ve.end();vi+) if (*vi).m

48、name=s) break;if(vi=ve.end() coutn cant find the field! sendl;else i=vi-ve.begin(); ve.erase(vi); for (listi=lis.begin();listi!=lis.end();listi+) vai=(*listi).begin()+i; (*listi).erase(vai); int datatable: searchrecord()vli.clear();any aa;string name;string condition;vector:iterator vi;vector:iterat

49、or vai;listvector :iterator listi;vector:iterator vliit;int hang;int flag=0;string judge;int i=0;string type;docout, fieldvalue:namecondition;for(vi=ve.begin();vi!=ve.end();vi+) if(*vi).mname=name)cinany(*vi).mtype,aa);break;if(vi=ve.end()coutinput error field name!0) for (vliit=vli.begin(),listi=li

50、s.begin();vliit!=vli.end();vliit+,listi=lis.begin() for(int j=0;j(*vliit);i+) listi+; vai=(*listi).begin()+i; if(!compareany(type,condition,*vai, aa) vli.erase(vliit); coutcontinue input restrict condition? y/njudge;flag+; while(judge=y|judge=y);if(vli.empty()=1) coutcant find the records according

51、to your conditions! nendl;elsecoutthe record according to condition:endl; for (vi=ve.begin();vi!=ve.end();vi+) cout(*vi).mnamet; coutendl; for (vliit=vli.begin(),listi=lis.begin();vliit!=vli.end();vliit+,listi=lis.begin() for (int n=0;n(*vliit);n+) listi+; for (vai=(*listi).begin();vai!=(*listi).end

52、();vai+) printlistany(*vai); coutendl; void datatable: removerecord()vli.clear(); vector :iterator vliit;listvector :iterator listi;coutif you want delete some records,please:endl;searchrecord();for(vliit=vli.begin(),listi=lis.begin();vliit!=vli.end();vliit+,listi=lis.begin()for(int i=0;i0) coutdele

53、te success! nendl;void datatable: modifyrecord()vli.clear();vector :iterator vliit;listvector :iterator listi;string name;any aa;int i;vector :iterator vi;vector:iterator vai;coutif you want modify some records,please:endl;searchrecord();coutinput the field name and this fieldnew value:name;for (vi=

54、ve.begin();vi!=ve.end();vi+) if(*vi).mname=name) cinany(*vi).mtype,aa); break;if(vi=ve.end() coutinput error field name!endl;elsei=vi-ve.begin();for (vliit=vli.begin(),listi=lis.begin();vliit!=vli.end();vliit+,listi=lis.begin() for(int j=0;j(*vliit);j+) listi+;vai=(*listi).begin()+i; (*vai)=aa;void

55、datatable: outtofile()string filename;ofstream outfile;outfile.clear();coutinput the outfile name:filename; outfile.open(filename.c_str();outfile.clear();vector:iterator vi;vector:iterator vai;listvector :iterator listi;int i;string s;double d;float f;char c; for (vi=ve.begin();vi!=ve.end();vi+) out

56、file(*vi).mname (*vi).mtypeendl;outfileendl;for(listi=lis.begin();listi!=lis.end();listi+)for (vai=(*listi).begin();vai!=(*listi).end()-1;vai+) if (*vai).type() = typeid(int)i=any_cast(*vai);outfilei;else if (*vai).type() = typeid(string)s=any_cast(*vai);outfiles;else if (*vai).type() = typeid(doubl

57、e)d=any_cast(*vai);outfiled;else if (*vai).type() = typeid(float)f=any_cast(*vai);outfilef;else if (*vai).type() = typeid(char)c=any_cast(*vai);outfilec;outfile ;if (vai=(*listi).end()-1) if (*vai).type() = typeid(int)i=any_cast(*vai);outfilei;else if (*vai).type() = typeid(string)s=any_cast(*vai);outfiles;else if (*v

温馨提示

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

评论

0/150

提交评论