面向对象程序设计课程设计文档-流程图编辑系统.doc_第1页
面向对象程序设计课程设计文档-流程图编辑系统.doc_第2页
面向对象程序设计课程设计文档-流程图编辑系统.doc_第3页
面向对象程序设计课程设计文档-流程图编辑系统.doc_第4页
面向对象程序设计课程设计文档-流程图编辑系统.doc_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

面向对象课程设计面向对象程序设计课程设计文档(流程图编辑系统)目 录1.开发背景32.系统需求32.1.系统界面:32.1.1.显示流程图:32.1.2.遍历流程图:32.1.3.创建流程图32.1.4.删除流程图图元33.系统设计33.1.概要设计33.1.1.设计思想33.1.2.开发环境33.2.系统框架43.3.用例图与用例说明43.3.1.系统用例图43.3.2.系统用例说明63.4.类关系与类文档73.4.1.类关系73.4.2.类的文档83.5.状态转移图173.6.序列图174.详细代码设计204.1.本系统中主要类的定义文档204.1.1.视图类204.1.2.图元基类234.1.3.工具类234.1.4.流程图创建工具类244.1.5.流程图编辑工具类244.1.6.图元数组类254.1.7.流程图类254.2.流程图测试路径生成算法设计265.系统改进28281.开发背景本系统实现流程图编辑功能,并在其基础上实现了流程图路径的自动测试和显示,从而方便了用户对流程图路径的检测和修改。2.系统需求2.1.系统界面:系统界面包括编辑区、菜单栏以及工具条,尽可能的简洁完备。2.1.1.显示流程图:1)使用多种图元分别表示流程图起点、流程图终点、过程以及条件判断和控制流;2)在菜单栏或者工具栏中执行创建各种流程图图元的命令;3)在编辑区内可以创建和修改流程图图元。2.1.2.遍历流程图:1)“预遍历”用于计算出从起点到终点的所有路径;2)“下一步”用于逐个展示每条测试路径;3)“停止”用来停止遍历测试路径。2.1.3.创建流程图1)新建:清空编辑区域,此时可在编辑区新建流程图;2)创建起始点:点击“起始点”菜单项,可在编辑区域拖放生成流程图起点;3)创建终结点:点击“终结点”菜单项,可在编辑区域拖放生成流程图终点;4)创建过程:点击“过程”菜单项,可在编辑区域拖放生成流程图过程;5)创建条件判断:点击“条件判断”菜单项,可在编辑区域拖放生成流程图条件判断框;6)控制流:菜单选择后,拖放指定控制流起点与终点。2.1.4.删除流程图图元1)移动图元:鼠标拖动图元,鼠标左键放开终止图元移动;2)删除:选中图元后,按del键(删除图元的同时,没有起点或终点的控制流也会被删除);3)属性图元文字:鼠标双点图元,可以修改活添加文字;4)调整图元大小:鼠标拖动图元控制点,调整图元尺寸,鼠标左键放开终止调整。3.系统设计3.1.概要设计3.1.1.设计思想按照前一阶段的需求分析,系统设计采用面向对象的设计思想和开发方法。采用面向对象思想设计,程序可读性高,维护方便,可重用性高,而且能够保证系统的较高质量,在开发过程中,能提高软件开发的效率;自身继承、封装、多态的特性使系统灵活、易扩展。3.1.2.开发环境开发工具:开发工具主要采用microsoft c+6.0。visual c+ 6.0是一种可视化的开发工具,利用visual c+ 6.0可以开发基于widnows平台的32位应用程序,具有强大的编译器,可以开发出功能强大的应用程序。3.2.系统框架系统框架如图1。流程图编辑系统的主要功能部分为流程图绘制和测试路径演示。其中流程图处理为:流程图建立、编辑以及删除。路径处理为:路径生成和路径的遍历。图3-1 系统功能结构图 3.3.用例图与用例说明3.3.1.系统用例图根据系统要求,总结系统用例主要为图2所示。为了方便设计的进一步进行,我们又把各个用例细化,主要有:创建流程图控件、浏览流程图控件、删除流程图控件、编辑流程图控件、编辑起点、编辑控制流等。部分用例图如下:图3-2 系统用例综述图3-3绘制流程图图3-4编辑流程图控件图3-5遍历测试路径3.3.2.系统用例说明创建流程图控件用户操作编辑系统1.新建流程图1.清空编辑框2.选择流程图起点2.创建流程图起点3.选择流程图终点3.创建流程图终点4.选择控制流4.创建控制流5.选择过程框5.创建过程框6.选择条件判断框6.创建条件判断框创建图元用户操作编辑系统1.选择对应图元1.创建该图元2.按下鼠标左键2.确定图元的起点位置3.拖动鼠标3.确定欲生成图元的尺寸4.抬起鼠标左键4.生成图元选中流程图控件用户操作编辑系统1.选择流程图起点1.高亮显示流程图起点2.选择流程图终点2.高度显示流程图终点3.选择过程框3.高度显示过程框4.选择条件判断框4.高亮显示条件判断框5.选择控制流5.高亮显示控制流编辑图元用户操作编辑系统1.选择图元1.高亮显示图元2.鼠标拖动图元2.修改该图元的位置3.双击3.显示文本编辑框,修改图元文字4.选择图元控制点拖动4.改变图元大小5.选择图元后按delete键5.删除选定的图元,同时删除没有连接到图元的控制流遍历流程图用户操作编辑系统1.选择预遍历1.在程序后台生成遍历路径2.选择下一步2.逐步遍历流程图,当前遍历图元边框变为红色3.选择停止遍历3.终止遍历流程图3.4.类关系与类文档3.4.1.类关系根据系统要求和设计要求,本系统使用的类主要有图元类(celement、cstart、cend、cprocess、cflowctrl、cjudegement)、流程图工具类(ctool、ccreatetool、cedittool、cstarttool、cendtool、cprocesstool、cflowctrltool、cjudegementtool)、流程图类(cdiagram)、图元数组类(celemarray)以及视图类(cflowchartview)。类的继承关系如下图。图3-6 类的继承关系(1)图3-7 类的继承关系(2)图3-8 类的继承关系(3)图3-9类继承关系(4)3.4.2.类的文档celement图元基类类对象关联继承类cobject派生类cstart cend cprocess cjudgement cflowctrl属性+cobarray m_inelems图元前驱节点数组+cobarray m_outelems;图元后续节点数组+crect* m_inputrect图元文字输入区+int m_incount图元已有输入控制流个数+int m_outcount图元已有输出控制流个数+ int m_insize图元的最大输入控制流个数+int m_outsize图元的最大输出控制流个数+ int m_ioctrl图元输入输出的控制点的个数+cstring m_wordsinelem图元显示文字+ cpoint m_px+cpoint m_py+ int m_flag标示符+ int m_emptycount图元后续节点数组清空次数行为+celement()构造函数+ virtual celement()析构函数+ virtual bool contains(cpoint pos)用以判断点pos是否在图元内+ virtual crect createinputarea()创建文字编辑框+ virtual int findcontrol(cpoint pos)查找控制点+ virtual void move(int vx,int vy)图元移动+ virtual void movecontrol(int pos,int vx,int vy)响应移动控制点消息+ virtual void draw(cdc *dc)显示图元+ virtual void drawred(cdc* pdc)红色显示图元约束条件cstart流程图起点图元对象关联继承类public celement派生类属性+celement* m_outelem后继控制流行为+cstart()构造函数+cstart(cpoint x,cpoint y)带参数的构造函数+cstart()析构函数+ void draw(cdc *dc)显示图元+void drawred(cdc *dc)红色显示图元约束条件cend流程图终点图元对象关联继承类public celement派生类属性+celement* m_inelem前驱控制流行为+cend()构造函数+cend(cpoint x,cpoint y)带参数的构造函数+cend()析构函数+ void draw(cdc *dc)显示图元+void drawred(cdc *dc)红色显示图元约束条件cprocess流程图过程图元对象关联继承类public celement派生类属性+celement* m_inelem前驱控制流+celement* m_outelem后继控制流行为+cprocess()构造函数+cprocess(cpoint x,cpoint y)带参数的构造函数+cprocess()析构函数+ void draw(cdc *dc)显示图元+void drawred(cdc *dc)红色显示图元约束条件cjudgement流程图条件判断图元对象关联继承类public celement派生类属性+celement* m_inelem前驱控制流+celement* m_outelem后继控制流行为+cjudgement()构造函数+cjudgement(cpoint x,cpoint y)带参数的构造函数+cjudgement()析构函数+ void draw(cdc *dc)显示图元+void drawred(cdc *dc)红色显示图元约束条件cflowctrl流程图控制流图元对象关联继承类public celement派生类属性+celement* m_inelem前驱控制流+celement* m_outelem后继控制流行为+cflowctrl()构造函数+cflowctrl(cpoint x,cpoint y)带参数的构造函数+cflowctrl()析构函数+ void draw(cdc *dc)显示图元+void drawred(cdc *dc)红色显示图元约束条件ctool工具类对象关联继承类public cobject派生类ccreatetool,cedittool属性+cdiagram* m_d流程图对象+cflowchartview* m_pfcv视图行为+ctool()构造函数+ctool(cdiagram* d)构造函数+virtual ctool()析构函数+cdiagram* getdiagram(void)获取流程图对象+void setdiagram(cdiagram *d)设置流程图对象+virtual void select(cdiagram *d)响应选取图元消息+virtual void press(cpoint pos) =0响应鼠标左键按下消息+virtual void move(cpoint pos)=0响应鼠标拖动消息+virtual void release(cpoint pos)=0响应鼠标左键放开消息+virtual void doubleclick(cpoint pos)=0响应鼠标左键双击消息约束条件ccreatetool图元创建类对象关联继承类public ctool派生类cstarttool,cendtool,cprocesstool,cjudgementtool,cflowctrl属性+cpoint* m_pstart起点+cpoint* m_pend终点行为+ccreatetool()构造函数+ccreatetool(cdiagram* d)构造函数+ccreatetool()析构函数+void select(cdiagram *d)响应选取图元消息+void press(cpoint pos)响应鼠标左键按下消息+void move(cpoint pos)响应鼠标拖动消息+void release(cpoint pos)响应鼠标左键放开消息+void doubleclick(cpoint pos)响应鼠标左键双击消息约束条件cedittool图元创建类对象关联继承类public ctool派生类属性+cpoint* m_pstart起点+cpoint* m_pend终点行为+cedittool()构造函数+cedittool(cdiagram* d)构造函数+cedittool()析构函数+void select(cdiagram *d)响应选取图元消息+void press(cpoint pos)响应鼠标左键按下消息+void move(cpoint pos)响应鼠标拖动消息+void release(cpoint pos)响应鼠标左键放开消息+void doubleclick(cpoint pos)响应鼠标左键双击消息约束条件cstarttool流程图起点编辑类对象关联继承类public ccreatetool派生类属性行为+cstarttool()构造函数+cstarttool(cdiagram* d)构造函数+cstarttool()析构函数约束条件cendtool流程图终点编辑类对象关联继承类public ccreatetool派生类属性行为+cendtool()构造函数+cendtool(cdiagram* d)构造函数+cendtool()析构函数约束条件cprocesstool流程图过程编辑类对象关联继承类public ccreatetool派生类属性行为+cprocesstool()构造函数+cprocesstool(cdiagram* d)构造函数+cprocesstool()析构函数约束条件cjudgementtool流程图条件判断框编辑类对象关联继承类public ccreatetool派生类属性行为+cjudgementtool()构造函数+cjudgementtool(cdiagram* d)构造函数+cjudgementtool()析构函数约束条件cflowctrltool流程图控制流编辑类对象关联继承类public ccreatetool派生类属性行为+cflowctrltool()构造函数+cflowctrltool(cdiagram* d)构造函数+cflowctrltool()析构函数约束条件cdiagram流程图类对象关联继承类cobject派生类属性+ celemarray m_elems父节点+ celemarray m_e子节点行为+ cdiagram()构造函数+ virtual cdiagram()析构函数+ void add(celement *e)在流程图中添加图元+ celement* find(cpoint pos)找到在编辑区域坐标为pos的图元+ void remove(celement *e)从流程图中删除图元e+ int getindex(celement *e)获取图元e在流程图中的索引值+ celement* getelem(int index)获取索引值为index的图元+ int getsize()获取流程图中图元的个数+ void cutoffout(celement *e)去除图元e的所有后继控制流+ void cutoffin(celement *e)去除图元呃的所有前驱控制流+ void getoutelems(celement *e)获取e的所有后继控制流+ void getinelems(celement *e)互殴e的所有前驱控制流+ void removeefroma(celement* e,cobarray &coa);从数组coa中删除图元e+void removecf()移除流程图中的无连接控制流约束条件celemarray图元数组类对象关联继承类public cobarray派生类属性行为+ celemarray()构造函数+ virtual celemarray()析构函数+ celemarray(celemarray&)拷贝构造函数+ void addelem(celement*)向数组中添加元素+ void empty()清空数组+ celement* popelem()返回数组尾端的元素+ celement* getelem(int index)获取数组中索引值为index的元素约束条件cflowchartview流程图编辑视图类对象关联继承类public cview派生类属性+bool m_new标示是否新建了流程图+bool m_newable标示是否能够新建流程图+bool m_pretraverse标示是否进行了预遍历+bool m_lbtn标示鼠标左键状态+bool m_edit;标示是否有图元正在被编辑+int m_selindex存储被选中图元在流程图中的索引+cpoint m_start起点+cpoint m_end终点+cpoint* m_control控制点+bool m_bkbrush删除创建图形残影的标志位+cdiagram* m_d流程图对象+ctool* m_ptool创建工具类指针+ctool* m_pedittool编辑工具类指针+int m_checkctrl控制点取值范围为08;0为未选中+int m_indextored遍历当前图元的索引值+int* m_indexarray索引值数组+celemarray m_elemarray图元数组+cdiagram* m_pdgr流程图对象指针+cedit* m_pedit文字编辑框+celement* m_pselelem当前选中图元对象行为+void drawstart(cpoint start, cpoint end)绘制流程图起始点图元+void drawend(cpoint start, cpoint end)绘制流程图终结点图元+void drawprocess(cpoint start, cpoint end)绘制流程图过程图元+void drawjudgment(cpoint start, cpoint end)绘制流程图条件判断图元+void drawflowctrl(cpoint start, cpoint end)绘制流程图控制流图元+void setedittool(cdiagram* d)设置编辑工具对象的编辑图形对象+void focus(celement* e, cpoint* pos)+void highlight(celement *e)高亮显示被选中的图元+int findjudgment()取得流程图中条件判断框的个数+void getindexarray()获取索引数组-void pretraverse()预遍历流程图-celement* getstart()获取流程图起始点-int findstart()取得流程图中起始点的个数=afx_msg void onstart()响应点击新建流程图起始点消息=afx_msg void onend()响应点击新建流程图终结点消息=afx_msg void onprocess()响应点击新建流程图过程消息=afx_msg void onjudgment()响应点击新建流程图条件判断框消息=afx_msg void onflowctrl()响应点击新建流程图控制流消息=afx_msg void onlbuttondown(uint nflags, cpoint point)响应鼠标左键落下消息=afx_msg void onlbuttonup(uint nflags, cpoint point)响应鼠标左键抬起消息=afx_msg void onmousemove(uint nflags, cpoint point)响应鼠标左键拖动消息=afx_msg void onkeydown(uint nchar, uint nrepcnt, uint nflags)响应键盘按键按下消息=afx_msg void onlbuttondblclk(uint nflags, cpoint point)响应鼠标左键双击消息=afx_msg void onupdatestart(ccmdui* pcmdui)响应新建流程图起始点按钮更新消息=afx_msg void onupdateend(ccmdui* pcmdui)响应新建流程图终结点按钮更新消息=afx_msg void onupdateprocess(ccmdui* pcmdui)响应新建流程图过程按钮更新消息=afx_msg void onupdatejudgment(ccmdui* pcmdui)响应新建流程图条件判断框按钮更新消息=afx_msg void onupdateflowctrl(ccmdui* pcmdui)响应新建流程图控制流按钮更新消息=afx_msg void ontraverse()响应预遍历流程图消息=afx_msg void onnext()响应遍历流程图消息=afx_msg void onupdatenext(ccmdui* pcmdui)响应便利流程图按钮更新消息=afx_msg void onstop();响应停止遍历流程图消息=afx_msg void onupdatestop(ccmdui* pcmdui)响应停止便利流程图按钮更新消息=afx_msg void onupdatetraverse(ccmdui* pcmdui)响应预遍历流程图按钮更新消息afx_msg void onupdatenewfc(ccmdui* pcmdui)响应新建流程图按钮更新消息约束条件3.5.状态转移图本流程图编辑系统的主要状态有:创建流程图图元状态、选中流程图图元状态、编辑流程图图元状态、遍历测试路径状态、演示测试路径状态。状态转移图如图10:图3-10 系统状态转移图3.6.序列图系统序列图如下:图3-11创建图元图3-12编辑图元图3-13测试、显示路径4.详细代码设计4.1.本系统中主要类的定义文档4.1.1.视图类class cflowchartview : public cview protected: / create from serialization onlycflowchartview();declare_dyncreate(cflowchartview)/ attributespublic:cflowchartdoc* getdocument();/ operationspublic:/ overrides/ classwizard generated virtual function overrides/afx_virtual(cflowchartview)public:virtual void ondraw(cdc* pdc); / overridden to draw this viewvirtual bool precreatewindow(createstruct& cs);protected:virtual bool onprepareprinting(cprintinfo* pinfo);virtual void onbeginprinting(cdc* pdc, cprintinfo* pinfo);virtual void onendprinting(cdc* pdc, cprintinfo* pinfo);/afx_virtual/ implementationpublic:int m_indextored;int* m_indexarray;celemarray m_elemarray;cdiagram* m_pdgr;cedit* m_pedit;celement* m_pselelem;bool m_lbtn;/鼠标左键是否按下的标志位bool m_do;bool m_edit;int m_selindex;int m_drawcheck;cpoint m_start;/保存起点cpoint m_end;/保存终点cpoint* m_control;bool m_bkbrush;/删除创建图形残影的标志位cdiagram* m_d;ctool* m_ptool; /创建工具类指针ctool* m_pedittool;/编辑工具类指针int m_checkctrl; /控制点取值范围为08;0为未选中void getindexarray();int findjudgment();void focus(celement* e, cpoint* pos);void drawflowctrl(cpoint start, cpoint end);void drawjudgment(cpoint start, cpoint end);void drawprocess(cpoint start, cpoint end);void drawend(cpoint start, cpoint end);void drawstart(cpoint start, cpoint end);void setedittool(cdiagram* d);void highlight(celement *e);virtual cflowchartview();#ifdef _debugvirtual void assertvalid() const;virtual void dump(cdumpcontext& dc) const;#endifprotected:/ generated message map functionsprotected:/afx_msg(cflowchartview)afx_msg void onstart();afx_msg void onend();afx_msg void onprocess();afx_msg void onjudgment();afx_msg void onflowctrl();afx_msg void onlbuttondown(uint nflags, cpoint point);afx_msg void onlbuttonup(uint nflags, cpoint point);afx_msg void onmousemove(uint nflags, cpoint point);afx_msg void onkeydown(uint nchar, uint nrepcnt, uint nflags);afx_msg void onnewfc();afx_msg void onlbuttondblclk(uint nflags, cpoint point);afx_msg void onupdatestart(ccmdui* pcmdui);afx_msg void onupdateend(ccmdui* pcmdui);afx_msg void onupdateprocess(ccmdui* pcmdui);afx_msg void onupdatejudgment(ccmdui* pcmdui);afx_msg void onupdateflowctrl(ccmdui* pcmdui);afx_msg void ontraverse();afx_msg void onnext();afx_msg void onupdatenext(ccmdui* pcmdui);afx_msg void onstop();afx_msg void onupdatestop(ccmdui* pcmdui);afx_msg void onupdatetraverse(ccmdui* pcmdui);afx_msg void onupdatenewfc(ccmdui* pcmdui);/afx_msgdeclare_message_map()private:bool m_new;bool m_newable;bool m_pretraverse;void pretraverse();celement* getstart();int findstart();4.1.2.图元基类class celement : public cobjectpublic:int m_emptycount;int m_flag;cpoint m_px;cpoint m_py;cstring m_wordsinelem;int m_ioctrl;/输入输出控制点个数int m_insize;/可以输入的控制过程个数int m_outsize;/可以输出的控制过程个数int m_incount;/已输入控制过程个数int m_outcount;/已输出控制过程个数crect* m_inputrect;/输入文字区域cobarray m_inelems;cobarray m_outelems;celement();virtual celement();virtual bool contains(cpoint pos);/判断点pos是否在图元中virtual crect createinputarea();virtual int findcontrol(cpoint pos);/响应查找控制点消息virtual void move(int vx,int vy);/响应图元移动控制点virtual void movecontrol(int pos,int vx,int vy);/响应移动控制点消息virtual void draw(cdc *dc);/显示控制流图元virtual void drawred(cdc* pdc);/红色显示控制流图元;4.1.3.工具类class ctool public:cdiagram* m_d;cflowchartview* m_pfcv;ctool(cdiagram* d);ctool();virtual ctool();void setdiagrameditor(cdiagrameditor* dlg);cdiagram* getdiagram(void);void setdiagram(cdiagram *d);virtual void select(cdiagram *d);virtual void press(cpoint pos) =0;virtual void move(cpoint pos)=0;virtual void release(cpoint pos)=0;virtual void doubleclick(cpoint pos)=0;4.1.4.流程图创建工具类class ccreatetool:public ctoolpublic:cpoint* m_pstart;cpoint* m_pend;ccreatetool();virtual ccreatetool();void select(cdiagram *d);void release(cpoint pos);void move(cpoint pos);void press(cpoint pos);void doubleclick(cpoint pos);virtual celement* create(cpoint start, cpoint end)=0;4.1.5.流程图编辑工具类class cedittool:public ctool public:bool m_btndown;int m_focus;celement* m_pelem;cedittool(cdiagram *d);cedittool();virtual cedittool();void movecontrol(cpoint pos);void select(cdiagram* d);void release(cpoint pos);void move(cpoint pos);void press(cpoint pos);void doubleclick(cpoint pos);4.1.6.图元数组类class celemarray : public cobarray public:celemarray();celemarray(celemarray&);virtual celemarray();celement* popelem();celement* getelem(int index);void addelem(celement*);void empty();4.1.7.流程图类class cdiagram public:celemarray m_elems;celemarray m_e;cdiagram();virtual cdiagram();void removecf();void removeefroma(celement* e,cobarray &coa);void getinelems(celement *e);void getoutelems(celement *e);void cutoffin(celement *e);void cutoffout(celement *e);int getsize();celement* getelem(int index);int getindex(celement *e);void remove(celement *e);celement* find(cpoint pos);void add(celement *e);4.2.流程图测试路径生成算法设计void pretraverse()m_elemarray.empty();/清空图元数组celemarray jarray,ajarray;celement* elem;if(findstart()1)/如果在流程图中存

温馨提示

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

评论

0/150

提交评论