基于MVC模式电信IP网计费系统_第1页
基于MVC模式电信IP网计费系统_第2页
基于MVC模式电信IP网计费系统_第3页
基于MVC模式电信IP网计费系统_第4页
基于MVC模式电信IP网计费系统_第5页
已阅读5页,还剩78页未读 继续免费阅读

下载本文档

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

文档简介

基于MVC模式电信IP网/计费系统(NetCTOSS)摘要运营支撑系统(OperationSupportSystem,缩写成OSS)已经成为电信运营管理不可缺少的组成部分。它是借助IT手段实现对电信网络和电信业务的管理,以达到支撑运营和改善运营的目标。近几年OSS得到了业界的极大关注,曾被多家主流媒体列为几大流行技术之一。本系统采用由亚信公司提供的“电信用户管理和计费系统NetCTOSS”,该系统已经在中国共用互联网ChinaNet和上海热线等多个大型软件工程中应用。该系统是基于B/S模式的MVC架构,在模块于模块之间达到了高内聚和低偶合的软件设计要求,该系统的另一特点是底层由C++跟Proc实现的C/S模式,这样可以达到在数据根采集和整合上的效率,该系统是一个典型的基于Unix平台、Oracle数据库、Web界面,融合Java和C++两种语言实现的大型软件项目。关键词:C/S;MVC;Oracle;Java,C++和Proc;NetCTOSS;目录TOC\o"1-3"\h\u第一章绪论 3第二章开发环境及开发工具的介绍 42.1JDK概述 42.1.1安装JDK 42.1.2JDK环境变量的配置 42.2Eclipse概述 52.2.1Eclipse的结构和内核 52.3MyEclipse的概述 62.4Tomcat概述 62.4.1安装和配置Tomcat 72.5Oracle的概述 82.5.1Oracle9i的特性 8第三章完成电信运营支撑系统所用到的技术 83.1Jsp概述 83.1.1Jsp的功能 83.1.2JSP的特点 93.2Struts概述 103.2.1Struts的体系结构 103.2.2使用Struts的主要优点与缺点 113.3Spring概述 113.3.1Spring的简介 123.3.2Spring的架构性的好处 123.4Hibernate概述 123.4.1Hibernate技术 123.4.2Hibernate的工作方式 13第四章系统需求分析 144.1系统设计思想 145.2业务描述 155.3系统的界面要求分析 155.4系统的角色及功能分析 15第五章系统总体设计 175.1系统的总体流程 175.2系统的模块划分 185.3NetCtoss系统的功能要求 185.4系统实体间的联系 195.5NetCtoss系统的数据处理 19第五章NetCtoss详细设计 215.1数据库设计 215.2模块的具体实现 265.3遇到的问题 40结论与体会 40致谢 41参考文献 41附录一:英文资料原文 42附录二:英语资料译文 68第一章 绪论 当前.在电信领域,由于电信市场的开放和市场竞争的日益激励,为了提高电信企业的服务水平,降低成本,提高效益和客户满意度,电信企业建设和投资的重点已经从网络基础设施转向以电信软件为核心的电信信息基础设施,其中电信运营支撑系统(OSS,OperationSupportSystem)是建设和投资的重中之重。这也吸引拉越来越多的国内企业甚至国际上的专业公司投入到这个市场上来,带动拉电信运营支撑系统在技术上的飞速发展。 电信运营支撑系统涉及计算机软件技术和通信技术的俩个科学领域,经过国内外几十年的发展,已经形成了自身比较完善的体系结构。目前发展迅速,应用广泛,技术更新比较会,用“日新月异”来形容一点都不过分。 其实电信运营支撑系统存在的问题归纳起来是缺乏理论的研究和指导,缺乏有效的技术支持,同时电信义务支撑本身又是研究的焦点。它需要计算机与通信技术的集合,需要具有深厚的通信义务基础的计算机软件人才的参加,电信运营支撑系统目前值得深入研究的内容很多,重点是在如何将最新的计算机软件技术用在电信义务支撑上。第二章开发环境及开发工具的介绍2.1 JDK概述 JDK中包含了Java开发中心必需的工具和Java程序运行环境(JRE)。可以从SUN公司网站免费下载JDK1.4.2。2.1.1安装JDKJDK的安装特别简单,和安装应用程序软件没什么区别,值得注意的是JDK的安装路径一定要设好,方便以后环境变量的设置。2.1.2JDK环境变量的配置安装好JDK后,还需要在环境变量中进行对应的配置。就以本次毕业设计为例。JDK安装在D:\j2sdk1.4.2。主要进行以下配置:(1)设置JAVA_HOME环境变量(2)设置CLASSPATH环境变量(3)更新PATH环境变量的值JAVA_HOME表示Java安装目录,其他的应用程序如果需要使用Java运行环境,首先获得JAVA_HOME变量的信息,然后确定执行的路径。在鼠标右键单击“我的电脑”,在属性栏的高级选项中可以选择环境变量的设置,新建一个系统变量或者用户变量,名称为JAVA_HOME,它的值为D:\j2sdk1.4.2。如图:图2.1JAVA_HOME变量设置然后建立一个CLASSPATH的变量,它表示搜索Java类的路径,这个路径可以包含一些Jar归档文件,也可以是一个目录。在应用程序执行是,往往会动态地在CLASSPATH中添加一些自己需要的路径,本机上CLASSPATH的值为“.;d:\j2sdk1.4.2\lib\tools.jar;d:\j2sdk1.4.2\lib\dt.jar;”(.;一定不能少)。图2.2CLASSPATH变量设置当以上都配置好了,我们可以测试下Java环境是否配置成功。我们可以在[运行]中进入[命令提示符cmd]下面。输入java–version回车,看是否能看到当前JDK的版本。如果看见就配置成功了。2.2Eclipse概述Eclipse是以个集成开发环境(IntegratedDevelopmentEnvironment)。其前身是IBM的VisualAgeforJava(VA4J),IBM投入了3千万美元。Eclipse是可扩展的体系结构,可以集成不同软件开发供应商开发的产品,将他们开发的工具和组件加入到Eclipse平台中。

随Java应用的广泛,各大主要软件供应商都参与到Eclipse架构开发中,使得Eclipse插件数量与日增加。其中,IBM的WebSphereStudioWorkbench是突出的例子。Eclipse平台的免费,架构的成熟,行业协会Eclipse基金会的支持,使得很多的Java开发采用了Eclipse架构。如今,IBM通过起附属的研发机构ObjectTechnologiesInternational(OTI),继续引领Eclipse开发。2.2.1Eclipse的结构和内核

