2022年移动计费系统 .pdf

上传人:Q****o 文档编号:30516883 上传时间:2022-08-06 格式:PDF 页数:47 大小:298.96KB
返回 下载 相关 举报
2022年移动计费系统 .pdf_第1页
第1页 / 共47页
2022年移动计费系统 .pdf_第2页
第2页 / 共47页
点击查看更多>>
资源描述

《2022年移动计费系统 .pdf》由会员分享,可在线阅读,更多相关《2022年移动计费系统 .pdf(47页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、前面的两篇博文写到:有两名同学出去面试,招聘单位分别给他们两个小项目拿回家做,三天内做出来即可给到7k 以上的月薪, 我都帮他们做了,详情参看 交通灯管理系统和银行业务调度系统的介绍。不久,又有一名学员给我打电话,让我帮他做一道类似的题目,不过,这次项目变成了 “移动用户资费统计系统” ,再细问,知道这次的招聘公司不是软通动力了,而是联想利泰,这两家公司提供的word 文档格式都完全一样,我奇怪现在的软件公司怎么都学会用这招来考核求职者了, 我真怀疑这些题目出自同一人之手,难道是软通动力的技术经理跳槽到联想利泰啦?他的这招面试手法确实够高!我看到 “移动用户资费统计系统”的需求文档后, 发现这

2、个系统的业务比交通灯管理系统和银行业务调度系统的业务都要复杂得多,一时间真不知道该从哪里着手,只能回复那名学员:“这个项目题好像不是一两天就能搞定的事情,我努力做做, 别抱太大希望” 。如果说 “交通灯管理系统”或“银行业务调度系统”做出来就可以拿到7k 月薪的工资的话,我认为这个“移动用户资费统计系统”做出来的话,起码应该可以拿到1w 以上的月薪。我按照“移动用户资费统计系统”的需求文档认认真真地做了两天,体力透支很大,加之十几年的编程生涯, 我一直处于亚健康状态,这个“移动用户资费统计系统”终究成了压倒骆驼的最后一根稻草,我累得病倒了! 等到身体康复后,我不甘心事情只做了一半就放弃了,接着

3、又花了两天的时间,总算把这个项目题给做完了,结果又再次累病倒了。后来又有好几名去联想利泰面试的学员拿着这个移动用户资费统计系统找我, 我每次都把源代码给了这些学员,并讲解清楚了其中的代码结构,后来问这些学员,他们一个也没被录取, 他们一致认为该公司可能只是想找个人来向他们讲解如何实现此系统的代码,看来着实枉费了我一番心机和功夫!最近, 又接到多名学员的反馈,除了联想利泰,美国阿格雅技术有限公司也在使用此题目考核面试者,这个题目虽然没有华丽的外表,但它确实是一个有技术含量的项目,绝非是一个普普通通的程序员容易做出来的东西!这道题目是在解决实实在在的复杂业务问题,其中涵盖了技术含量极高的编程技巧和

4、设计手法,这才是真正做高级项目所要学习的知识,对于广大程序员来说,它是一个不错的案例,不同于那种只是大量重复性工作的增删改查项目。特别说明:由于电信和银行实际环境的复杂性和产品一旦上线运行后对错误的容忍度几乎为 0,电信和银行的项目在做完后都不能直接上线测试运行,而是要通过编写非常完全和严格的模拟程序来进行测试,确保万无一失后再实际上线运行,所以, 为电信和银行项目编写模拟程序和比对检查程序运行的结果就非常重要了。虽然我写完了 移动用户资费统计系统的代码, 但不能保证最终的运行结果就没有错误,这需要仔细分析和比对运行结果才能发现问题,由于移动用户资费统计系统的业务逻辑实在有点复杂,仅凭我个人之

5、力,实在难以比对出每个细节,为此,我专门编写了测试用例编写指导书和比对检验指导书,供感兴趣的网友参考。如果有哪位网友发现我写的程序统计出来的结果有问题,请来信详细告知,我将不胜感激。下面是”移动用户资费统计系统“的需求:移动用户资费统计系统原始需求文档下载讲座 ppt 下载讲座源码下载讲座视频下载(待补充 ) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 47 页 - - - - - - - - - 模拟实现简易的移动用户资费统计系统逻辑,具体需求如下:移动运营商A 设

6、置两种类型的用户:普通用户及VIP 用户,现该运营商已有5 个 VIP 用户和 15 个普通用户,共计20 个用户。普通用户资费标准如下(不考虑漫游和长途):【基准资费】无月租费用。通话费: 0.6 元/ 分钟(仅拨打收费,接听免费)短信费: 0.1 元/ 条数据费: 5 元/ M 【优惠套餐】话费套餐:月功能费20 元,最多可拨打60 分钟电话,超出时间按照0.5 元/分钟计费。短信套餐:月功能费10 元,最多可发送200 条短信,超出条数按照0.1 元/条计费。数据套餐:月功能费20 元,最多可获50M 的流量,超出流量按照3 元/M 计费。注:用户可以选择多种套餐,各功能(通话、短信、数

7、据)计费时,如已选择对应套餐,则按套餐标准计费;如未选择对应套餐,则按对应的基准资费计费。VIP 用户资费标准如下(不考虑漫游和长途):【基准资费】月租费用:按天收取,2 元/ 天通话费: 0.4 元/ 分钟(仅拨打收费,接听免费)短信费: 0.1 元/ 条数据费: 3 元/ M 【优惠套餐】套餐 1 :月基本费用100 元(无月租费用) ,提供如下服务:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 47 页 - - - - - - - - - 最多可拨打750分钟电话

8、,超出部分按照0.3 元/ 分钟计费。最多可发送200条短信,超出条数按照0.1 元/ 条计费。最多可获得100M 数据流量,超出流量按照1 元/ M 计费。套餐 2 :月基本费用200 元(无月租费用) ,提供如下服务:最多可拨打2000 分钟电话,超出部分按照0.2 元/ 分钟计费。最多可发送500条短信,超出条数按照0.1 元/ 条计费。最多可获得300M 数据流量,超出流量按照0.5 元/ M 计费。注:用户最多只能选择一种套餐,如未选择任何套餐,则按照基准资费计费。各类型用户只能选择提供给本类型用户的套餐。新用户入网。对于新入网的普通用户,入网当月赠送如下服务:免费拨打60 分钟电话

9、,免费发送200 条短信,免费获得50M 流量。超出赠送的部分按照普通用户基准资费进行计费。对于新入网的VIP 用户,入网当月赠送如下服务:免费拨打200 分钟电话,免费发送200 条短信,免费获得100M 数据流量。超出赠送的部分按照VIP 用户基准资费进行计费(注意:需按入网天数计算月租费用)。每月为用户计算一次账单,用户订制的套餐信息和账单信息采用文件方式进行存储(提示:可使用 java 中的 Properties API 进行文件操作) 。用户可自由订制或退订所属用户类型的套餐,并从下月起生效。异步随机生成客户操作如下:拨打电话,每次拨打时长为1 至 10 分钟不等(随机决定,以分钟为

10、单位)。发送短信,每次发送条数为1 至 10 条不等(随机决定) 。上网获取数据,每次获取数据流量可为50K,100K,200K,500K,1M (随机决定) 。订制或退订相应套餐。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 47 页 - - - - - - - - - 新用户入网(随机决定用户类型)。注:随机生成客户操作时间间隔自定,可设置。不要求实现GUI,只考虑系统逻辑实现,可通过Log 方式展现程序运行结果。解题思路数据分析与统一计算公式:分析本系统的业务,可

11、以看到普通用户和VIP 用户在订购套餐的方式以及月底计算账单的公式上都有很大的不同:(1)普通用户没有月租费和月基本费、而VIP 用户有月租费或月基本费。(2)普通用户是单独订购电话、短信和数据套餐,每项套餐单独收取月功能费;VIP 用户不能单独订购电话、短信和数据套餐,VIP 用户订购的套餐中同时包含了电话、短信和数据等服务功能。我们可以为普通用户和VIP 用户分别设计出一个月底计算账单的公式,但是,为了简化编程,我们也可以为两种不同用户设计出一个统一的月底计算账单的公式,这就好比 “大象有尾巴, 而蚂蚁没有尾巴,大象没有触角, 而蚂蚁则有触角,能否用同一个累加所有器官的公式来计算蚂蚁和大象

12、的体重呢?当然可以,这时候只需要假设蚂蚁也有尾巴,只是蚂蚁的尾巴重量为0,假设大象也有触角,只是大象触角的重量为0,这样,就可以用同一种累加所有器官的公式来计算蚂蚁和大象的体重了。”我们可以采用如下方式来统一各类用户在各种情况下的费用计算公式:(1) 月基本费或月租费:月基本费方式为固定值,月租费方式为当月总天数*每天费用或者(当月总天数-入网日 +1)*每天费用,只有vip 用户才存在此项费用,但是为了统一计算公式,可以认为普通用户也有此项费用,值为0。(2) 电话收费时长:等于(电话时长 -免费时长 ),计算后的值小于0 则记为0,免费时长又分为两类:新入网的免费和套餐中的免费,新入网的免

13、费在用户对象中处理,套餐中的免费封装在套餐策略对象中处理。(3) 电话、短信、数据套餐月功能费:只有普通用户定了套餐才有此项费用,但是为了统一计算公式,可以认为没定此功能套餐的普通用户和vip 用户也有此项费用,值为 0。(4) 月电话费用 =电话套餐月功能费+单位计费价格 *电话收费时长(5) 按月电话费用的相同规则计算月短信费用和月数据费用(6) 月总计费用 =月基本费或月租费+ 月电话费用+ 月短信费用+ 月数据费用我们可以用如下一幅“月账单费用的组成成分”图来直观地理解上面的计算公式:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - -

14、- - - 名师精心整理 - - - - - - - 第 4 页,共 47 页 - - - - - - - - - 采用一种便于程序代码读取的格式在配置文件中存储各项数据刚开始猛然看到这么多数据项,肯定会感觉纷繁杂乱,理不出头绪来, 但是, 不管这些数据项有多么多, 归结起来, 不就是某个用户要使用自己的某种数据吗?只是不同的用户有不同的数据罢了, 每个用户只需要关心和使用自己的数据、而不用关心其他用户的数据就显得简单多了, 因此可以写一个类来专门读取用户的数据,在配置文件中存储的各项数据应想办法采用一种便于该类读取的格式。(1) 要存储的数据项有:功能单价费用、功能套餐免费数量、功能套餐月费

15、用、新入网免费数量、整体月基本费或月租费。(2)一些数据还要随以下类型进行区分:用户类型、套餐类型、功能类型。(3)在配置文件中通过用点(.)对数据项名称进行分级的方式来区分各个数据项所属的类别和功能,如下所示:common.normal.phone.price - 表示普通用户 /非套餐 /电话 /单价common.pack1.phone.price - 表示普通用户 /套餐 /电话 /单价common.pack1.phone.free - 表示普通用户/套餐 /电话 /免费数量common.pack1.phone.rent ? 表示普通用户 /套餐 /电话 /套餐月功能费用vip.norm

16、al.phone.price - 表示 VIP 用户 /非套餐 /电话 /单价vip.pack1.phone.price - 表示 VIP 用户 /套餐 1/电话 /单价vip.pack2.phone.price - 表示 VIP 用户 /套餐 2/电话 /单价common.new.phone.free - 表示普通用户 /新开户 /电话/免费数量vip.new.phone.free - 表示 VIP 用户 /新开户 /电话 /免费数量(4) 对于值为 0 的数据项, 不用在配置文件中存储,这样, 当程序代码从配置文件中没有读取到该数据项时,即认为该值为0。(5) 对于 vip 用户的整体月基

17、本费或月租费,由于计费单位不一样,采用配置文件方式存储将增加程序的复杂度,所以,决定直接在程序代码中硬编码。为了便于程序编写,在配置文件中要注意如下两点:(1) 由于程序中要求每次传输的数据量都是10k 的整数倍, 因此可以将数据通信费的单价单位由M 转换成 K 表示,由于数据通信费的价格5 元/M,转换后则是0.5 分/K,这样程序中就涉及到小数处理了。由于在程序中处理小数是很繁琐和容易出现误差的事情,所以,最好还是想办法先统一转换成整数形式进行处理,由于数据传输量都是10k 的整数倍,因此,想到将数据通信费的价格5 元/M 转换成 5 分/10K。因此,在配置文件中将所有的价格和费用的计量

18、单位由元转换成分表示。(2) 后来在配置文件中填写各项数据时,发现VIP 用户订购套餐2 时的数据费仅为0.5 元/M ,这时候转换的结果是0.5 分/10k,又还是出现了小数,故想到把计费单位转成5厘/10k ,所以, 在配置文件中最终还是应将所有的价格和费用的计量单位由元转换成厘进行计费。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 47 页 - - - - - - - - - 按照上面这些思想设计和编写出来的配置文件conf.properties 的完整内容如下:

19、view plaincopy to clipboardprint? common.normal.phone.price=600 common.normal.message.price=100 common.normal.data.price=50 common.pack1.phone.price=500 common.pack1.message.price=100 common.pack1.data.price=30 common.pack1.phone.rent=20000 common.pack1.message.rent=10000 common.pack1.data.rent=2000

20、0 common.pack1.phone.free=60 common.pack1.message.free=200 common.pack1.data.free=5000 vip.normal.phone.price=400 vip.normal.message.price=100 vip.normal.data.price=30 vip.pack1.phone.price=300 vip.pack1.message.price=100 vip.pack1.data.price=10 vip.pack1.phone.free=750 vip.pack1.message.free=200 vi

21、p.pack1.data.free=10000 vip.pack2.phone.price=200 vip.pack2.message.price=100 vip.pack2.data.price=5 vip.pack2.phone.free=2000 vip.pack2.message.free=500 vip.pack2.data.free=30000 common.new.phone.free=60 common.new.message.free=200 common.new.data.free=5000 vip.new.phone.free=200 vip.new.message.fr

22、ee=200 vip.new.data.free=10000 common.normal.phone.price=600 common.normal.message.price=100 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 47 页 - - - - - - - - - common.normal.data.price=50 common.pack1.phone.price=500 common.pack1.message.price=100 common.pac

23、k1.data.price=30 common.pack1.phone.rent=20000 common.pack1.message.rent=10000 common.pack1.data.rent=20000 common.pack1.phone.free=60 common.pack1.message.free=200 common.pack1.data.free=5000 vip.normal.phone.price=400 vip.normal.message.price=100 vip.normal.data.price=30 vip.pack1.phone.price=300

24、vip.pack1.message.price=100 vip.pack1.data.price=10 vip.pack1.phone.free=750 vip.pack1.message.free=200 vip.pack1.data.free=10000 vip.pack2.phone.price=200 vip.pack2.message.price=100 vip.pack2.data.price=5 vip.pack2.phone.free=2000 vip.pack2.message.free=500 vip.pack2.data.free=30000 common.new.pho

25、ne.free=60 common.new.message.free=200 common.new.data.free=5000 vip.new.phone.free=200 vip.new.message.free=200 vip.new.data.free=10000 接着可编写一个读取上面的配置文件中的各项数据的ConfigManager类,该类根据用户类型、套餐类型、业务功能类别来读取相应功能套餐的单价、免费数量、功能费,以及新用户免费数量。源码如下:view plaincopy to clipboardprint? 名师资料总结 - - -精品资料欢迎下载 - - - - - - -

26、 - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 47 页 - - - - - - - - - public class ConfigManager private static Properties config = new Properties(); static InputStream ips = ConfigManager.class.getResourceAsStream(/conf.properties); try config.load(ips); catch (IOException e) throw new Excepti

27、onInInitializerError(e); private static String makePrefix(int customerType,int packType,int businessType) String customerTitle = customerType=0?common:vip; String packTitle = packType=0?normal:(pack+packType); String businessTitle = businessType=0?phone:businessType=1?message:data; return customerTi

28、tle + . + packTitle + . + businessTitle; private static int getNumber(String key) String value = config.getProperty(key); try return Integer.parseInt(value); catch(Exception e) return 0; public static int getPrice(int customerType,int packType,int businessType) return getNumber(makePrefix(customerTy

29、pe,packType,businessType)+.price); public static int getFree(int customerType,int packType,int businessType) return getNumber(makePrefix(customerType,packType,businessType)+.free); public static int getRent(int customerType,int packType,int businessType) return getNumber(makePrefix(customerType,pack

30、Type,businessType)+.rent); public static int getNewCustomerFree(int customerType,int businessType) String businesses = phone,message,data; return getNumber(customerType=0?common:vip)+.new. + businessesbusinessType + .free); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - -

31、- 第 8 页,共 47 页 - - - - - - - - - public class ConfigManager private static Properties config = new Properties(); static InputStream ips = ConfigManager.class.getResourceAsStream(/conf.properties); try config.load(ips); catch (IOException e) throw new ExceptionInInitializerError(e); private static St

32、ring makePrefix(int customerType,int packType,int businessType) String customerTitle = customerType=0?common:vip; String packTitle = packType=0?normal:(pack+packType); String businessTitle = businessType=0?phone:businessType=1?message:data; return customerTitle + . + packTitle + . + businessTitle; p

33、rivate static int getNumber(String key) String value = config.getProperty(key); try return Integer.parseInt(value); catch(Exception e) return 0; public static int getPrice(int customerType,int packType,int businessType) return getNumber(makePrefix(customerType,packType,businessType)+.price); public

34、static int getFree(int customerType,int packType,int businessType) return getNumber(makePrefix(customerType,packType,businessType)+.free); public static int getRent(int customerType,int packType,int businessType) return getNumber(makePrefix(customerType,packType,businessType)+.rent); public static i

35、nt getNewCustomerFree(int customerType,int businessType) String businesses = phone,message,data; return getNumber(customerType=0?common:vip)+.new. + businessesbusinessType + .free); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 47 页 - - - - - - - - - 面向对象的分析和设

