基于Python停车管理系统

要求有答辩加注释

1.停车场自动收费系统
项目描述:通过输入操作代替识别功能,根据停车时间实现自动收费
计算。
具体描述如下:
(1)停车场最多有 50个车位;
(2)通过输入车牌判断车辆的进入和出去;
(3)在车辆进入时,查看是否有车位并记录时间;
(4)在车辆离开时,使停车位增加,并计算停留时间,计算的时间记录到秒
即可;
(5)收费计算:2小时内免费,2-4 小时费用为 10元,4-6 小时费用为 15
6-8 小时费用为 20 元,8-10 小时费用为 25 元,10 小时以上费用为
30元
项目完成报告内容:
(1)根据项目描述,利用层次方框图描述项目的功能图,画出项目的 IPO
图;
2)根据项目描述,设计收费系统界面;
画出程序流程图;
利用函数完成收费系统各个功能柏也
保存程序运行的各种结果截图。
)在项目代码重要语句和功能模块位置添加注释信息,注释量不少于
代码行数的三分之一。
设计提示:
计时功能可使用 Python 标准库 datetime实现;
停车时间的计算截止到秒即可;
可适当考虑交费后的延时处理,如交费后1分钟内离场。

img


import time

# 定义车辆类
class Car:
    def __init__(self, plate_number):
        self.plate_number = plate_number
        self.enter_time = None  # 进入时间
        self.leave_time = None  # 离开时间

# 定义停车场类
class ParkingLot:
    def __init__(self):
        self.capacity = 50  # 停车场容量
        self.available_spaces = self.capacity  # 剩余停车位数量
        self.parking_spaces = {}  # 正在使用的停车位字典

    # 进入停车场函数
    def enter_parking_lot(self, plate_number):
        if self.available_spaces > 0:  # 还有停车位
            car = Car(plate_number)  # 创建车辆实例
            car.enter_time = time.time()  # 记录进入时间
            self.parking_spaces[plate_number] = car  # 加入已使用停车位字典
            self.available_spaces -= 1  # 剩余停车位数量减少
            print(f"车辆 {plate_number} 进入停车场,剩余停车位:{self.available_spaces}")
        else:
            print("停车场已满,无法进入")
    
    # 离开停车场函数
    def leave_parking_lot(self, plate_number):
        if plate_number in self.parking_spaces:  # 车辆在停车场内
            car = self.parking_spaces[plate_number]  # 获取车辆实例
            car.leave_time = time.time()  # 记录离开时间
            parking_time = int(car.leave_time - car.enter_time)  # 计算停车时间,单位为秒
            parking_cost = self.calculate_parking_cost(parking_time)  # 计算停车费用
            del self.parking_spaces[plate_number]   # 删除已使用停车位字典中的该车辆信息
            self.available_spaces += 1  # 剩余停车位数量增加
            print(f"车辆 {plate_number} 离开停车场,停车时间:{parking_time}秒,停车费用:{parking_cost}元,剩余停车位:{self.available_spaces}")
        else:
            print("该车未在停车场内")
    
    # 计算停车费用函数
    def calculate_parking_cost(self, parking_time):
        if parking_time <= 7200:   # 2小时内免费
            return 0
        elif parking_time <= 14400:  # 2-4小时,费用为10元
            return 10
        elif parking_time <= 21600:  # 4-6小时,费用为15元
            return 15
        elif parking_time <= 28800:  # 6-8小时,费用为20元
            return 20
        elif parking_time <= 36000:  # 8-10小时,费用为25元
            return 25
        else:  # 10小时以上,费用为30元
            return 30

# 创建停车场实例
parking_lot = ParkingLot()

# 循环等待用户操作,直至用户输入"q"结束程序
while True:
    print("请输入操作:1-车辆进入停车场,2-车辆离开停车场,q-退出程序")
    option = input()
    if option == "1":
        print("请输入车牌号码:")
        plate_number = input()
        parking_lot.enter_parking_lot(plate_number)
    elif option == "2":
        print("请输入车牌号码:")
        plate_number = input()
        parking_lot.leave_parking_lot(plate_number)
    elif option == "q":  # 退出程序
        break
    else:
        print("无效的操作,请重新输入")
# 停车场自动收费系统

# 导入所需的时间库
import datetime

# 定义停车场车位数量
# 停车场最多有50个车位
total_parking_spaces = 50

