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

下载本文档

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

文档简介

电信级IP用户管理和计费系统NetCTOSS电信计费系统的设计与实现目录TOC\o"1-4"\h\z\u0. 绪论 41. 电信计费系统需求分析 41.1.编写目的 41.2.编写背景 51.2.1.系统背景以及版本 51.2.2.任务提出者 51.2.3.任务承接者及实施者 51.2.4.文档使用者 51.2.5.参考资料 51.3.系统功能概述 51.3.1.系统功能结构图 51.3.2.系统功能说明 6.用户管理系统 6.资费管理系统 6.管理员管理系统 6.帐单查询系统 7.帐务查询系统 7.用户自服务系统 7.权限管理系统 72. 系统概要和详细设计 82.1.操作功能菜单结构模型 82.2.各模块数据实体设计 82.2.1.权限与管理员数据实体 8.类图 8.类说明 91.2.2. 用户帐务帐号,业务帐号与资费实体类 9.类图 9.类说明 92.2.3.用户登录时长数据相关实体 9.类图 9.类说明 102.3.数据表设计 102.3.1.权限、角色与管理员相关表设计 102.3.2.用户帐务帐号、资费与业务帐号相关表设计 112.3.3.用户登录时长原始数据与整合数据相关表设计 122.4.各模块类以及界面设计 142.4.1.登录 14.相关表 14.界面设计 14.类图设计 142.4.2.权限管理 16.相关表 16.界面设计 21.类图设计 212.4.3.管理员管理 31.相关表 32.UI设计 32.类图设计 352.4.4.资费管理 41.相关表 41.UI设计 41.类图设计 432.4.5.用户管理 48.相关表 48.UI结构设计 48.类图设计 532.4.6.帐单查询 63.相关表 63.UI设计 63.类设计 632.4.7.帐务查询 64.相关表 64.UI设计 65.类设计 663.编码部分 683.1.

