Python写停车场收费系统

2021/12/8 20:19:27

本文主要是介绍Python写停车场收费系统,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

停车场收费系统

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

    • 停车场收费系统
  • 项目需求
  • 源码


项目需求

编写程序制作一个停车场的收费系统,程序至少包括:添加月租车、删除月租车,查询、收费,把相关数据保存在文件里面,程序中数据建议使用字典处理。
收费标准:4元/小时,2元/半小时,不足30分钟,按半小时计算,24小时最高50元(这里需计算50元对应的最大时长);
如果有优惠券,两小时内免费;月租卡300元/月(没有意义的数据,因为系统不收月租钱),没有按月缴费的月租卡,超过一天不收费,超过2天按5折收费,超过3天按小时收费;如果车牌号是“粤A888**”,永久免费,如果是车牌号是“粤A88**”,停车费7折。


提示:以下是本篇文章正文内容,下面案例可供参考

源码

仅供参考

代码如下(示例):

import os

filename = 'information.txt'


def menm():
    print('===========================停车场收费系统=================================')
    print('----------------------------功能菜单----------------------------------------')
    print('\t\t\t\t\t\t0.退出系统')
    print('\t\t\t\t\t\t1.添加月租车')
    print('\t\t\t\t\t\t2.删除月租车')
    print('\t\t\t\t\t\t3.查询')
    print('\t\t\t\t\t\t4.收费')
    print('----------------------------------------------------------------------------')


def insert():
    car_list = []
    while True:
        id = input('请输入车牌号:\n')
        if not id:
            break
        time = input('请输入停车时间(小时)\n')
        if not time:
            break
        card = input('请输入是否有月租卡(是/否)\n')
        if not card:
            break
        yhq = input('请输入是否有优惠券(是/否)\n')
        if not yhq:
            break
        car = {'id': id, 'time': time, 'card': card, 'yhq': yhq}
        car_list.append(car)
        answer = input('是否继续添加?y/n\n')
        if answer == 'y':
            continue
        else:
            break
    save(car_list)
    print('车辆信息录入完毕!!!')


def save(list):
    try:
        car_txt = open(filename, 'a', encoding='utf-8')  # a是有的时候追加,没有就创建
    except:
        car_txt = open(filename, 'w', encoding='utf-8')  # w是以写入的方式打开
    for item in list:
        car_txt.write(str(item) + '\n')  # \n换行
    car_txt.close()


def delete():
    while True:
        car_id = input('请输入要删除的车牌号')
        if car_id != '':
            if os.path.exists(filename):  # 判断磁盘上的文件是否存在
                with open(filename, 'r', encoding='utf-8') as file:  # 模式是r,编码格式是utf-8
                    car_old = file.readlines()  # 读取文件
            else:  # 信息不存在
                car_old = []  # 定义一个列表为空
            flag = False  # 标记是否删除(默认没有删除)
            if car_old:  # 判断列表(删除完的将原有的进行覆盖)空列表布尔值为False
                with open(filename, 'w', encoding='utf-8') as wfile:  # w:以只写模式打开文件,如果文件存在,则覆盖原有内容
                    d = {}  # 定义空字典
                    for item in car_old:  # 遍历一遍
                        d = dict(eval(item))  # eval()函数将字符串转成字典
                        if d['id'] != car_id:  # 判断删除的车辆在字典中存不存在
                            wfile.write(str(d) + '\n')  # 如果不存在,将学生信息先写入文件(这里写入的是原有的信息)
                        else:  # ID相等的情况下
                            flag = True  # 标记已删除
                    if flag:  # 判断flag的值
                        print(f'id为{car_id}的车辆信息已被删除')  # 格式化字符串f
                    else:
                        print(f'没有找到id为{car_id}的车辆信息')
            else:  # 不存在车辆信息
                print('无车辆信息')
                break
            # show()  # 删除之后要重新显示所有学生信息
            answer = input('是否继续删除?y/n\n')
            if answer == 'y':
                continue
            else:
                break
    pass


def search():  # 是一个查询过程
    car_query = []  # 定义一个列表,防止同名
    while True:
        id = input('请输入查询的 车牌号')
        if os.path.exists(filename):
            with open(filename, 'r', encoding='utf-8') as rfile:
                car = rfile.readlines()
                for item in car:
                    d = dict(eval(item))
                    if id != '':
                        if d['id'] == id:
                            car_query.append(d)
            # 显示查询结果
            show_car(car_query)
            # 情况列表
            car_query.clear()
            answer = input('是否要继续查询?y/n\n')
            if answer == 'y':
                continue
            else:
                break

        else:
            print('暂未保存车辆信息')
            return
    pass