# 定义收费标准
free_duration = 2
rate_2_4_hours = 10
rate_4_6_hours = 15
rate_6_8_hours = 20
rate_8_10_hours = 25
rate_above_10_hours = 30

# 定义一个空列表用于存储停车时间
parking_times = []

# 定义函数:车辆进入停车场
def vehicle_entry(license_plate):
    if len(parking_times) >= total_parking_spaces:
        print("停车场已满,请等待")
    else:
        entry_time = datetime.datetime.now()
        parking_times.append((license_plate, entry_time))
        print(f"车辆 {license_plate} 进入停车场")

# 定义函数:车辆离开停车场
def vehicle_exit(license_plate):
    for i in range(len(parking_times)):
        if parking_times[i][0] == license_plate:
            exit_time = datetime.datetime.now()
            parking_duration = exit_time - parking_times[i][1]
            parking_times.pop(i)
            calculate_parking_fee(parking_duration)
            print(f"车辆 {license_plate} 离开停车场")
            break

# 定义函数:计算停车费用
def calculate_parking_fee(parking_duration):
    parking_duration_in_hours = parking_duration.total_seconds() / 3600
    if parking_duration_in_hours <= free_duration:
        fee = 0
    elif parking_duration_in_hours <= 4:
        fee = rate_2_4_hours
    elif parking_duration_in_hours <= 6:
        fee = rate_4_6_hours
    elif parking_duration_in_hours <= 8:
        fee = rate_6_8_hours
    elif parking_duration_in_hours <= 10:
        fee = rate_8_10_hours
    else:
        fee = rate_above_10_hours
    print(f"停车费用为 {fee} 元")

# 主程序流程
if __name__ == "__main__":
    license_plate = input("请输入车牌号码:")
    vehicle_entry(license_plate)
    license_plate = input("请输入车牌号码:")
    vehicle_exit(license_plate)

该程序使用了Python标准库datetime来实现计时功能,停车时间的计算截止到秒。在车辆离开停车场后,会根据停车时长计算停车费用,并输出结果。程序还使用了函数来实现各个功能模块,增加了代码的可读性和复用性。

。都快答辩了你现在急


import datetime

# 定义停车场最大车位数

MAX_PARKING_SPACES = 50
# 定义收费标准

PARKING_FEE = {
    7200: 0,
    14400: 10,
    21600: 15,
    28800: 20,
    36000: 25,
    float('inf'): 30
}
# 定义停车场状态

parking_lot = {}


# 检查停车场是否已满

def check_parking_lot_full(parking_lot, max_parking_spaces):
    """
    检查停车场是否已满
    :param parking_lot: 当前停车场状态
    :param max_parking_spaces: 停车场最大车位数
    :return: True表示停车场已满,False表示停车场未满
    """
    return len(parking_lot) >= max_parking_spaces


# 计算停车时间

def calculate_parking_time(entry_time, exit_time):
    """
    计算停车时间
    :param entry_time: 车辆进入时间
    :param exit_time: 车辆离开时间
    :return: 停车时间,单位为秒
    """
    parking_time = (exit_time - entry_time).total_seconds()
    return parking_time


# 计算停车费用
def calculate_parking_fee(parking_time):
    """
    计算停车费用
    :param parking_time: 停车时间,单位为秒
    :return: 停车费用
    """
    for time_limit, fee in PARKING_FEE.items():
        if parking_time <= time_limit:
            return fee


# 车辆进入停车场
def vehicle_entry(parking_lot):
    """
    车辆进入停车场
    :param parking_lot: 当前停车场状态
    """
    # 检查停车场是否已满
    if check_parking_lot_full(parking_lot, MAX_PARKING_SPACES):
        print("停车场已满,无法进入!")
        return

    # 输入车牌号码
    license_plate = input("请输入车牌号码:")

    # 记录车辆进入时间
    entry_time = datetime.datetime.now()

    # 将车辆加入停车场状态
    parking_lot[license_plate] = entry_time

    print("车辆已进入停车场,停车时间为:{}".format(entry_time))


# 车辆离开停车场


