




已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#include #include #include #includeusing namespace std;const int max=21; /最多节点数;#define v_type char /节点类型;typedef int a_type; /边类型;typedef struct matrixv_type vertexmax+231;a_type arcmaxmax;int indegreemax,outdegreemax;int v_number,a_number;matrix; /邻接矩阵;typedef struct queuev_type elemmax31;int top,tail;queue;/队列;void initqueue(queue &q)q.top = 0;q.tail = 0;return;bool emptyqueue(queue q)if(q.top = q.tail)return true;return false;void outqueue(queue &q,v_type *ch)strcpy(ch,q.elemq.top);q.top = (q.top+1)%max;void enqueue(queue &q,v_type *ch)strcpy(q.elemq.tail,ch);q.tail = (q.tail+1)%max;void initmatrix(matrix &m,char(*value)20)int t = 0;while(valuet0!=0)strcpy(m.vertext,valuet);t+;m.v_number = t;int i,j;for(i=0;im.v_number;i+)for(j=0;jm.v_number;j+)m.arcij =-1;m.a_number=0;for(i=0;imax;i+)m.indegreei = m.outdegreej = 0;m.a_number = 9;m.arc01 = 1; m.outdegree0+;m.indegree1+;m.arc02 = 3;m.outdegree0+;m.indegree2+;m.arc03 = 7;m.outdegree0+;m.indegree3+;m.arc04 = 30; m.outdegree0+;m.indegree4+;m.arc56 = 0; m.outdegree5+;m.indegree6+;for(j=1;i=4;i+)m.arci5 = 1;m.outdegreei+;m.indegree5+;void all_node(matrix m)int count;count = 0;queue q;initqueue(q);int signmax;int i = 0;while(imax)signi = 0;i+;i=0;while(im.v_number)if(m.indegreei=0)if(signi=0)enqueue(q,m.vertexi);count+=1;int j=0;while(jm.v_number)if(m.arcij!=-1)m.indegreej-=1;j+;/whilesigni=1;i=0;continue;i+;/whileif(m.v_number!=count)messagebox(null,text(存在有向环!),text(error),mb_ok);v_type value31;for(;emptyqueue(q)!=true;)outqueue(q,value);coutvalueendl;void leave_flow(matrix &m,int t)queue q;initqueue(q);if(t3)enqueue(q,m.vertex0);enqueue(q,m.vertex3);enqueue(q,m.vertex5);enqueue(q,m.vertex6);if(t=0)messagebox(null,text(请假时间有误!),text(error),mb_ok);if(t1)enqueue(q,m.vertex0);enqueue(q,m.vertex2);enqueue(q,m.vertex5);enqueue(q,m.vertex6);if(t=1)enqueue(q,m.vertex0);enqueue(q,m.vertex1);enqueue(q,m.vertex5);enqueue(q,m.vertex6);if(t30)messagebox(null,超出请假允许天数!,error,mb_ok);if(t7)enqueue(q,m.vertex0);enqueue(q,m.vertex4);enqueue(q,m.vertex5);enqueue(q,m.vertex6);v_type value31;for(;emptyqueue(q)!=true;)outqueue(q,value);coutvalueendl;void main()char flag = y;char value820;coutflag;getchar();if(flag = y | flag = y)strcpy(value0,学生请假);strcpy(value1,辅导员审批);strcpy(value2,班主任审批);strcpy(value3,学院书记审批);strcpy(value4,校相关领导审批);strcpy(value5,班长登记);strcpy(value6,学生查看);value70=0;else if(flag = n | flag =n)strcpy(value0,学生请假);cout请输入审批部门: n;cout1天内: ; gets(value1);coutendl;cout3天内: ; gets(value2);coutendl;cout7天内: ; gets(value3);coutendl;cout30天内: ;gets(value4);coutendl;strcpy(value5,班长登记);strcpy(value6,学生查看);value70=0;elsecout输入错误!endl;exit(0);/-/matrix m;initmatrix(m,value);all_node(m);cout请输入请假天数: time;leave_flow(m,time);韶关学院计算机科学学院数据结构课程设计题 目:基于aoe网的轻量级工作流系统设计学生姓名:梁伟泰学 号:11115012026专 业:计算机科学与技术班 级:11级(2)班 指导教师姓名及职称:陈正铭 讲师起止时间: 2013 年 3 月 2013 年 5 月1 需求分析1.1 课题背景及意义工作流(workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。工作流(work flow)就是工作流程的计算模型,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算1。工作流要解决的主要问题是:为实现某个业务目标,在多个参与者之间,利用计算机,按某种预定规则自动传递文档、信息或者任务。简单地说,工作流就是一系列相互衔接、自动进行的任务。我们可以将整个业务过程看作是一条河,其中流过的河水就是待审核的表单。工作流的概念起源于生产组织和办公自动化领域,是针对日常工作中具有固定程序活动而提出的一个概念,目的是通过将工作分解成定义良好的任务或角色,按照一定的规则和过程来执行这些任务并对其进行监控,达到提高工作效率、更好的控制过程、增强对客户的服务、有效管理业务流程等目的。尽管工作流从已经取得了相当的成就,但对工作流的定义还没有能够统一和明确,不同学者从不同角度对工作流做出了不同的定义。georgakopoulos给出的工作流定义是:工作流是将一组任务组织起来以完成某个经营过程:定义了任务的触发顺序和触发条件,每个任务可以由一个或多个软件系统完成,也可以由一个或一组人完成,还可以由一个或多个人与软件系统协作完成2。ibm almaden research center将工作流定义为:工作流是经营过程的一种计算机化的表示模式,定义了完成整个过程需要的所有参数;这些参数包括对过程中每一个步骤的定义、步骤的执行顺序和条件、步骤由谁负责以及每个活动所需要的应用程序等2。1993年工作流管理联盟(workflow management coalition,wfmc)作为工作流管理的标准化组织而成立,标志着工作流技术逐步走向成熟。wfmc对工作流给出定义为:工作流是指一类能够完全自动执行的经营过程,根据一系列过程规则,将文档、信息或任务在不同的执行者之间进行传递与执行。工作流从英文单词workflow而来,是工作work和流动flow的组合,是一种能够被计算机解释和执行的反映经营过程业务流动的计算机化模型。工作流技术起源于二十世纪七十年代中期办公自动化领域的研究,由于当时计算机尚未普及,网络技术水平还很低以及理论基础匮乏,这项新技术并未取得成功。简单地说,工作流就是一系列相互衔接、自动进行的业务活动或任务。一个工作流包括一组任务(或活动)及它们的相互顺序关系,还包括流程及任务(或活动)的启动和终止条件,以及对每个任务(或活动)的描述。1.2 课题要求在现代化管理中,人们常用有向图来描述和分析一项工程的计划和实施过程,一个工程常被分为多个小的子工程,这些子工程被称为活动(activity),在带权有向图中若以顶点表示事件,有向边表示活动,边上的权值表示该活动持续的时间,这样的图简称为aoe网3。工作流就是一系列相互衔接、自动进行的业务活动或任务4。利用图结构中的aoe网工具对工作流进行建模,设计出一个轻量级的工作流系统,完成流程设计、流程调度、流程监控功能。 (实现提示:图结构有向无环图) 图1:请假审批工作流aoe网a. 设计一个有关所在学院的请假审批流程aoe网,要求其所含结点不少于5个,以网中结点表示工作流中的流程事项,弧表示两流程事项之间的先后关系与转向条件,要求有一个结点以上且至少有两个分支;b. 启动工作流系统后可以根据条件自动进行流程事项的调度,按照先后的顺序依次输出信息:某某至某时间段里某人做某工作,然后用户在该时间内若发一信息申明完成该工作后,工作流引擎自动根据条件进行下一个事项的调度,若用户在该时间段内没有发出信号来申明完成该工作的话,则工作流引擎就停止调度,并输出当前停止的流程事项的结点信息。c. 为了突出该请假审批工作流的实用性和简洁性,本人想采用可视化的窗口设计(即图形化界面),为的是能将输出的结果直观明了地显示出来。d.选作内容:图形化操作界面、可视化流程设计、可视化表单设计和流程附件。1.3 软件格式规定a.输入的形式:该输入数必须为正整数,且应该有一定的限度;b.程序所能达到的功能:输出请假的具体审批流程事项告知;c.输出的形式:界面提示;d.测试的数据:请假一天,输出“学生请假辅导员审批班长登记学生查看” ;请假三天,输出“学生请假班主任审批班长登记学生查看” ;请假六天,输出“学生请假学院书记审批班长登记学生查看” ;请假二十五天,输出“学生请假校相关领导审批班长登记学生查看” ;请假天数大于三十天,输出“超出可请假天数,应做休学处理!”。1.4 设计目标a.软件名称:轻量级工作流系统(有关请假审批)b.软件组成:aoe.exec.制作平台及相关调试工具:windows7 32位,visual c+6.0d.运行环境:dos/windows 7e.性能特点:(1)操作性好,输出结果清晰明了;(2)可以自定义相关机构或人员审批;(3)图形化操作界面的朴素美观。2 概要设计2.1问题解决的思路概述首先要确定这个轻量级工作流系统的主要流程图,利用所给的请假审批工作流aoe网,尝试进一步地完成这系统的设计。根据案列的设计内容的要求,可以初步地设计出一个具有流程设计、流程调度、流程监控功能的轻量级工作流系统,其功能结构也许不是很完整,但可以通过可视化的界面来使其主要的内容输出显得清晰明了,也可以新添几个选项事件也便充实该轻量级工作流系统的框架和饱满程度。自定义化的流程设计要适度,不能逾越本身题目所能涉及的内容,这是我应该保证的。增加节点或删除节点的,我觉得还是要联系实际的代码功能段,看看是否能实现该效果,若不能实现的话,暂不调用也是一个好方法。2.2 相关函数或结构体的介绍说明typedef struct matrix/定义邻接矩阵typedef struct queue/定义队列void initqueue(queue &q)/初始化队列bool emptyqueue(queue q)/判断队列是否为空void enqueue(queue &q,v_type *ch)/入队void outqueue(queue &q,v_type *ch)/出队void initmatrix(matrix &m,char(*value)20)/实现图的存储功能void all_node(matrix m)/打印出所有的事件void leave_flow(matrix &m,int t)/输出,显示工作流的流程结果void addnode(matrix &m,char value,int w)/增加节点2.3 主程序的简要流程图 main()输出学生的请假审批流程ny导入默认的请假审批流程输入学生的请假天数输入学生的请假天数调用相关函数调用相关函数自定义审批流程的输入和确定结束 选择是否使用默认流程(y/n)n)图2:程序简要流程图3 详细设计3.1 构图并且实现其存储功能: typedef struct matrix vertextype vermax+120; /顶点集;arctype arcmaxmax;/邻接矩阵;int indegreemax, /入度;outdegreemax; /出度;int vertexnumber,arcnumber;/当前顶点数和当前边数变量;matrix; 使用邻接矩阵存储图;初始化时,将相应工作流存储进邻接矩阵中。在有向图中求顶点的度采用邻接矩阵比采用邻接表表示更方便;邻接矩阵中第i行非零元素的个数是顶点vi的入度;邻接矩阵中第i列非零元素的个数是顶点vi的出度;二者之和就是定点vi的度数。3.2 拓扑排序拓扑排序用来确定一个依赖关系集中,事物发生的顺序。例如,在日常工作中,可能会将项目拆分成a、b、c、d四个子部分来完成,但a依赖于b和d,c依赖于d。为了计算这个项目进行的顺序,可对这个关系集进行拓扑排序,得出一个线性的序列,则排在前面的任务就是需要先完成的任务。(1)定义一个队列并初始化还有定义一个计数器 int count;(2)从有向图中选择一个没有前驱(即入度为0)的顶点并且入队列,count+;(3)从网中删去该顶点,并且删去从该顶点发出的全部有向边;(4)重复上述两步,直到剩余的网中不再存在没有前趋的顶点为止;(5)如果最后count = 当前图中的节点,则不存在又向环,否则报错,即存在有向环。3.3 流程的监控通过拓扑排序实现,可以检测出图中是否存在有向环,从而流程监控使用拓扑排序即可完成工作。if(m.v_number!=count)messagebox(null,text(存在有向环!),text(error),mb_ok); /拓扑排序v_type value31;for(;emptyqueue(q)!=true;)outqueue(q,value);coutvalueendl;3.3 图的遍历:以请假为例,输入相应的值,在图中遍历,查找匹配的路径并输出以供调度,当然,由于图中可能存在不合法现象即有向环,所以在遍历之前需要调用拓扑排序实现程序进行扫描,确定图是合法的。3.4 调度:对于图中的某个事件或某个活动,可能受到工作流改变而受到影响,例如加入一个节点或者删除一个节点,对下一个事件或活动的影响。在进行调度之后,首先应先查看图中是否存在有向环,只有在不存在有向环的条件下调度才有意义。以增加一个节点在请假工作流中为例,当加入节点后,请假天数一定,但图遍历后结果已经不同于调度前。void addnode(matrix &m,char value,int w) for(int i=0;i=m.v_number;i+)m.arcim.v_number=-1;for(i=0;i=m.v_number;i+)m.arcm.v_numberi;strcpy(m.vertexm.v_number,value);m.v_number+;m.arc0m.v_number-1=w;m.outdegree0+;m.indegreem.v_number-1+;m.a_number+;m.arcm.v_number5=1;m.a_number+;m.outdegreem.v_number-1+;m.indegree5+; 4 调试分析表1:调试过程情况表序号时间出现问题解决方法12013-03-28有向无环图的检验不合乎常识使用队列来进行拓扑排序从而判断有向无环图的存在与否22013-04-01请假天数大于30天有错误产生添加错误提示32013-04-05dos界面下的运行复杂且意义不大尝试图形化界面的设计42013-04-16图的存储功能实现起来有部分的错误重新定义一个函数void initmatrix(matrix &m,char(*value)20)来实现图的存储功能52013-04-18aoe工作流过于冗余,繁琐,代码无用段过多删减无用的代码62013-04-27个人自定义流程的功能不能实现修改部分的代码好让其正常运行72013-04-28插入、删除节点的操作不能在图形化界面下完好地运行无可奈何之下,把图形化界面里的插入节点,删除节点的功能删去82013-05-04演示过程中有略显不足的瑕疵对代码段进行再一次的优化5 用户使用说明此轻量级工作流系统为请假审批工作流系统,使用规则如下:假设某学生需要请假(这是一个基于aoe网的轻量级请假工作流系统),首先他的请假天数必是一个正整数,若小于或等于0的话,会有出错的提示;若该学生已经确定了要请假的天数,在本人的设定之下,这个(可以被允许接受且能输出结果)请假天数介于0至31之间;首先要导入默认的工作流流程(为了使整个请假工作流系统看上去更有规范性,本人新增了两个事项作为第二步的必要条件),然后就可以输入要请假的天数:若为1天的话,输出第二步的执行项为辅导员审批;若为3天内的话,输出班主任审批;若输入为7天以内的话,则输出学院书记审批;若输入为30天以内的话,则输出学校相关领导审批;最后说一声,若请假天数大于30天的话,会弹出“超出可请假天数,应做休学处理”的提示,并拒绝输出相关流程显示。若用户想自己指定某机构或审批人员的话,可以选择自定义审批人员或机构,并且自己输入相关信息,然后导入事项,就可以实现自定义的功能了,也可以查看全部的事项。6 测试结果主窗口显示: 图3:使用测试图导入默认流程: 图4:使用测试图请假天数为0的错误提示: 图5:使用测试图请假天数在1天内的输出结果: 图6:使用测试图请假天数在3天以内的输出结果: 图7:使用测试图请假天数在一个星期以内的输出结果: 图8:使用测试图请假天数在一个月以内的输出结果: 图9:使用测试图请假天数大于额定期限的错误提示: 图10:使用测试图自定义流程输入(最好为中文字符,以便分别): 图11:使用测试图输出全部事件(默认事件): 图12:使用测试图dos界面下的原运行结果(操作基本上与图形化界面相一致): 图13:dos使用测试图7 结言因本人的技术水平确实有限,所以可能离老师所想要的设计初衷相去甚远,这同时也是我深感挫折的一个重要原因;当初的理解学习不行,而导致了现在的苦恼,但这个作业还是要交的。若有不足之处,若有错误之处,若有不尽如人意的地方,还请指正。同时,数据结构的课程设计也即将告一段落了,辛酸也有,收获也有,但总的来说,这也算是不错的经历。参考文献1刘数成,马秀红,赵林,邢建平.物流信息系统中分布式工作流模型设计与软件实现j.计算机与信息技术,2005(12).2范玉顺.工作流管理技术基础m.北京:清华大学出版社,2001.26-35.3严蔚敏,李冬梅,吴伟民.数据结构(c语言版)m.北京:人民邮电出版社,2011.150-158.4陈正铭.数据结构课程设计案例研究基于aoe网的轻量级工作流系统j.韶关学院学报自然科学,2010(12):24-28.附录:#include #include #include #includeusing namespace std;const int max=21; /最多节点数;#define v_type char /节点类型;typedef int a_type; /边类型;typedef struct matrixv_type vertexmax+231;a_type arcmaxmax;int indegreemax,outdegreemax;int v_number,a_number;matrix; /邻接矩阵;typedef struct queuev_type elemmax31;int top,tail;queue; /队列;void initqueue(queue &q)q.top = 0;q.tail = 0;return; /初始化队列bool emptyqueue(queue q)if(q.top = q.tail)return true;return false; /判断队列是否为空 void outqueue(queue &q,v_type *ch)strcpy(ch,q.elemq.top);q.top = (q.top+1)%max; void enqueue(queue &q,v_type *ch)strcpy(q.elemq.tail,ch);q.tail = (q.tail+1)%max;void initmatrix(matrix &m,char(*value)20)int t = 0;while(valuet0!=0)strcpy(m.vertext,valuet);t+;m.v_number = t;int i,j;for(i=0;im.v_number;i+)for(j=0;jm.v_number;j+)m.arcij =-1;m.a_number=0;for(i=0;imax;i+)m.indegreei = m.outdegreej = 0;m.a_number = 9;m.arc01 = 1; m.outdegree0+;m.indegree1+;m.arc02 = 3;m.outdegree0+;m.indegree2+;m.arc03 = 7;m.outdegree0+;m.indegree3+;m.arc04 = 30; m.outdegree0+;m.indegree4+;m.arc56 = 0; m.outdegree5+;m.indegree6+;for(j=1;i=4;i+)m.arci5 = 1;m.outdegreei+;m.indegree5+; void all_node(matrix m)int count;count = 0;queue q;initqueue(q);int signmax;int i = 0;while(imax)signi = 0;i+;i=0;while(im.v_number)if(m.indegreei=0)if(signi=0)enqueue(q,m.vertexi);count+=1;int j=0;while(jm.v_number)if(m.arcij!=-1)m.indegreej-=1;j+;/whilesigni=1;i=0;continue;i+;/whileif(m.v_number!=count)messagebox(null,text(存在有向环!),text(error),mb_ok); v_type value31;for(;emptyqueue(q)!=true;)outqueue(q,value);coutvalueendl; void leave_flow(matrix &m,int t)queue q;initqueue(q);if(t3)enqueue(q,m.vertex0);enqueue(q,m.vertex3);enqueue(q,m.vertex5);enqueue(q,m.vertex6);if(t=0)messagebox(null,text(请假时间有误!),text(error),mb_ok);if(t1)enqueue(q,m.vertex0);enqueue(q,m.vertex2);enqueue(q,m.vertex5);enqueue(q,m.vertex6);if(t=1)enqueue(q,m.vertex0);enqueue(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030AI制药算法优化效果评估及临床前研究效率与生物医药IPO估值逻辑
- 2025至2030黑麦片行业市场深度研究及发展前景投资可行性分析报告
- 元宇宙中的沉浸式教育应用-洞察及研究
- 2025年湖北省荆州市事业单位工勤技能考试考试题库及参考答案
- 2025年学历类自考学前儿童科学教育-行政管理学参考题库含答案解析(5套试卷)
- 2025年学历类自考中外文学作品导读-企业经营战略概论参考题库含答案解析(5套试卷)
- 2025年学历类自考中外教育简史-学前教育学参考题库含答案解析(5套试卷)
- 教育心理学中的自我效能感与学业成就关系研究-洞察及研究
- 柴油采购合同范本
- 水毁合同(标准版)
- 崔允漷教授学历案:微培训课件设计
- 企业合规管理培训课件讲义
- 《资本论》讲稿课件
- 幼儿园大班美术:《线条画:花》课件
- 燃气具安装维修工(中级)教学课件完整版
- 护理品管圈QCC之提高手术物品清点规范执行率
- 高尔夫基础培训ppt课件
- 有机化学第五章 脂环烃
- 微型钢管桩专项施工方案
- 铁路货物装载加固规则
- 机械加工的常用基础英语名词术语翻译对照大全
评论
0/150
提交评论