版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、武汉工程大学 计算机科学与工程学院 综合设计报告 设计名称:设计名称: 应用软件综合设计应用软件综合设计 设计题目:设计题目: 多用途数据对象类的设计多用途数据对象类的设计 学生学号:学生学号: 专业班级:专业班级: 学生姓名:学生姓名: 学生成绩:学生成绩: 指导教师(职称):指导教师(职称): 课题工作时间:课题工作时间: 2009 年年 9 月月 14 日日 至至 2009 年年 9 月月 25 日日 说明: 1、报告中的第一、二、三项由指导教师在综合设计开始前填写并发给每 个学生;四、五两项(中英文摘要)由学生在完成综合设计后填写。 2、学生成绩由指导教师根据学生的设计情况给出各项分值
2、及总评成绩。 3、指导教师评语一栏由指导教师就学生在整个设计期间的平时表现、设 计完成情况、报告的质量及答辩情况,给出客观、全面的评价。 4、所有学生必须参加综合设计的答辩环节,凡不参加答辩者,其成绩一 律按不及格处理。答辩小组成员应由 2 人及以上教师组成。 5、报告正文字数一般应不少于 5000 字,也可由指导教师根据本门综合设 计的情况另行规定。 6、平时表现成绩低于 6 分的学生,其综合设计成绩按不及格处理。 7、此表格式为武汉工程大学计算机科学与工程学院提供的基本格式(适 用于学院各类综合设计) ,各教研室可根据本门综合设计的特点及内容 做适当的调整,并上报学院批准。 成绩评定表 学
3、生姓名: 学号: 班级: 类别 合计 分值 各项 分值 评分标准 实际 得分 合计 得分 备注 平时 表现 1010 按时参加综合设计,无旷课、迟 到、早退、违反实验室纪律等情 况。 20 按设计任务书的要求完成了全部 任务,能完整演示其设计内容, 符合要求。 完成 情况 30 10 能对其设计内容进行详细、完整 的介绍,并能就指导教师提出的 问题进行正确的回答。 10 报告文字通顺,内容翔实,论述 充分、完整,立论正确,结构严 谨合理;报告字数符合相关要求, 工整规范,整齐划一。 5 课题背景介绍清楚,综述分析充 分。 5 设计方案合理、可行,论证严谨, 逻辑性强,具有说服力。 5 符号统一
4、;图表完备、符合规范 要求。 5 能对整个设计过程进行全面的总 结,得出有价值的结论或结果。 报告 质量 35 5 参考文献数量在 3 篇以上,格式 符合要求,在正文中正确引用。 10 在规定时间内能就所设计的内容 进行阐述,言简意明,重点突出, 论点正确,条理清晰。 答辩 情况 25 15 在规定时间内能准确、完整、流 利地回答教师所提出的问题。 总评成绩: 分 补充说明: 指导教师: 刘军 (签 字) 日 期: 2008 年 1 月 19 日 答辩记录表 学生姓名: 学号: 班级: 答辩地点: 答辩内容记录: 合计 分值 各项 分值 评分标准 实际 得分 合计 得分 备注 答 辩 成 绩
5、2510 在规定时间内能就所设计的内容 进行阐述,言简意明,重点突出, 论点正确,条理清晰。 15 在规定时间内能准确、完整、流 利地回答教师所提出的问题。 答辩小组成员(签字): 2009 年 9 月 25 日 指导教师评语 指导教师: (签字) 日 期: 年 月 日 一、综合设计目的、条件、任务和内容要求: 课题目的: 为了巩固、加深面向对象程序设计的理解,并在此基础上能够从实际问题出发设计编制一个 中小型应用系统;能够熟练运用面向对象思想来解决一些实际问题。同时也为了检验学生对面向 对象程序设计这门课的掌握程度,按照面向对象程序设计原理完成了此次课程设计。 课题条件: 已掌握向对象程序设
6、计的基本方法、一台装有 windows95,windows nt 4.0 或更高的操作系统 和某种高级语言开发环境(例如 vc+)的 pc 机。 课题任务: 利用某种高级语言(例如 vc+)设计开发一个多用途数据对象类的设计,以加深对面向对象 和模板原理的理解,掌握基于模板的程序设计的实现方法和技术。 课题内容要求: (1)该项目主要功能有: 1.建立一个存放数据对象的表的类 datatable,数据对象的属性字段的类型可以是 int,string,float,double 和 char 这五种类型,其中数据对象的各个属性字段的定义存放于类 datatable 的私有数据成员 ve 中;数据对
7、象的记录存放于私有数据成员 lis 中. 2.成员函数 insertfield()可实现增加数据对象的属性字段,包括字段名和字段类型; 3.成员函数 insertrecoed()可实现增加数据对象的记录. 4.成员函数 readfieldrecord();可由文件 data.txt 中读取记录,保存在 ve,和 lis 中. 5.成员函数 outtofile()可将 ve 和 lis 中的相关记录保存到输出文件中,文件名由用户指定, 但是,用户提供文件名时一定要连文件扩展名一起提供. 6.成员函数 outallrecord();将数据对象的各属性和记录值一起输出到控制台. 7.成员函数 rem
8、ovefield();会提示用户输入你想删除的字段名,就可以删除该字段名,字段类 型,以及各个记录中该字段的值. 8.成员函数 searchrecord();可以查找记录,会提示用户输入查找条件,注意输入条件的格式, 比如想查找字段 name 值为 5 的记录,就要写 name = 5 作为查找条件,在 name 与=之间要有空格 间隔,=与 5 之间也要有空格间隔;=可换成!=表示查找某字段不等于某值;或换成,表示要查找某 字段的值大于某值;也可换成,表示要查找某字段的值大于某值;也可换成.该函数可输入多重 查找条件. 9.成员函数 modifyfield()可修改某个字段的定义,会提示有
9、3 种修改方式,输入 1 或 2 或 3 进行选择. 10.成员函数 modifyrecord();可以修改记录的某字段的值,会提示用户输入想要修 改的记录满足的条件,可输入多重查找条件,然后找到符合条件的记录后,会提示用户输 入想要修改的字段名和字段新的值,如要想将字段 id 的值改为 10,可根据提示输入 id 10 即可. 11.成员函数 removerecord()会提示用户输入想要删除的记录满足的条件,就可将 满足条件的记录删除.输出提示语:delete success!表示删除成功. (2)根据实际设计要求 自行装配和调试,并能发现问题和解决问题。 (3)编写设计报告 写出设计与调
10、试的全过程,附上有关资料和心得体会 。 第二章第二章 设计简介及设计方案论述设计简介及设计方案论述 2.1 对象数据对象数据 object data 通过将文字和数字数据附着到对象的方法,使用对象数据在地图中创建简单的数据库。 对象数据可以与任何对象(不只是块)协同工作,其功能远比块属性强大。 要使用对象数据,请首先定义该表的格式,然后在将对象数据附着到对象时再在表中 创建相应记录。 2.1.1 使用对象数据使用对象数据 使用对象数据表可以保存任何类型的信息,例如,管道的直径、交通流量或电源插座 的成本。 可以存储批量大小、财产值或每位雇员桌面上计算机的品牌。 可以运行基于表中信息的查询。 例
11、如,如果将安装日期附着到炼油厂布局的每个进给 阀上,日后查询该图形时,则可以仅显示在某一日期之前安装的阀门。 还可以使用对象数据创建专题图,例如,根据安装日期更改阀门的颜色,或将所有已 铺设的道路显示为实线,将所有沙石路显示为点划线。 对象数据可以将对象与其他应用程序中的文档相关联。 例如,一块土地的编号可以链 接到土地记录文档、税收评估、扫描图像、照片或视频剪辑上。 用户可以选择一个对 象并查看附着的文档。 编辑附着了对象数据的对象的提示 如果用户使用 break 或 trim 命令编辑具有对象数据的对象,并将对象打断成多 个部分,对象数据将只保留在包含初始对象起点的那个部分中。 当用户复制
12、附着了对象数据的对象时,对象数据也同时被复制。 如果用户将带有对象数据的对象置于块中,则对象数据会仍然附着在置于块中的此对 象上。 可以选择“编辑对象数据”对话框中的“嵌套的数据”选项来访问对象数据。 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 理论依据理论依据 本设计主要是
13、为了巩固、加深面向对象程序设计的理解,让学生能够熟练运用面 向对象思想来解决一些实际问题。同时也为了检验学生对面向对象程序设计这门课的 掌握程度,按照面向对象程序设计原理完成了此次课程设计。那么这里提供一个一个 经过千锤百炼、可移植、提供源代码的 c+库boost 库,是作为标准库的后备,是 c+标准化进程的发动机之一。 boost 库由 c+标准委员会库工作组成员发起,在 c+社区中影响甚大,其成员已 近 2000 人。 boost 库为我们带来了最新、最酷、最实用的技术,是不折不扣的“准” 标准库。boost 库本身功能强大,这里给出其中部分功能: 正则表达式,可以与 posix api
14、和 perl 语言处理正则表达式的功能相媲美,而 且还能支持各种字符类型(如 char、wchar_t,甚至还可以是自定义字符类型); 多线程,想了很久的跨平台多线程库了; 数据结构“图”,再加上即将加入标准的 hash_set、hash_map、hash_multiset、hash_multimap 等等(事实上不少 stl 实作, 如 sgi stl,已经支持以上数据结构),c+对数据结构的支持已近完备; python,没错,对 python 语言的支持; 智能指针,与 std:auto_ptr 一起善加使用,可杜绝内存泄露,效率更不可和垃 圾收集机制 gc 同日而语; 更有循环冗余的 c
15、rc、可轻松定义返回多个值函数的元组 tuple、可容纳不同 类型值的 any、对标准库各方面的补充 还在迅速扩大中,部分内容有望进入 c+标准库 本综合设计使用了其中一个通用的数据类型 boost:any 来实现存放数据对象的表 的类 datatable。 3.1.2 boost:any boost:any 是一种通用的数据类型,可以将各种类型包装后统一放入容器内。 最重要的它是类型安全的。有点象 com 里面的 variant. boost:any 使用方法如下: any:type() 返回包装的类型 any_cast 可用于 any 到其他类型的转化 c+是强类型语言,所有强类型语言对型
16、别的要求都是苛刻的,型别一有不合编 译器就会抱怨说不能将某某型别转换为某某型别,当然如果在型别之间提供了转换操 作符或是标准所允许的一定程度的隐式转换(如经过非 explicit 构造函数创建临时变 量的隐式转换或是在 int,long 这些基本型别间的)又另当别论。总的说来,为了保持 型别安全,c+有严厉的要求。然而有时候程序员可能有这样的需要: 考虑这样的一个“泛型指针类”该如何设计是很有趣的事情。 1它本身不能是模板类,因为如果它是模板,你必须为它的具现化提供模板参数。 而事实上你并不想这样做。你想让同一个对象接受任意型别的数据。在上面的代码中 这个对象是 anyval。然而,如果你必须
17、为它提供模板参数,那么上面的代码看起来就 会像这样: 这显然已经丧失了 anyval 的优势-以单个对象接受所有型别的数据。与其这样 还不如直接写: 所以,any 不能是模板类。 2它必须提供某些有关它所保存的对象型别的信息。 3. 它必须提供某种方法将它保存的数值“取出来”。 事实上,boost 库已经提供了这样的类 boost:any,下面我就为你讲述它的原理 及构造。 。 其次,数据的存放之所是个问题,显然你不能将它保存在 any 类中,那会导致 any 类成为模板类,后者是明确不被允许的。数据应该动态存放,即动态分配一个数据的 容器来存放数据,而 any 类中则保存指向这个容器的指针,
18、明确地说,是指向这个容 器的基类的指针,这是因为容器本身必须为模板,而 any 类中的指针成员又必须不是 泛型的(因为 any 不能是泛型的,所以 any 中所有数据成员都不能是泛型的),所以, 结论是:为容器准备一个非泛型的基类,而让指针指向该基类。 这虽然并非 any 的全部源代码,但是所有重要的思想已经表露无遗。剩下的部分 只是一些简单的细节,请参见 boost 库的原文件。 这将通过编译,且运行期通常竟然也不会出错,下面我为你解释为什么会这样。 boost:anyval=i;其实将 anyval.content 指针指向了一个 holder 对象(请回顾上 面的代码)。然后 any_c
19、ast(anyval)实际上调用了 any_cast针对指针的重载版本, 并将 anyval 的地址传递过去,也就是转到 1 处,因为调用的是 any_cast,所以 1 处的 代码被编译器特化为 但是前面说过,operand-content 实际指向的是 any:holder,所以这个 static_cast是“非法”的,然而事实是:它能通过编译!原因很简单,holder 和 holder 都是 placeholder 的基类。将基类指针向派生类指针转换被认为是合法的。但 这却酿成大错,因为表达式 2 的型别将因此被推导为 double!原先 holder 只给 int held;成员分配了
20、 sizeof(int)个字节的内存,而现在却要将 int 型的 held 当作 double 型来使用,也就是说使用 sizeof(double)个字节内存。所以这就相当于: 使用 typeinfo 让我们有可能在运行时发现这种型别不符并及时抛出异常。但有个 违反直观的事情是上面的那行错误的代码仍能通过编译,并且你也无法阻止它通过编 译,因为 holder 和 holder 都是 placeholder 的基类。所以只能期望程序员们清楚自 己在做什么,要不然就给他个异常瞧瞧。 使用 boost:any 实现 virtual template 成员函数 如你所知,c+中没有提供 virtual
21、 template function。然而有时候你的确会有 这种需要,any 可以一定程度上满足这种需要,例如, 这样的 accept 函数能够接受任意类型的数据,并且是 virtual 函数 总之,boost:any 的实现比较简单,any 拥有一个模版构造函数,这使它可以接 受任何类型的对象。真正的变量内容被封装在嵌套类类型的成员变量中,并且在嵌套 类中使用 typeid 来记录真正的类型信息。 1) any交换存在两个 any 对象中的值。 2) any如果 any 实例非空,则丢弃所存放的 值,并存入 other 值的拷贝。 3)template any如果 any 实例非空,则丢弃所
22、存放的值,并存入 value 的一份拷贝,value 可 以是任意符合 any 要求的类型。 4) bool empty() const;给出 any 实例当前是否有值,不管是什么值。因而, 当 any 持有一个指针时,即使该指针值为空,则 empty 也返回 false 。 5) const std:type_info给出所存值的类型。如果 any 为 空,则类型为 void. 6) any_cast()将 any 类型转化为真实的类型,如果是指针返回的可能是空 指针,如果指针,则可能会抛出异常。 第四章第四章 设计结果及分析设计结果及分析 4.1 运行结果运行结果 程序实现结果与预期相符合
23、,首先程序从所给的文件中读取数据: 图图 4.1 运行程序运行程序 根据提示要输入要存储的数据名称和数据类型,输入存储的名称性别“sex” 和 身高“hight” ,选择不继续输入: 图图 4.2 运行程序运行程序 输入所要存储的完整数据: 图图 4.3 运行程序运行程序 输入所要删除的数据名称:grade 图图 4.4 运行程序运行程序 选择 3 修改名称和数据类型并把性别“sex”修改为“score”数据类型改为 “double”: 图图 4.5 运行程序运行程序 修改所要存储的数据名称,首先查找所要修改的人员年龄(age=22) ,修改其成绩 (score)为 99 分,程序运行如图 4
24、.6、4.7: 图图 4.6 运行程序运行程序 图图 4.7 运行程序运行程序 删除 id 为 32 的信息,运行如图: 图图 4.8 运行程序运行程序 输入所要存储位置的文件名称: 图图 4.8 运行程序运行程序 运行结束。 总总 结结 在刚开始进行课程设计的时候,我非常兴奋,这是学校和老师给我一个运用和展 现自己平常所学知识的一个千载难逢的机会。我非常感慨,因为我始终相信,这次机 会像生命一样是一种奖赏。这生命,只盛开一季,却是我们在黑暗中跋涉万里,在寂 寞中挣扎千年所得,它凝结了我们的渴求与努力,绚烂而短暂,是燃烧的热情,也是 焚灭的美丽。因此。我非常珍惜这次百年不遇的良机。 在设计过程
25、中,我非常狂热的投入其中,努力地去发现并解决问题。努力完成任 务的理智在我脑海中形成强烈的自豪感,我体内跳动的热血像英雄在战场上豪情不灭 的壮举。也许,那永生的天神在漠不可知的天空,用刻苦的羡慕看着我,希图获得如 我一样的机会来淀放,哪怕只要一瞬。于是我用我的思想,我的灵魂,我的一切去尽 情地展现着热火,尽情燃烧着风华。 在设计过程中,我非常狂热的投入其中,努力地去发现并解决问题。努力完成任 务的理智在我脑海中形成强烈的自豪感,我体内跳动的热血像英雄在战场上豪情不灭 的壮举。经过努力地探索,在同学和老师的帮助下,我终于成功的完成了此次课程设 计。细细数来,在这次课程设计的过程中,我的收获还是很
26、大的,首先一点就是我在 此次试验中认识到了自己在编程能力上的不足,尤其是在刚开始阶段是的时候,我感 到非常的棘手,完全无从下手,尽管后来通过查找资料渐渐懂得了一些眉目,但是还 是说明了自己在编程上的不足,知识面不广,等等一些缺点。所以说我的目标就是在 今后的学习当中努力去克服这些缺点。只有这样才能为今后的工作打下坚实的基础, 同时也是完善自我的表现。 同时令人感到欣慰的是在本次课程设计当中我们充分体现了团队合作的重要性。 此次试验中我们同学之间互相帮助,谁有不懂得地方可以相互进行讯问,可以说这次 课程设计同学们给了我很大的帮助。当然老师给我的帮助也是很大的,当有问题同学 们无法弄清楚的时候我们
27、通过请教老师,最终得到了自己想要的结果,这才使得我的 实验能够顺利地完成。 总之这次实验我的收获非常大,既认识到了自己编程能力的不足,也增进了与同 学之间的交流,与老师之间的交流。 经过这次试验,使我的热血在不断地燃烧,燃烧成一朵绚烂的夏花,这便是我如 火的生命;使我的精神和理念提醒我应该努力地追求罂栗之颜色,火之热情,酒之沉 醉,星辰之明亮。 体体 会会 通过软件的综合设计和加以探讨,我有很多收获。它让我认识到宇宙的的本质, 每当看着那些程序代码,就仿佛看着无法预知的星空,隐藏着无穷的奥妙。软件设计 的瞬息万变犹如天地万物的变化多端程序。按照人们的所求,设计各种各样的功能以 实现目标,满足人
28、们的需求。其作用之强大、应用之广泛犹如宇宙的生生不息。 于是我敲着键盘,让电脑再度在我记忆中活现中。我所在的城市(武汉)有一条 江,江上盛开的,是世上最灿烂的云霞,我也想让我手上的键盘盛开同样的绚烂。我 要用自己的方式,自己的梦幻般的思想,编写有着魔法一样的代码构造一个神奇瑰丽、 恢宏恣肆的水晶宫殿。让我的朋友,我的视野都快乐徜徉于这非非妙境,而我独自蜗 居在殿顶的阁楼上,享受造物主的快乐。 这次课程设计,使我深刻的认识到生命不要蜷居在蝇营狗窝中,不要糜烂在无所 事是里。它一定要妖艳绝代,循着独我的轨迹,一直滑到星星的光辉里,将那沉沉的 天幕灼上永恒的烙印。它能够让我看到更大的光明与自由,能够
29、让我回忆起那膜拜的 虔诚,能够成为我需要的那道光芒,火热地涤洗我慵懒的灵魂。 于是我选择这次课程设计来作为我远大的理想的起步点。这是暮阳还是朝日我分 辨不清,我只需要这一束光,照亮最深邃处尚蜷缩的灵魂之躯。我要的是最极限的想 象,以及最狂野的情绪。大河奔流,我持剑而舞,剑锋染满层层飘起的雾渫。我需要 醉醒后最惨烈的放纵,要在云霞中游移,写出最令人震撼的文章,飞扬出层峦般的鳞 角,一奋而裂六龙之高标,再奋而催藐故射之山。 我始终疑惑从程序代码中看到的并不是虚幻世界,而是星光。通过这次课的设计 和探索后,我便微妙的感觉到武汉的上空仅有的依稀星光。这星光或者能引动我恒而 久远的血脉中的记忆,那就更像
30、极了我的程序代码,不管它是天地万物也好,宇宙的 生生不息也好,江湖奇幻般的旅程也好,我总要尽力使它熠熠闪耀着,就如这千年不 变的星火一般,垂照我固执着不肯醒来的灵魂。 致致 谢谢 在这次课程设计中,老师亲自给我指导,给我指明了前进的道路。同时,同学们 也给我很多帮助。我非常感动,在此,我由衷地感谢他们的细心照顾和指点。 参考文献参考文献 1朱站立. 数据结构 使用 c 语言m. 西安:西安交通大学出版社 2殷人昆. 数据结构 用面向对象方法描述m. 北京:清华大学出版社 3严蔚敏. 数据结构m. 北京:清华大学出版社 4donald knuth. the art of computer pro
31、gramming. vol.1: fundamental algorithms,vol.3: sorting and searchingm. 5bjarne stroustrup. the c+ programming languagem. prentice hall. 6王红梅. 数据结构 c+描述m. 北京:清华大学出版社 7应用软件综合设计参考教材曹渠江等编2004.9 8信息系统开发案例(第四辑) 张基温 曹渠江清华大学出版社 2003-09-01 9软件项目管理 王克仁 陈允明 陈养正, 科学出版社 2002-10-1 代码代码 #include stdafx.h #include
32、#include #include #include #include #include #include using namespace std; using namespace boost; using boost :any_cast; stringstream st; class field public: field(string name,string type) mname=name; mtype=type; string mname; string mtype; ; class datatable vector ve; listvector lis; vector vli; pu
33、blic: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(); void removefield(); void removerecord(); int searchrecord(); void modifyrecord();
34、void modifyfield(); ; void defaultany(string 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 if(type=string)aa=s; else coutthe type was error!i; a=i; else if(type=float)cinf; a=f; else if(type=double
35、) 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 if(type=string)sts;a=s; else coutthe type was error!endl; int datatable: readfieldrecord() int p=0; i
36、nt 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) coutlllllllendl; cerrunable to open input file: copy.txt-bailing out!n; return -1; char ch; while
37、 (infile.get(ch) if (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).mtype,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.p
38、ush_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 printlistany(const any else if (val.type() = typeid(string) coutany_cast(val); else if (val.type()
39、= typeid(double) coutany_cast(val); else if (val.type() = typeid(float) coutany_cast(val); else if (val.type() = typeid(char) coutany_cast(val); coutt; bool 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(
40、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=float) if(compare=) return(any_cast(va)=any_cast(aa); else if(compare=!=) return(any_cast(va)!=any_cast
41、(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=double) if(compare=) return(any_cast(va)=any_cast(aa); else if(compare=!=) return(any_cast(va)!=any_cast(aa); else if(compare
42、=) 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=string) 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
43、)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=) 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(
44、compare=) return(any_cast(va)any_cast(aa); else coutinput error compare condition!endl; return false; void datatable: insertfield() any aa; string name; string type; string judge; listvector :iterator listi; do coutinput the fields name and type you want to insert:nametype; field pp(name,type); ve.p
45、ush_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); coutendl; void datatable: insertrecoed() any aa; vectorva; vector:iterator vi; string judge; coutinput the records value you want t
46、o 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); va.clear(); coutcontinue?judge; while(judge=y|judge=y); coutendl; void datatable: outallrecord() vector:iterator vi; vect
47、or: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();listi+) for (vai=(*listi).begin();vai!=(*listi).end();vai+) printlistany(*vai); coutendl; coutendl; void datatable
48、: 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).mname=s) break; if(vi=ve.end() coutn cant find the field! sendl; else i=vi-ve.begin(); ve.erase(vi); f
49、or (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:iterator vai; listvector :iterator listi; vector:iterator vliit; int hang; int flag=0; string judge
50、; int i=0; string type; do cout, 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=lis.begin();vliit!=vli.end();vliit+,listi=lis.beg in() for(int j=0;j(*vliit);i+)
51、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 to your conditions! nendl; else coutthe record according to condition:endl;
52、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.beg in() for (int n=0;n(*vliit);n+) listi+; for (vai=(*listi).begin();vai!=(*listi).end();vai+) printlistany(*vai); coutendl; void datatable: removerecord() vli
53、.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=l is.begin() for(int i=0;i0) coutdelete success! nendl; void datatable: modifyrecord() vli.clear(); vec
54、tor :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=ve.begin();vi!=ve.end();vi+) if(*vi).mname=name) cina
55、ny(*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.beg in() for(int j=0;j(*vliit);j+) listi+; vai=(*listi).begin()+i; (*vai)=aa; void datatable: outtofile()string filename; ofstream
56、 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+) outfile(*vi).mname (*vi).mtypeendl; outfile
57、endl; 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(double) d=any_cast(*vai);outfiled; els
58、e 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 (*vai).type()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030全球手工巧克力行业调研及趋势分析报告
- 2025年全球及中国天麻素制剂行业头部企业市场占有率及排名调研报告
- 2025年全球及中国三氟化铕行业头部企业市场占有率及排名调研报告
- 2025年全球及中国台式化学发光免疫分析仪行业头部企业市场占有率及排名调研报告
- 2025-2030全球棱镜胶带片行业调研及趋势分析报告
- 2025年全球及中国十六硫醇行业头部企业市场占有率及排名调研报告
- 2025-2030全球波纹型空气弹簧行业调研及趋势分析报告
- 2025年全球及中国高分辨率扫描电子显微镜(SEM)行业头部企业市场占有率及排名调研报告
- 2025-2030全球紫外熔融石英平凸(PCX)透镜行业调研及趋势分析报告
- 2025-2030全球建筑垃圾分类设备行业调研及趋势分析报告
- 课题申报参考:流视角下社区生活圈的适老化评价与空间优化研究-以沈阳市为例
- 《openEuler操作系统》考试复习题库(含答案)
- 项目重点难点分析及解决措施
- 挑战杯-申报书范本
- 北师大版五年级上册数学期末测试卷及答案共5套
- 2024-2025学年人教版生物八年级上册期末综合测试卷
- 2025年九省联考新高考 语文试卷(含答案解析)
- 第1课《春》公开课一等奖创新教案设计 统编版语文七年级上册
- 全过程工程咨询投标方案(技术方案)
- 心理健康教育学情分析报告
- 安宫牛黄丸的培训
评论
0/150
提交评论