插件(plug-in)是遵循一定规范的应用程序结构编写出来的程序,也成为扩展,不同于组件。Eclipse正是一个精心设计的、可扩展的核心结构。通过插件的形式,将根据自己需要选择的扩展开发工具集成到Eclipse平台核心。因此使得可以避免因过去不兼容工具带来的麻烦,降低开发出成本,大幅度提高工作效率。

Eclipse本身作为一个开放源码的软件项目,它主要包含3个子项目:①平台子项目,②Java开发工具(JDT-java)子项目,③插件开发环境(PDE-plug-in)子项目。其中,Java开发工具JDT为开发人员提供大量的集成工具集,主要为Java应用程序提供编程接口(API)。Eclipse软件开发工具箱(SDK)是主要有Eclipse本身的项目软件和其他一些开发源吗的第三方软件组成。次者,插件开发环境(JDT)则为插件开发和测试提供相应的环境,如:创建插件清单文件、定义扩展点等。

其他的Java集成开发环境有Jbuilder、WebSpherStudio、NetBeans。然而Eclipse以其强大的可扩展性和开放性脱颖而出,拥有为数众多的支持者,也被许多大的企业所青睐。2.3MyEclipse的概述MyEclipse企业级工作平台(MyEclipseEnterpriseWorkbench,简称MyEclipse)是对EclipseIDE的扩展,利用它我们可以在数据库和J2EE的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的J2EE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML,Struts,JSF,CSS,Javascript,SQL,Hibernate。

在结构上,MyEclipse的特征可以被分为7类:

1.J2EE模型

2.WEB开发工具

3.EJB开发工具

4.应用程序服务器的连接器

5.J2EE项目部署服务

6.数据库服务

7.MyEclipse整合帮助

对于以上每一种功能上的类别,在Eclipse中都有相应的功能部件,并通过一系列的插件来实现它们。MyEclipse结构上的这种模块化,可以让我们在不影响其他模块的情况下,对任一模块进行单独的扩展和升级。

简单而言,MyEclipse是Eclipse的插件,也是一款功能强大的J2EE集成开发环境,支持代码编写、配置、测试以及除错。2.4 Tomcat概述Tomcat服务器是当今使用最广泛的Servlet/JSP服务器。它运行稳定,性能可靠,是学习和中小企业的最佳选择,而且是开源程序,下载免费,大大降低系统的开发成本。我们可以从/tomcat下载Tomcat5.0服务器。2.4.1安装和配置TomcatTomcat安装也很方便。跟其他的安装软件差不多,主要是Tomcat环境的配置,本次设计Tomcat安装目录是D:\Tomcat。安装完成以后,把Tomcat里面的类包(*.jar文件)包含到环境变量的CLASSPATH里面。这些Jar文件都在D:\Tomcat\common\lib目录下。然后运行Tomcat程序,启动Tomcat。在IE中,输入:8080或者http://localhost:8080。如果出现Tomcat的欢迎页面,就表示Tomcat的安装和配置是正确的。测试Tomcat是否安装成功当Tomcat配置成功以后,就要在%Tomcat%目录下的webapps下面建立一个虚拟目录,来方便将来程序的开发。本次设计是电信运营支撑系统,所以我们在webapps下面新建立一个叫Netctoss的文件夹,然后使用TomcatAdministratortools来建立关于netctoss的虚拟目录。这样以后我们的程序就可以在netctoss文件夹下面进行,当设计完成以后,只要在IE里面输入http://localhost:8080/Netctoss就可以看到你所设计的系统程序的实现了[3]。图2.4TomcatAdministratortool页面和hospital的虚拟目录2.5Oracle的概述ORACLE9i是以高级结构化查询语言(SQL)为基础的大型关系数据库,通俗地讲它是用方便逻辑管理的语言操纵大量有规律数据的集合。是目前最流行的客户/服务器(CLIENT/SERVER)体系结构的数据库之一。2.5.1Oracle9i的特性

ORACLE9i作为第一套完整、简单的软件基层结构,展现了前所未有的可扩展性、高性能和应用程序所需要的稳定性,是专门为因特网系统提供的新一代智能型集成应用软件。

ORACLE9i增强了ORACLE的能力,使之在低档软硬件平台上用较少的资源就可以支持更多的用户,而在高档平台上可以支持成百上千个用户。它提供了基于角色(ROLE)分工的安全保密管理。在数据库管理功能、完整性检查、安全性、一致性方面都有良好的表现。支持大量多媒体数据,如二进制图形、声音、动画以及多维数据结构等。提供了与第三代高级语言的接口软件PRO*系列,能在C,C++等主语言中嵌入SQL语句及过程化(PL/SQL)语句,对数据库中的数据进行操纵。加上它有许多优秀的前台开发工具如POWERBUILD、SQL*FORMS、VISIABASIC等,可以快速开发生成基于客户端PC平台的应用程序,并具有良好的移植性。

ORACLE9i数据库在物理上是存储于硬盘的各种文件。它是活动的,可扩充的,随着数据的添加和应用程序的增大而变化。在逻辑上是由许多表空间构成。主要分为系统表空间和非系统表空间。非系统表空间内存储着各项应用的数据、索引、程序等相关信息。第三章完成电信运营支撑系统所用到的技术3.1Jsp概述JSP(IAVASERVERPAGES)是由Sun公司在java语言上开发出来的一种动态网页制作技术,其可使您可以将网页中的动态部分和静态的HTML相分离。您可以使用平常得心应手的工具并按照平常的方式来书写HTML语句。然后,将动态部分用特殊的标记嵌入即可,这些标记常常以“<%”开始并以“%>”结束3.1.1Jsp的功能JSP技术是由Servlet技术发展起来的,自从有了JSP后,在Java服务器端编程中普遍采用的就是JSP,而不是Servlet。因为JSP在编写表示页面时远远比Servlet简单,并且不需要手工编译,目前Servlet主要用于做视图控制器,处理后台应用等。由于JSP构建在Servlet上。所以它有Servlet所有强大的功能。在传统的网页HTML文件(*.htm,*.html)中加入Java程序片段(Scriptlet)和JSP标记,就构成了JSP网页(*.jsp)。JSP基于强大的Java语言,具有良好的伸缩性,与JavaEnterpriseAPI紧密地集成在一起,在网络数据库应用开发领域具有得天独厚的优势,基于Java平台构建网络程序已经被越来越多的人认为是未来最有发展前途的技术。从JSP这几年的发展来看,JSP已经获得了巨大的成功,它通过和EJB等J2EE组件进行集成,可以编写出处理具有大的伸缩性,高负载的企业级应用。JSP技术在多个方面加速了动态Web页面的开发。3.1.2JSP的特点(1)将内容的生成和显示进行分离使用JSP技术,Web页面开发人员可以使用HTML或者XML标识来设计和格式化最终页面。使用JSP标识或者小脚本来生成页面上的动态内容。生成内容的逻辑被封装在标识和JavaBean组件中,并且捆绑在小脚本中,所有的脚本在服务器端运行。如果核心逻辑被封装在标识和Bean中,那么其他人,如Web管理人员和页面设计者,能够编辑和使用JSP页面,而不影响内容的生成。在服务器端,JSP引擎解释JSP标识和小脚本中,生成所请求的内容,并且将结果以HTML页面的形式发送回浏览器。这有助于作者保护自己的代码,而又保护任何基于HTML的Web浏览器的完全可用性。(2)生成可重用的组件绝大多数JSP页面依赖于可重用的,跨平台的组件来执行应用程序所要求的更为复杂的处理。开发人员能够共享和交换执行普通操作的组件,或者使用这些组件为更多的使用者或者客户团体所使用。基于组件的方法加速了总体开发过程,并且使得各种组织在他们现有的技能和优化结果的开发努力中得到平衡。(3)采用标识简化页面开发Web页面开发人员不一定都熟悉脚本语言的编程人员。JavaServerPage技术封装了许多功能,这些功能是在易用的,与JSP相关的XML标识中进行动态内容生成是所需要的。标准的JSP标识能够访问和实例化JavaBean组件,设置或者检索组件属性,下载Applet,以及执行同其他方法更难于编码或耗时的功能。通过开发定制标识库。这使得Web页面开发人员能够使用熟悉的工具和如同标识一样执行特定功能的构件来工作。(4)JSP能提供所有的Servlets功能与Servlet相比,JSP能提供所有的Servlets功能,它比用Println书写和修改HTML更加方便。此外,您可以更明确地进行分工,Web页面设计人员编写HTML,只需要留出空间让Servlets程序员插入动态部分即可。(5)健壮的存储管理和安全性由于JSP页面内置脚本语言是基于Java编程语言的,而且所有的JSP页面都被编译成为JavaServlet,JSP页面就具有Java技术的所有优点,包括健壮的存储管理和安全性。(6)一次编写,随处运行作为Java平台的一部分,JSP拥有Java编程语言“一次编写,随处运行”的特点。随着越来越多的供应商将JSP支持添加到他们的产品中,您可以使用自己所选择的服务器和工具,但并不影响当前的应用。(7)JSP的平台适应性更广这是JSP与ASP的优越之处。几乎所有的平台都支持Java,JSP+Beans,它们可以在任何平台下通行无阻。WindowsNT下的IIS通过一个插件就能支持JSP,例如JRUN或者ServletExec,著名的Web服务器Apache已经能够支持JSP。由于Apache广泛应用在WindowsNT,UNIX和Linux上,因此JSP有更广泛的运行平台。从一个平台移植到另一个平台,JSP和JavaBeans甚至不用重新编译,因为Java字节码都是标准的字节码,与平台无关。(8)简单易学随着JSP2.0中标签语言的出现,即使不懂Java的程序员也能编写出功能完善的JSP应用。3.2Struts概述Struts就是在JSPModel2的基础实现了MVC设计模式的WEBFramework。基于Struts构架的WEB应用程序基本上符合JSPModel2的设计标准,可以说是MVC设计模式的一种变化类型。整个Struts大约有15包,近200个类所组成。

Struts这个名字来源于在建筑和旧式飞机中使用的支持金属架。它的目的是为了帮助你减少在运用MVC设计模型来开发Web应用的时间。你仍然需要学习和应用该架构,不过它将可以完成其中一些繁重的工作。如果想混合使用Servlets和JSP的优点来建立可扩展的应用,Struts是一个不错的选择。3.2.1Struts的体系结构

Struts有其自己的控制器(Controller),同时整合了其他的一些技术去实现模型层(Model)和视图层(View)。在模型层,Struts可以很容易的与数据访问技术相结合,包括EJB,JDBC和ObjectRelationBridge。在视图层,Struts能够与JSP,VelocityTemplates,XSL等等这些表示层组件想结合。

Strutsframework是MVC模式的体现,下面我们就从分别从模型、视图、控制来看看struts的体系结构(Architecture)。下图显示了strutsframework的体系结构响应客户请求时候,各个部分工作的原理。1:从视图角度(View)

主要由JSP建立,struts自身包含了一组可扩展的自定义标签库(TagLib),可以简化创建用户界面的过程。目前包括:BeanTags,HTMLTags,LogicTags,NestedTags,TemplateTags这几个Taglib。有关它们的详细资料请参考struts用户手册.2:从模型角度(Model)

模型主要是表示一个系统的状态(有时候,改变系统状态的业务逻辑操作也也划分到模型中)。在Struts中,系统的状态主要有ActiomFormBean体现,一般情况下,这些状态是非持久性的。如果需要将这些状态转化为持久性数据存储,Struts本身也提供了Utitle包,可以方便的与数据库操作.3:从控制器角度(Controller)

