题目
某停车场,分3层,每层100车位
每个车位都能监控到车辆的驶入和离开
车辆进入前,显示每层的空余车位数
车辆进入时,摄像头可识别车牌号和时间
车辆出来时,出口显示器显示车牌号和停车时长
画出UML类图 用ES6语法写出该示例
解答
-
UML 类图
-
代码演示
// 摄像头
class Camera {
shot(car) {
// 返回车牌号和进入时间
return {
num: car.num,
inTime: new Date()
}
}
}
// 出口显示屏
class Screen {
show(car, inTime) {
console.log(`车辆 ${car.num}`, '停车时长是 '+ ((new Date() - inTime)/1000) +'秒')
}
}
// 车位
class Place {
constructor(){
this.empty = true;
}
in() {
this.empty = false;
}
out() {
this.empty = true;
}
}
// 层
class Floor {
constructor(index, places){
this.index = index // 第几层
this.places = places || [] // 停车位
}
emptyPlaceNum() {
let num = 0;
this.places.forEach(p => {
if(p.empty) {
num++
}
});
return num;
}
}
// 停车场
class Park {
constructor(floors) {
this.floors = floors || []; // 停车场楼层
this.camera = new Camera(); // 摄像头实例
this.screen = new Screen(); // 显示器实例
this.carList = {}; // 存储摄像头拍摄返回的车辆信息
}
showPlaceNum() {
return this.floors.map(floor => {
return `${floor.index} 层还有 ${floor.emptyPlaceNum()} 个空闲车位`
}).join('\n')
}
in(car) {
// 通过摄像头获取信息
const info = this.camera.shot(car);
// 停到某个车位
const i = parseInt(Math.random() * 100);
const place = this.floors[0].places[i];
place.in();
info.place = place;
// 记录信息
this.carList[car.num] = info;
}
out(car) {
// 获取信息
const info = this.carList[car.num];
// 将停车位清空
const place = info.place;
place.out();
// 显示时间
this.screen.show(car, info.inTime);
// 清空纪录
delete this.carList[car.num];
}
}
// 车辆
class Car {
constructor(num) {
this.num = num // 车牌号
}
}
// 测试-----
// 初始化停车场
const floors = [];
// 假设有停车场为三层
for (let i = 0; i < 3; i++) {
const places = [];
// 假设每层停车场共有100个停车位
for (let j = 0; j < 100; j++) {
// 创建100个停车位
places.push(new Place())
}
// 创建停车场的楼层
const floor = new Floor(i+1, places);
floors.push(floor);
}
const park = new Park(floors);
// 初始化车辆
const car1 = new Car(100)
const car2 = new Car(200)
const car3 = new Car(300)
console.log('第一辆车进入')
console.log(park.showPlaceNum())
park.in(car1)
console.log('第二辆车进入')
console.log(park.showPlaceNum())
park.in(car2)
setTimeout(() => {
console.log('第一辆车出去')
park.out(car1)
}, 5000);
发表评论: