Python作业--5(停车管理系统)

1,定义车辆类,属性有车牌号、颜色、车型(小汽车、小卡、中卡和大卡)
    、到达的时间和离开的时间等信息和相关的对属性做操作的行为。
2,定义一个管理类,完成对停车场的管理。停车场的具体要求:设停车场
    是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车
    在停车场内按门外的便道上等待,一旦有车开走,则排在便道上的第一
    辆车即可开入;每辆停放在车场的车在它离开停车场时必须按它停留的
    时间长短交纳费用。

功能描述:

1)添加功能:程序能够添加到达停车场的车辆信息,要求车辆的车牌号要唯一
    ,如果添加了重复编号的记录时,则提示数据添加重复并取消添加。
2)查询功能:可根据车牌号、车型等信息对已添加的停车场中的车辆信息进行
    查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息;
3)显示功能:可显示当前系统中所有车辆的信息,每条记录占据一行。
4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意车牌号的唯一性。
5)删除功能:主要实现对已添加的车辆记录进行删除。如果当前系统中没有相应
    的人员记录,则提示记录为空!并返回操作。
6)统计功能:能统计停车场中车辆的总数、按车型、按到达时间进行统计等。


import datetime
import random


# 定义汽车类
class Car(object):
    def __init__(self, num, owner, color, type, connect, money, entime):
        # 汽车属性
        self.num = num
        self.color = color
        self.type = type
        self.owner = owner
        self.connect = connect
        self.money = money
        self.entime = entime

    def __str__(self):
        print('车牌号:<%s> 车主:<%s> 颜色:<%s> 车型:<%s> 联系方式:<%s> 余额:<%s> 进入停车场时间:<%s> '
              % (self.num, self.owner, self.color, self.type, self.connect, self.money, self.entime))