在Strutsframework中,Controller主要是ActionServlet,但是对于业务逻辑的操作则主要由Action、ActionMapping、ActionForward这几个组件协调完成(也许这几个组件,应该划分到模型中的业务逻辑一块)。其中,Action扮演了真正的业务逻辑的实现者,而ActionMapping和ActionForward则指定了不同业务逻辑或流程的运行方向。3.2.2使用Struts的主要优点与缺点优点Struts跟Tomcat、Turbine等诸多Apache项目一样,是开源软件,这是它的一大优点。使开发者能更深入的了解其内部实现机制。除此之外,Struts的优点主要集中体现在两个方面:Taglib和页面导航。Taglib是Struts的标记库,灵活动用,能大大提高开发效率。另外,就目前国内的JSP开发者而言,除了使用JSP自带的常用标记外,很少开发自己的标记,或许Struts是一个很好的起点。关于页面导航使系统的脉络更加清晰。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。尤其是当另一批开发者接手这个项目时,这种优势体现得更加明显。缺点Taglib是Struts的一大优势,但对于初学者而言,却需要一个持续学习的过程,甚至还会打乱网页编写的习惯,但是当你习惯了它时,你会觉得它真的很棒;Struts将MVC的Controller一分为三,在获得结构更加清晰的同时,也增加了系统的复杂度;它对类和一些属性、参数的命名显得有些随意,给使用带来一些不便;3.3Spring概述Spring的核心是个轻量级容器(container),实现了IoC(InversionofControl)模式的容器,Spring的目标是实现一个全方位的整合框架,在Spring框架下实现多个子框架的组合,这些子框架之间彼此可以独立,也可以使用其它的框架方案加以替代,Spring希望提供one-stopshop的框架整合方案。3.3.1Spring的简介Spring定位的领域是许多其他流行的framework没有的。Spring关注提供一种方法管理你的业务对象。.Spring是全面的和模块化的。Spring有分层的体系结构,这意味着你能选择使用它孤立的任何部分,它的架构仍然是内在稳定的。因此从你的学习中,你可得到最大的价值。例如,你可能选择仅仅使用Spring来简单化JDBC的使用,或用来管理所有的业务对象。.它的设计从底部帮助你编写易于测试的代码。Spring是用于测试驱动工程的理想的framework。Spring对你的工程来说,它不需要一个以上的framework。Spring是潜在地一站式解决方案,定位于与典型应用相关的大部分基础结构。它也涉及到其他framework没有考虑到的内容。尽管它仅仅是一个从2003年2月才开始的开源工程,但Spring有较长的历史根基。这个开源工程是起源自我在2002年后期出版的《ExpertOne-on-OneJ2EE设计与开发》书中的基础代码。这本书展示了Spring背后的基础架构。然而,这个基础架构的概念要追溯到2000年的早些时候,并且反映了我为一系列成功的商业工程开发基础结构的经验。从2003年1月,Spring已经落户于SourceForge上。现在有10个开发人员,其中6是高度投入的积极分子。3.3.2Spring的架构性的好处Spring能有效地组织你的中间层对象,无论你是否选择使用了EJB。如果你仅仅使用了Struts或其他的包含了J2EE特有APIs的framework,你会发现Spring关注了遗留下的问题。Spring能消除在许多工程上对Singleton的过多使用。根据我的经验,这是一个主要的问题,它减少了系统的可测试性和面向对象特性。Spring能消除使用各种各样格式的属性定制文件的需要,在整个应用和工程中,可通过一种一致的方法来进行配置。曾经感到迷惑,一个特定类要查找迷幻般的属性关键字或系统属性,为此不得不读Javadoc乃至源编码吗?有了Spring,你可很简单地看到类的JavaBean属性。倒置控制的使用(在下面讨论)帮助完成这种简化。Spring能通过接口而不是类促进好的编程习惯,减少编程代价到几乎为零。Spring被设计为让使用它创建的应用尽可能少的依赖于他的APIs。在Spring应用中的大多数业务对象没有依赖于Spring。使用Spring构建的应用程序易于单元测试。Spring能使EJB的使用成为一个实现选择,而不是应用架构的必然选择。你能选择用POJOs或localEJBs来实现业务接口,却不会影响调用代码。Spring帮助你解决许多问题而无需使用EJB。Spring能提供一种EJB的替换物,它们适于许多web应用。例如,Spring能使用AOP提供声明性事务而不通过使用EJB容器,如果你仅仅需要与单个的数据库打交道,甚至不需要JTA实现.Spring为数据存取提供了一致的框架,不论是使用JDBC或O/Rmapping产品(如Hibernate)。Spring确实使你能通过最简单可行的解决办法解决你的问题。这些特性是有很大价值的。3.4Hibernate概述Hibernate在对象和关系型之间建立起一座桥梁,使得开发人员可以方便、快捷地进行持久化开发。Hibernate的第一个正式版本发布于2001年末;2003年6月Hibernate2发布,这一版本提供了对大多数数据库的支持;2003年末Hibernate被JBoss吸纳;2005年3月Hibernate3正式发布,至此,Hibernate获得了巨大的成功。Hibernate使用起来非常简单,这也是Hibernate作者GavinKing的一贯思想。3.4.1Hibernate技术大多数应用程序都需要处理数据。Java应用程序运行时,往往把数据封装为相互连接的对象网络,但是当程序结束时,这些对象就会消失在一团逻辑中,所以需要有一些保存它们的方法。有时候,甚至在编写应用程序之前,数据就已经存在了,所以需要有读入它们和将其表示为对象的方法。手动编写代码来执行这些任务不仅单调乏味、易于出错,而且会占用整个应用程序的很大一部分开发工作量。优秀的面向对象开发人员厌倦了这种重复性的劳动,他们开始采用通常的“积极”偷懒做法,即,创建工具,使整个过程自动化。对于关系数据库来说,这种努力的最大成果就是对象/关系映射(ORM)工具。这类工具有很多,从昂贵的商业产品到内置于J2EE中的EJB标准。然而,在很多情况下,这些工具具有自身的复杂性,使得开发人员必须学习使用它们的详细规则,并修改组成应用程序的类以满足映射系统的需要。由于这些工具为应付更加严格和复杂的企业需求而不断发展,于是在比较简单和常见的场景中,使用它们所面临的复杂性反而盖过了所能获得的好处。这引起了一场革命,促进了轻量级解决方案的出现,而Hibernate就是这样的一个例子。

3.4.2Hibernate的工作方式Hibernate不会对您造成妨碍,也不会强迫您修改对象的行为方式。它们不需要实现任何不可思议的接口以便能够持续存在。惟一需要做的就是创建一份XML“映射文档”,告诉Hibernate您希望能够保存在数据库中的类,以及它们如何关联到该数据库中的表和列,然后就可以要求它以对象的形式获取数据,或者把对象保存为数据。与其他解决方案相比,它几乎已经很完美了。它实际上相当直观。应用程序对象中的属性以一种简单而自然的方式与正确的数据库结构相关联。运行时,Hibernate读取映射文档,然后动态构建Java类,以便管理数据库与Java之间的转换。在Hibernate中有一个简单而直观的API,用于对数据库所表示的对象执行查询。要修改这些对象,(一般情况下)只需在程序中与它们进行交互,然后告诉Hibernate保存修改即可。类似地,创建新对象也很简单;只需以常规方式创建它们,然后告诉Hibernate有关它们的信息,这样就能在数据库中保存它们。HibernateAPI学习起来很简单,而且它与程序流的交互相当自然。在适当的位置调用它,就可以达成目的。它带来了很多自动化和代码节省方面的好处,所以花一点时间学习它是值得的。而且还可以获得另一个好处,即代码不用关心要使用的数据库种类(否则的话甚至必须知道)。有的公司就曾有过在开发过程后期被迫更换数据库厂商的经历。这会造成巨大的灾难,但是借助于Hibernate,只需要简单地修改Hibernate配置文件即可。