电信计费系统编码规范 683.2.在编码过程中遇到的问题 814.系统测试 815. 运行与维护 876. 结束语 87附录 87参考文献 103后记 104电信计费系统的设计与实现计算机系0604班张三指导老师:李四摘要:信息技术和网络技术高速发展,行业竞争日益加剧,各大企业在传统的运营方式中纷纷加入高科技成分追求高效和智能化,在软件方面的追求和投入尤为突出,各行业不惜加大在信息科技方面的投入,以进一步提升自身在市场的竞争力和服务质量,而且收到了很好的效果,创造了良好的企业效益。移动、联通、电信等各大电信运营商,每年在系统的开发和完善方面投入数十亿来满足新的需求,而这些投入也为企业创造了很壮观的经济效益。而且在这些方面的投入还会继续加大,在以后的发展中,这已经成为一个不可否认的趋势。可以说,电信和互联网新技术推动了人类文明的巨大进步,而且发展将会更加迅速。本篇论文的电信计费系统是为电信运营商新增的一项OpenLab(开放实验室)出租业务而设计,电信运营商提供多个基于Unix平台的实验室环境,选择使用这种业务的用户能够远程登录到实验室中做基于这个实验室环境的一些工作和实验。运营商希望借助先进的计算机技术对访问实验室的用户进行管理和计费,由此实现对此项业务运营的支持与管理。该电信计费系统使用ssh(spring+struts2+hibernate)、javascript脚本控制和ajax异步交互等技术来开发,严格按照软件开发流程:需求分析、页面设计、概要设计、详细设计、测试运行等,最终使得该项目达到一个商业项目的标准。关键词:电信计费hibernatestruts2springssh运营支撑系统netctoss绪论本篇论文从以下几部分进行阐述:1电信计费系统需求分析,简述电信计费项目的选题背景和该系统的需求,要求的功能。2系统概要和详细设计。根据系统的业务流程和需求经行概要设计用图表来表示。并根据概要设计经行详细设计。3编码。本系统所使用的编码规范,在系统的编码过程中出现的一些问题以及解决方法。4系统测试。对系统的各个功能经行测试,以及相应的记录。5运行和维护。主要讲解该系统简单操作说明,用户在使用该系统可能出现一些问题以及解决方案。6结束语。7心得体会。电信计费系统需求分析1.1.编写目的软件需求规格说明书(SRS,SoftwareRequirementSpecification)是软件需求格式化描述文档,用于详细阐述软件的功能、性能以及约束条件,不仅是系统测试和用户手册编写的依据,也是系统设计、编码的基础。本文档主要目的包括以下几个方面:1为系统建设双方提供共同的需求基准;2为开发小组的软件开发工作提供依据;3为质量控制和项目监理提供检查依据。1.2.编写背景1.2.1.系统背景以及版本Netctoss系统需求规格说明书,版本号v1.1。1.2.2.任务提出者XX电信运营商1.2.3任务承接者及实施者承接者:张三1.2.4文档使用者管理成员:项目总监、项目经理、质量经理、技术经理;开发成员:系统分析员、测试员、文档员;客户成员:领导、业务代表、统计信息处人员;监理成员:项目监理人员。1.2.5参考资料《客户公司的业务文件》1.3.系统功能概述1.3.1.系统功能结构图1.3.2.系统功能说明XX电信运营商新增一项OpenLab(开放实验室)出租业务,即该电信运营商提供基于Unix平台的实验室环境,选择使用这种业务的用户能够远程登录到实验室中做基于这个实验室环境的一些工作和实验。运营商希望借助先进的计算机技术对访问实验室的用户进行管理和计费,由此实现对此项业务运营的支持与管理。本项目主要包括以下子系统:.用户管理系统电信运营商提供基于Unix平台的实验室环境,选择使用这种业务的用户能够远程登录到实验室中做基于这个实验室环境的一些工作和实验。用户要想成功登陆到开放实验室中,事先必须要拥有一个这个开放实验室上的帐号,在本系统中此帐号称为业务帐号,每个开放实验室上的业务帐号的用户名是唯一的,不同的开放实验室上的业务帐号的用户名可以相同,这个帐号用户可以通过向本系统中具有用户管理权限的管理员去申请。一个用户会有多种业务,如:Email服务、Unix系统、代理主机服务等,每个业务我们都要收取一定的费用,如果我们以业务账户为单位来算总的费用,那么用户申请的每种业务都要单独交费,会给用户造成不便,所以我们又添加了帐务账户来统一管理每个用户所使用的所有业务账号上发生的费用,帐务帐号是要和用户的真实信息联系在一起的,所以每个用户只能有一个帐务帐号,但可以对应多个业务帐号。用户管理子系统就是对用户的帐务帐号和业务帐号进行管理。具有用户管理权限的管理员登陆成功后,首先可以开通帐务帐号,帐务帐号必须和用户的一些真实信息关联起来,如用户的真实姓名,身份证号码,联系电话等。开通时,由用户提供这些信息,然后由管理员将信息录入到系统中并保存下来。对于开通好的帐务帐号也是由具有用户管理权限的管理员来管理的,如暂停帐务帐号,恢复帐务账号,删除帐务账号,修改用户真实信息等。由于用户的一个帐务帐号会对应多个业务帐号,所以对账务账号的操作会级联影响关联的所有业务帐号。其次,具有用户管理权限的管理员还可以开通业务帐号,但用户要想开通一个业务帐号,前提是必须拥有一个帐务帐号。在开通业务帐号时,先由用户为这个业务帐号选择一种资费方式,选择一台开放实验室,然后把选择好的信息提供给管理员,再由管理员将信息录入并保存,这个业务帐号会被保存到用户选择的开放实验室的服务器上,对于开通好的业务帐号也是由具有用户管理权限的管理员来管理的,如暂停业务帐号,恢复业务帐号,删除业务帐号,修改业务帐号密码。.资费管理系统使用服务,就要交纳费用,这是天经地义的事情。那么对于开放实验室的用户也不例外,他们使用了开放实验室服务,同样要交费。在我们这个系统中这个费用会和两个因素有关:1一个是用户使用服务的时间长度,2另一个是用户选择的收费标准,如月租费为:30元,每小时使用费为:3元等。这个收费的标准在本系统中称为资费。资费管理子系统就是用来管理资费的。具有资费管理权限的管理员登陆成功后,可以添加新的资费,查询所有的资费,可以修改现有的资费信息,还可以删除资费。特别要注意的是:由于对资费的修改会影响选择了这种资费的用户要交纳的费用,所以在修改资费信息前要事先通知所有已经选择了这个资费的用户;只有当没有任何用户选择某个资费了,这个资费才能被删除掉。.管理员管理系统对本系统的各个子系统的访问都是受权限控制的,只有拥有了访问权限,才能使用子系统。在本系统中存在着三类使用者:1其一是用户,即使用开放实验室的人,他们默认具有使用用户自服务系统的权限。2其二是超级管理员,即对本系统进行管理的人,并具有最高的管理权限,他可以使用除用户自服务以外的所有子系统。这个超级管理员只有一个,是系统初始建立时就提供好的。3其三是普通管理员,即对本系统中的部分子系统进行管理的人,这些人是由超级管理员进行管理的,他们具有的权限也是由超级管理员赋予的。管理员管理系统就是超级管理员来管理普通管理员。超级管理员登陆成功后,可以增加新的普通管理员,同时为他分配一些权限,可以修改普通管理员的信息,可以查询所有的管理员信息,可以删除某些管理员。.帐单查询系统具有帐单查询权限的管理员可以利用此子系统对所有用户的月账单进行查询。此子系统不仅提供对某个帐务帐号上产生的总的费用进行查询,还提供对某个帐务帐号上的每个业务帐号上产生的费用明细进行查询。具体操作如下:1月账单查询2具有账单查询角色的管理员进入本系统,登录成功后,可以执行如下查询操作:3根据输入的月份和其它组合条件查询符合条件的用户这个月的费用信息(提供分页显示)4根据输入的月份和用户的帐务帐号的用户名查询某个用户这个月的费用信息。5月账单明细查询6具有账单查询角色的管理员进入本系统,登录成功后,首先查询出用户帐务帐号的合计费用信息,然后在这个信息上执行查询明细帐的操作,系统会显示该帐务帐号上所有业务帐号上发生的所有费用的明细信息。.帐务查询系统具有帐务查询的管理员可以使用此子系统对开放实验室的使用情况进行查询。此子系统可以提供以月为周期的查询,也可以提供以年为周期的查询。具体操作如下:1月帐务查询具有账务查询角色的管理员进入本系统,登录成功后,可以执行如下查询操作:(1)根据输入的月份查询所有开放实验室这个月被使用的总的时长信息。(2)在上一个查询的基础上查看某个实验室这个月每一天的时长信息。2年帐务查询具有账务查询角色的管理员进入本系统,登录成功后,可以执行如下查询操作:(1).根据输入的年份查询所有开放实验室这一年被使用的总的时长信息。在上一个查询的基础上查看某个实验室这一年每个月的时长信息。.用户自服务系统用户自服务系统可以方便地供用户查询自己的账单和修改自己的个人信息。这个子系统是唯一的一个用户可以使用的子系统。具体操作如下:1查询自己的月帐单用户进入本系统,使用自己的帐务帐号登录成功后,可以执行如下查询操作:1)根据输入的月份查询自己这个月的费用信息。2)在上一个查询的基础上查看这个月费用明细。2修改自己的个人信息用户进入本系统,使用自己的帐务帐号登录成功后,可以自行修改自己的个人信息。.权限管理系统对本系统的各个子系统的访问都是受权限控制的,权限决定了使用者可以执行的操作,如一个使用者拥有用户管理权限,他就可以执行用户管理的操作。目前系统已有的权限包括:用户管理权限,资费管理权限,管理员管理权限,帐单管理权限,帐务管理权限,用户自服务权限,权限管理权限。今后,系统可能会扩展新的功能,也就会增加新的操作,这个操作就要对应一种新的权限;也有可能删除一项不再被使用的操作,这样,对应的权限也应该被删除。因此,为了对权限能够进行灵活的管理,本系统中就提供了权限管理系统。在本系统中,一些使用者拥有相同的角色,拥有相同的权限,如张三和李四都是前台操作人员,都拥有用户管理权限和帐单管理权限。角色代表着一组权限的集合。目前系统中已有的角色包括:用户和超级管理员。今后,要想根据需要灵活地管理角色,也是通过权限管理系统完成的。系统概要和详细设计2.1.操作功能菜单结构模型2.2.各模块数据实体设计2.2.1.权限与管理员数据实体.类图.类说明(每个实体成员的具体说明参考后面的表结构设计中各表的说明)Module类,系统模块信息实体,modules表Operation类,模块操作信息实体,operations表Right类,权限信息实体,由模块与操作构成rights表Role类,角色信息实体,roles表RoleRight类,角色权限信息实体,权限分组,rolerights表Admin类,管理员信息实体,Admins表AdminRole类,管理员角色信息实体,adminroles表用户帐务帐号,业务帐号与资费实体类.类图.类说明(每个实体成员的具体说明参考后面的表结构设计中各表的说明)User类,用户信息实体,users表。Pricing类,资费信息实体,pricings表。UserService类,用户业务帐号信息实体,userservices表2.2.3.用户登录时长数据相关实体类图.类说明(这组类与采集系统中使用的是相同结构)Detail类,用户登录时长明细信息实体,details表。DetailDay类,按用户每时整合后的时长信息实体,detaildays_x表DetailMonth类,按用户每天整合后的时长信息实体,detailmonths_x表DetailYear类,按用户每月整合后的时长信息实体,detailyears_x表。IntegratedDetailDay类,按实验室每时整合后的时长信息实体,detaildays表。IntegratedDetailMonth类,按实验室每天整合后的时长信息实体,detailmonths表。IntegratedDetailYear类,按实验室每月整合后的时长信息实体,detailyears表。2.3.数据表设计2.3.1权限,角色与管理员相关表设计1模块表modules字段英文名字段汉字名类型约束条件说明Id模块IDIntPKName模块名称Varchar(20)2模块操作表operations字段英文名字段汉字名类型约束条件说明Id操作IDIntPKName操作名称Varchar(20)3权限表rights字段英文名字段汉字名类型约束条件说明Id操作IDIntPKName操作名称Varchar(20)url保留Varchar(30)Moduleid模块IDIntOperationid操作IDint角色表roles字段英文名字段汉字名类型约束条件说明Id角色IDIntPKName角色名称Varchar(20)5角色权限设置表rolerights字段英文名字段汉字名类型约束条件说明Id角色权限IDIntPKRoleid角色IDintRighted权限IDint6管理员表admins字段英文名字段汉字名类型约束条件说明Id管理员IDIntPKName管理员姓名Varchar(20)loginname管理员登录名Varchar(20)loginpassword管理员登录密码Varchar(20)Phone管理员电话Varchar(20)Email管理员电邮Varchar(20)enrolldate管理员授权日期Date管理员角色设置表adminroles字段英文名字段汉字名类型约束条件说明Id管理员角色IDIntPKAdminid管理员IDVarchar(20)Roleid角色IDVarchar(20)2.3.2.用户帐务帐号,资费与业务帐号相关表设计1用户帐务帐号表users字段英文名字段汉字名类型约束条件说明Id用户IDIntPKName用户名Varchar(20)Loginname用户登录名Varchar(20)loginpassword用户登录密码Varchar(20)Status用户状态Int暂停Phone用户电话Varchar(20)Email用户电邮Varchar(20)Enrolldate用户开户日期DateClosedate用户注销日期Datepaymenttype支付方式IntCareer职业Varchar(20)Nationality民族Varchar(12)Sex性别TinyintCompany公司Varchar(20)Zip邮编Varchar(8)2资费表pricings字段英文名字段汉字名类型约束条件说明Id资费IDIntPKName资费名称Varchar(20)Basefee基本费用doubleRatefee费用率doubledescription资费描述Varchar(50)暂停3用户业务帐号表userservices字段英文名字段汉字名类型约束条件说明Id业务IDIntPKUserid用户IDVarchar(20)loginname用户登录名Varchar(20)loginpassword用户登录密码Varchar(20)Labip实验室IPStatus状态Varchar(20)Priceid资费IDVarchar(20)enrolldate业务申请日期Dateclosedate业务停止日期Date2.3.3.用户登录时长原始数据与整合数据相关表设计1用户登录时长原始明细表details字段英文名字段汉字名类型约束条件说明loginname登录名Varchar(20)Loginip登录IPVarchar(24)logintime登录时间Timestamplogouttime登出时间TimestampLabip实验室IPVarchar(24)Duration登录时长Long2用户登录时长按用户每时整合表detaildays_x字段英文名字段汉字名类型约束条件说明loginname登录名Varchar(20)Loginip登录IPVarchar(24)logouttime登出时间TimestampLabip实验室IPVarchar(24)duration登录时长long3用户登录时长按用户每天整合表detailmonths_x(与上同)字段英文名字段汉字名类型约束条件说明loginname登录名Varchar(20)Loginip登录IPVarchar(24)logouttime整合时间TimestampLabip实验室IPVarchar(24)Duration登录时长long4用户登录时长按用户每月整合表detailyears_x(与上同)字段英文名字段汉字名类型约束条件说明loginname登录名Varchar(20)Loginip登录IPVarchar(24)logouttime整合时间TimestampLabip实验室IPVarchar(24)Duration登录时长long5用户登录时长按实验室每时整合表detaildays字段英文名字段汉字名类型约束条件说明logouttime整合时间TimestampLabip实验室IPVarchar(24)Duration登录时长long6用户登录时长按实验室每天整合表detailmonths(与上同)字段英文名字段汉字名类型约束条件说明logouttime整合时间TimestampLabip实验室IPVarchar(24)Duration登录时长Long7用户登录时长按实验室每月整合表detailyears(与上同)字段英文名字段汉字名类型约束条件说明logouttime整合时间TimestampLabip实验室IPVarchar(24)Duration登录时长long2.4.各模块类以及界面设计2.4.1.登录.相关表Modules表,Operations表,Rights表,Roles表,RoleRights表,Admins表,AdminRoles表.界面设计图1管理员登陆页面.类图设计1类图2类图时序说明3类说明LoginUI<login.jsp>登录界面类,可以用Servlet与JSP实现.LoginForm登录表单参数类,封装用户登录数据登录名loginname登录密码loginpasswordLoginAction类,登录逻辑处理类,负责验证用户名与密码。登录成功访问loginok,登录失败访问loginfail函数execute(),处理登录逻辑检测。AdminDAO类,负责管理员,权限,角色等相关表的访问处理封装。函数verify函数原型intverify(String,String)throwsInValidAdminException参数管理员帐号管理员密码返回如果验证成功,则返回该管理员的id,异常如果验证失败,则抛出InValidAdminException异常函数getRole函数原型ListgetRole(int)参数管理员ID返回返回该管理员具备的角色,List中元素是Role类型异常函数getRight函数原型ListgetRight(List)参数一组角色的列表返回返回一组角色拥有的所有权限,List元素是Right类型异常函数getModuleOperation函数原型MapgetModuleOperation(List)参数一组权限的列表返回返回一组权限对应的系统模块与模块允许的操作,Map元素中key是Module类型,value是Operation类型异常4参数设计(1)页面参数存放管理员权限模块的session参数module(2)Forward参数登录成功loginok登录失败loginfail(3)url设计LoginAction的path:login2.4.2.权限管理.相关表Modules表,Operations表,Rights表,Roles表,RoleRights表,Admins表,AdminRoles表界面设计1菜单风格图2权限菜单2权限浏览图3权限浏览3权限修改图4权限修改浏览页图5权限修改页面4权限删除图6权限删除页面5权限增加图7权限增加页面角色浏览图8角色浏览页面7角色修改图9角色修改浏览页面图10角色修改页面8角色删除图11角色删除页面9角色增加图12角色增加页面.类图设计1UI结构类图权限浏览类图1类图2类图时序说明3类说明RightUI<right.jsp>权限查询与浏览界面类RightCondForm类,封装权限查询条件Page控制当前现实的页数RightDAO权限数据访问类函数getRightByCond函数原型ListgetRightByCond(RightCondForm)参数查询权限的条件表单返回返回满足条件的所有权限列表,异常RightRoleAction权限管理业务处理类函数browseRight函数原型ActionForwardbrowseRight(ActionMapping,ActionForm,HttpServletRequest,HttpServletResponse)参数参数意义与struts相同返回返回要转向的url封装ActionMapping,showright异常权限修改类图类图类图时序说明类说明RightUpdateUI<rightup.jsp>类,权限修改选择界面RightUpdateInputUI<rightupinput.jsp>类,权限修改输入界面RightRoleAction类,权限修改数据处理类函数updateRightRightAction类,权限修改业务处理类。函数showupdate,获取要修改的权限数据函数update,更新保存修改的权限数据RightForm类,修改的权限数据封装表单类。RightDAO类,权限数据保存访问类。函数getById得到指定id的权限。函数update更新权限数据.权限删除类图类图类图时序说明类说明RightDeleteUI<rightdel.jsp>类,要删除的权限列表界面。RightAction类,通过delete方法处理删除逻辑。RightForm类,要删除的权限的form封装,这里只需要权限IDRightRoleAction类,通过调用deleteRight函数列出要删除的权限列表。RightDAO类,权限删除访问类,删除函数deleteById.权限增加类图类图类图时序说明类说明RightAddNewUI<rightadd.jsp>类,权限数据输入界面类。RightForm类,权限数据提交封装类。RightAction类,权限保存业务处理,函数是insertRightDAO类,把权限插入到数据库德操作类,函数insert角色浏览类图类图类图时序说明类说明RoleUI<role.jsp>类,角色显示界面。RightRoleAction类,角色的查询逻辑就是调用browseRole实现的。RoleCondForm角色查询条件封装。RoleDAO类,负责角色数据的访问,角色查询函数是getAllRole.函数getAllRole函数原型ListgetAllRole(RoleCondForm)参数参数是要查询的角色的条件返回返回满足条件的所有角色。异常角色修改类图类图类图时序说明类说明RoleUpdateUI<roleup.jsp>类,显示要修改角色列表界面RoleForm类,封装角色表单数据。RoleAction类,角色修改逻辑处理类,获取要修改的角色showUpdate,保要修改的角色update。RoleUpdateInputUI<roleupinput.jsp>类,角色的修改界面。RoleDAO类,负责角色数据访问,保存角色函数update角色删除类图类图类图时序说明类说明RoleDeleteUI<roledel.jsp>类,要删除角色显示界面。RoleForm类,封装要删除角色的表单数据。RoleAction类,负责角色的删除逻辑处理,函数delete。RoleDAO类,负责对角色数据的访问,函数deleteRoleById.角色增加类图类图类图时序说明类说明RoleAddNew<roleadd.jsp>类,角色增加输入界面。RoleForm类,角色表单数据。RoleAction类,处理角色增加逻辑。函数addnewRoleDAO类,负责把角色数据插入到数据库。函数insertRole。2.4.3管理员管理UI结构类图设计相关表admins表,roles表,adminroles表UI设计1管理员管理菜单设计图13管理员管理菜单页面2超级管理员信息修改图14超级管理员信息修改页面3管理员查询浏览图15管理员浏览页面4管理员修改图16管理员信息修改浏览页面图17管理员信息修改页面5管理员删除图18管理员删除页面6管理员增加图19管理员增加页面.类图设计1超级管理员信息修改类图类图时序说明类说明AdminSuperUI<adminsuper.jsp>类,超级管理员信息修改界面。AdminAction类,负责超级管理员修改数据的获取showUpdateSuper,并保存修改后的超级管理员数据的逻辑updateSuper。AdminDAO类,负责从数据库获取超级管理员信息getById,把超级管理员的数据保存到数据库updateAdmin。2管理员查询浏览类图类图时序说明类说明AdminUI<admin.jsp>类,负责显示查询的管理员结果的界面。AdminCondForm类,负责查询的条件表单封装。AdminAction类,负责查询逻辑。browseAdminAdminDAO类,负责到数据库的查询访问。getAllAdmin。3管理员修改类图类图的时序说明类说明AdminUpdateUI<adminup.jsp>类,负责显示要修改的管理员列表界面。AdminAction类,负责修改数据的显示,修改数据的保存逻辑处理。showUpdateAdmin,updateAdminAdminForm类,负责封装管理员数据。AdminUpdateInputUI<adminupinput.jsp>类,负责修改管理员数据的界面。AdminDAO类,负责从数据库得到要显示的管理员信息和保存修改的管理员数据到数据库。getById,updateAdmin.4管理员删除类图类图时序说明类说明AdminDeleteUI<admindel.jsp>类,负责显示要删除的管理员列表的界面。AdminAction类,负责管理员删除逻辑处理deleteAdmin。AdminDAO类,负责从数据库删除管理员数据。deleteAdmin。5管理员增加类图类时序说明类说明AdminAddNew<adminadd.jsp>类,负责管理员数据输入界面。AdminAction类,负责管理员数据保存逻辑处理insertAdmin。AdminForm类,负责封装管理员表单数据。AdminDAO类,负责把管理员数据保存到数据库insertAdmin。2.4.4资费管理相关表pricings表。UI设计1资费查询图20资费浏览页面资费修改图21资费修改页面图22资费增加页面资费删除图23资费删除页面资费增加图24资费增加页面类图设计资费管理UI整体结构2资费查询类图类图时序说明类说明PricingQueryUI<pricingquery.jsp>类,显示资费的查询结果界面。PricingAction类,负责资费查询逻辑处理queryPricing。PricingConditionForm类,封装资费查询条件表单数据。PricingDAO类,负责从数据库获取资费查询结果getPricingByCondition。3资费修改类图类图时序说明类说明PricingUpdateUI<pricingup.jsp>类,负责显示要修改的资费列表界面。PricingAction类,负责修改数据的显示,修改保存逻辑处理。PricingForm类,PricingUpdateInputUI<pricingupinput.jsp>类PricingDAO类4资费删除类图类图时序说明类说明PricingDeleteUI<pricingdel.jsp>类,负责显示要删除资费列表的界面。PricingAction类,负责得到要删除资费数据showDeletePricing,删除资费的逻辑处理deletePricing。PricingDAO类,负责从数据库获取资费数据getPricingByCondition,并从数据库中删除资费数据deleteById。5资费增加类图类图时序说明类说明PricingAddNewUI<pricingadd.jsp>类,负责显示资费的输入界面。PricingAction类,负责资费输入showAddNewPricing,资费数据插入等逻辑处理addnewPricing。PricingForm类,封装资费的表单数据。PricingDAO类,负责把资费中数据保存到数据库insert。2.4.5.用户管理相关表users表,userservices表,pricings表。.UI结构设计1用户管理菜单结构图25用户管理菜单结构页面帐务帐号查询图26账务账号查询页面帐务帐号修改图27账务账号修改浏览页面图28账务增加页面4帐务帐号删除图29账务账号删除页面5帐务帐号申请图30账务增加页面业务帐号查询图31业务账号查询页面7业务帐号修改图32业务账号修改浏览页面图33业务账号修改页面业务帐号删除图34业务账号删除页面业务帐号申请图35业务账号增加页面.类图设计1UI类结构设计2帐务帐号查询类图类图时序说明类说明AccountQuery<accountque.jsp>类,负责显示查询结果。AccountBusinessAction类,负责显示所有帐务帐号的获取逻辑处accountquery。AccountAction类,负责查询帐务帐号的逻辑处理query。AccountQueryCondForm类,负责查询条件的表单数据封装。AccountDAO类,负责从数据库得到所有帐务帐单数据listAllAccount,从数据库得到满足条件的帐务帐号数据queryAccountByCond。3帐务帐号修改类图类图时序说明类说明AccountUpdate<accountup.jsp>类,负责显示要更新的帐务帐号列表。AccountBusinessAction类,负责要更新帐务帐号的获取逻辑处理accountupdate。AccountUpdadteInput<accountupinput.jsp>类,负责帐务帐号的修改界面。AccountAction类,负责要修改的帐务帐号的数据获取updatequery,和修改后的帐务帐号数据的保存update。AccountForm类,负责帐务帐号数据的封装。AccountDAO类,负责从数据库获取数据和更新数据getAccountById,update。4帐务帐号删除类图类图时序说明类说明AccountDelete<accountdel.jsp>类,负责显示要删除的帐务帐号列表界面。AccountBusinessAction类,负责显示所有帐务帐号的逻辑处理accountdelete。AccountAction类,负责帐务帐号的删除逻辑处理delete。AccountForm类,封装要删除的帐务帐号,其中id有效。AccountDAO类,负责帐务帐号的删除,函数是deleteAccountByID。5帐务帐号申请类图类图时序说明类说明AccountAddNew<accountadd.jsp>类,负责帐务帐号的输入界面AccountBusinessAction类,负责帐务帐号输入界面逻辑处理accountaddnew。AccountAction类,负责帐务帐号的增加逻辑处理insert。AccountDAO类,负责把帐务帐号数据保存到数据库insert。6业务帐号查询类图类图时序说明类说明BusinessQuery<businessque.jsp>类,负责显示业务帐号列表的界面。AccountBusinessAction类,负责显示所有业务帐号的逻辑处理。Businessquery。BusinessAction类,负责查询的逻辑处理query。BusinessCondForm类,业务帐号查询条件封装。BusinessDAO类,负责从数据库查询数据getBusinessByCon。7业务帐号修改类图类图时序说明类说明BusinessUpdate<businessup.jsp>类,负责显示要修改的业务帐号列表的界面。AccountBusinessAction类,负责要修改业务帐号的获取查询的逻辑处理businessupdate。BusinessUpdateInput<businessupinput.jsp>类,负责显示要修改业务帐号的修改界面。BusinessAction类,负责要修改数据的获取updatequery和修改后数据的保存update的逻辑处理。BusinessForm类,业务帐号数据的表单封装。BusinessDAO类,负责从数据库得到要修改的数据getById和更新修改update的数据到数据库。8业务帐号删除类图类图时序说明类说明BusinessDelete<businessdel.jsp>类,负责显示要删除的业务帐号的列表界面。AccountBusinessAction类,负责要删除的业务帐号的查询逻辑处理businessdelete。BusinessAction类,负责数据删除的逻辑处理delete。BusinessForm类,封装要删除业务的表单数据。BusinessDAO类,负责把数据从数据库删除。9业务帐号申请类图类图时序说明类说明BusinessAddNew<businessadd.jsp>类,负责业务帐号数据的输入界面。AccountBusinessAction类,负责业务帐号输入的逻辑处理businessaddnew。BusinessAction类,负责输入业务帐号数据的保存逻辑处理addnew。BusinessForm类,负责业务帐号表单数据的封装。BusinessDAO类,负责把数据添加到数据库addnew。2.4.6帐单查询相关表details表,detaildays_x表,detailmonths_x表,detailyears_x表,users表,userservices表。UI设计1账单查询图36账单查询页面2 账单查询明细图37账单查询明细页面类设计类图类图时序说明类说明FeeQueryAction类,负责账单查询,与明细查询的逻辑处理。FeeQueryCondForm类,负责查询条件的表单数据封装。FeeQueryUI<feequery.jsp>类,负责显示账单费用查询结果。FeeDetailUI<feedetail.jsp>类,负责显示帐务帐号上的明细。FeeDAO类,负责从数据库查询获取相关数据。2.4.7帐务查询相关表detaildays表,detailmonths表,detailyears表。UI设计1帐务年查询图38账务年查询页面图39账务年查询明细页面帐务月查询图40账务月查询页面图41账务月查询明细页面类设计类图类图时序说明年查询月查询类说明ServiceTimeQueryAction类,负责查询的逻辑处理。ServiceTimeQueryCondForm类,负责查询条件的封装。ServiceTimeQueryYUI<servicetimey.jsp>类,显示年查询结果界面。ServiceTimeDeatailY<servicedetaily.jsp>类,负责显示年查询明细结果界面。ServiceTimeQueryMUI<servicetimem.jsp>类,负责显示月查询结果界面。ServiceTimeDeatailM<servicedetailm.jsp>类,负责显示月查询明细结果界面。3.编码部分3.1.