# 定义汽车管理类
class Park(object):
    def init(self):  # 对停车场初始化车辆

        self.cars.append(Car('1001', 'python', '红色', '大卡', '21212121', 340, datetime.datetime.now()))
        self.cars.append(
            Car('1002', 'hello', '蓝色', '小汽车', '28343434', 87, datetime.datetime.now() - datetime.timedelta(minutes=1)))
        self.cars.append(
            Car('1003', 'java', '白色', '小汽车', '15434212', 160, datetime.datetime.now() - datetime.timedelta(minutes=2)))
        self.cars.append(
            Car('1004', 'westos', '黑色', '小卡', '5432121', 500, datetime.datetime.now() - datetime.timedelta(minutes=3)))
        self.cars.append(
            Car('1005', 'root', '白色', '中卡', '9087921', 240, datetime.datetime.now() - datetime.timedelta(minutes=4)))

    def __init__(self):
        # 停车场属性
        self.max_car = 200
        self.cars = []
        self.cur_car = len(self.cars)

    def Menu(self):
        self.init()
        while 1:
            print('''
                    停车管理系统

                  1)停车                  
                  2)查询                  
                  3)显示                  
                  4)编辑
                  5)取车                  
                  6)统计
                  7)退出


            ''')
            choice = int(input('Choice:'))
            if choice == 1:
                self.park()
            elif choice == 2:
                self.find()
            elif choice == 3:
                for i in self.cars:
                    Car.__str__(i)
            elif choice == 4:
                self.edit()
            elif choice == 5:
                self.exit()
            elif choice == 6:
                self.sta()
            elif choice == 7:
                exit(0)
            else:
                print('Error!没有该选项。。。')

    # 定义停车方法
    def park(self):
        car_num = input('车牌号:')
        res = self.check(car_num)  # 判断该车牌是否有停车记录
        if res is None:
            if self.cur_car < self.max_car:  # 判断停车场是否满负荷
                self.cars.append(Car(car_num, input('车主:'), input('颜色:'), input('车型:'),
                                     input('联系方式:'), int(input('余额')), datetime.datetime.now()))
                print('停车成功!')
            else:
                print('停车场已满!暂时不能停车。。。')
        else:
            print('车牌为%s车辆已停在停车场' % car_num)

    # 定义取车方法
    def exit(self):
        car_num = input('车牌号:')
        res = self.check(car_num)  # 判断该车牌是否有停车记录
        if res is not None:
            self.pay(res)
            self.cars.remove(res)

            print('成功取车,祝您一路顺风。。。')
        else:
            print('警报警报!!!车牌:%s车辆非法进入停车场。。。' % car_num)

    # 定义检查车辆是否有记录的方法
    def check(self, car_num):
        for i in self.cars:
            if car_num == i.num:
                return i
        else:
            return None

    # 定义付款方法
    def pay(self, car):
        money = (datetime.datetime.now() - car.entime).seconds / 20  # 收费方法:一分钟3块钱
        while 1:
            if car.money >= money:  # 判断余额是否足够支付
                car.money -= money
                print('自动付款%s成功' % (money))
                break
            else:
                print('余额不足请充值')
                car.money += int(input('充值金额:'))
                print('充值成功')

    # 定义查询方法
    def find(self):
        while 1:
            print('''
                    1)依据车牌查询
                    2)依据车型查询
                    3)退出查询
                    
                    ''')
            choice = int(input('Choice:'))
            if choice == 1:  # 依据车牌查询
                num = input('车牌号:')
                res = self.check(num)  # 判断该车牌号是否有停车记录
                if res is not None:
                    Car.__str__(res)

                else:
                    print('车牌%s停车记录为空...' % num)
            elif choice == 2:  # 依据车型查询
                type = input('车型:(小汽车,小卡,中卡,大卡)')
                if type in ['小汽车', '小卡', '中卡', '大卡']:
                    for i in self.cars:
                        if i.type == type:
                            Car.__str__(i)

                else:
                    print('不存在%s车型' % type)
            elif choice == 3:
                break
            else:
                print('请输入正确选择...')

    # 定义修改修改信息方法
    def edit(self):
        num = input('车牌号:')
        res = self.check(num)  # 判断该车牌号是否有停车记录
        if res is not None:
            Car.__str__(res)
            print('信息修改:\n车牌号:%s' % num)
            res.owner = input('车主:')
            res.clor = input('颜色:')
            res.type = input('车型(小汽车,小卡,中卡,大卡):')
            res.connect = input('联系方式:')
            res.money = int(input('余额:'))
            res.entime = datetime.datetime.strptime(input('进入停车场时间(eg:2018-05-21 11:14:10):'),
                                                    '%Y-%m-%d %H:%M:%S')
            print('信息修改成功...')

        else:
            print('车牌%s停车记录为空...' % num)

    # 定义信息统计方法
    def sta(self):
        while 1:
            print('''
                    1)按车型统计
                    2)按时间统计
                    3)退出统计
                    ''')
            choice = int(input('Choice:'))
            if choice == 1:  # 按车型统计
                type1 = type2 = type3 = type4 = 0
                for i in self.cars:
                    if i.type == '小汽车':
                        type1 += 1
                    elif i.type == '小卡':
                        type2 += 1
                    elif i.type == '中卡':
                        type3 += 1
                    else:
                        type4 += 1

                print('总数:%s辆\n小汽车:%s辆\n小卡:%s辆\n中卡;%s辆\n大卡:%s辆'
                      % (len(self.cars), type1, type2, type3, type4))
            elif choice == 2:  # 按时间统计
                # 查找最早停车时间
                base1time = random.choice(self.cars, ).entime
                for i in self.cars:
                    if i.entime < base1time:
                        base1time = i.entime
                # 查找最晚停车时间
                base2time = random.choice(self.cars).entime
                for i in self.cars:
                    if i.entime > base2time:
                        base2time = i.entime
                print('车辆总数:%s' % (len(self.cars)))
                while 1:
                    count = 0
                    for i in self.cars:
                        if base1time <= i.entime < base1time + datetime.timedelta(minutes=1):  # 定义每分钟为一个时间段
                            count += 1
                    print('%s至%s时间段有%s辆车停车' % (base1time,
                                               base1time + datetime.timedelta(minutes=1), count))
                    if base1time + datetime.timedelta(minutes=1) > base2time:
                        break
                    else:
                        base1time = base1time + datetime.timedelta(minutes=1)


            elif choice == 3:
                break
            else:
                print('Error 输入错误...')


par = Park()
par.Menu()



显示功能





查询功能





停车功能:






信息修改功能








取车功能





统计功能:


****THE END****

猜你喜欢

转载自blog.csdn.net/wl_python/article/details/80396721