这里的讨论假定您已经通过创建Hibernate映射文档,建立了一个关系数据库,并且拥有要映射的Java类。有一个Hibernate“工具集”可在编译时使用,以支持不同的工作流。例如,如果您已经拥有Java类和映射文档,Hibernate可以为您创建(或更新)必需的数据库表。或者,仅仅从映射文档开始,Hibernate也能够生成数据类。或者,它可以反向设计您的数据库和类,从而拟定映射文档。还有一些用于Eclipse的alpha插件,它们可以在IDE中提供智能的编辑支持以及对这些工具的图形访问。

如果您使用的是Hibernate2环境,这些工具鲜有提供,但是存在可用的第三方工具。第四章系统需求分析4.1系统设计思想《电信运营计费系统-NetCtoss》是利用J2EE平台下的WEB技术设计和运行.通过利用C++跟PL/SQL从AAA服务器上采集数据然后整和到中央数据库里,供用户和管理员进行大量的查询帐单和帐户.其中持久层采用封装JDBC的Hibernate框架,数据库采用Oracle9i,并用Struts作为控制器,页面显示需要JSP技术,并且用Spring框架整和,完成企业级应用.系统业务模型如下:配置信息配置信息Web管理因特网加工处理计费信息loginname&passwordLogFileWeb管理因特网加工处理计费信息loginname&passwordLogFileMIBMIBWeb查询Web查询IP网用户AAAAAAWeb查询统计信息Web查询统计信息WebWeb管理根据业务模型图我们可以清楚的了解整个系统的流程:客户通过网络登陆到服务器。服务器中含有一个配置文件,这个配置文件中包含用户的姓名和密码。然后服务器根据这个配置文件来验证用户的姓名和密码,每次用户登陆的时候,服务器就会自动在配置文件中查找,看有没有匹配的。如果有,则让其登入,没有则不受理这个请求。与此同时,服务器中还有一个文件,是用来记录用户的登陆和退出的时间,和当前登陆的是哪个用户,以便后来在采集数据中使用。当用户登陆到出租的服务器后,用户就可以进行服务器所提供相应的操作了。5.2 业务描述业务模型描述(3P模型):Products(产品)OpenLab在线试验室出租业务Pricing(定价)定价一:OpenLab月租费:30元,使用费:3元/小时定价二:OpenLab月租费:50元,使用费:2元/小时定价三:。。。。Promotion(促销)例如:一次性购买2年服务,OpenLab月租费和使用费打八折OpenLab月租费:24元OpenLab使用费:2.4元/小时5.3系统的界面要求分析 系统必须给出一个初始的管理员帐号跟密码,然后管理员在为其他的用户分配帐号跟密码,然后用户就可以登录系统,进入各自的操作界面,因此系统主页面应该能自动进行身份判别,按照访问者的身份自动进入其相应的操作界面。所以系统的登录截面应该提供最少俩种身份:普通用户管理员 5.4 系统的角色及功能分析 1.netct_oss系统应具有三个角色:(1).管理员(2).用户2.netct_oss系统角色的功能分析1、超级管理员应该具有的功能1)管理员开通管理:管理用户登陆NetCTOSS的帐号,包括帐号开通、暂停(加锁)、恢复、删除。2)管理员资料管理:管理管理员资料,包括姓名、身份证号码、住址等。3)管理员权限管理:改变管理员的各类权限。2、普通管理员具有的功能增、删、改、查自己的信息,2)查看自己的权限,并且根据所具有的权限管理有关内容。3、用户应该具有的功能增、删、改、查用户信息第五章系统总体设计5.1系统的总体流程总体流程图:T_Detail_xT_Detail_xT_dayT_dayT_day_xT_day_xT_month_xOpenlab1Openlab3Openlab4Openlab6serverclient采集系统T_yearT_monthPL/SQLT_UsersT_Adm验证验证删除修改查询添加删除修改查询添加管理员T_user_services1*T_Pricing*1删除修改查询添加1T_month_xOpenlab1Openlab3Openlab4Openlab6serverclient采集系统T_yearT_monthPL/SQLT_UsersT_Adm验证验证删除修改查询添加删除修改查询添加管理员T_user_services1*T_Pricing*1删除修改查询添加1T_year_xT_year_x**系统的模块划分电信运营支撑系统电信运营支撑系统账务管理模块账务管理模块用户管理模块用户自服务模块管理员管理模块资费模块帐单管理模块数据采集数据整合用户管理模块用户自服务模块管理员管理模块资费模块帐单管理模块数据采集数据整合5.3NetCtoss系统的功能要求1>采集系统:功能描述:该系统主要功能是将电信服务器上的计费文件中所有用户的消费记录采集并且整理出来,然后插入到数据库中。从功能上讲,该系统共分为六个模块,分别是采集模块,入库模块,配置模块,日志模块,备份模块和网络模块。从部署运行方面讲该采集系统分为客户端和服务器端两个部分。客户端部署在电信服务器上,用于采集和整理计费文件中的原始记录并把结果发送到服务器端。服务器端用于接收从客户端发送过来的数据,并持久化到数据库中相应的表中。2>整和系统:功能描述:该系统负责将数据库中的用户原始的消费数据进行整合形成可供用户和管理查询的帐单,如日清单,月报表,年报表,以及仅供管理员查询的帐务清单,主要用于考察电信服务器的运行情况。3>WEB系统:该系统可供用户和管理员查询相关内容。通过登录该系统,用户可以完成查询帐单,修改个人信息,浏览电信运营商提供的各种资费服务。管理员可以完成查询所有用户帐单,修改管理员信息,对用户进行管理(开通,关闭,删除用户帐号),对管理员进行管理(开通,关闭,删除管理员帐号),修改资费项目,查看电信服务器运行情况。根据以上功能,该系统可分为六个模块,用户管理模块,管理员管理模块,用户自服务模块,帐单管理模块,资费管理模块,帐务管理模块。5.4 系统实体间的联系 系统的实联系图为: 5.5NetCtoss系统的数据处理1:采集与整合数据采集:资料信息:用户信息、管理员信息、资费信息、URL信息数据存储:计费数据、故障数据、统计数据明细:、日表、月表、年表整合:按小时合并清单表t_detail_X生成所有用户记费数据日表t_day_X;按天合并日表t_day_X生成所有用户记费数据月表t_month_X;按月合并月表t_month_X生成所有用户记费数据年表t_year_X;按小时合并清单表t_detail_X生成所有Lab_IP数据日表t_day;按天合并日表t_day生成所有Lab_IP数据月表t_month;按月合并月表t_month生成所有Lab_IP数据年表t_year;2:用户帐务信息自查询(1)用户标识信息:帐单ID,姓名、帐号、状态(正常/暂停/关闭)、开通日期。(2)帐务信息:日期、登录时长、本月费用(3)服务信息,各种服务信息查询(4)服务帮助,提供一个亲切的服务界面(5)帐单明细:登录时间 退出时间 时长3:用户开通管理:(1)管理用户登陆OpenLab的帐号,包括帐号开通、暂停(加锁)、恢复、删除。(2)用户资料管理:管理用户资料,包括姓名(单位)、身份证号码、住址及资费信息等4:管理员管理:(1)管理员开通管理:管理用户登陆NetCTOSS的帐号,包括帐号开通、暂停(加锁)、恢复、删除。(2)管理员资料管理:管理管理员资料,包括姓名、身份证号码、住址等。(3)管理员权限管理:改变管理员的各类权限。5:用户自服务管理用户标识信息:帐单ID,姓名、帐号、状态(正常/暂停/关闭)、开通日帐务信息:日期、登录时长、本月费用服务信息,各种服务信息查询服务帮助,提供一个亲切的服务界面帐单明细:登录时间 退出时间 时长6:帐单管理整合系统按月生成用户月帐单。用户标识信息:帐单ID,姓名、帐号、状态(正常/暂停/关闭)、联系电话、Email、开通日期.帐务信息:帐号、日期、登录时长、本月费用帐单明细:登录时间 退出时间 时长第五章NetCtoss详细设计(管理员管理模块,帐单管理模块)5.1数据库设计由于电信运营支撑系统功能非常复杂,并且要存取的数据较多,因此简单地使用文件来存储数据库和管理显然是不合适的。所以本系统使用ORACLE数据库来存储数据。根据系统需求分析需要创建以下的数据表来存储数据。t_adm表用于保存管理员的信息设计出的表如下所示:(t_adm表)NameNull?TypeIDNOTNULLNUMBERNAME