电信计费系统编码规范该系统在编码过程中,严格按照在详细设计说明书来编写,做到了前后统一。所有编码时参照java编写规范,从而有一个良好的可维护性和可读性。本系统所具体编码规范如下:3.1.1.命名规范.package(*)包名全部由小写的ASCII字母组成,用“.”分隔。在此项目中,所有的包均以“ctoss”开头。net.tysy为太原师范学院的网址倒写,netctoss为系统的标识。.class(*)类名应当是名词,每个内部单词的头一个字母大写。应当使你的类名简单和具有说明性。用完整的英语单词或约定俗成的简写命名类名。示例:publicclassUserManagerinterface(*)接口名应当是名词,每个内部单词的头一个字母大写。应当使你的接口名简单和具有说明性。用完整的英语单词或约定俗成的简写命名接口名。示例:interfaceUserServiceClass成员属性及变量的命名(*)变量名全部由字母组成,头一个字母小写,以后每个内部单词的头一个字母大写。变量名应该短而有意义。变量名的选择应该易于记忆。一个字符的变量名应避免,除非用于临时变量。通常临时变量名的命名规则为:i,j,k,m,n用于整数;c,d,e用于字符。示例:privateStringlastName;常量的命名(*)Java里的常量,是用staticfinal修饰的,应该用全大写加下划线命名,并且尽量指出完整含义。示例:staticfinalStringPAGE_SIZE="12";数组的命名(*)数组应该总是用下面的形式来命名:byte[]buffer;方法的参数(*)和变量的命名规范一致,且应使用有意义的参数命名,如果可能的话,使用和要赋值的字段一样的名字。示例:setCounter(intsize){this.size=size;}方法命名(*)方法的命名应当使用动词,头一个字母小写,以后每个内部单词的头一个字母大写。在方法名的选择上应意义明确便于记忆。对于属性的存取方法,应使用getXXX()和setXXX()名称,以isXXX(),hasXXX()来命名返回值为boolean类型的方法。一般命名注意事项用有意义的名字命名变量首先,用完整的英语单词或约定俗成的简写命名变量。示例:firstNamezipCode用复数命名Collection类变量。Collection包括数组,Vector等。命名时使用复数:示例:customersclassmates2Java源文件样式Java(*.java)源文件应遵守如下的样式规则:Class代码布局:版权声明Package和Import语句Javadoc注释或者其它文件头注释类或接口声明Fields声明空行构造函数 空行克隆方法空行其它方法(不包括main)空行 内部(Inner)类空行main()方法版权声明所有的源文件都应该以一个c风格的注释开始,以列出类名,版本信息,修改日期和版权声明。示例:/**Classname:**Versioninformation:**Date:**Copyright2003ProstenTechnologyCo.,Ltd.**/其他不需要出现在javadoc的信息也可以包含在这里。Package/Imports(*)package行要在import行之前,中间空一行。将import的classes归类,按顺序罗列:a.Java标准类(java.*)b.Java扩充类(javax.*)c.第三方类d.你的应用程序的类注意在第三方类里进行注释,说明它们的来源。如果import行中包含了同一个包中的多个类,则可以用*来处理。示例:packagectoss.user;importjava.io.*;importjava.util.Observable;importjava.util.Date;importjavax.sql.*;//ApacheXercesimportorg.apache.xml.*;importorg.apache.xerces.dom.*;//Applicationclassesimportctoss.util.*;这里java.io.*使用来代替InputStream和OutputStream的引入。2.4Javadoc注释示例:/***<p>Title:类名</p>*<p>Description:(说明用中文)/</p>*@author: 张三*@date:(最后一次修改的提交时间)*/ClassFields类的成员变量:示例:protectedint[]packets;public的成员变量必须以生成文档(JavaDoc)的方式进行注释(/**…*/)。proceted、private和package定义的成员变量如果名字含义明确的话,可以没有注释。Field定义可遵从以下顺序:a.public常量b.public变量c.protected常量d.protected变量e.package常量f.package变量g.private常量h.private变量存取方法(getter,setter)接下来是类变量的存取的方法。构造方法(*)重载的构造方法应该用递增的方式写(参数多的写在后面)。示例:publicCounterSet(){this(10);}publicCounterSet(intsize){this.size=size;}克隆方法如果这个类是可以被克隆的,就应实现clone方法:示例:publicObjectclone(){try{CounterSetobj=(CounterSet)super.clone();obj.packets=(int[])packets.clone();obj.size=size;returnobj;}catch(CloneNotSupportedExceptione){thrownewInternalError("UnexpectedCloneNotSUpportedException:"+e.getMessage());}}类方法下面开始写类方法:示例:/***Setthepacketcounters*(suchaswhenrestoringfromadatabase)*/protectedfinalvoidsetArray(int[]r1,int[]r2,int[]r3,int[]r4)throwsIllegalArgumentException{if(r1.length!=r2.length||r1.length!=r3.length||r1.length!=r4.length){thrownewIllegalArgumentException("Arraysmustbehesamesize"); }System.arraycopy(r1,0,r3,0,r1.length);System.arraycopy(r2,0,r4,0,r1.length);}0toString方法每一个类都最好定义toString方法:示例:publicStringtoString(){Stringretval="CounterSet:";for(inti=0;i<data.length();i++){retval+=data.bytes.toString();retval+=data.packets.toString();}returnretval;}1main方法(*)如果类中包含main(String[])方法,那么它应该写在类的底部。3代码编写风格3.1语句3.1.1简单语句每一行包含至多一条语句。.2复合语句复合语句是指附加形如"{……}"封套结构的语句。封套内的语句要比复合语句多缩进一个层次。开头的括号因该在起始复合语句同一行的末尾;结尾的括号应该新起一行并和起始的复合语句保持同样缩进。应当对所有诸如if-else,while,for,try-catch结构的控制语句都使用大括号,即使是单个语句,只要它是控制结构的一部分。示例:if(condition){statements;}else{statements;} //if-else语句.3返回语句有值返回的返回语句不应该使用括号,除非某些情况下为了使得返回值更加明显。示例:return;returnmyDisk.size();return(size?size:defaultSize);位置控制.1缩进应当用四个空格作为缩排的单位。不要在源文件中保存Tab字符(!!)。以免在使用不同的源代码管理工具时Tab字符将因为用户设置的不同而显示为不同的宽度。.2行的长度避免行长超过80个字符,因为这样不好被大多数终端显示和工具处理。.3折叠的行当表达在一行放不下时,根据下面的一般原则打断它:在一个逗号后打断。在运算符前打断。高层次的打断优于低层次的打断。让新起的行与上一行同一层次表达的开头对齐。如果上面的方法导致代码混乱或者代码减少了合适的页边空白,那么使用缩进8个空格代替。示例:下面的例子打断了方法调用:someMethod(longExpression1,longExpression2,longExpression3,longExpression4,longExpression5);var=someMethod1(longExpression1,someMethod2(longExpression2,longExpression3));示例: 下面两个例子打断了算术表达式。第一个较好,因为打断发生在较高层次上。longName1=longName2*(longName3+longName4-longName5)+4*longname6;示例: 语句的行折叠通常用8空格,这是因为4空格会使主体部分看起来困难。//USETHISINDENTATIONINSTEADif((condition1&&condition2)||(condition3&&condition4)||!(condition5&&condition6)){doSomethingAboutIt();}空白处理.1空行空行通过分开局部相关的代码部分,增加了可读性。在下列情况下总是使用两个空行:源文件的不同部分之间和接口定义之间在下列情况下总是使用一个空行:在方法之间方法里面的局部变量声明和它的第一个语句之间在块注释(参见4.1.1节)或单行注释(参见4.1.2节)之前方法里面的逻辑部分之间,以提高可读性.2空格应该在下列情况下使用空格:关键字和后面的括号之间应该使用一个空格。例如: while(true){ ... }注意在方法名和后面的括号之间不应该使用空格。这有助于分清关键字和方法调用。逗号之后应该使用一个空格。除了“.”之外的所有二元操作符应该用空格和操作数分开。对于一元操作符不使用空格。示例: a=(a+b)/(c*d); while(d++=s++){ n++; } printSize("sizeis"+foo+"\n");for语句中的表达式应当用空格分开。示例: for(expr1;expr2;expr3)强制类型转换应当跟随一个空格。示例: myMethod((byte)aNum,(Object)x);myMethod((int)(cp+5),((int)(i+3))+1);声明.1每行一个每行只能书写一个声明,因为这有利于注释。示例:intlevel; //indentationlevelintsize; //sizeoftable示例:上面的例子中使用一个空格分隔类型和标示符。另一种方法是使用tab,如:intlevel;//indentationlevelintsize;//sizeoftableObjectcurrentEntry;//currentlyselectedtableentry.2初始化试着在局部变量声明的时候进行初始化。如果不在变量声明的时候进行初始化,唯一的理由就是它的初始值首先依赖于一些计算。.3位置声明只放在代码块的开始部分。(一个代码块是指由括号"{"和"}"包围的代码。)不要等到变量使用时才声明它们。唯一的例外是在for循环语句中。示例: voidmyMethod(){intint1=0;//beginningofmethodblockif(condition){intint2=0;//beginningof"if"block ...}}for(inti=0;i<maxLoops;i++){...}要避免局部变量的声明出现在比其更高的层次中。不要声明和内部代码块同名的变量。3.1.4程序编写规范使用方法来访问实例变量和类变量(*)如果没有很好的理由,一般不应将实例变量或类变量设为public,将变量设为public的典型应用是此类代表一个“数据结构”,而不包含任何方法。引用类变量和类方法(*)避免使用对象引用来访问类(static)变量或类方法,而应使用类名来访问。如:classMethod();//OKAClass.classMethod();//OKanObject.classMethod();//避免!常量(*)数字常量不应直接在编码中出现,除非是for循环中用于计数的–1,0,或1。字符串常量尽量不直接在编码中出现。?前的逻辑运算表达式?前的逻辑运算表达式应以括号括起,如:(x>=0)?x:-x;4.5变量赋值避免在一个语句中赋给几个变量同样的值。这是难于阅读的。示例: fooBar.fChar=barFoo.lchar='c';//AVOID!不要在容易和相等操作符混淆的地方使用赋值操作。 if(c++=d++){//AVOID!(Javadisallows)...}而应该写成这样: if((c++=d++)!=0){...}不要为了提高运行性能使用内嵌的赋值,这是编译器的任务。例如:d=(a=b+c)+r;//AVOID!而应该写成:a=b+c;d=a+r;特殊注释在实现某个类的方法时若还未完成实际代码,但出于程序连接需要,可令该方法暂时返回一个“true”一类的结果,具体实现代码留待下一步实现。但是此部分需要用/*×××WAITINGTOIMPLEMENT…×××*/标注。例外申明的错误应该抛出一个RuntimeException或者派生的例外。顶层的main()函数应该截获所有的例外,并且打印(或者记录在日志中)在屏幕上。方法的输入参数方法的输入参数为对象时,默认的前置条件为输入实例不为空(null),除非在API文档中另行说明。即默认情况下,方法体中不对传入实例是否为空特别地加以判断。方法的返回值当方法的返回值为对象时,返回值是否可能为空应当在API文档中说明。若返回值可能为空,相应的条件也应同时在API文档中说明。3.1.5Struts2编码规范Action的class命名所有的Action类均以有意义的英文单词加Action

温馨提示

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

评论

0/150

提交评论