电信计费系统设计_第1页
电信计费系统设计_第2页
电信计费系统设计_第3页
电信计费系统设计_第4页
电信计费系统设计_第5页
已阅读5页,还剩78页未读 继续免费阅读

下载本文档

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

文档简介

摘 要在电信运营系统中,电信计费系统是主要的支撑系统,占有重要地位。计费系统有效、安全地运行,在很大程度上影响着电信运营系统本身的运行效率和信誉。计费系统历来都是电信运营和管理部门重点建设和发展的系统之一。在这个大型项目中,我选择的是用户管理模块、资费管理模块、帐单管理模块和帐务管理模块。本系统是在数据采集系统的基础上建立起来的,通过对用户访问开放实验室的时间和业务来对用户进行计费。而对于这个系统的管理是很复杂的,它涉及各个用户角色的划分,权限的赋予。关键字:电信计费;登陆;MYSQL;JDBC;HibernateAbstractOperating system in the telecommunications, telecommunications billing system is a major support system, occupies an important position. Billing system effective and safe to run, to a large extent affect the carriers operating efficiency of the system itself and credibility. Telecom Billing System has been the focus of the operation and management of construction and development of systems in the world.Telecommunications billing system is a large-scale projects, and even a few dozen software engineers to complete the match, so we agreed, division head of the module. Of course, we developed the product, only for the development of the logic of the process of learning to understand the software project development process, not an official use. In this large-scale projects, I chose the landing module, the administrator management module and the rights management module. The system is in the data acquisition system based on the established, through the user access to the laboratory to the time and the business user billing. As for the management of the system is very complex, it involves the delineation of the various user roles, permissions given. Keywords: Telecom Billing;Landing;MYSQL;JDBC;Hibernate III目 录目 录摘 要 IAbstract II1 需求分析 11.1企业目前提供的系统环境 11.2用户需求列表 11.3系统功能需求结构图 21.4功能详细描述 32 详细设计 92.1后台数据服务 92.2服务器端编程 153 数据库设计 463.1后台数据处理用到的表 463.2业务运营管理模块用到的表 484 软件测试 534.1数据采集与整合测试方案与测试案例 534.2业务运营管理测试方案与测试案例 56结 论 62致 谢 63参考文献 64附 录 65山东科技大学泰山科技学院毕业设计书1 需求分析1.1企业目前提供的系统环境系统结构 :后台服务+B/S结构操作系统 :window/Unix/Linux任意操作系统支持浏览器 :主流浏览器支持数据库 :MySQL/Oracle任意数据库支持应用服务器:Tomcat/Weblogic/Websphere任意应用服务器支持1.2用户需求列表XX电信运营商新增一项UNIX服务器出租业务,即该电信运营商提供基于Unix平台的实验室环境,选择使用这种业务的用户能够远程登录到实验室中做基于这个实验室环境的一些工作和实验。运营商希望借助先进的计算机技术对访问实验室的用户进行管理和计费,由此实现对此项业务运营的支持与管理。本项目的物理结构拓扑图如下:图1-1 物理结构拓扑图1.3系统功能需求结构图本项目主要包括三大模块,各个模块又实现多个功能,如下图所示: 图1-2 电信营运功能需求结构图1.4功能详细描述1.4.1后台数据服务本系统是一个计费的系统,要想对用户进行准确的收费,首先必须能够获得用户使用开放实验室的准确的使用记录,后台数据服务模块正是为了获取这些记录并到这些记录作必要的处理而产生的。此模块分成二个功能实现:数据采集功能与数据整合功能。数据采集功能正是为了获取这些记录而提供的。获取用户使用实验室的准确记录有两种情况:利用操作系统的自身功能:利用Unix服务器本身具有的记录系统日志的功能。用户每次登录和退出Unix服务器的信息都会被自动保存到一个在线日志文件/usr/adm/wtmpx中。数据采集服务可以通过调用Unix系统函数来读取这个日志文件中的内容,然后对读取到的内容进行整理,整理成方便计费的数据,其中包括登录名、登录时间或登出时间等作为计费依据的数据。最后把这些数据存入数据库中,以备其他系统使用。为了使读取的数据量不至于过大,采集系统会每小时定时执行一次,每次只采集上一个小时时间段之内的数据。2.利用开放实验室的个人web主页功能: 只要用户在其主目录(home)下创建了public_html目录,采集系统通过扫描目录public_html就可以产生计费依据。访问开放实验室的web信息: 用户每次访问web服务器,web服务器都会在access.log中记录下相应的信息,如客户端的ip和被访问的URL等。通过分析web服务器的访问日志产生计费依据。数据采集功能定时将用户使用服务器的数据存入到了数据库中,但这些数据都是流水帐的数据,是用户每次使用UNIX操作系统的时间。如果用户量大,用户频繁地登入/退出,将产生大量的数据,不便于将来生成用户的月账单和对开放实验室的使用情况进行月统计和年统计,因此,出现了数据整合功能的实现。数据整合是将某个用户在某一时段内所用机时求和后形成一条记录。数据整合的具体整合规则如下:每小时定时整合一次,生成以小时为单位统计的数据,程序总是每小时定时整合前一小时的数据。每天定时整合一次,生成以天为单位统计的数据,程序总是每天定时整合前一天的数据。每个月定时整合一次,生成以月为单位统计的数据,程序总是每个月定时整合前一个月的数据。1.4.2业务运营管理电信运营商要想安全的、正常的实施这项业务,需要内部有一套完整的管理系统。这就是本模块产生的根源。此模块又分成6个功能实现:用户管理,管理员管理,角色管理,账单及账务管理等。用户管理功能电信运营商提供基于Unix平台的实验室环境,选择使用这种业务的用户能够远程登录到实验室中做基于这个实验室环境的一些工作和实验。用户要想成功登陆到开放实验室中,事先必须要拥有一个开放实验室上的帐号,在本系统中此帐号称为业务帐号,每个开放实验室上的业务帐号的用户名是唯一的,不同的开放实验室上的业务帐号的用户名可以相同,这个帐号用户可以通过向本系统中具有用户管理权限的管理员去申请。一个用户会有多种业务,如:Email服务、Unix系统、代理主机服务等,每个业务我们都要收取一定的费用,如果我们以业务账户为单位来算总的费用,那么用户申请的每种业务都要单独交费,会给用户造成不便,所以我们又添加了帐务账户来统一管理用户所使用的所有费用,帐务帐号是要和用户的真实信息联系在一起的,所以每个用户只能有一个帐务帐号,但可以对应多个业务帐号。用户管理功能就是对用户的帐务帐号和业务帐号进行管理。用户要向具有用户管理权限的管理员提供用户的一些真实信息,如用户的真实姓名,身份证号码,联系电话等。管理员根据这些信息为用户开通帐务帐号。具有用户管理权限的管理员负责管理这些帐务帐号,如暂停帐务帐号,恢复帐务账号,删除帐务账号,修改用户真实信息等。由于用户的一个帐务帐号会对应多个业务帐号,所以对账务账号的操作会级联影响关联的所有业务帐号。其次,具有用户管理权限的管理员还可以为用户开通业务帐号,但用户要想开通一个业务帐号,前提是必须拥有一个帐务帐号。在开通业务帐号时,用户要为此业务选择一种资费方式,选择一台开放实验室。这个业务帐号会被保存到用户选择的开放实验室的服务器上。具有用户管理权限的管理员负责管理这些业务帐号,如暂停业务帐号,恢复业务帐号,删除业务帐号,修改业务帐号,修改业务账号密码等。资费管理功能用户使用开放实验室服务,就要交纳费用,这是天经地义的事情。在此系统中这个费用和两个因素有关:一个是用户使用服务的时间长度;另一个是用户选择的收费标准,如月租费为:30元,每小时使用费为:3元等。这个收费标准在本系统中称为资费。这是资费管理功能的来源。具有资费管理权限的管理员登陆成功后,可以添加新的资费,查询所有的资费,可以修改现有的资费信息,还可以删除资费。特别要注意的是:由于对资费的修改会影响选择了这种资费的用户要交纳的费用,所以在修改资费信息前要事先通知所有已经选择了这个资费的用户;只有当没有任何用户选择某个资费了,这个资费才能被删除掉。管理员管理功能:对本系统的各功能的访问都是受权限控制的,只有拥有了访问权限,才能使用指定的功能。在本系统中存在着三类使用者:其一是用户,即使用开放实验室的人,他们默认具有使用用户自服务模块的权限。其二是超级管理员,即对本系统进行管理的人,并具有最高的管理权限,他可以使用除用户自服务以外的所有子功能。这个超级管理员只有一个,是系统初始建立时就提供好的。其三是普通管理员,即对本系统中的部分子系统进行管理的人,这些人是由超级管理员进行管理的,他们具有的权限也是由超级管理员赋予的。管理员管理功能就是超级管理员来管理普通管理员。超级管理员登陆成功后,可以增加新的普通管理员,同时为他分配一些权限,可以修改普通管理员的信息,可以查询所有的管理员信息,可以删除某些管理员。权限管理功能:对本系统的各个功能模块的访问都是受权限控制的,权限决定了使用者可以执行的操作,如一个使用者拥有用户管理权限,他就可以执行用户管理的操作。目前系统已有的权限包括:用户管理权限,资费管理权限,管理员管理权限,帐单管理权限,帐务管理权限,用户自服务权限,权限管理权限。今后,系统可能会扩展新的功能,也就会增加新的操作,这个操作就要对应一种新的权限;也有可能删除一项不再被使用的操作,这样,对应的权限也应该被删除。因此,为了对权限能够进行灵活的管理,本系统中就提供了权限管理系统。在本系统中,一些使用者拥有相同的角色,拥有相同的权限,如张三和李四都是前台操作人员,都拥有用户管理权限和帐单管理权限。角色代表着一组权限的集合。目前系统中已有的角色包括:用户和超级管理员。今后,要想根据需要灵活地管理角色,也是通过权限管理系统完成的账单查询功能具有帐单查询权限的管理员可以利用此功能对所有用户的月账单进行查询。此子功能不仅提供对某个帐务帐号上产生的总的费用进行查询,还提供对某个帐务帐号上的每个业务帐号上产生的费用明细进行查询。月账单查询有三种查询方式:根据输入的月份查询所有用户这个月的费用信息(提供分页显示);根据输入的月份和其它组合条件查询符合条件的用户这个月的费用信息(提供分页显示);根据输入的月份和用户的帐务帐号的用户名查询某个用户这个月的费用信息。具有账单查询角色的管理员要进行月账单明细查询,首先查询出用户帐务帐号的合计费用信息,然后在这个信息上执行查询明细帐的操作,系统会显示该帐务帐号上所有业务帐号上发生的所有费用的明细信息。账务查询功能具有帐务查询的管理员可以使用此功能对开放实验室的使用情况进行查询。此功能可以提供以月为周期的查询,也可以提供以年为周期的查询。进行月帐务查询时,可以根据输入的月份查询所有开放实验室这个月被使用的总的时长信息。也可以在上一个查询的基础上查看某个实验室这个月每一天的时长信息。在进行年帐务查询时可以根据输入的年份查询所有开放实验室这一年被使用的总的时长信息。也可以在上一个查询的基础上查看某个实验室这一年每个月的时长信息。1.4.3前台用户自服务用户自服务模块可以方便地供用户查询自己的账单和修改自己的个人信息。这个模块是唯一的一个用户可以使用的子模块。用户要查询自己的月帐单需要用户进入本系统,使用自己的帐务帐号登录成功后,可以根据输入的月份查询自己这个月的费用信息。还可以在上一个查询的基础上查看这个月费用明细。用户要修改自己的个人信息,用户需要进入本系统,使用自己的帐务帐号登录成功后,可以自行修改自己的个人信息。2 详细设计2.1后台数据服务2.1.1数据采集详细设计后台数据服务的总体界面图2-1-1 电信营运功能需求结构图2-1-2 电信营运功能需求结构图据采集客户端类详细说明:CollectionLaunchor 注意:该启动器可以由用户发起为一个后台服务,也可以由Unix的定时服务发起,本项目采用使用Unix发起的方式。 用户后台服务发起的方式只需要把线程的运行方式改变成循环就可以了。CollectionThread 函数run():就是主要创建DataCollector对象,并调用其collection函数进行数据采集。该函数是Thread的run函数覆盖函数.函数start(): :负责启动线程,该函数来自Thread线程类.注意:该线程是否循环决定采集器启动的方式是否利用Unix的定时启动功能,如果采用Unix的定时功能,则该线程采集完毕自动关闭清空。DataCollector 负责采集环境的处理与数据采集,分析处理函数getNativeIP 读取要采集服务器的IP,该IP用属性文件配置。函数 initlog()负责调用Runtime执行mv shell指令进行日志文件的备份并清空原始文件。备份的文件名wtmpx+年(4位)+月(2位)+日(2位)+时(2位),比如wtmpx2008053013.注意:利用Unix系统的Kenerl函数读取的时候,该文件必须采用x结尾,在这里用java处理就不需要。函数mappingLogBuffer 主要把备份的日志文件映射为本地内存缓冲,便于后面解析。参数是备份日志文件名,返回MappedByteBuffer.函数parseLogBuffer,负责解析缓冲的内存结构,利用参数返回两个Vector结构对象,一个存放登录数据,一个存放登出数据,Vecotor中存放的元素类型是LogRecord.该类型请参考LogRecord类说明。控制流程图如下:函数activate 负责把上次为匹配的数据读取为Vector结构。便于后面匹配。参数是存放上次未匹配的登录日志记录,返回Vector结构,其中元素类型LogRecord。函数match,负责匹配登录/登出数据,并返回用户登录时间数据。参数是两个Vector类型的登录/登出数据结构,元素类型是LogRecord,返回的是匹配好的用户登录时长记录,数据类型是Vector,其中元素类型是MatchedRecord,详细说明请 参考MatchedRecord类的说明。函数passivate,负责把这次没有匹配好的登录记录保存成文件,以便下次采集的时候匹配。参数是没有匹配好的登录记录,类型是Vector,其中元素类型是LogRecord.函数collect,负责整个采集过程。这是该类中的唯一的一个public函数,主要供采集线程调用。LogRecord类,负责登录/登出数据封装。MatchedRecord类,负责匹配好的数据的封装。图2-3控制流程图CollectionListener接口,规范采集好的数据的处理方式。函数deal,负责匹配好数据的处理,返回void,参数是Vector类型,元素类型是MatchedRecord,是匹配好的所有登录时长数据。LogDealer类,负责匹配好数据的发送处理,如果发送失败,则数据被保存。该类主要实现CollectionListener接口。函数init,主要初始化服务器参数,服务器参数使用属性文件配置IP与Port。函数initSocket,主要初始化网络连接。如果初始化失败,则保存数据退出函数send,主要负责数据发送。该函数先发送历史失败数据。函数deal,调用上面的三个函数完成整个处理过程。并接受服务器接收成功的标志。数据采集服务器端类详细设计ServerLauncher类:服务器数据接受器启动器ServerLauncher主要负责启动服务器接受线程函数main,主要创建DataRecieverTh对象,并调用起其start函数启动线程。DataRecieverTh类,服务器接受主线程。主要负责接受客户连接,并为每个客户启动一个数据接收线程来进行客户数据接收。该类继承Thread。成员collectionth是Vector的静态数据结构,负责保存所有客户连接。其中元素类型是CollectionTh.成员serversocket服务器Socket成员dao封装对数据的连接及其对数据表访问封装,具体说明参考DetailDAO说明。函数initSocket,负责网络服务器的初始化。 函数initDAO,负责数据库连接初始化,并初始化数据访问对象dao。函数init服务读取数据库连接擦参数的读取,数据库连接参数用属性文件配置driver,url,user,password四个key-value键值对。该过程由DBEnvInit中两个静态函数完成。函数run是Thread类的覆盖函数,负责接收客户连接,并建立客户处理线程并启动线程,并在collectionth中记录该客户线程处理对象。CollectionTh类,每个客户数据接收处理类。 该类主要接收采集器发送过来的数据,接收成功后发送一个成功标志,然后保存接收的数据。该类继承Thread。函数run接收线程过程,主要调用receive私有函数。函数recieve,通过inputstream读取数据,并发送成功标记,然后调用全局的dao保存数据。DBEnvInit类,数据库环境初始化类该类封装了两个函数工具,完成对数据库的连接。函数getDBParamter,负责从属性文件读取数据库连接参数。函数getConnection,负责根据连接属性打开与数据库的连接。注意:该工具可以提供对数据源的支持,在后继版本中提供数据源与Hibernate的支持描述。DetailDAO类提供对Detail数据库的插入等操作访问。函数insert负责把接收到的数据插入到数据库。BasicDAO泛型类:封装对数据库访问最常用的规范。在后面的DAO类,缺省必须实现该接口。Detail类,采集数据原始记录实体类。该类与MatchedRecord完全一样,在设计的时候为与客户端分开,故意设计成实体类,主要便于使用Hibernate。Detail类对应数据库中对应的t_detail_x31张表。2.1.2数据整合详细设计数据整合类详细说明:ServerLauncher类:整合启动程序类。DataIntegratorTh类:整合线程,主要完成整合的调用。Integration接口:整合接口规范ntegrationByCall类:整合的存储过程调用实现IntegrationByClient:整合的Java调用实现。IntegrationFactory类:利用工厂模式产生的一个类,负责产生整合对象。DBEnvInit类:见数据采集存储中的说明。DetailYearDAO,DetailMonthDAO,DetailDayDAO,IntegratedDetailDayDAO,IntegratedDetailMonthDAO,IntegratedDetailYearDAO负责每个表的整合。负责数据库中数据表的实际访问操作,原则上一个表对应一个DAO类。2.2服务器端编程2.2.1业务运营管理模块的设计思想本项目采用RUP统一开发模式,业务流程的控制采用了MVC模式。设计点:1实体类,DAO类2业务类,业务类又分:业务表单类,业务处理类,业务DAO类。3公共类4UI类在使用Struts框架时的工作流程:页面输入提交数据处理页面显示MVC模式:V: 使用Tile 固定模板 C: 使用统一的Action M: 使用统一的DAO程序的组织:每个模块按用例组织,一个用例采用一个Action 处理逻辑。2.2.2资费管理资费管理的相关表:pricings表资费管理的实现功能:资费查询、资费修改、资费删除、资费增加图 2-6 资费查询界面(1)资费查询类说明:1PricingQueryUI类,显示资费的查询结果界面如图2-6。2PricingAction类,负责资费查询逻辑处理queryPricing,代码片段如下:package netctoss.fee.actions;public class PricingAction extends DispatchAction . . ./查询浏览public ActionForward browseFee(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) throws Exception /调用显示方法queryFee() queryFee(browseFee,mapping,form,request,response); /转发到gobrowsefee处理, 再通过struts-config.xml找到对应的jsp return mapping.findForward(gobrowsefee”)/更新显示,为了刷新页面public ActionForward updateFee(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) throws Exception /调用资费查询queryFee(updateFee,mapping,form,request,response);/更新显示转发到goupdatefee,再通过struts-config.xml找到对应的jsp return mapping.findForward(goupdatefee);3PricingConditionForm类:封装资费查询条件表单数据,代码片段如下:package netctoss.fee.forms;import org.apache.struts.action.ActionForm;public class PricingCondForm extends ActionForm /下面的属性和pricingquery.jsp中的表单元素一一对应private String name=; private String feelower=;private String feeupper=;private String ratelower=;private String rateupper=; /默认显示第一页private int page=0;/下面是各个属性的set()和get()方法,这样做是为了封装属性,提高安全性public String getName() return name;public void setName(String name) = name;public String getFeelower() return feelower;public void setFeelower(String feelower) this.feelower = feelower;public String getFeeupper() return feeupper;public void setFeeupper(String feeupper) this.feeupper = feeupper;public String getRatelower() return ratelower;public void setRatelower(String ratelower) this.ratelower = ratelower;public String getRateupper() return rateupper;public void setRateupper(String rateupper) this.rateupper = rateupper;public int getPage() return page;public void setPage(int page) this.page = page;4PricingsDAO类,负责从数据库获取资费查询结果getPricingByCondition,代码片段如下:public class PricingsDAO extends BaseHibernateDAO /实现 findById方法,此方法通过资费ID查询资费public Pricings findById(java.lang.Integer id) try /调用当前会话的hibernate的get()方法查询数据 Pricings instance = (Pricings) getSession().get(netctoss.entities.Pricings, id); /返回查询后Pricings对象。 return instance; catch (RuntimeException re) /抛出运行时异常,不用处理。 throw re; /通过Pricings实例查找相关资费public List findByExample(Pricings instance) try /通过hibernate的模糊查找,返回List结果集 List results = getSession().createCriteria(netctoss.entities.Pricings).add(Example.create(instance).list();return results; catch (RuntimeException re) throw re;/通过属性查询资费public List findByProperty(String propertyName, Object value) try String queryString = from Pricings as model where model.+ propertyName + = ?;Query queryObject = getSession().createQuery(queryString);queryObject.setParameter(0, value);return queryObject.list(); catch (RuntimeException re) throw re;/通过资费名字查询资费public List findByName(Object name) return findByProperty(NAME, name);/查找基费public List findByBasefee(Object basefee) return findByProperty(BASEFEE, basefee);/通过资费范围查找public List findByRatefee(Object ratefee) return findByProperty(RATEFEE, ratefee);/再通过资费说明查找public List findByDescription(Object description) return findByProperty(DESCRIPTION, description);/全部显示public List findAll() try String queryString = from Pricings;/通过hibernate的createQuery()的方法查询Query queryObject = getSession().createQuery(queryString);return queryObject.list(); catch (RuntimeException re) throw re;/end 5主要流程:用户通过地址请求pricingquery.jsp显示资费管理界面。通过资费管理界面点击“资费浏览”菜单,此时的请求通过struts_config.xml把请求和参数发送到PricingAction类。PricingAction主要实现查询逻辑处理。在进行逻辑处理的过程需要调用PrincingConditionForm类中封装的表单数据和PricingDAO类中对数据库进行操作后的数据。再把处理的后返回给pricingquery.jsp进行显示。图2-7 资费修改界面(2)资费修改类说明:1.PricingUpdateUI类,负责显示要修改的资费列表界面如图2-7。2.PricingAction类,负责修改数据的显示,修改保存逻辑处理,代码如下:public class PricingAction extends DispatchAction public ActionForward update(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) throws Exception /更新资费ActionMessages errors=new ActionMessages();try/提取表单数据PricingForm fm=(PricingForm)form;/得到资费idInteger feeid=fm.getId();PricingsDAO dao=new PricingsDAO();Pricings fee=dao.findById(feeid);if(validate(fm,errors) /验证没有通过,则把错误提示添加到errors类中,返回到jsp中显示错误errors.add(fee.insert, new ActionMessage(fee.insert.failure,TimeTools.getNowTime(HH:mm:ss);this.saveErrors(request, errors);request.setAttribute(form, form);return mapping.findForward(goupdatefee); /重新设置基费fee.setBasefee(fm.getBasefee(); /重新设置自费名字fee.setName(fm.getName(); /重新设置资费范围fee.setRatefee(fm.getRatefee(); /重新设置自费描述fee.setDescription(fm.getDescription(); 通过hibernate保存对象dao.save(fee); /刷新会话dao.getSession().flush();errors.add(fee.insert,newActionMessage(fee.oper.success,TimeTools.getNowTime(HH:mm:ss);catch(Exception e)errors.add(fee.insert, new ActionMessage(fee.opert.failure,TimeTools.getNowTime(HH:mm:ss);this.saveErrors(request, errors);return mapping.findForward(goupdatefee);3.PricingForm类,缓存表单数据。4.PricingDAO类,负责数据操作的实现,代码如下:public class PricingsDAO extends BaseHibernateDAO /把PricingAction中更新的PricingForm对象重新持久化到数据库public void save(Pricings transientInstance) /打印日志文件log.debug(saving Pricings instance);try /开启Hibernate的事务Transaction t=this.getSession().beginTransaction(); /保存实例getSession().save(transientInstance); /提交mit(); /刷新会话getSession().flush(); /清除会话getSession().clear();log.debug(save successful); /捕获异常 catch (RuntimeException re) /打印日志文件报告错误log.error(save failed, re);throw re;6.主要流程:通过pricingup.jsp向服务器发出请求修改自费信息。服务器通过.PricingAction类更新数据,更新数据会用到PrincingForm类中缓存的表单数据,在.PricingAction中改变PricingForm中的实例中的属性,然后通过PricingDAO把数据库持久化到数据库中。(3)资费删除类说明:1.PricingDeleteUI类,负责显示要删除资费列表的界面如图2-8。2.PricingAction类,负责得到要删除资费数据showDeletePricing,删除资费的逻辑处理deletePricing代码如下:/删除public ActionForward delete(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) throws Exception /删除指定ID的资费PricingForm fm=(PricingForm)form;Integer feeid=fm.getId(); /通过PricingsDAOs更新数据库PricingsDAO dao=new PricingsDAO();Pricings fee=dao.findById(feeid); /删除数据库中fee对象dao.delete(fee);dao.getSession().flush();return mapping.findForward(godeletefee);3.PricingDAO类,负责从数据库获取资费数据getPricingByCondition,并从数据库中删除资费数据deleteById。图2-8资费删除界面(在浏览中可以删除)4.主要流程:在pricingdel.jsp中向struts-config.xml提交请求,struts-config.xml 在把删除请求发送到PricingAction。在PriningAction中通过调用Hibernate的事务调用PricingDAO来删除数据库中的目标对象。(4)资费增加类说明:1.PricingAddNewUI类,负责显示资费的输入界面。2.PricingAction类,负责资费输入showAddNewPricing,资费数据插入等逻辑处理addnewPricing,代码同“资费修改”。3.PricingForm类,封装资费的表单数据。4主要流程:pricingadd.jsp中发出添加自费的请求,经过struts-config.xml转发到相应的PricingActiong类中的inset()方法。在insert()方法完成相应的业务时要调用PricingForm中缓存的表单中的数据。图2-9 资费增加界面2.2.3用户管理用户管理相关表:users表,userservices表,pricings表。用户管理功能实现:帐务帐号查询、帐务帐号修改、帐务帐号删除、帐务帐号申请、业务帐号查询、业务帐号修改、业务帐号删除、业务帐号申请。用户管理整体界面结构:图2-10 用户管理界面(1)帐务帐号查询类说明:1.AccountQuery类,负责显示查询结果。2.AccountBusinessAction类,负责显示所有帐务帐号的获取逻辑处理accountquery。3.AccountAction类,负责查询帐务帐号的逻辑处理query。4.AccountQueryCondForm类,负责查询条件的表单数据封装。5.AccountDAO类,负责从数据库得到所有帐务帐单数据listAllAccount,从数据库得到满足条件的帐务帐号数据queryAccountByCond。 图2-11 帐务帐号查询(2)业务帐户修改类说明:1.AccountUpdate类,负责显示要更新的帐务帐号列表。2.AccountBusinessAction类,负责要更新帐务帐号的获取逻辑处理accountupdate。3.AccountUpdadteInput类,负责帐务帐号

温馨提示

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

评论

0/150

提交评论