搬家公司管理系统
考试提醒
1、 请仔细阅读规格文档,理解规格文档估计需要花费10~40分钟来理解,请务必看清楚要求再动手,试题包括规格描述和代码框架。
2、 答题时建议经常保持能编译运行,确保可以获得已经实现功能的得分。
3、 在阅读题目后请同时阅读随代码框架提供的单元测试用例代码和注释以帮助更好的理解题意,在完成答题后一定要确保随代码框架提供的单元测试用例执行通过。
4、 每道题已经提供初步的框架,请在此框架上继续完成代码。随试题提供的代码框架*.java文件使用GBK编码,请调整eclipse等IDE的编码字符集为GBK,以防止源文件中的中文出现乱码。
5、 试题框架提供的原有代码,除需要考生实现的方法体外的其他的内容(包括常量定义,方法签名等)均不能做任何修改。
6、 可以根据需要在代码框架中新增属性,方法等,也可以在本类中调用其他自己开发的类。不建议使用其他第三方lib库,如果确实需要使用,请务必将lib库拷贝到lib目录下。
7、 除题目明确要求需要考虑的异常情况、输入校验外,其他异常情况和输入校验一律不需要考虑。
8、 最终答题代码,请以如下形式打包提交:
姓名全拼_8位工号_类别_级别.zip
|____src
|____bin
|____lib
|_____XXX.jar
示例:zhangsan_00123456_通用软件(java)_3级.zip
1、 总体说明
实现一个搬家公司管理系统,能完成车辆管理、订单管理等工作,并给出报表统计数据。
1.1 系统规则
如果系统没有初始化,所有接口需要抛出异常E000。
如果输入参数不合法,所有接口需要抛出异常E001。
系统时间
1. 系统时间模型为(日期,时间点)。
2. 日期为正整数,初始化后为1,每过一天日期加1,范围1~200。
3. 时间点为正整数,范围0~23。
4. 系统中每月固定为30天。
5. 可以通过setTime修改系统时间来模拟时间的推进,每次修改不能小于当前时间,否则抛出异常E002。注意:修改时间后注意刷新系统中车辆、订单、报表的相关信息。
6. 自然月指每月的1号到那个月的月底。计费月指从计费起始日起的30天,为了简单,以下规格中每月是指计费月,月底是指计费月的月底。。
车辆管理
系统初始有车5辆(可配置),每辆配1名司机,2名搬运工,司机不负责搬运。车月租3000元(包括车和司机)。月租在起租日当天支付,以后每30天支付一次。
1. 可通过hireTruck租用车。
a) 车id为整数,范围0~99,即最大可租用车数量为100。
b) 系统初始化后固定租用5辆车,id为0~4,后续id从5开始递增。
c) 分配id时采用递增策略,从0开始分配。
d) 达到最大id限制时需要抛出异常E004。
2. 可通过fireTruck退租车。
a) 如果车辆不存在,抛出异常E005。
b) 如果退租的车辆有交付中和未交付的订单,抛出异常E008。
c) 在计费月开始第一天退租仍然要付月租。
订单管理
1. 可通过inputOrder录入订单,入参结构如下:
订单录入项目 描述
总重量 totalWeight 单位:100公斤,正整数。
总体积 totalVolume 单位:立方米,正整数。
距离 distance 单位:10公里,正整数,起点到终点距离。
起始日期 startDate 当前日期必须比起始日期提前3天,即“起始日期”-“当前日期”>=3。
id分配策略:
a) 订单id为整数,范围0~99,即最大可支持订单数量为100
b) 分配id时采用递增策略,从0开始分配。
c) 达到最大id限制时需要抛出异常E004。
订单规划:
系统结合当前订单和可用车情况进行规划和费用计算。
影响规划的参数:
a) 搬运工能力:从起始地搬运物品到车上,车开到目的地,再把物品搬下车,搬运效率是50公斤/时/人。
b) 车能力:车辆容积统一为4立方米,载重为400公斤,平均时速10公里/时。不考虑两个订单间路程耗费的时间,但考虑一个订单多次往返耗费的时间,即使只需运输一次,也要计算往返的时间。
c) 每辆车固定配置2名搬运工。
规划原则:
a) 每车每次只能运输一个订单。
b) 每个订单只投入一辆车,但可以进行多次搬运。
c) 每次装运都要保证尽量满载(满载表示或者不能再承重,或者没有空间)状态,一个订单的最后一次运输允许不是满载。
d) 按订单录入时间先后安排资源。
e) 安排车辆时按照车辆id从小到大寻找可用车辆。
f) 1天可安排的起始时间点是3~22,可接受订单的最大时长是20小时,注意23点可作为订单的最后结束点,但不是可安排的起始时间点。
g) 在一天中寻找可用时间段时按照尽早安排原则,且时间必须连续。
h) 订单不允许跨天,要保证订单在当天完成,不能完成的订单不接受。
i) 车辆运输过程中,人在车上,但忽略人占用的容积。
如果资源不足,不能接受订单,抛出异常E007。
费用计算:
订单录入成功则收取预付费,费用计算公式如下:
单订单预付费计算:收取费用的30%作为预付费,计算时取整即可,不考虑四舍五入。
订单交付后收取订单费用中除了预付费外的费用,订单费用计算公式如下:
单订单费用计算:成本*110%,即成本溢价10%。
搬运工费用=花费小时数*20元/小时,注意:这里花费小时包括搬运时间和随车时间。
车的油费=车行驶里程*2元/公里。注意:行驶里程按往返计算,即使不需要搬运多次。
车的每小时租金=月租金/30天/20小时。
车的租金=花费小时数*车的每小时租金。
成本 = 搬运工费用+车的油费+车的租金。
单订单费用 = 成本 * 110%