黑马程序员__移动用户资费统计系统

---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------

移动用户资费统计系统

这是一道很复杂很难的题,理解起来比较吃力,要完全消化这道题还需要一段时间。在这道题中,有普通客户,有VIP客户,每个类型的客户又有不同的收费方式。设计起来非常复杂,但是把问题高度同一话这时面向对象设计的特点,把具有相同事物封装成类。我们也可以把不同的套餐,用户等相同的部分统一,把没有加上,但只要不影响就好。好比:“大象有尾巴,而蚂蚁没有尾巴,大象没有触角,而蚂蚁则有触角,能否用同一个累加所有器官的公式来计算蚂蚁和大象的体重呢?当然可以,这时候只需要假设蚂蚁也有尾巴,只是蚂蚁的尾巴重量为0,假设大象也有触角,只是大象触角的重量为,这样,就可以用同一种累加所有器官的公式来计算蚂蚁和大象的体重了。”
没有套餐也是一种套餐,总体套餐¥=总体月租费+电话套餐(此功能月租费+话费)+短信套餐+数据套餐。
二:统一存储格式:配置文件conf.properties
a)普通用户资费标准
commons.normal.phone.price=
Commons.normal.message.price=
Commons.normal.data.price=
b)普通用户优惠套餐
Commons.pack1.phone.message=
等资费标准存储格式;
用现实生活中的单位用的float类型数据,有失进度,可用更换单位来弥补,100分=1元。当然可以提高数据类型BigDecimal来操作。
配置文件类:
可以通过这个类得到不同类型客户的不同套餐的各个数据。
int getNumber(String key);int getPrice(int customerType,int packType,int businessType);
 int getFree(int customerType,int packType,int businessType);
 int getRent(int customerType,int packType,int businessType;
 InputStream ins = ConfigManager.class.getResourceAsStream("/conf.properties");
移动公司里面有两类客户,移动公司里的客户可以打电话、发短信、数据通信,还可以订购和退订套餐;移动公司每月要为其中所有客户生成计费清单,还要模拟各种客户的行为。
(1) MobileCorporation类:simulationBusiness方法(模拟一个月的业务,内部随机做500件事情和结算每个用户的计费情况,随机做的事情就是挑选一个用户做其中任何一件事情:打电话/发短信/数据通信/定套餐/退订套餐/新用户入网)
public void simulationBusiness(Date month){
 for(Customer customer : customers){
  customer.monthBegin();
 }
 System.out.println("--------being simulating " + DateUtil.formatDateToMonth(month) + "--------------"); 
 for(int i=0;i<500;i++){
 randDoOneThing(month);//随机挑选用户消费,业务办理,callPhone();sendMessage();transferData();orderPack(monthOfOrderPack);cancelPack(monthOfOrderPack);joinNewCustomer(month);等业务
 }
 System.out.println(DateUtil.formatDateToMonth(month)+"的计费汇总清单:");
 for(int i=0;i<customers.size();i++){
  customers.get(i).countMonthMoney(month);
 }
}
打电话:
private void callPhone(){
  int rand = new Random().nextInt(customers.size());
  Customer customer = customers.get(rand);
  int phoneTimes = new Random().nextInt(10) + 1;
  customer.callPhone(phoneTimes);
  System.out.println(customer + "打了" + phoneTimes + "分钟电话");
 }
订购一款套餐:
private void orderPack(Date month){
  int rand = new Random().nextInt(customers.size());
  customers.get(rand).randomOrderPack(month);
 }

(2) Customer、CommonCustomer、VipCustomer等类:普通用户和VIP用户都可以打电话/发短信/数据通信/定套餐/退订套餐/结算费用等方法。普通用户和VIP用户的区别在于定套餐、退订套餐、结算费用的策略对象不同。
//记录当月的通话记录
private ArrayList phoneRecords = new ArrayList();


移动用户资费统计系统是一道很复杂也很有价值的题,以后还需要经常回顾!

 ---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值