面向对象留大作业了,具体如下,期末前交,先贴上具体要求,写完后贴代码
用面向对象方法和面向对象程序设计语言,实现满足下述要求的一个高速公路客运活动仿真程序。
问题域概述
西安市到宝鸡市之间是我省主要的高速公路客运路线之一,经过简化后的客运路线端点、中途停靠点和里程如下图所示(括号里是简称,里程的单位是公里):
宝鸡( bj )-- > 虢镇( GZ)--> 蔡家坡( CP)--> 武功( WG)--> 兴平( XP )-- > 咸阳( XY )-- > 西安( XA )
限定条件
( 1 ) 从 XN 始发至 BJ 的客车和从 BJ 始发至 XN 的客车均有两种车型:沃尔沃(限定乘客人数为 40 人);依维柯(限定乘客人数为 21 人)。沃尔沃的速度为 2 公里 / 分钟,依维柯的速度为 1.4 公里 / 分钟。
( 2 ) 起始状态时, XN 拥有沃尔沃和依维柯客车分别为 5 和 12 辆, BJ 拥有沃尔沃和依维柯客车分别为 4 和 15 辆。
( 3 ) 从 XN 至 BJ 和从 BJ 至 XN 的沃尔沃,均为上午 8:30 开始,每小时一班,最后一班为下午 5:30 ;从 XN 至 BJ 和从 BJ 至 XN 的依维柯,均为上午 8:00 开始,每 20 分钟一班,最后一班为下午 6:00 。
( 4 ) 从 XN 至 BJ 的客车到达 BJ 后,即成为从 BJ 至 XN 的客车,排在当时 BJ 同类车型的队尾,再按( 3 )确定发车时间;从 BJ 至 XN 的客车到达 XN 后的规则相同。
( 5 ) 只考虑途中只有乘客下车、没有乘客上车的情况。
( 6 ) 有乘客下车时,不论方向与车型,停车时间统一为 2 分钟。
( 7 ) 乘坐从 XN 至 BJ 客车的乘客,其下车点为 XY 、 XP 、 WG 、 CP 、 GZ 和 BJ 的可能性分别为 P_XBXY 、 P_XBXP 、 P_XBWG 、 P_XBCP 、 P_XBGZ 和 P_XBBJ 。这些可能性之和为 1 ;乘坐从 BJ 至 XN 客车的乘客,其下车点为 GZ 、 CP 、 WG 、 XP 、 XY 和 XN 的可能性分别为 P_BXGZ 、 P_BXCP 、 P_BXWG 、 P_BXXP 、 P_BXXY 和 P_BXXN 。这些可能性之和为 1 。
须仿真的客运活动
( 1 ) 从上午 7:30 开始到下午 5:59 为止,每分钟分别在 XN 和 BJ 随机产生去往 BJ 和 XN 方向的新到达的乘客。每分钟达到的人数范围为 0~5 人。
( 2 ) 按照限定条件( 7 )的规定,随机产生新到达的乘客的目的地。
( 3 ) 乘客按到达的先后顺序上最近一辆(依照限定条件( 3 )的规定)始发的客车,若该车客满则等候下一辆始发的客车。
( 4 ) 若客车到达中途停靠站时有乘客在此下车,按限定条件( 5 )和( 6 )处理,否则不停车继续行驶。
仿真时的可变参数
确定乘客目的地的可能性 P_XBXY 、 P_XBXP 、 P_XBWG 、 P_XBCP 、 P_XBGZ 和 P_XBBJ ,以及 P_BXGZ 、 P_BXCP 、 P_BXWG 、 P_BXXP 、 P_BXXY 和 P_BXXN 。应注意乘客去往远一些的目的地的可能性,通常大于去往近一些的目的地的可能性。
开发结果的行为特征
( 1 ) 所仿真的实际客运活动每 1 分钟改变一次所有相关对象的状态。实际仿真时,可用机器时间的 1 秒钟对应于实际客运活动时间的 1 分钟。
( 2 ) 有简单的界面,以体现:
• 客运活动的当前时刻(如 “ 上午 10:02” );
• XN 和 BJ 当前站内的客车(应有车型和编号)和等车乘客人数;
• 正在高速公路上行驶的客车的车型和编号;
• 正在高速公路上的客车的当前乘客人数和当前位置。如果用数据而不是用图形表示,应给出相对于上次停靠站的位置参数,如:从 BJ 到 XN 时的 “ 蔡家坡以东 3 公里 ” ,从 XN 到 BJ 时的 “ 咸阳以西 10 公里 ” ,无论那个方向,正在停车下人时的 “ 武功站 ” ,等等。
注意能说明问题即可,切忌把主要精力放在界面上而忽视了实质问题。
提示
由于目前多数同学还没有学习过多进程或多线程的实现技术,因此面临的问题是:既要计时,又要改变相关对象的状态,还要展示出当前所有对象的相关状态。建议大家想象一下动画片的原理:将多个固定和静止的画面定时、按顺序地放映出来,就变成了活动的画面。所以,可以在程序中定义一个主循环,在该循环外进行必要的初始化,进入后每秒钟执行一次,以遍历方式一一激励当前已经产生的对象,由它们根据自己的当前状态和相关的状态变化规则,决定是否需要改变、改变成什么样的下状态,以及按照上述行为特征的设计展示必要的对象状态。这样,就可以用串行方式模拟并发的活动了。
另外,乘客到达的概率本应服从泊松分布,但目前语言直接提供的伪随机数产生函数是服从均匀分布的,因此可以简化成均匀分布。