综合实验二“简易图形编辑器”实验报告张良钿20048002129总体展示:下图是我用自己写的“简易图形编辑器”编辑的图形的全屏截屏图片。图中的“indows”文本,“W”是用四条直线拼合而成。所有图形都是在画出后用鼠标选中并调整位置和形状的,右侧的是非模态窗口的“工具栏”。,可用本编辑软件打开。:(暨需求分析)::交互式绘制图形(至少包括矩形和文本),绘制完成的图形能够正确地重现,绘制结果可以保存到文件并读出;:矩形、文本的颜色、文本字体可调,能够通过鼠标点击选中图形,“工具栏”、“状态栏”等,使程序具有更好的人机交互性;“剪贴”、“复制”、“粘帖”、“删除”等操作,能够直接定位图元并编辑。(开发中最重要的环节):由于对C++还不熟悉,因此考虑的都还是C中的方法。用结构封装图元和文本,图元结构MYGRAP和文本结构MYTEXT,。使用动态申请内存的数据存储方法,具体的方案考虑过三种,具体如下:动态数组:像梁老师上课时介绍的那样,当存储空间不足时,new出更大的一块内存,然后memcpy,再delete原空间。优点:简单,易于理解和操作。缺点:运行效率不高,尤其是当数据量较大时,每次都要向内存池申请一块很大的连续的内存,然后memcpy大量数据,浪费了大量内存和CPU运行时间,虽然现在的内存和CPU性能很好,但它们是给用户用的,而不是给程序员使用的。因此在不影响开发效率的情况下,应尽量提高运行效率。双向链表:链表的运行效率明显高于动态数组,且易于构建图层的优先级结构(即图元重叠是的上下顺序)。故在刚开始的时候,我采用了双向链表的结构,并完成了双向链表相关函数的编写()。但在开发过程中,由于需要能根据图层序号直接定位图层,这样就需要从链头或链尾搜索。于是萌生了对链表进行改造的想法。映射表:我不是是否有这种数据结构,也不知道它的正确名称,因为这是我自己构思出的,姑且称其为“映射表”。它由一系列动态的离散的节点和一个动态的数组表构成。详细结构如下图所示:PointerPointerPointerPointer……PointerPointerPointerMYGRAPMYTEXTMYGRAPMYGRAPMYGRAPMYTEXT映射表中的每一个元素都是一个指针,指向不同的离散的MYGRAP或MYTEXT的结构便量。表的管理策略同动态数组一样,先申请一个一定长度的数组,当表不够长时,new出一个更长的数组,然后memcpy,再删除原数组。由于数组的每个元素存储的只是一个指针,占用的内存很小,只需很少的资源即可动态整理。每个节点的管理策略同链表的节点相同,都是new和delete的。映射表的优点:运行和存储效率基本接近链表,但可以根据层序号直接定位图元节点,所有的添加、删除、查找、插入、交换层顺序等操作都只需要对映射表进行整理即可,操作方便快速。缺点:增加了一个结构层次,不易理解。经比较,我选择了映射表的结构,由于MYGRAP和MYTEXT两种结构不同,尤其是MYTEXT中还有一个字符串指针,因此虽然从存储原理上两种结构的指针没有区别,但仍需一个PM
综合二简易图形编辑器报告 来自淘豆网m.daumloan.com转载请标明出处.