电信话单排序
===== 某城市电信局受理了许多用户申请在指定电话上开设长话业务。长话包括国内长途和国际长途。电信局保存了长话用户档案和长话业务档案。
长话用户话单的记录xml格式为:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<call>
<name>用户名</name>
<telephone>电话号码</telephone>
<address>地址(南京)</address>
<starttime>通话开始时间</starttime>
<endtime>通话截止时间</endtime>
<charge>通话费用</charge>
</call>
……
</root>
该电信局为了用计算机自动处理长话收费以提高工作效率,开发了长话计费管理系统。该系统每月能为每个长话用户打印出长话缴费通知单。长话缴费通知单的记录格式为:
| 电话号码 | 用户名 | 地址 | 通话时间| 话费总额 |
要求如下:
- 需要把用户信息使用集合类缓存起来,并且集合中的信息必须唯一(电话号码),把电话号码相同的用户通话费用和通话时间(通话截止时间-通话开始时间)计算话费总额和总通话时间。
- 信息输出:按电话号码进行排序,输出格式
| 电话号码 | 用户名 | 地址 | 通话时间 | 话费总额 |
-
启动两个线程分别做如下处理:
线程一:执行1、2操作。并把用户信息按照电话号码升序的方式输出到一个队列中。队列的大小不能超过10个。
线程二:现有南京和南通两个分局,分别记录下当地用户信息。最后再分别输出两地用户信息,信息输出:
| 电话号码 | 用户名 | 地址 | 通话时间 | 话费总额 |
控制台输出:
电话号码 用户名 地址 通话时间 话费总额
电信总局
25821001 张一 南通 5 1.5
25821002 张二 南京 18 5.4
25821003 张三 南京 5 1.5
南京分局
25821002 张二 18 5.4
25821003 张三 5 1.5
南通分局
25821001 张一 5 1.5
========
Note:
-
通常话单量非常大,不会直接用java在内存中保存处理. 通常通过sqldr装载到oracle db 中处理.
-
如果是通过java 暂存,可以使用jaxb来绑定java 类来处理,注意xsd文件
-
P/C 模式可以通过 java.util.concurrent 来实现多线程并发