VARCHAR2(32)LOGIN_NAMENOTNULLVARCHAR2(10)LOGIN_PASSWORD

VARCHAR2(32)PHONE

VARCHAR2(32)EMAIL

VARCHAR2(32)ENROLL_DATE

DATECLOSE_DATE

DATE对应的数据库建表语句为:droptablet_adm;createtablet_adm(idnumberprimarykey,--管理员编码namevarchar2(32),--管理员姓名login_namevarchar2(10)uniquenotnull,--登录名login_passwordvarchar2(32),--登录密码phonevarchar2(32),--联系电话emailvarchar2(32),--E-Mailenroll_datedate,--注册日期close_datedate--(不用字段));2.t_module模块表(用于保存模块信息)并对应于管理员的权限.设计的表如下所示:NameNull?TypeIDNOTNULLNUMBERNAME

VARCHAR2(32)USER_FLAG

CHAR(1)对应的数据库建表语句为:droptablet_module;createtablet_module(idnumberprimarykey,--模块编号namevarchar2(32),--模块名称user_flagchar--使用者标记:0—管理员;1—用户;)3.t_adm_rights管理员权限表(用于保存管理员对模块的访问权限)设计的表如下所示:NameNull?TypeADM_IDNOTNULLNUMBERMODULE_IDNOTNULLNUMBER对应的数据库建表语句为:droptablet_adm_rights;createtablet_adm_rights(adm_idnumberreferencest_adm(id),--管理员编码module_idnumberreferencest_module(id),--模块编号primarykey(adm_id,module_id));4.t_users用户表(用于保存用户账务帐号信息及个人信息)设计的表如下所示:NameNull?TypeIDNOTNULLNUMBER(32)NAMENOTNULLVARCHAR2(32)LOGIN_NAME

VARCHAR2(10)LOGIN_PASSWORDNOTNULLVARCHAR2(32)STATUSNOTNULLNUMBER(2)PHONE

VARCHAR2(32)EMAIL

VARCHAR2(32)ENROLL_DATE

DATECLOSE_DATE

DATEPAYMENT_STYLE

NUMBER(2)CAREER

VARCHAR2(32)NATIONALITY

VARCHAR2(32)GENDER

VARCHAR2(8)COMPANY

VARCHAR2(32)ADDRESS

VARCHAR2(32)POST_CODE