36、计:在进行面向对象设计之前,必须具备和把握了一个重要的经验:谁拥有数据, 谁就对外提供操作这些数据的方法。大家可能会说,刚开始看到需求时,只知道某一个用户要使用很多各种各样的数据, 而想不到要延伸出哪些对象,其实, 只要你把所有数据和使用这些数据的方法归纳起来形成对象,自然就可以发掘出这些对象了。(一)移动公司里面有两类客户,移动公司里的客户可以打电话、发短信、数据通信,还可以订购和退订套餐;移动公司每月要为其中所有客户生成计费清单,还要模拟各种客户的行为。据此,可以分析出如下一些类和方法:(1) MobileCorporation 类:simulationBusiness 方法(模拟一个月的

37、业务,内部随机做500件事情和结算每个用户的计费情况,随机做的事情就是挑选一个用户做其中任何一件事情:打电话 /发短信 /数据通信 /定套餐 /退订套餐 /新用户入网)(2)Customer、CommonCustomer 、VipCustomer 等类:普通用户和VIP 用户都可以打电话/发短信 /数据通信 /定套餐 /退订套餐 /结算费用等方法。普通用户和VIP 用户的区别在于定套餐、退订套餐、结算费用的策略对象不同。(二) 凭借积累的面向对象设计的经验,可以把计算电话、短信、 数据费用的功能各封装成一个策略对象, 这些策略对象内部根据当前的用户类别、当月适用的套餐和计费的功能项目来计算费用

38、。策略对象在计算费用时,要从Properties 文件中读取相应的数据值,为此可以专门设计一个类来读取配置文件,策略对象调用该类的方法。据此, 可以分析出如下一些类和方法:(1)ComputeStrategy 类:包含 computeMoney 方法(2)ConfigManager 类:包含 getPrice、getFree、getRent、getNewCustomerFree 等方法。(三) 另外,应该有一个总的策略存储对象来管理当前用户的各个功能项目的策略对象以及VIP 用户的月租费或月基本费,所谓订购某项功能套餐,就是选用哪个策略对象,所以,订购某个功能套餐和退订某个功能套餐的方法应分配

39、给这个总的策略存储对象。这个总的策略存储对象内部既要存储各个功能项的当前的套餐对应的策略对象、又要存储下月订购的套餐,还要在下个月时将订购的套餐“设置”为当前的套餐,这个“设置”不一定是真的变量赋值操作, 可以是通过日期比较的方式来达到,这需要设计一个辅助类把某月和从该月开始订购的功能套餐进行关联存储。据此,可以分析出如下一些类和方法:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 47 页 - - - - - - - - - (1)PackStrategy 类:包含o

40、rderRent、cancelRent、getValidRent、orderPack、cancelPack、getValidPack 等方法(2)OrderedStrategyHolder 类:包含order、getValidStrategy 等方法(3)Rent 类:包含computeRent 方法(四)类图 : (五)计算账单费用的各个对象的作用与关系类的编码实现(一) MobileCorporation 类(代表移动公司)1.在 MobileCorporation 类内部定义一个List 集合的成员变量, 用于存储移动公司的所有用户,这里不需要区分普通用户和VIP 用户,而是把他们抽象成

