
python实现停车场管理系统
停车场管理系统:若车辆到达,则显示汽车在停车场内或便道上的停车位置:若车辆离去,则显示汽车在停车场内停留的时间和应缴纳的费用,在便道停留不收费。(2)以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理;(3)栈以顺序结构实现,队列以链表实现。
·
需求
停车场管理系统:若车辆到达,则显示汽车在停车场内或便道上的停车位置:若车辆离去,则显示汽车在停车场内停留的时间和应缴纳的费用,在便道停留不收费。
基本要求:
(1)要求处理的数据元素包括三个数据项:汽车“到达”或“离去”信息,汽车牌照号码及到达或离去的时刻:
(2)以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理;
(3)栈以顺序结构实现,队列以链表实现。
代码
# -*- coding : utf-8 -*-
# @Author :shangyi
# @File : Text3.1.py
# @Software : PyCharm
import datetime
#存放进停车场的车牌和进入时间
idtime = {}
#存放进停车场外面通道的车牌和进入时间
idtime1 = {}
#用队列模拟停车场外便道
class Head:
def __init__(self):
self.left = None
self.right = None
class Node:
def __init__(self, value):
self.value = value
self.next = None
class Queue:
def __init__(self):
# 初始化节点
self.head = Head()
def enqueue(self, value):
# 插入元素,先新建一个结点
newnode = Node(value)
p = self.head
if p.right:
# 如果head结点的右边不为None
# 说明队列中已经有元素了
temp = p.right
p.right = newnode
temp.next = newnode
else:
# 队列为空,插入第一个元素
p.right = newnode
p.left = newnode
def dequeue(self):
p = self.head
if p.left and (p.left == p.right):
# 这说明队列中已经有元素
# 但是这是最后一个元素
temp = p.left
p.left = p.right = None
return temp.value
elif p.left and (p.left != p.right):
# 说明队列中有元素,而且不止一个
temp = p.left
p.left = temp.next
return temp.value
else:
# 队列为空,抛出查询错误
raise LookupError('queue is empty')
def is_empty(self):
if self.head.left:
return False
else:
return True
def top(self):
# 查询目前队列中最早入队的元素
if self.head.left:
return self.head.left.value
else:
raise LookupError('queue is empty')
# 定义车辆
class car:
#车牌
licensePlate = ""
#空余车位
free_parking = 2
#通道空余位置
free_site = 2
#用户选择
def user(self):
print('欢迎使用该停车系统:输入1停车,2离开,3退出')
a = int(input())
return a
def entering(self):
if(car.free_parking<=0):
print("车位已满,请到在通道等候!")
if (car.free_site <= 0):
print("通道区已满,请误进入")
return 0,0
else:
car.licensePlate = input("请输入你的车牌号:")
car.free_site-=1
enter_time_hour = datetime.datetime.now().hour
enter_idtime = {car.licensePlate: enter_time_hour}
# 判断车辆是否已经在停车场中
while car.licensePlate in idtime1:
print("你输入的车牌有误,该车辆已经在停车场通道中!")
car.licensePlate = input("请输入你的车牌号:")
# 把车辆信息输入到车辆列表内
else:
idtime1.update(enter_idtime)
#print(idtime1)
# 返回1,说明可以进入停车场外通道
id = car.licensePlate
return 1,id
else:
car.licensePlate = input("请输入你的车牌号:")
#获取当前电脑日期和时间
# enter_time_date = datetime.datetime.now().day
enter_time_hour = datetime.datetime.now().hour
enter_idtime = {car.licensePlate:enter_time_hour}
#判断车辆是否已经在停车场中
while car.licensePlate in idtime:
print("你输入的车牌有误,该车辆已经在停车场中!")
car.licensePlate = input("请输入你的车牌号:")
#把车辆信息输入到车辆列表内
else:
idtime.update(enter_idtime)
#print(idtime)
#空闲车位减少一个
car.free_parking -= 1
#返回2,成功停车
id = car.licensePlate
return 2,id
#离开方法
def leaving(self):
car.licensePlate = input("请输入你的车牌号:")
#不要定义在循环里面
leave_time_date = datetime.datetime.now().day
leave_time_hour = datetime.datetime.now().hour
print(leave_time_date,"日",leave_time_hour,"时离开")
if car.licensePlate in idtime: #是否在停车场
return 1,car.licensePlate,leave_time_hour
elif car.licensePlate in idtime1: #是否在停车通道
return 2,car.licensePlate
else:
print("该车辆不在该停车场或通道中,请重新输入你的车牌,或者退出程序!")
return 0,car.licensePlate
if __name__ == '__main__':
# 用栈模拟停车场
parking_lot = []
# 停车通道
queue = Queue()
# 主程序
while True:
choose = car().user()
if choose == 1:
enter = car().entering()
if(enter[0]==1):
print("停入停车场外通道")
queue.enqueue(enter[1])
# print(queue.top())
elif(enter[0]==2):
print("成功停车")
parking_lot.append(enter[1])
print("在停车辆:",parking_lot)
else:
print("请去往其他停车场")
elif choose == 2:
leave = car().leaving()
# 在停车场,按照栈的先进后出,计算停车费
if(leave[0]==1):
temp=parking_lot[-1]
print("在停车辆:",parking_lot)
if leave[1] == temp:
print("停车费:",(leave[2]-idtime[car.licensePlate])*5+5,"元")
idtime.__delitem__(car.licensePlate)
car.free_parking+=1
parking_lot.pop()
print("成功离开停车场")
else:
print("堵车了,无法离开")
# 在通道,按照队列的先进先出
elif(leave[0]==2):
temp = queue.top()
if leave[1] == temp:
idtime1.__delitem__(car.licensePlate)
car.free_site+=1
queue.dequeue()
print("成功离开通道")
else:
print("堵车了,无法离开")
else:
print("欢迎下次使用!")
break
更多推荐
所有评论(0)