def show_car(lst):
    if len(lst) == 0:
        print("没有查询到车辆信息,无法显示!")
        return
    format_title = '{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}'
    print(format_title.format('车牌号', '停车时间(/小时)', '有无月租卡', '有无优惠券', '停车费用'))
    format_data = '{:^6}\t\t{:^14}\t\t{:^10}\t\t{:^14}\t\t'
    for item in lst:
        print(
            format_data.format(
                item.get('id'),
                item.get('time'),
                item.get('card'),
                item.get('yhq'),
            ), end='    ')
        total(str(item.get('id')),eval(item.get('time')), str(item.get('card')), str(item.get('yhq')))



def show_shoufei(lst2):
    if len(lst2) == 0:
        print("没有查询到车辆信息,无法显示!")
        return
    format_title = '{:^6}\t{:^12}'
    print(format_title.format('车牌号', '停车费用'))
    format_data = '{:^6}\t\t'
    for item2 in lst2:
        print(
            format_data.format(
                item2.get('id'),
            ), end='    ')
        total(str(item2.get('id')),eval(item2.get('time')), str(item2.get('card')), str(item2.get('yhq')))


def total(id,num, str1, str2):
    if id[0:5]=='粤A888':
        print(0)
    elif id[0:4] == '粤A88':
        if str2 == '否':
            int1 = num // 0.5
            int2 = num % 0.5
            if int1 >= 48:
                print(50*0.7)
            else:
                if int2 > 0:
                    int1 += 1
                    print((int1 * 2)*0.7)
                else:
                    print((int1 * 2)*0.7)
        else:
            num = num - 2
            int1 = num // 0.5
            int2 = num % 0.5
            if int1 >= 48:
                print(50)
            else:
                if int2 > 0:
                    int1 += 1
                    print(int1 * 2)
                else:
                    print(int1 * 2)
    else:
        if str1 == '否':
            if str2 == '否':
                int1 = num // 0.5
                int2 = num % 0.5
                if int1 >= 48:
                    print(50)
                else:
                    if int2 > 0:
                        int1 += 1
                        print(int1 * 2)
                    else:
                        print(int1 * 2)
            else:
                num = num - 2
                int1 = num // 0.5
                int2 = num % 0.5
                if int1 >= 48:
                    print(50)
                else:
                    if int2 > 0:
                        int1 += 1
                        print(int1 * 2)
                    else:
                        print(int1 * 2)

        else:
            if num <= 24:
                print(0)
            elif 24 < num <= 48:
                int1 = num // 0.5
                int2 = num % 0.5
                if int2 > 0:
                    int1 += 1
                    print((int1 * 2) * 0.5)
                else:
                    print((int1 * 2) * 0.5)
            else:
                int1 = num // 0.5
                int2 = num % 0.5
                if int2 > 0:
                    int1 += 1
                    print((int1 * 2) * 0.5)
                else:
                    print((int1 * 2) * 0.5)


def shoufei():
    car_query2 = []  # 定义一个列表,防止同名
    while True:
        id = input('请输入查询的 车牌号')
        if os.path.exists(filename):
            with open(filename, 'r', encoding='utf-8') as rfile:
                car2 = rfile.readlines()
                for item in car2:
                    d = dict(eval(item))
                    if id != '':
                        if d['id'] == id:
                            car_query2.append(d)
            # 显示查询结果
            show_shoufei(car_query2)
            # 情况列表
            car_query2.clear()
            answer = input('是否要继续查询?y/n\n')
            if answer == 'y':
                continue
            else:
                break

        else:
            print('暂未保存车辆信息')
            return
    pass


def main():
    while True:
        menm()
        try:
            choice = int(input('请选择\n'))
            if choice in [0, 1, 2, 3, 4]:
                if choice == 0:
                    answer = input('您确定要退出系统吗?y/n\n')
                    if answer == 'y' or answer == 'Y':
                        print('谢谢您的使用!!!')
                        break  # 退出系统
                    else:
                        continue
                elif choice == 1:
                    insert()
                elif choice == 2:
                    delete()
                elif choice == 3:
                    search()
                elif choice == 4:
                    shoufei()
        except:
            print("请输入有效数字")
            main()


if __name__ == '__main__':
    main()





# 总结


有大佬在的话求优化!写的太复杂了感觉!!!!



这篇关于Python写停车场收费系统的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程