41、用户这个父类,这样就可以采用统一的方式来调用他们各自的行为,普通用户和VIP 用户的行为差异,在它们各自的方法内部体现,这正是充分利用了面向对象的抽象和多态特性。2.在构造方法中,向用于存储所有用户的List 集合中增加15 名普通用户和5 名 VIP 用户,每名用户需要有自己的用户名和入网日期。3.在 MobileCorporation 类中定义一个simulationBusiness(Date month)方法来模拟某个月的业务活动,首先清除用户上月的记录信息,然后再模拟发生如下一些事情:某个用户打电话、某个用户发短信、某个用户传输数据、某个用户订购套餐、某个用户退订套餐、新用户入网,最后

42、再统计出各个用户在本月的账单信息。模拟发生的事情随机发生,总共模拟发生500次,并让打电话、发短信、传输数据等事情发生的概率为订购套餐、退订套餐、新用户入网的 20 倍。4.将模拟随机发生一件事情的过程封装成一个私有方法randDoOneThing(Date month) ,这个方法内部调用的某个用户打电话、某个用户发短信、 某个用户传输数据、某个用户订购套餐、某个用户退订套餐、新用户入网等功能又各自封装成一个私有方法。源码如下:view plaincopy to clipboardprint? package cn.itcast.mobilecounter.strategy; import

