---------------------- <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>、期待与您交流! ----------------------