def vehicle_exit(parking_lot):
    """
    车辆离开停车场
    :param parking_lot: 当前停车场状态
    """
    # 输入车牌号码
    license_plate = input("请输入车牌号码:")

    # 检查车辆是否在停车场中
    if license_plate not in parking_lot:
        print("车辆不在停车场中!")
        return

    # 记录车辆离开时间
    exit_time = datetime.datetime.now()

    # 计算停车时间和停车费用
    entry_time = parking_lot[license_plate]
    parking_time = calculate_parking_time(entry_time, exit_time)
    parking_fee = calculate_parking_fee(parking_time)

    # 输出停车时间和停车费用
    print("车辆已离开停车场,停车时间为:{},停车费用为:{}元".format(parking_time, parking_fee))

    # 将车辆从停车场状态中删除
    del parking_lot[license_plate]


# 主程序


def main():
    while True:
        # 显示菜单
        print("停车场自动收费系统")
        print("1. 车辆进入停车场")
        print("2. 车辆离开停车场")
        print("3. 退出系统")

        # 获取用户输入
        choice = input("请输入您的选择:")

        # 根据用户选择执行相应操作
        if choice == "1":
            vehicle_entry(parking_lot)
        elif choice == "2":
            vehicle_exit(parking_lot)
        elif choice == "3":
            break
        else:
            print("输入错误,请重新输入!")


