移动用户资费统计系统
---------------------- android培训、 java培训、期待与您交流! ----------------------需求
模拟实现简易的移动用户资费统计系统逻辑,具体需求如下:
Ø 移动运营商A设置两种类型的用户:普通用户及VIP用户,现该运营商已有5个VIP用户和15个普通用户,共计20个用户。
Ø 普通用户资费标准如下(不考虑漫游和长途):
【基准资费】
无月租费用。
通话费:0.6元 / 分钟(仅拨打收费,接听免费)
短信费:0.1元 / 条
数据费:5元/ M
【优惠套餐】
话费套餐:月功能费 20元,最多可拨打60分钟电话,超出时间按照
0.5元 / 分钟计费。
短信套餐:月功能费10元,最多可发送200条短信,超出条数按照
0.1元 / 条计费。
数据套餐:月功能费20元,最多可获50M的流量,超出流量按照
3元 / M 计费。
注:用户可以选择多种套餐,各功能(通话、短信、数据)计费时,如已选择对应套餐,则按套餐标准计费;如未选择对应套餐,则按对应的基准资费计费。
Ø VIP用户资费标准如下(不考虑漫游和长途):
【基准资费】
月租费用:按天收取,2元 / 天
通话费:0.4元 / 分钟(仅拨打收费,接听免费)
短信费:0.1元 / 条
数据费:3元/ M
【优惠套餐】
套餐1 :月基本费用 100元(无月租费用),提供如下服务:
①最多可拨打750分钟电话,超出部分按照0.3元 / 分钟计费。
②最多可发送200条短信,超出条数按照0.1元 / 条计费。
③最多可获得100M数据流量,超出流量按照1元 / M计费。
套餐2 :月基本费用 200元(无月租费用),提供如下服务:
①最多可拨打2000分钟电话,超出部分按照0.2元 / 分钟计费。
②最多可发送500条短信,超出条数按照0.1元 / 条计费。
③最多可获得300M数据流量,超出流量按照0.5元 / M计费。
注:用户最多只能选择一种套餐,如未选择任何套餐,则按照基准资费计费。
Ø 各类型用户只能选择提供给本类型用户的套餐。
Ø 新用户入网。
①对于新入网的普通用户,入网当月赠送如下服务:免费拨打60分钟
电话,免费发送200条短信,免费获得50M流量。超出赠送的部分
按照普通用户基准资费进行计费。
②对于新入网的VIP用户,入网当月赠送如下服务:免费拨打200分
钟电话,免费发送200条短信,免费获得100M数据流量。超出赠送
的部分按照VIP用户基准资费进行计费(注意:需按入网天数计算月
租费用)。
Ø 每月为用户计算一次账单,用户订制的套餐信息和账单信息采用文件方式进行存储(提示:可使用java中的Properties API进行文件操作)。
Ø 用户可自由订制或退订所属用户类型的套餐,并从下月起生效。
Ø 异步随机生成客户操作如下:
①拨打电话,每次拨打时长为1至10分钟不等(随机决定,以分钟为
单位)。
②发送短信,每次发送条数为1至10条不等(随机决定)。
③上网获取数据,每次获取数据流量可为50K,100K,200K,
500K,1M(随机决定)。
④订制或退订相应套餐。
⑤新用户入网(随机决定用户类型)。
注:随机生成客户操作时间间隔自定,可设置。
Ø 不要求实现GUI,只考虑系统逻辑实现,可通过Log方式展现程序运行结果。
数据分析与统一计算公式
一.统一各类用户在各种情况下的费用计算公式
1.整体月基本费或月租费,月基本fie方式为固定值,月租费方式为当月总天数乘以每天费用或者(当月总天数-入网口+1)*每天费用,只有vip用户才存在此项费用,但是为了统一计算公式,可以认为普通用户也有此项费用,值为0.
2. 电话收费时长:等于(电话市场-免费时长和套餐中的免费,新入网的免费在用户对象中处理,套餐中的免费封装在套餐策略对象中处理。
3.电话、短信、数据套餐月功能费,只有普通用户定了套餐才有此项费用,但是为了统一计算公式,可以认为没定此功能套餐的普通用户和vip用户也有此项费用,值为0.
4.月电话费用=电话套餐月功能费+单位计费价格*电话收费时长。
5.按月电话费用的相同规则计算月短信费用和月数据费用
6.月总计费用=整体月基本费或月租费+月电话费用+约短信费用+月数据费用。
模型例子:
在配置文件中存储各项数据
才用一种便于程序代码读取的格式:
要存储的数据项有:功能单价费用、功能套餐免费数量、功能套餐月费用、新入网免费数量、整体月基本费或月租费。
一些数据概要随以下类型进行区分:用户类型、套餐类型、功能类型
在配置文件中通过用点(.)对数据项名称进行分级的方式来区分各个数据项所属的类别和功能
如下所示;
Common.normal.phone.price-------表示普通用户-- 非套餐--电话-- 单价
Common.pack1.phone.price-------表示普通用户 --套餐--电话 --单价
Common. pack1.phone.free-------表示普通用户套餐--电话—免费数量
Common. pack1.phone.rent-------表示普通用户套餐--电话—套餐月功能费用
Vip.normal.phone.price-----表示VIP用户—非套餐—电话—单价
VIP..pack1.phone..price-----表示VIP用户---套餐---电话---单价
Vip.pack2.phone.price---表示vip用户—套餐—电话—单价
Common.new.phone.free---表示普通用户—新入网---电话----免费数量
Vip.new.phone.free—表示vip用户—新开户---电话---免费数量
对于值为-的数据项,不用在配置文件中存储,这样,当程序代码从配置文件中没有读到该数据项是,即认为该值为0
对于vip用户的整体月基本费或月租费,由于计费单位不一样,采用排位置文件方式存储将增加程序的复杂度,所以,决定直接在程序代码中硬编码。
面向对象
面向对象设计把握一个重要的经验,谁拥有数据,谁就对恩爱提供操作这些数据的方法,在牢牢记住掌握几个九点多额案例就可以了。人在黑板上画圆,列出司机紧急刹车,售货员统计售货小票的金额,你把门关上等。
设计
移动公司里面两种客户,移动公司里的客户可以打点好,发短信数据通信还可以订购和退订套餐,移动公司每月要为其中所有客户市场计费清单,还要模拟各种科尔和的行为,据此,可以分析出如下一些类和方法。
MubileConporationr类,simulationBusiness方法,(模拟一个月的业务,内部随机将500件时间和结算每个用户的计费情况,随机做的事情就是挑选一个用户做其中任何一件事情,打电话发短信数据通信退订客户 新用户入网。
Customer CommonCustomer VipCustomer等类,打电话发短信数据通信 退订套餐 等方法,普通用户和vip用户的区别在于定套餐,退订套餐 结算费用的策略不同。
在这里可以把计算电话短信、数据费用的功能各封装成一个策略对象,这些策略对象内部根据当前的用户类别、当月实用的套餐和计费的功能项目来计算费用,策略对象在计算费用时,要从Properties文件中读取想要的数据值,为此可以专门设计一个类来读取配置文件,策略对象调用该类的方法,据此,可以分析出如下一些类和方法:
ComputerStraty类 computeMoney方法
ConfigManager类 getUnitPrice getPackFree getPackChange getNewUserFree等方法
还有,应该有一个总的策略对象来管理各个功能项目的策略对象以及vip用户的月租费或月基本费,所谓订购套餐,就是选用哪个策略对象,所有,订购某个功能套餐和退订某个功能
套餐的方法应分配给这个总的策略对象,这个总策略对象内部既要存储各个功能项的当前的套餐对应的“设置”不定式真的变了赋值操作,可以使通过日期比较的方法来达到,者需要设计一个辅助类把某月和从该月开始订购的功能套餐进行关联存储,据此,可以分析出如下一些类和方法。
PackStragy类 orderRent cancelRent ,getValdRent orderPack getValdConputeStrategy
OrderedStrategyHolder类 order getValidStrategy
管理用户套餐订购情况
1. 用户在2月订购3月以后的套餐,结算2月份的费用时,就不能使用订购的套餐计费方式,而应该使用原先的套草计费方式,结算3月以后的费用的,才采用先前的订购的套餐计费方式。
2. 声明是原先的套餐计费方式,要么是直接存储在FackStrategy的,要么是存储在套餐订购记录中的,至少有套餐订购记录日期决定的。
3. 当重新订购套餐是,原来订购的套餐要被记录下来,以便计算当月费用时候使用,当时,如果猿类订购的套餐对当月是不是不起作用的,那么,则不用记录下来。
类图设计
---------------------- android培训、 java培训、期待与您交流! ----------------------详细请查看: http://edu.csdn.net/heima