VARCHAR2(16)对应的数据库建表语句为:createtablet_users(//用户表(用于保存用户账务帐号信息及个人信息)idnumber(32) primarykey,--主键编码namevarchar2(32)notnull,--用户姓名login_namevarchar2(10)unique,--用户账务帐号(对应多个业务帐号)login_passwordvarchar2(32)notnull,--用户账务帐号密码statusnumber(2)notnull,--账务帐号状态(0:开通;1:暂停;2:删除)phonevarchar2(32),--联系电话emailvarchar2(32),--emailenroll_datedate,--开通日期close_datedate,--暂停日期payment_stylenumber(2),--付款方式(0:现金;1:银行转帐;2:邮局汇款;3:其他)careervarchar2(32),--职业nationalityvarchar2(32),--国籍(系统中在本字段记录省份)gendervarchar2(8),--性别companyvarchar2(32),--公司名称addressvarchar2(32),--地址post_codevarchar2(16)--邮编);5.用户业务帐号表(用于保存用户业务帐号信息)设计的表如下所示:NameNull?TypeIDNOTNULLNUMBER(32)USER_ID

NUMBER(32)LAB_LOGIN_NAME

VARCHAR2(10)LAB_LOGIN_PASSWORD

VARCHAR2(32)LAB_IPNOTNULLVARCHAR2(32)USER_STATUS

NUMBER(2)PRICING_ID

NUMBERENROLL_DATE

DATECLOSE_DATE

DATE对应的数据库建表语句为:createtablet_user_services(idnumber(32)primarykey,--主键编码user_idnumber(32)referencest_users(id),--用户表主键编码lab_login_namevarchar2(10),--用户业务帐号lab_login_passwordvarchar2(32),--用户业务帐号密码lab_ipvarchar2(32)notnull,--服务器编码user_statusnumber(2),--业务帐号状态(0:正常;1:暂停;2:删除)pricing_idnumberreferencest_pricing(pricing_id),--资费编码enroll_datedate,--开通日期close_datedate--暂停日期);5.t_pricing资费表设计的表如下所示:NameNull?TypePRICING_IDNOTNULLNUMBER(10)PRICING_NAME

VARCHAR2(255CHAR)BASE_FEE

FLOAT(126)RATE_FEE

FLOAT(126)PRICING_DESC

VARCHAR2(255CHAR)对应的数据库建表语句为:createtablet_pricing(pricing_idnumberprimarykey, --资费编码(pk)pricing_namevarchar2(32)notnullunique,--资费名称base_feenumber(5,2),--月租费rate_feenumber(4,2), --每小时费用pricing_descvarchar2(64) --资费描述);6t_detail_x(x:月中的第几天,取值范围:1~31)设计的表如下所示:NameNull?TypeLOGIN_NAME

VARCHAR2(10)LOGIN_IP

VARCHAR2(32)LOGIN_DATE

DATELOGOUT_DATE

DATELAB_IP

VARCHAR2(32)TIME_DURATION

NUMBER(10)对应的数据库建表语句为:Createtablet_detail_x(login_namevarchar2(10),--用户名login_ipvarchar2(32),--用户登录iplogin_datedate,--登录时间logout_datedate,--退出时间lab_ipvarchar2(32),--服务器iptime_durationnumber(10)--时长);t_day_x(x:月中的第几天,取值范围:1~31)用户计费数据日表(统计当天每小时每个服务器上的每个用户的总时长)每条数据记录的是:一个服务器上的一个用户某一小时的总时长对于一个服务器上的一个用户,最多有24条记录.设计的表如下所示:NameNull?TypeLOGIN_NAMENOTNULLVARCHAR2(10)LOGIN_IP

VARCHAR2(32)LOGOUT_DATENOTNULLDATELAB_IPNOTNULLVARCHAR2(32)TIME_DURATION

NUMBER(10)对应的数据库建表语句为:Createtablet_day_x(login_namevarchar2(10),--用户名login_ipvarchar2(32),--用户登录iplogout_datedate,--统计时间(格式:YYYY-MM-DDHH24:00:00)lab_ipvarchar2(32),--服务器iptime_durationnumber(10),--时长primarykey(login_name,lab_ip,logout_date));8t_month_x(x:月份,取值范围:1~12)用户计费数据月表(统计当月每天每个服务器上的每个用户的总时长)每条数据记录的是:一个服务器上的一个用户某一天的总对于一个服务器上的一个用户,最多有31条记录.设计的表如下所示:NameNull?TypeLOGIN_NAMENOTNULLVARCHAR2(10)LOGIN_IP

VARCHAR2(32)LOGOUT_DATENOTNULLDATELAB_IPNOTNULLVARCHAR2(32)TIME_DURATION

NUMBER(10)对应的数据库建表语句为:Createtablet_month_x(login_namevarchar2(10),--用户名login_ipvarchar2(32),--用户登录iplogout_datedate,--统计日期(格式:YYYY-MM--DD00:00:00)lab_ipvarchar2(32),--服务器iptime_durationnumber(10),--时长primarykey(login_name,lab_ip,logout_date));5.2模块的具体实现(1)管理员管理模块用例图用例描述用例名称查询所有管理员(管理员列表)描述超级管理员可以查看所有管理员信息用例参与者超级管理员前置条件超级管理员已经登录成功基本事件流登录成功后,管理员进入系统主页面,在主页面的导航菜单中点击[管理员管理]链接,页面就显示出系统中所有管理员的信息其他事件流登录成功后,管理员进入系统主页面,在主页面的导航菜单中点击[管理员管理]链接,进入管理员列表里可以进入添加管理员、管理员信息修改和修改自己的信息的页面,在这三个页面中点击[管理员列表]链接,可以到管理员列表页面异常事件流无后置条件无用例名称增加管理员描述超级管理员增加管理员用例参与者超级管理员前置条件超级管理员已经登录成功基本事件流登录成功后,管理员进入系统主页面,在主页面的导航菜单中点击[管理员管理]链接,页面就显示出系统中所有管理员的信息,在管理员列表页面中点击[增加管理员]链接,会跳转到添加管理员页面,在本页面中填好必要的信息点击提交按钮通过验证后,来完成添加管理员,操作完成到管理员列表页面其他事件流在修改页面也可以点击[增加管理员],跳转到添加管理员页面也能完成添加管理员功能异常事件流如果验证未通过会提示信息,添加的管理员没保存到系统中后置条件刚添加的管理员信息就保存到本系统中用例名称删除管理员描述超级管理员删除管理员用例参与者超级管理员前置条件超级管理员已经登录成功基本事件流登录成功后,管理员进入系统主页面,在主页面的导航菜单中点击[管理员管理]链接,页面就显示出系统中所有管理员的信息,选中要删除的管理员前面的复选框,点击删除按钮进行删除,一次可以删除多个管理员,操作完成到管理员列表页面其他事件流无异常事件流无后置条件删除完成以后此管理员就从系统里被删掉了,下回就不能用这个管理员进行登录管理了用例名称修改管理员信息描述超级管理员修改管理员信息用例参与者超级管理员前置条件超级管理员已经登录成功基本事件流登录成功后,管理员进入系统主页面,在主页面的导航菜单中点击[管理员管理]链接,页面就显示出系统中所有管理员的信息,在每个管理员信息的最后一列里都会有一个[修改]的链接,要想修改某个管理员就直接点击转到修改页面,在修改页面直接对想修改的信息进行修改,最后点击修改按钮通过验证就修改完成,操作完成到管理员列表页面其他事件流无异常事件流如果验证未通过会提示信息,修改后的信息不会被保存后置条件修改信息以后修改的信息会保存到系统中用例名称修改本管理员信息描述超级管理员修改本管理员信息用例参与者超级管理员前置条件超级管理员已经登录成功基本事件流登录成功后,管理员进入系统主页面,在主页面的导航菜单中点击[管理员管理]链接,页面就显示出系统中所有管理员的信息,修改自己的信息就点击[私人信息]就直接点击转到修改页面,在修改页面直接对想修改的信息进行修改,最后点击修改按钮通过验证就修改完成,操作完成到管理员列表页面其他事件流还可在列表中找到自己信息那行点击[修改],也能完成此功能异常事件流如果验证未通过会提示信息,修改后的信息不会被保存后置条件修改信息以后修改的信息会保存到系统中类图:时序图:组件图管理员管理模块的界面如下所示:登陆界面:这个是登录界面,用户在这个上面可以选择管理员登录和用户登录,这个是登录系统的前提条件,用户只有在输入正确的帐号后,才能进入主界面,执行相应的操作。主界面:主界面中包括:帐户管理,帐单管理,帐务管理,资费管理,管理员管理。添加管理员界面:该界面为填写相关注册信息,如果必填信息没有填写,则会出现提示信息。相关出错见上图。添加成功,将显示成功信息.主要实现代码:publicActionForwardexecute( ActionMappingmapping, ActionFormform, HttpServletRequestrequest, HttpServletResponseresponse){ AdminFormadminForm=(AdminForm)form; TAdmdto=AdminAssemble.createAdmDto(adminForm); dto.setAdmStatus(newInteger(0)); dto.setEnrollDate(newDate((Calendar.getInstance()).getTimeInMillis())); ActionErrorserrors=newActionErrors(); try{ //IServicedelegate=ModelDelegate.newInstance(); delegate.addAdmin(dto); errors.add("msg.action.addadm",newActionError("msg.action.addadm",dto.getLoginName())); saveErrors(request,errors); returnmapping.findForward("success"); }catch(Exceptione){ errors.add("error.action.addadm",newActionError("error.action.addadm")); saveErrors(request,errors); e.printStackTrace(); returnmapping.findForward("failure"); } }管理员显示的界面:这个界面显示了所有的管理员,左边的复选框是删除一个或多个管理员,上面的一个文本框是根据帐号查询,或删除 publicActionForwardexecute( ActionMappingmapping, ActionFormform, HttpServletRequestrequest, HttpServletResponseresponse){ ActionErrorserrors=newActionErrors(); try{ //IServicedelegate=ModelDelegate.newInstance(); Integer[]admId=((DeleteAdminForm)form).getAdmId(); delegate.deleteAdmin(admId); errors.add("msg.action.deleteadmin",newActionError("msg.action.deleteadmin")); saveErrors(request,errors); returnmapping.findForward("success"); }catch(Exceptione){ errors.add("error.action.deleteadmin",newActionError("error.action.deleteadmin")); saveErrors(request,errors); e.printStackTrace(); returnmapping.findForward("failure"); } }publicActionForwardexecute(ActionMappingmapping,ActionFormform, HttpServletRequestrequest,HttpServletResponseresponse){ ActionErrorserrors=newActionErrors(); IntegeradmId=newInteger(request.getParameter("admId")); try{ //IServicedelegate=ModelDelegate.newInstance(); TAdmdto=delegate.findAdmin(admId); if(dto==null) thrownewException(); request.setAttribute("AdminForm",AdminAssemble .createAdminForm(dto)); returnmapping.findForward("success"); }catch(Exceptione){ e.printStackTrace(); errors.add("error.action.findadmin",newActionError( "error.action.findadmin",admId.toString())); saveErrors(request,errors); returnmapping.findForward("failure"); } }更改管理员界面:查询管理员界面:(包括查询成功或者不成功)成功不成功私人信息界面:这个界面将显示管理员的一些基本信息:并对其进行修改:对应代码如下:publicActionForwardexecute( ActionMappingmapping, ActionFormform, HttpServletRequestrequest, HttpServletResponseresponse){ AdminFormadminForm=(AdminForm)form; TAdmdto=AdminAssemble.createAdmDto(adminForm); ActionErrorserrors=newActionErrors(); try{ //IServicedelegate=ModelDelegate.newInstance(); delegate.updateAdmin(dto); errors.add("msg.action.updateadm",newActionError("msg.action.updateadm",dto.getLoginName())); saveErrors(request,errors); returnmapping.findForward("success"); }catch(Exceptione){ errors.add("error.action.updateadm",newActionError("error.action.updateadm")); saveErrors(request,errors); e.printStackTrace(); returnmapping.findForward("failure"); } }(2)帐单管理模块用例图用例描述用例名称查询月帐单描述管理员可以进行月账单查询用例参与者管理员前置条件管理员已经登录成功基本事件流登录成功后,管理员进入系统主页面,在主页面的导航菜单中点击[帐单管理]链接,页面就显示出系统中所有帐务帐号在上月的总的费用的列表基本事件流登录成功后,管理员进入系统主页面,在主页面的导航菜单中点击[帐单管理]链接,页面就显示出系统中所有帐务帐号在某年某月总的费用的列表,因为帐务帐号很多,不利于查看,在此页面上有分页的功能,在列表下方有上一页和下一页的链接和选择页码的拉列表框,可以直接点击这两个链接或直接在列表框里选择页码来跳转到帐单列表页面,显示指定页面的信息基本事件流登录成功后,管理员进入系统主页面,在主页面的导航菜单中点击[帐单管理]链接,操作流程是,在页面上方有文本提示写着帐务帐号,后边有一个文本框,在里面填写你要查询的帐务帐号名,后边还有两个下拉列表框,后边文本提示分别写着年、月,在这两个下拉列表框里分别选中你要查询的年和月,然后点击查询按钮完成操作,如果输入的帐务帐号存在,就会在列表页面显示此帐务帐号在某年某月总的费用,如果在帐务帐号文本框里没有输入会查某年某月所有帐号总的费用其他事件流无异常事件流如果查询不到任何结果,则显示没有查询到任何记录。后置条件无用例名称查询月帐单明细描述管理员可以进行月账单明细进行查询用例参与者管理员前置条件管理员已经登录成功基本事件流登录成功后,管理员

温馨提示

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

评论

0/150

提交评论