if __name__ == '__main__':
    main()

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7424915
  • 这篇博客也不错, 你可以看下采集一幅彩色图像,使用python然后将其转化成灰度图像,分别加入高斯白噪声和椒盐 噪声,再分别进行 3×3 的均值滤波和中值滤波,显示原图像、加噪图像和滤波 结果图像,并比较四种滤波结果。
  • 除此之外, 这篇博客: Python函数的参数传递以及是否会改变外部变量的值中的 2. 将外部变量作为实参传递给函数时,Python中一切皆对象,Python参数传递采用的肯定是“传对象引用”的方式。如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值——相当于通过“传引用”来传递对象。如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象——相当于通过“传值”来传递对象。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • 也就是说,当我们传的参数是int、字符串(string)、float、(数值型number)、元组(tuple) 时,无论函数中对其做什么操作,都不会改变函数外这个参数的值;

    • 当传的是字典型(dictionary)、列表型(list)时,如果是重新对其进行赋值,则不会改变函数外参数的值,如果是对其进行操作,则会改变。

    即变量中存储的是引用 , 是指向真正内容的内存地址 , 对变量重新赋值 , 相当于修改了变量副本存储的内存地址 , 而这时的变量已经和函数体外的变量不是同一个了, 在函数体之外的变量 , 依旧存储的是原本的内存地址 , 其值自然没有发生改变 。

  • 以下回答由chatgpt基于相关博客总结生成:

    停车场自动收费系统

    界面设计

    停车场自动收费系统界面如下:

    ==============================================
    欢迎使用停车场自动收费系统!
    1. 停车
    2. 离开
    3. 查看当前停车情况
    4. 退出系统
    请选择您需要的操作: 
    

    程序流程图

    停车场自动收费系统程序流程图如下:

    Start
    初始化停车场车位信息,记录当前时间
    循环执行以下操作:
        显示系统界面
        获取用户输入的操作选项
        如果用户选择操作为“停车”:
            检查是否还有剩余车位,如有,则进行停车操作
            显示停车成功信息
        如果用户选择操作为“离开”:
            获取用户输入的车牌号和离开时间
            根据车牌号查找停车记录,计算停车费用
            显示停车费用信息
            从停车记录中删除该车辆信息
            更新停车场车位信息
        如果用户选择操作为“查看当前停车情况”:
            显示当前停车记录并统计已停车辆数和剩余车位数
        如果用户选择操作为“退出系统”:
            结束程序
    End
    

    代码实现

    根据程序流程图,我们可以将程序分为多个函数来实现不同的功能模块,实现代码如下:

    import datetime
    
    num_of_spaces = 50  # 停车场最大车位数
    parking_data = []  # 停车记录
    
    
    def init_parking_data():
        """初始化停车场车位信息,记录当前时间"""
        global parking_data
        parking_data = [{'license_plate': '', 'parking_time': None} for _ in range(num_of_spaces)]
        print('停车场共{}个车位,现有{}个空闲车位。'.format(num_of_spaces, num_of_spaces - len(parking_data)))
    
    
    def display_menu():
        """显示系统界面"""
        print("=" * 46)
        print("欢迎使用停车场自动收费系统!")
        print("1. 停车")
        print("2. 离开")
        print("3. 查看当前停车情况")
        print("4. 退出系统")
        print("请选择您需要的操作: ")
    
    
    def park_car(license_plate):
        """停车操作"""
        global parking_data
        if len(parking_data) < num_of_spaces:
            parking_data.append({'license_plate': license_plate, 'parking_time': datetime.datetime.now()})
            print('停车成功!')
        else:
            print('非常抱歉,停车场已满,请您到其他停车场停车。')
    
    
    def leave_car(license_plate):
        """离开操作"""
        global parking_data
        for car in parking_data:
            if car['license_plate'] == license_plate:
                # 计算停车费用
                parking_time = car['parking_time']
                leaving_time = datetime.datetime.now()
                duration = leaving_time - parking_time
                hours, remainder = divmod(duration.seconds, 3600)
                minutes, _ = divmod(remainder, 60)
                total_hours = duration.days * 24 + hours
                if total_hours <= 2:
                    fee = 0
                elif total_hours <= 4:
                    fee = 10
                elif total_hours <= 6:
                    fee = 15
                elif total_hours <= 8:
                    fee = 20
                elif total_hours <= 10:
                    fee = 25
                else:
                    fee = 30
                print('停车时间:{}小时{}分钟,停车费用为{}元。'.format(total_hours, minutes, fee))
                # 从停车记录中删除该车辆信息
                parking_data.remove(car)
                print('车辆已离开车位。')
                return
        else:
            print('未找到该车辆,请确认是否在停车场内停车。')
    
    
    def display_parking_status():
        """查看当前停车情况"""
        global parking_data
        print('当前停车情况:')
        for i, car in enumerate(parking_data):
            print('车位{}{}'.format(i + 1, car['license_plate'] if car['license_plate'] else '空'))
        print('已停车辆数:{},剩余车位数:{}'.format(len(parking_data), num_of_spaces - len(parking_data)))
    
    
    def shutdown_system():
        """退出系统"""
        print('感谢您使用停车场自动收费系统,祝您生活愉快!')
    
    
    def main():
        """主程序"""
        init_parking_data()
        while True:
            display_menu()
            choice = input()
            if choice == '1':
                license_plate = input("请输入车牌号码:")
                park_car(license_plate)
            elif choice == '2':
                license_plate = input("请输入车牌号码:")
                leave_car(license_plate)
            elif choice == '3':
                display_parking_status()
            elif choice == '4':
                shutdown_system()
                break
            else:
                print('输入无效,请重新输入。')
    
    
    if __name__ == '__main__':
        main()
    

    运行效果

    使用以上代码实现停车场自动收费系统后,在命令行运行程序,可以得到以下效果:

    停车场共50个车位,现有50个空闲车位。
    ==============================================
    欢迎使用停车场自动收费系统!
    1. 停车
    2. 离开
    3. 查看当前停车情况
    4. 退出系统
    请选择您需要的操作: 
    1
    请输入车牌号码:京A12345
    停车成功!
    ==============================================
    欢迎使用停车场自动收费系统!
    1. 停车
    2. 离开
    3. 查看当前停车情况
    4. 退出系统
    请选择您需要的操作: 
    3
    当前停车情况:
    车位1:京A12345
    车位2:空
    车位3:空
    ...
    已停车辆数:1,剩余车位数:49
    ==============================================
    欢迎使用停车场自动收费系统!
    1. 停车
    2. 离开
    3. 查看当前停车情况
    4. 退出系统
    请选择您需要的操作: 
    2
    请输入车牌号码:京A12345
    停车时间:0小时3分钟,停车费用为10元。
    车辆已离开车位。
    ==============================================
    欢迎使用停车场自动收费系统!
    1. 停车
    2. 离开
    3. 查看当前停车情况
    4. 退出系统
    请选择您需要的操作: 
    3
    当前停车情况:
    车位1:空
    车位2:空
    车位3:空
    ...
    已停车辆数:0,剩余车位数:50
    ==============================================
    欢迎使用停车场自动收费系统!
    1. 停车
    2. 离开
    3. 查看当前停车情况
    4. 退出系统
    请选择您需要的操作: 
    4
    感谢您使用停车场自动收费系统,祝您生活愉快!
    

    在停车成功后,可以查看当前停车情况,离开时根据停车时间计算停车费用,查看当前停车情况时可以统计已停车辆数和剩余车位数。在退出系统时,会退出程序。