43、java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.Random; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 47 页 - - - - - - - - - public class MobileCorporation private ArrayList customers = new ArrayList(); public MobileCor

44、poration() for(int i=1;i=15;i+) customers.add( new CommonCustomer(i+ 号普通客户 ,new Date(108,10,1) ); for(int i=1;i=5;i+) customers.add( new VIPCustomer(i+ 号 VIP 客户 ,new Date(108,10,1) ); System.out.println( 程序创建了运营商已有的5 个 VIP 用户和 15 个普通用户, 并设置他们的入网日期为2008 年 10 月 1 日.); /模拟某个月的业务活动public void simulation

45、Business(Date month) for(Customer customer : customers) customer.monthBegin(); System.out.println(-being simulating + DateUtil.formatDateToMonth(month) + -); for(int i=0;i500/*30*/;i+) randDoOneThing(month); System.out.println(DateUtil.formatDateToMonth(month)+的计费汇总清单:); /汇总所有人的账单for(int i=0;i=0 & r

46、and=20 & rand=40 & rand60) transferData(); else switch(rand) case 60: orderPack(monthOfOrderPack); break; case 61: cancelPack(monthOfOrderPack); break; case 62: joinNewCustomer(month); break; /* * 随机选中一个用户,让其随机拨打的电话时长为1 至 10 分钟不等*/ private void callPhone() int rand = new Random().nextInt(customers.s

47、ize(); Customer customer = customers.get(rand); int phoneTimes = new Random().nextInt(10) + 1; customer.callPhone(phoneTimes); System.out.println(customer + 打了 + phoneTimes + 分钟电话 ); /* * 随机选中一个用户,让其随机发送的短信数目为1 至 10 条不等*/ private void sendMessage() int rand = new Random().nextInt(customers.size(); C

48、ustomer customer = customers.get(rand); int messageNumbers = new Random().nextInt(10) + 1; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 47 页 - - - - - - - - - customer.sendMessage(messageNumbers); System.out.println(customer + 发了 + messageNumbers + 条短信 ); /*

49、 * 随机选中一个用户,让其随机获取的数据流量为50K,100K,200K,500K,1M */ private void transferData() int rand = new Random().nextInt(customers.size(); Customer customer = customers.get(rand); int dataSize = new int50,100,200,500,1000; int randSizeKey = new Random().nextInt(5); customer.transferData(dataSizerandSizeKey); Sy

50、stem.out.println(customer + 传送了 + dataSizerandSizeKey + k数据 ); /* * 随机选中一个用户,为其随机订购一款套餐*/ private void orderPack(Date month) int rand = new Random().nextInt(customers.size(); customers.get(rand).randomOrderPack(month); /* * 随机选中一个用户,并将其已经有的套餐取消*/ private void cancelPack(Date month) int rand = new Ra

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术总结

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