版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于C/S架构企业项目管理系统设计方案目录摘要 [22]。项目管理信息化系统是工业工程管理的趋势,它能规范一个团队的日常工作,提高团队的工作效率,并使团队合理掌控项目的当前进度,及时做出正确的决策,保证项目的质量,在当前信息化时代具有不可缺少的作用。企业项目管理系统就是在这样的背景下应运而生。本课题要做的系统由客户端、服务器端、数据库端、维护程序和通信协议五部分组成。客户端要实现如下功能:用户权限管理,用户登录,系统创建、修改及删除,系统数据录入及修改,系统查询及打印。服务器主机端主要实现客户端连接管理及和数据库数据交互。数据库主机端要设计合适的表格及主键对应关系。维护程序实现记录客户端操作情况和数据库表格创建。通信协议用来客户端和服务器端通信,要设计成易于打包发送,易于解包等。另外编码时要注意编程规范,设计界面应合理友好,模块间相对独立,耦合性小等。3.1.1系统功能需求系统功能需求部分,从系统的使用者的角度来分析系统需要给用户提供哪些可使用的功能,是整个企业项目管理系统需要实现的核心部分。经分析,系统的功能需求主要包括以下几个方面:(1)用户能登陆客户端操作项目流图用户都有自己的操作权限,根据权限和自身需求对项目进行增、删、改、查操作。客户端要实现如下功能:用户权限管理,用户登录,系统创建、修改及删除,系统数据录入及修改,系统查询及打印。(2)系统维护人员能登陆到服务器维护维护人员登陆到服务器后,能查看当时登陆用户的类型,用户操作过程,并能对用户的操作进行管理。(3)系统维护人员能登陆维护程序进行系统维护维护人员登陆到维护程序能进行系统数据库的创建,能定义模板数据库及模板数据,进行系统备份、恢复及删除,数据到导入和导出等。3.1.2系统非功能需求系统的非公能需求部分是系统不可或缺的一部分,包括系统展现给用户的界面的友好性、合理性,系统处理性能要求,处理负载的能力,以及系统的扩展能力。具体来讲,主要包括以下几个方面:(1)直观的图形显示项目当前的状态操作界面要友好,查询项目图形时用户根据当前的项目状态图能清晰的知道自己负责项目的组成部分,起始时间和截止时间,参与的人员及各子部分的状态,有风险的部分等。(2)服务器端性能要处理多个客户端登陆同时操作时服务器要能及时响应,尽可能少出现通信阻塞、死锁等情况。(3)可维护性要好系统设计的接口要留有充分的余地,以后需求变更要有可维护的空间。相关的帮助文档要齐全,第一次运行系统时相关配置方便。3.1.3系统接口需求本管理系统是基于C/S架构的,系统需要提供客户端与服务器端进行通信的接口,还需要提供服务器端与维护模块的接口。(1)服务器端提供多个客户端同时操作的接口为了使用户登录时能顺利登录,系统要求服务器提供能让多个客户端登录的接口,妥善处理好多线程之间的关系,既要保证正确性,又要提高性能。(2)系统提供维护程序接入的接口为了维护程序登录后便于进行系统维护,需提供维护程序接入的接口。3.1.4系统的主要用户角色对管理系统中的用户进行角色划分是为了实现系统的安全管理,企业项目管理系统主要有普通用户、项目经理、超级用户等三种权限。普通用户对应到具体某一个项目的一个子过程权限。项目经理对应一个项目的所有权限。超级用户则拥有系统的所有权限。3.2项目管理系统的总体设计3.2.1项目系统总体功能模块分析根据系统的需求分析和系统总体框架,以及C/S架构开发特点,设计系统的总体功能模块如图3-1所示:图3-1系统总体功能结构图(1)客户端用户通过客户端来进行日常的操作,包括用户登录功能、用户管理功能、项目定义功能、数据录入和修改功能、查询/打印功能。其中用户管理又包括用户的注册、注销和用户的权限管理。(2)服务器端服务器端的主要功能包括客户端的连接管理、数据处理、数据库操作三部分。客户端连接管理模块主要负责客户端与服务器端连接的建立、维持、释放。客户端是连接请求的主动方。当客户端发出连接请求给服务器时,服务器根据已经设计好的协议确定客户的请求类型,转入相关处理。另外客户端连接管理还要负责控制客户端连接数等情况,以避免连接数过多而造成服务器处理速度大幅度下降,甚至导致企业内部网络的局部拥塞现象。(3)数据库数据库采用Oracle11g数据库管理系统,支持新项目信息的录入、项目信息修改、查询、删除,以及用户信息的其他信息的增、删、改、查操作。(4)维护模块系统的维护模块主要负责数据库的建立、数据备份/恢复、数据导入/导出以及超级用户管理。(5)通信协议客户端与服务器端进行通信的协议包括“请求、应答”模式和“广播”模式。“请求、应答”模式中,客户端程序的请求需要服务端对请求做出响应,客户端收到服务端程序应答后,完成一次通讯。“广播”模式:客户端或服务端程序发出一个信息,不要求另一方响应。3.2.2项目管理系统数据总体框架分析设计该企业项目管理系统采取C/S架构,管理功能主要由服务器端进行实现。该系统主要由五部分组成,分别是客户端模块、服务器端模块、数据库端模块、维护模块和通信协议模块。整体的框架如图3-2所示:图3-2系统总体框架由于本系统采取C/S架构,因此需要客户端和服务器端的不断通信来完成系统的全部管理功能。当客户欲使用该系统进行管理操作时,首先需要向服务器发送服务请求,等待服务器的应答。在发送/应答请求的过程中,该系统使用的是针对本系统开发的通信协议,协议根据系统的需求包括“请求、应答”模式和“广播”模式。在服务器接收到管理请求的时候,会对数据库进行相应操作,处理相应数据,并作出最终的应答处理结果,返回给客户端。而在系统维护功能模块部分,将对该系统数据库进行周期性维护,对数据库进行定期的备份、恢复、导入、导出等必要的操作。3.2.3项目管理系统数据流程分析设计(1)客户端数据流程客户端程序是用户直接登陆操作的部分,系统的大部分功能都需要在客户端中完成.初步设计客户端程序的流程图如图3.3所示:图3-3客户端数据流程图用户在登录客户端前,需要进行用户登录。根据登录信息的不同,用户可扮演超级用户和普通用户的身份。超级用户则可以对项目进行创建和修改、对用户进行定义和修改。普通用户则只能进行数据进行录入和修改、对数据进行查新以及对数据进行打印等操作。(2)服务器端数据流程由于服务器端着重的是业务逻辑,数据流程图如图3-4所示:图3.4服务器端数据流程图服务器端收到客户端发送的数据包后,检查数据库的状态,若数据库未启动,则生成数据库未启动信息数据包。假使数据库已经启动,则检查用户的合法性,若用户为非法用户,则生成非法用户数据包。假使用户合法且可提取SQL语句,则提取数据包中的SQL语句,执行客户端的请求处理,倘若操作成功则生成执行结果数据包,倘若操作失败则生成操作失败数据包。假使用户合法且不可提取SQL语句,则生成记录用户操作系统SQL语句,并执行操作,直至处理完毕。当在服务器端进行处理过程中产生了各类数据包后,需要将各类数据包发送返回。3.3本章小结本章对系统的总体分析与设计做了详尽的描述。本章首先从对项目管理的需求分析方面入手,对用户实际需求角度对项目所需完成的功能模块做了分析。接下来根据现有需求对系统做出了总体设计,并总结出了系统的总体功能框架。并对所设计的功能框架从数据总体框架以及系统数据流程分析的几个角度做了详细的介绍。
第4章项目管理系统的实现4.1项目管理系统的详细设计该系统基于C/S架构进行开发设计,用户通过客户端访问服务器,对该管理系统进行各项功能的访问操作。为了反映用户和系统的各用例间的关系,用例图可以很好的反应参与者以及用例间的关系设计模型。该系统的整体用例图如图4-1所示:图4-1系统整体用例图用户通过客户端可以进行用户登录操作,并发送用户管理、项目定义和数据处理等处理请求给服务器端。虽然用户无法直接操作服务器,但当服务器与客户端建立了连接,服务器将综合数据库信息以及数据处理请求,对来自客户端的各类请求作出处理并应答。用户通过数据库维护和项目维护来实现对系统的维护操作。用例图反映的是系统在做什么,而在详细实现系统各功能前,更要弄清楚用例的行为顺序,通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。时序图展现的正是各用例间行为顺序的模型。系统整体的时序图如图4-2所示:图4-2系统时序图SEQ4.2系统时序图\*ARABIC1在用户操作个功能前,首先需要登录客户端,通过客户端利用为系统专门提供的通信协议,对服务器和维护模块进行操作请求及应答。登录客户端后客户端,用户可以向服务器发送用户管理请求、项目定义请求、数据处理请求、系统维护请求等,通过服务器端和维护模块的处理,最终完成各类处理功能,并利用该协议进行请求应答。4.2项目管理系统各功能的设计实现以上已经根据系统的详细需求分析设计出系统的各个功能模块,包括客户端模块、服务器端模块、通信模块、维护模块和数据库端。下面几个细节分别针对各个模块的详细需求进行分析设计和实现。4.2.1客户端的设计实现根据客户端应具备的功能初步将客户端划分为五个模块:登陆模块、项目定义模块、用户管理模块、数据录入/修改模块和查询/打印模块。用户登陆子模块需要区分三种用户:超级用户、有权限定义子过程用户和普通用户,根据权限进行相应操作。用户登录步骤:选择登陆模块,并且输入用户名和密码;查询数据库,检查用户是否存在;查询数据库:USER_KS用户存在,继续下一步,否则告知用户名或密码错误,返回第一步;判断是否用权限进入相应模块,超级用户:只允许进入“项目定义模块和用户管理模块”;有定义子过程权限用户:可以进入两个模块;其他用户:进入“数据录入和查询模块”;超级用户:UserID=“00000000”。系统进入到“项目定义模块和用户管理模块”或“数据录入和查询模块”;用户权限数据库:查询数据库:POPDEM_KS。继续操作直至结束。登陆模块采用向服务器发送一条sql语句,来查询输入用户名和密码是否存在,从而确定用户是否能成功登陆。用户登陆界面如图4-3所示:图4-3用户登录界面为了使用户在操作的时候系统能迅速响应,系统设计为当用户登陆成功后,判断用户的权限,之后把该用户有权限部分的数据一次性发过来,这样用户查询操作实际查询的是本地的数据,而修改和删除操作时,程序先发送修改和删除的命令给服务器,在收到服务器成功响应后,再在本地同步修改删除操作。因接收数据需要一段时间,在此增加了一个进度条,程序中启动一个定时器,由接收的进度同步设置进度条进度,如图4-4所示:图4-4进度条登陆模块实际编程的时候需要注意一些异常防范处理。比如输入的用户名或者密码不能含有“ADDINEN.CITE<EndNote><Cite><Author>Bari</Author><Year>2012</Year><RecNum>3</RecNum><record><rec-number>3</rec-number><foreign-keys><keyapp="EN"db-id="fspxr2xvx2pzdqed90qv5wwesfdvpzetzsex">3</key></foreign-keys><ref-typename="JournalArticle">17</ref-type><contributors><authors><author>Bari,Ataul</author><author>Jaekel,Arunita</author><author>Jiang,Jin</author><author>Xu,Yufei</author></authors></contributors><auth-address>DepartmentofElectricalandComputerEngineering,UniversityofWesternOntario,Canada</auth-address><titles><title>Designoffaulttolerantwirelesssensornetworkssatisfyingsurvivabilityandlifetimerequirements</title><secondary-title>ComputerCommunications</secondary-title></titles><periodical><full-title>ComputerCommunications</full-title></periodical><pages>320-333</pages><volume>35</volume><number>3</number><keywords><keyword>Sensornodes</keyword><keyword>Clustercomputing</keyword><keyword>Energyutilization</keyword><keyword>Faulttolerance</keyword><keyword>Integerprogramming</keyword><keyword>Networkarchitecture</keyword><keyword>Sensornetworks</keyword></keywords><dates><year>2012</year></dates><pub-location>P.O.Box211,Amsterdam,1000AE,Netherlands</pub-location><publisher>Elsevier</publisher><isbn>01403664</isbn><urls><related-urls><url>/10.1016/com.2011.10.006</url></related-urls></urls><electronic-resource-num>10.1016/com.2011.10.006</electronic-resource-num></record></Cite></EndNote>[2][]>”等特殊字符,这是由于需要配合协议的设计,以上字符在协议中是标志字符。成功登陆后进入客户端程序主界面,如图4-5所示:图4-5客户端主界面用户管理子模块包括编辑用户(增加、修改、删除),用户权限分配。用户和密码存放在数据库表USER_KS中;权限信息存放在数据库表POPDEM_KS中。用户管理模块在此处为了实现的方便进行了调整,调整为用户管理和权限管理两个部分。用户管理是以用户的角度来显示用户的权限,如图4.6所示,列出了“-11”这个用户所具有的所有权限,图中表示“-11”拥有过程ID为010100这个过程的编辑权限。而权限管理是以项目的角度来显示权限,如图4-6所示,表示“R301”这个项目中只有“b”一个参与成员,并且“b”拥有这个项目的编辑权限,相当于项目经理的角色。这样安排各有侧重,信息查找时能较直观显示所关心的信息。图4-6用户管理界面用户管理部分只负责用户的增加和删除、用户密码的修改等,权限管理部分可以给具体的过程赋予权限。权限管理部分难点是树视图的遍历,遍历方法是按深度优先的方法来遍历的,即先遍历子节点再遍历兄弟节点,核心代码段如下:NM_TREEVIEW*pNMTreeView=(NM_TREEVIEW*)pNMHDR;HTREEITEMhItem,hItemHide;intiNum=0,i;hItem=m_treePrj.GetSelectedItem();DWORDdwReal,dwVirl;dwReal=m_treePrj.GetItemData(hItem);hItemHide=m_treeHide.GetRootItem();iNum=m_treeHide.GetCount();for(i=0;i<iNum;i++){dwVirl=m_treeHide.GetItemData(hItemHide);if(dwReal==dwVirl)//匹配到过程ID{g_strCurID=m_treeHide.GetItemText(hItemHide);break;}if(m_treeHide.GetChildItem(hItemHide)!=NULL)//如果没有子节点了{hItemHide=m_treeHide.GetChildItem(hItemHide);}elseif(m_treeHide.GetNextSiblingItem(hItemHide)!=NULL)//如果没有兄弟节点了{hItemHide=m_treeHide.GetNextSiblingItem(hItemHide);}else{hItemHide=m_treeHide.GetParentItem(hItemHide);if(m_treeHide.GetNextSiblingItem(hItemHide)!=NULL){hItemHide=m_treeHide.GetNextSiblingItem(hItemHide);}else{hItemHide=m_treeHide.GetParentItem(hItemHide);if(m_treeHide.GetNextSiblingItem(hItemHide)!=NULL){hItemHide=m_treeHide.GetNextSiblingItem(hItemHide);}else{hItemHide=m_treeHide.GetParentItem(hItemHide);if(m_treeHide.GetNextSiblingItem(hItemHide)==NULL){MessageBox("程序出现异常,请点击更新按钮!","温馨提示",MB_ICONINFORMATION|MB_OK);return;}hItemHide=m_treeHide.GetNextSiblingItem(hItemHide);//从第四级上来,这个兄弟节点肯定是有的}}}}用户权限管理实现对话框如下:图4-7权限管理界面项目定义子模块有以下三个功能:定义/修改项目、定义/修改过程、导入/导出项目。定义/修改项目系统从数据库表“PRJ_KS”中读取项目信息;如果有项目,进行第4步,否则进行下一步;增加项目相关信息,提交内容到项目表“PRJ_KS”中;显示项目信息,对项目信息进行修改,并提交数据库;进行下一过程“定义修改过程”。定义/修改过程定义/修改过程对话框设计如图4-8所示:图4.8定义/修改过程界面导出/导入项目导出项目:导出内容:过程属性表、sql语句表;导出格式:能被记事本正常打开;导入项目:按照过程属性表内容恢复项目过程树和绘图,并将sql语句表导入,如果sql语句表内容非空,表明上一次导出时有修改项没有提交数据库,应该提示用户做出操作。数据录入/修改子模块编辑过程信息;编辑产品信息;查看权限内的过程(或产品)信息。数据录入/修改模块界面设计如图4-9所示:图4-9数据录入/修改子模块界面由图4-9所示,过程信息和产品信息使用一个Tab控件相互隔开,过程信息显示当前操作者选中过程的信息(操作者必须要有这个过程的权限才能显示),产品信息中显示这个过程所包含哪些产品的信息,每个过程中都有过程属性(属性分为硬件、软件、结构、工艺、测试、整机试验和使用说明等七种),属性不同,产品信息也不同。例如硬件类产品信息如图4-10所示:图4-10硬件产品信息界面此处需要注意的是,在每次增加、修改和删除产品信息时,都需要首先判断用户的权限,只有具有该过程的编辑权限才能操作。然后再根据不用的属性,打开各自的对话框完成增、删、改操作。查看/打印模块包括查询功能、打印功能、本地存储功能。查询功能包括:查询过程、产品、用户、项目信息等内容。打印功能包括:打印过程信息:以表格形式打印,可以选择行和列;打印产品信息:以表格形式打印,可以选择行和列;打印项目过程图:以图片形式打印;打印用户权限表:以表格形式打印。打印功能设计如图:图4-11打印功能界面本地存储功能实现存储过程信息和存储产品信息。存储格式:以文本格式进行存储,每条信息存储一行,用户可以选择分隔符。设计显示界面如图:图4-12保存功能界面4.2.2服务器端的设计实现服务器端分为客户端连接管理模块、数据处理模块和数据库操作模块。服务器端主界面如4-13所示:图4-13服务器端主界面系统启动时就开辟了十个线程,可以供十个用户同时操作,当用户数超过十个时就不能继续登陆。这样的限制保证了服务器的正常运行,不会负荷太大而死机。客户连接管理模块首先需要验证用户的合法性,同一时间只允许用户登陆一次。其次需要为每一个登陆的用户开辟一个线程。这里需要阐述线程的分类。我们知道,线程可以通过Win32API创建,也可以通过MFC创建。其中MFC的线程又可以分为工作者线程和用户界面线程。工作者线程是没有消息循环的简单线程,而用户界面线程可以有消息队列和消息循环。故服务器端创建有消息队列的用户界面线程较为合适。调用方法如下所示:m_UserThread=(UserThread*)AfxBeginThread(RUNTIME_CLASS(UserThread),THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED); 连接数据库的接口常用的有ODBC和ADO,由于ODBC相对复杂,这里采用了ADO接口,并且把ADO接口常用的函数进行了封装,成为一个封装类,极大的简化了数据库的调用。需要注意的是使用ADO接口前需要初始化COM接口。4.2.3维护模块的设计实现维护程序部分主要涉及到数据库的创建、备份、恢复删除。其中创建项目表的脚本如下:promptCreatingPRJ_KS...createtablePRJ_KS(PRJIDVARCHAR2(10)notnull,PRJNAMEVARCHAR2(50)notnull,BEGINDATEDATE,ENDDATEDATE,PRJMGRVARCHAR2(20),PRJMEMVARCHAR2(500),PRJSTATUSVARCHAR2(10),DESCRIPTIONVARCHAR2(100),RESERVE1VARCHAR2(50),RESERVE2VARCHAR2(50),INSERTDATETIMEDATEdefaultSYSDATE) 在维护程序中,只要执行上述sql脚本,就可以创建一个项目表。参照以上sql语句,便可以创建其他表格。维护模块的界面实现如下图4-14所示:图4-14维护模块主界面数据的备份、恢复和删除可以使用数据库客户端工具PLSQLDeveloper,可以非常方便地实现所需的功能。故最后维护程序部分并没有单独作为一个软件存在,而是把其创建表格的功能集成在了服务器端。4.2.4通信协议的设计实现通讯协议采用以下两种方式“请求、应答”模式:客户端程序的请求需要服务端对请求做出响应,客户端收到服务端程序应答后,完成一次通讯。“广播”模式:客户端或服务端程序发出一个信息,不要求另一方响应。协议采用统一的协议头,协议头包含4个字节,见表4-1:表4-1协议类型协议类型字节0字节1字节2字节3“请求、应答”模式客户端->服务端0x000x010x000x01服务端->客户端0x000x010x000x02“广播”模式客户端->服务端0x000x020x000x01服务端->客户端0x000x020x000x0“请求、应答”模式协议结构请求命令:客户端→服务端注意:对于UPDATE,INSERT,DELETE命令,sql语句可以包含多条语句,语句之间用分号“;”分开。包内容见表4-2:表4-2协议包格式1字节内容默认值取值范围注0协议头(字节0)0x00协议头1协议头(字节1)0x012协议头(字节2)0x003协议头(字节3)0x014命令长度(高字节)0~655355命令长度(低字节)0用户ID标志0xff1用户ID长度(高字节)0..102用户ID长度(低字节)3用户ID(字节1)n<=104用户ID(字节2)用户ID(字节n)0用户名标志0xff1用户名长度(高字节)0..102用户名长度(低字节)3用户名(字节1)n<=104用户名(字节2)用户名(字节n)0操作类型标志0xff1操作类型//0x01:查询//0x02:修改//0x03:插入//0x04:删除//0x05:存储过程//0x11:要求返回查询的下一包数据//其它:其它0SQL语句标志0xff1SQL语句长度(高字节)2SQL语句长度(低字节)3SQL语句内容(字节1)SQL语句内容(字节2)...SQL语句内容(字节m)0列数标志0xff1列数(高字节)0..655352列数(低字节)0列类型标志0xff1第1列类型//0x01:VARCHAR2//0x02:DATE//0x03:NUMBER//其它:其它2第2列类型...k第k列类型表2-5协议包格式2字节内容默认值取值范围备注0协议头(字节0)0x00协议头1协议头(字节1)0x012协议头(字节2)0x003协议头(字节3)0x014命令长度(高字节)0..655355命令长度(低字节)0用户ID标志0xff1用户ID长度(高字节)0..102用户ID长度(低字节)3用户ID(字节1)n<=104用户ID(字节2)用户ID(字节n)0用户名标志0xff1用户名长度(高字节)0..102用户名长度(低字节)3用户名(字节1)n<=104用户名(字节2)用户名(字节n)0操作类型标志0xff1操作类型0x05//0x05:调用存储过程调用存储过程命令0存储过程名称和参数标志0xff应答命令服务端→客户端,返回结果:命令无法识别:返回“0xff0x01”;数据库未启动:返回“0xff0x02”;数据库操作错误:返回“0xff0x03”;命令不完整:返回“0xff0x04”;协议格式见表4-3表4-3应答协议包格式内容默认值取值范围备注0协议头(字节0)0x00协议头1协议头(字节1)0x012协议头(字节2)0x003协议头(字节3)0x024命令长度(高字节)0x005命令长度(低字节)0x0a6操作类型标志0xff7操作类型//0x01:查询//0x02:修改//0x03:插入//0x04:删除//0x05:存储过程//其它:其它8操作结果标志00xff9操作结果标志10x01:命令无法识别0x02:数据库未启动0x03:数据库操作错误0x04:命令不完整其他:未定义为了使代码的独立性更强,不相互耦合,通信协议设计成了一个独立的类,类的定义如下:classProtocolData:publicCObject{public: boolGetQuaryResult(); intGetHeadResult();//得到协议头的类型 intInit(char*p,intlen); intGetColValue(char*aRecord,char*pValue,intcol);//得到指定字段名 intGetNextRecord(char*aRecord);//接收下一条记录 intlengthData; intcurrent_point; intGetOperateType(); intflagEnd;//0:不是组后一包,1:匙最后一包数据 char*m_pBuff; chardata[MAX_COUNT_BUFF]; charaRecord[MAX_COUNT_RECORD]; ProtocolData(); virtual~ProtocolData();}; 通过以上类的设计,充分把协议打包解包所需要的函数都封装起来,从而使代码结构更加清晰。4.2.5数据库设计前面已经介绍本项目采用Oracle11g作为后台数据库管理系统。而不管采用哪一个数据库管理系统,根管理系统的实际需求设计好系统数据库的表结构以及各关系表之间的关联关系才是系统实现的基础。如图4-15是系统数据库中个表之间的关联关系。图4-15数据库表结构数据库端需要设计好数据库表和主键之间的对应关系,并须提供存储过程,满足客户端的多种要求。由于客户端增加、修改、删除过程时,需要改变过程ID,而整个系统是以过程ID来表示顺序过程和并列过程的。一旦一个过程ID进行了修改,其后所有的过程ID应随之修改,故数据库部分除了需要建表之外,还需要提供存储过程。删除过程的存储过程脚本如下:createorreplaceprocedureDeleteProc(PROCID_Valueinvarchar2:=50)ascurrProcIDvarchar2(50);oldProcIDvarchar2(50);newProcIDvarchar2(50);strPrjIDvarchar2(10);strprjNamevarchar2(50);fourProcIDinteger;maxProcIDinteger;stepinteger;newidinteger;TYPEt_cursorISREFCURSOR;v_ProcCountt_cursor;v_procNewCountt_cursor;v_procidproc_cid%TYPE;v_newProcidproc_cid%TYPE;beginstrPrjID:=substr(PROCID_Value,1,2);--取PrjIDifstrPrjID=PROCID_Valuethendeletefromproc_kswhereprocidlikePROCID_Value||'%';deletefromINFO_CRAFT_KSwhereprocidlikePROCID_Value||'%';--删除产品/模块信息表-工艺类表deletefromINFO_HW_KSwhereprocidlikePROCID_Value||'%';--删除产品/模块信息表-硬件类表deletefromINFO_SW_KSwhereprocidlikePROCID_Value||'%';--删除产品/模块信息表-软件类deletefromINFO_TEST_KSwhereprocidlikePROCID_Value||'%';--删除整机/模块功能测试信息表deletefromPOPDEM_KSwhereprocidlikePROCID_Value||'%';--删除用户权限表else--selectprjnameintostrprjNamefromprj_kswhereprjid=strPrjID;selectprjnameintostrprjNamefromproc_kswhereprjid=strPrjIDandrownum<=1;fourProcID:=to_number(substr(PROCID_Value,length(PROCID_Value)-3,4));--取procid后四位转换成数字if(fourProcID>=100)then--计算当前应该是顺序还是并列maxProcID:=9900;step:=100;elsemaxProcID:=99;step:=1;endif;--删除当前需要删除过程的记录及该过程的记录deletefromproc_kswhereprjid=strPrjIDandprocidlikePROCID_Value||'%';deletefromINFO_CRAFT_KSwhereprjid=strPrjIDandprocidlikePROCID_Value||'%';--删除产品/模块信息表-工艺类表deletefromINFO_HW_KSwhereprjid=strPrjIDandprocidlikePROCID_Value||'%';--删除产品/模块信息表-硬件类表deletefromINFO_SW_KSwhereprjid=strPrjIDandprocidlikePROCID_Value||'%';--删除产品/模块信息表-软件类deletefromINFO_TEST_KSwhereprjid=strPrjIDandprocidlikePROCID_Value||'%';--删除整机/模块功能测试信息表deletefromPOPDEM_KSwhereprjid=strPrjIDandprocidlikePROCID_Value||'%';--删除用户权限表openv_ProcCountforselectprocidFROMproc_kswhereto_number(substr(procid,length(procid)-3,4))<=maxProcIDandto_number(substr(procid,length(procid)-3,4))>fourProcIDandlength(procid)=length(PROCID_Value)andsubstr(procid,1,length(procid)-4)=substr(PROCID_Value,1,length(PROCID_Value)-4)ORDERBYto_number(substr(procid,length(procid)-3,4))asc;--开始循环更新procid编号LOOPFETCHv_ProcCountINTOv_procid;EXITWHENv_ProcCount%NOTFOUND;--当前有大于id的记录,需要循环修改id号,同时更新相关表oldProcID:=v_procid;newid:=to_number(substr(v_procid,length(v_procid)-3,4))-step;currProcID:=substr(oldProcID,1,length(oldProcID)-4)||trim(to_char(newid,'0000'));--更新节点表中所有子节点记录openv_procNewCountforselectprocidfromproc_kswhereprocidlikeoldProcID||'%'andprjid=strPrjID;LoopFETCHv_procNewCountINTOv_newProcid;EXITWHENv_procNewCount%NOTFOUND;newProcID:=currProcID||substr(v_newProcid,length(oldProcID)+1,length(v_newProcid)-length(oldProcID)+1);updateproc_kssetprocid=newProcIDwhereprocid=v_newProcidandprjid=strPrjID;endloop;updateproc_kssetprocid=currProcIDwhereprocid=oldProcIDandprjid=strPrjID;updateINFO_CRAFT_KSsetprocid=currProcIDwhereprocid=oldProcID;--更新产品/模块信息表-工艺类表updateINFO_HW_KSsetprocid=currProcIDwhereprocid=oldProcID;--更新产品/模块信息表-硬件类表updateINFO_SW_KSsetprocid=currProcIDwhereprocid=oldProcID;--产品/模块信息表-软件类updateINFO_TEST_KSsetprocid=currProcIDwhereprocid=oldProcID;--整机/模块功能测试信息表updatePOPDEM_KSsetprocid=currProcIDwhereprocid=oldProcID;--用户权限表endloop;endif;endDELETEPROC; 其余的存储过程脚本基本类似,不在叙述。另外系统中的项目表设计如表4-4所示,其余各表的结构不在赘述。表4-4项目表PRJ_KS/*项目表*/编号列名来源数据类型取值范围主键1PrjID/*项目ID*/原始VARCHAR2(长度:10)√2PrjName/*项目名称*/原始VARCHAR2(长度:50)√3BeginDate/*开始时间*/原始DATE4EndDate/*结束时间*/原始DATE5PrjMgr/*项目负责人*/原始VARCHAR2(长度:20)6PrjMem/*项目成员*/原始VARCHAR2(长度:500)7PrjStatus/*项目状态*/原始VARCHAR2(长度:10)“XX”00:中止01:进行中02:完成03:废除8Description/*项目描述*/原始VARCHAR2(长度:1000)9Reserve1/*备用列1*/VARCHAR2(长度:10)10Reserve2/*备用列2*/VARCHAR2(长度:10)两个主键:主键1<PrjID>,主键2<PrjName>4.3本章小结本章为系统具体实现的表述章节,在本章中首先从系统的总体用例图出发对系统的详细设计做了描述。接下来对项目管理系统各功能设计实现做出了逐一的描述其中有客户端的设计实现服务器端的设计实现通信协议的设计实现及数据库的设计实现。
第5章系统测试5.1系统测试定义系统测试,英文是SystemTesting。是把现有被测试系统、计算机硬件环境、外部其他设施以及网络连接等等众多要素结合为一体,进行被测试系统的功能测试性能测试检查系统是否能完成规定需求并对系统运行的整体表现进行评估。当然这种测试需要针对性的,它针对具体系统进行有计划的程序化的测试,其主旨就是以需求定义为标准逐步的对系统各个模块已经整体进行测试。待找出系统漏洞后针对先关问题提出解决方案并组织改善。功能测试是以系统整体需求说明书为依据的黑盒测试,必须涵盖系统所有的内部模块。测试单元并不只是需要测试的系统本身,连带着软件所需的硬件环境、外部设施、一些联合开发的软件系统重要的数据库体系都要进行测试。5.2系统测试相关方法介绍为了保证项目的质量和性能,通常要在项目后期进行系统测试。系统测试是一个很大的概念,有许多不同的方法。下面简单介绍几种比较常用的测试方法。5.2.1恢复测试检测系统的还原能力通常采用恢复测试的方法。系统的还原能力是指从错误状态到正常运行状态的时间,其解决错误的时间越短,其性能越高。模拟失败场景是进行恢复测试的第一步,并观察系统在一定时间内的表现。针对那些可进行自我复原的系统测试人员将对二次初始化、检查点监测、重要信息复原和系统重建等机制等过程进行可行性监测;针对认为操控的复原系统过程,必须统计其恢复时间、恢复成本、恢复可行性。并进行多次试验。5.2.2安全测试检测系统抵御外部攻击的能力通常采用安全测试。为了进行安全测试,通常需要模拟各种系统可能受到的外部攻击方式。这个过程有以下几种方式:通过木马病毒等手段破译用户密码登陆口令等②制定专门的应急机制来防护外部攻击,检测到攻击则自动关闭数据库连接等③在人为造成系统故障的时候,借机侵入系统内部数据库;④通过现有信息以及系统开发人员疏漏外流的信息推测系统安全保护模式并借机侵入。系统的安全性是相对的不是绝对的只要人力时间允许没有系统是不可入侵的,只是侵犯程度的大小区别。所以在这个过程中会主要是统计系统安全机制的相对可靠性。5.2.3性能测试对于有些大型的实时和嵌入式系统,软件大道需求书中所规定的功能需求相对容易,而真正实践中对性能需求的满足则是另一回事。尽管对每一个单元的性能测试的结果满足对个体单元的性能需求,但是系统必定是有众多单元一起组成的它们之间具有一定的连带关系,所以当系统进行集成后系统未必就能达到性能要求。性能测试不应是一个独立的过程其最好伴随着强度测试一起进行。5.2.4强度测试所谓强度就是系统当遇到外部异常情况时的自身调节能力。本测试过程就是要让系统在与自身标准配置不同的环境下运行进而观察系统表现。这个过程可以通过如下方式进行1进行与系统标准的中断时常不符的测试测试系统的健壮性。2按比率增加信息吞吐率,测试系统子模块的运行速度的迟缓程度;3满负荷运行系统占用额定内存进行测试;4进行到运行环境的操作系统的极限观察系统的表现看是否也随之系统停止运行。5.3系统测试过程概述功能开发完毕,系统要进行整体的测试,来检查需求同实现是否匹配。具体测试如下:在用户登录的时候,要求用户名和密码是必须填写的信息。本测试主要是通过对输入的用户信息进行分析与判断,得出预期的输出结果。然后将实际的输出结果与预期的输出结果进行比较,得出最终的结论。5.3.1登录失败的测试测试用例见表表:测试用例用户名密码预期输出结果111111123456注册失败输入以上登录信息以后,页面显示用户登录失败,如图6-1图5-1登录失败5.3.2登录成功的测试表:测试用例用户名密码预期输出结果123456123456登录成功图5-2此时,测试就暂告一个段落了。部署实现:(1)我们要严格按照他给的规范来进行(注意其中的层次关系):
(2)建立好了上面的目录层次关系之后,我们下面的工作就是要对其中的信息进行完善和处理,这里我们要的工作:编写WEB.XML文件:建议拷贝以前有的,这样可以防止出错包括:<?xmlversion="1.0"encoding="UTF-8"?>
<web-appversion="2.4"
xmlns="/xml/ns/j2ee"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/xml/ns/j2ee
/xml/ns/j2ee/web-app_2_4.xsd">
//需要添加的内容<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>这部分的内容是不可以缺少的将编写好的servlet程序编译后的文件XX.class文件拷贝到classes文件夹下面回到WEB.XML文件当中,这时我们就开始进行关联这上面的“//插入内容”这个地方加上:<servlet>
<servlet-name>MyFirstServlet</servlet-name>
<servlet-class>XX</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyFirstServlet</servlet-name>
<url-pattern>/fang</url-pattern>
</servlet-mapping>说明几点:A.注意这里的两个NAME的值一定要保持一致,但是可以是随意的一个名字,他是给tomcat解析用的。B.这里的'XX'一定是刚才拷贝过来的文件的名字且不带.class,另外我们也要注意的就是这里我们使用的是裸体类,但是如果说他不是裸体类的话,比如在com.fjg.test包中,那么我们先就要建立相应的层次,然后把class文件放到他下面去,这时我们在上面就不能够直接用“XX”而是要把它的包名全部带上,应该写成“com.fjg.text.XX”C.“/fang”这里是我们在地址栏中进行输入时的地址标签,也就是访问它的url是我们自己定义的,这个是根据实际情况进行的。5.4本章小结本章为表述系统测试环节的单元,首先本章介绍了系统测试的相关知识及常用的测试方法,并通过身份认证等测试用例对系统的测试进行了简要的介绍。
结论通过对该企业管理系统的完善,加强了企业管理的力度。实现了企业对用户信息的分类管理以及企业对众多项目信息的科学管理。对于企业管理人员来说,通过企业管理系统对企业进行有效管理,可以更高效利用现有的有限资源,从项目开发整体角度,运用系统的理论、方法对工程项目开发到运作整个流程中的全部工作进行高效的管理。在该系统的应用过程中,促进了管理者对项目开发过程中各种资源的有效管理,实现了跟踪和控制项目开发进度,完成了项目开发中各部分的责任追踪[23-25]。在企业管理系统中蕴含着科学的项目管理理念,整合了项目管理实践经验,并将这些这些理念和实践经验用于规范企业的管理行为,形成了有效的企业项目管理体系。本企业管理系统采取了C/S架构,结合MFC技术,利用Orcale承载数据库。通过综合运用各类技术,充分发挥各类技术的优势,形成了一款极具高效管理效果的企业管理系统。为了提高系统的稳定性和性能,采取了客户机/服务器的结构,不再仅使用服务器进行数据的处理,而是将任务分配给客户端,服务器只用于接收客户端的结果,提高了客户端的工作效率和相应速度,缓解了服务器的压力。本系统根据企业特点,只在企业内部局域网范围内进行部署实施,不仅有助于系统的运行阶段的维护,也对企业的数据安全提供了一定的保护环境。在客户体验方面,基于C/S架构的系统,界面表现形式更加丰富,与业务逻辑贴合更加紧密。而基于Orcale的数据库处理,更加适合作为客户机/服务器系统中服务器端的数据库系统。基于上述技术优势,本系统集合了客户端协助处理、服务器快速响应、操作界面丰富、数据处理灵便等特点,最终为企业的快速、科学管理,提供了必要的手段。本企业项目管理系统完成了客户端模块、服务器端模块、维护模块、通信协议模块以及数据库的建立等功能,虽然基本实现了客户端的协助处理、服务器的快速处理及快速响应、自定义通信协议的构造以及复杂数据的处理等功能,但是本企业管理系统还存在着一些不足。在企业管理系统中,没有融入企业管理的全局信息流的思想,容易出现企业管理的信息孤岛。系统的功能和结构与企业整体组织结构和企业运作特点未能实现紧密联系;系统的操作流程和企业的项目管理方法贴合不够紧密;系统用户为完全采用权限管理模式,没有实现依据不同权限对企业不同层面和不同部门的针对性管理,系统的安全性管理不够完备;对于数据库还没有实现灾难备份功能;历史数据仅限于存储和查看之用,缺乏对历史数据的科学分析,造成历史数据的浪费。论文在撰写的时候,本企业管理系统虽然已经有部分功能已经投入使用,但是针对不完善的功能还在进行二期研发。还有些工作需要进一步完成:(1)针对二期开发,进一步完善不明确的需求。(2)系统多线程方面还不够稳定,需要进一步优化代码。(3)融合ERP的部分管理理念,完善系统中各部分之间信息流的传递过程,减少信息孤岛的产生,进一步完善符合企业运作特点管理功能。(4)在熟知企业管理组织结构的前提下,形成一整套科学完备的权限管理制度,进一步提高企业的安全管理模式。(5)针对可挖掘的企业历史数据信息,增加企业历史数据的分析功能。(6)根据企业运营周期,定期进行数据的灾难备份。希望在以后企业管理系统的设计实现中弥补上述的不足。
参考文献马建峰,张广泉.基于C/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026贵州毕节大方大山乡人民政府招聘沙土村安置点自管委主任的1人备考题库含答案详解(突破训练)
- 2026云南楚雄州武定县公安局发窝派出所招聘辅警1人备考题库及答案详解(夺冠系列)
- 2026四川三江汇海商业保理有限公司第一批员工招聘6人备考题库附答案详解(综合题)
- 2026年来安县公开招聘2名政府购买服务工作人员备考题库含答案详解(b卷)
- 2026重庆市万州区白羊镇人民政府招聘非全日制公益性岗位9人备考题库附参考答案详解(典型题)
- 雨课堂学堂在线学堂云《食品酶学(江南)》单元测试考核答案
- 汽车维修厂维修管理制度
- 4.4+戏曲之美+课件高中音乐湘教版(2019)必修音乐鉴赏下篇
- 医院陪护服务合同
- 2026云南昆明华航技工学校蒙自校区招聘12人备考题库含答案详解(综合卷)
- 中考数学专题复习-等腰三角形与直角三角形(含答案)
- 航道巡查工作制度
- 电动车安全责任制度
- 酒店前台服务标准流程及客户接待指导
- GB/T 46914-2025养老机构生活照料服务基本规范
- 2025年卫生健康行业网络与数据安全技能大赛备赛试题附答案
- 如何做好科研实验记录课件
- 2025年宣城市广德县辅警招聘考试题库附答案解析
- 2026年咨询工程师咨询宏观经济考前冲刺重点知识考点总结笔记
- 中学生防诈骗安全课件
- 2025年青岛市中考生物试卷真题(含答案)
评论
0/150
提交评论