1. 程式人生 > >Python-停車管理系統(面向物件)

Python-停車管理系統(面向物件)

這個管理系統可實現車輛入庫,按車牌號或者車型查詢車輛,修改車輛資訊,車輛出庫時實現計費,按車型統計車輛數和顯示全部車輛資訊的功能
(1)定義車輛類,屬性有車牌號、顏色、車型(小汽車、小卡、中卡和大卡)、到達的時間和離開的時間等資訊和相關的對屬性做操作的行為。
(2)定義一個管理類,完成對停車場的管理。停車場的具體要求:設停車場是一個可停放n輛汽車的狹長通道,且只有一個大門可供汽車進出。
汽車在停車場內按門外的便道上等待,一旦有車開走,則排在便道上的第一輛車即可開入;每輛停放在車場的車在它離開停車場時必須按它停留的時間長短交納費用。
功能描述
(1)新增功能:程式能夠新增到達停車場的車輛資訊,要求車輛的車牌號要唯一,如果添加了重複編號的記錄時,則提示資料新增重複並取消新增。
(2)查詢功能:可根據車牌號、車型等資訊對已新增的停車場中的車輛資訊進行查詢,如果未找到,給出相應的提示資訊,如果找到,則顯示相應的記錄資訊;
(3)顯示功能:可顯示當前系統中所有車輛的資訊,每條記錄佔據一行。
(4)編輯功能:可根據查詢結果對相應的記錄進行修改,修改時注意車牌號的唯一性。
(5)刪除功能:主要實現對已新增的車輛記錄進行刪除。如果當前系統中沒有相應的人員記錄,則提示“記錄為空!”並返回操作。
(6)統計功能:能統計停車場中車輛的總數、按車型、按到達時間進行統計等。
先建立一個關於車的類模組setting_Car.py

import time
from setting_Manage import ParkManage

class Car(ParkManage):
    """一個關於車的類"""
    def __init__(self,car_number,car_owner,contact_way,car_color,car_model):
        super(Car, self).__init__()
        self.car_number=car_number
        self.car_owner=car_owner
        self.contact_way=contact_way
        self.car_color=car_color
        self.car_model=car_model
        self.balance=200
        self.entrance_time = 0
        self.exit_time = 0

    def __setitem__(self, key, value):
        self.__dict__[key]=value

    def slot_card(self):
        """根據時間計費"""
        park_time=time.mktime(time.strptime(self.exit_time)) - time.mktime(
            time.strptime(self.entrance_time))
        h=park_time//3600
        m=(park_time-h*3600)//60
        s=park_time-h*3600-m*60
        P_time="%.0f時%.0f分%.0f秒"%(h,m,s)
        consumption = ((park_time) / 3600) * 5
        self.balance -= consumption
        print("車牌號為:%s\n停車時長:%s\n本次消費:%.2f元\n卡里餘額:%.2f元\n" % (self.car_number,P_time, consumption, self.balance))

    def __str__(self):
        if self.car_model=='0':
            self.car_model="小汽車"
        elif self.car_model=='1':
            self.car_model="小卡"
        elif self.car_model=='2':
            self.car_model="中卡"
        elif self.car_model=='3':
            self.car_model="大卡"
        return "%s %s %s %s %s %s" %(self.car_number,self.car_owner,self.contact_way,
                                     self.car_color,self.car_model,self.entrance_time)


建立一個關於管理系統的類模組setting_Manage.py

import time

class ParkManage(object):
    """建立一個關於停車的類"""
    def __init__(self,max_car=100,):  #定義最大停車輛數
        self.max_car=max_car
        self.car_list = []
        self.cur_car=len(self.car_list)


    def info(self):
        """ #顯示系統功能資訊"""
        print("""
        —————————————————————————
        |***歡迎進入車輛管理系統***|
        —————————————————————————    
{1}                                    
{2}           1)新增車輛資訊{3}{2}
{0}                                  
{2}           2)查詢車輛資訊{3}{2}
{0}
{2}           3)顯示車輛資訊{3}{2}
{0}
{2}           4)編輯車輛資訊{3}{2}
{0}
{2}           5)刪除車輛資訊{3}{2}
{0}
{2}           6)統計車輛資訊{3}{2}
{0}
{2}              7)退出系統{3}{2}
{1}
        """.format("-"*40,"="*40,"|"," "*16))

    def add_car(self,car):
        """#新增車輛資訊"""
        entrance_time = time.ctime()
        car["entrance_time"]=entrance_time
        for Car in self.car_list:
            if Car.car_number == car.car_number:
                print("車牌號資訊有誤,重新輸入")
                break
        else:
            self.car_list.append(car)
            print("車牌號為%s的車入庫成功" %car.car_number)

    def search_By_Number(self):
        """#按車牌號查詢"""
        car_number=input("請輸入你您要查詢的車牌號:")
        for car in self.car_list:
            if car.car_number==car_number:
                print(car)
                break
        else:
            print("未找到車牌號為%s的車輛" %car_number)

    def search_By_Model(self):
        """#按車型查詢"""
        car_model=int(input("(小汽車:0,小卡:1,中卡:2,大卡:3)\n請輸入您要查詢的車型:"))
        if car_model in [0,1,2,3]:
            for car in self.car_list:
                if car_model==int(car.car_model):
                    print(car)
            else:
                print("未找到相關車輛資訊")
        else:
            print("輸入有誤,請重新輸入")

    def searchCar(self):
        """#查詢車輛資訊"""
        print("""
            1)按車牌號查詢
            2)按車型查詢
        """)
        search_chioce=input("輸入您要查詢的方式:")
        if search_chioce == '1':
            self.search_By_Number()
        elif search_chioce=='2':
            self.search_By_Model()
        else:
            print("輸入有誤,請重新輸入")


    def display(self):
        """#顯示車車輛資訊"""
        if len(self.car_list)!=0:
            for car in self.car_list:
                print(car)
        else:
            print("車庫為空")

    def change_Carinfo(self):
        """#修改車輛資訊"""
        car_number = input("請輸入你您要查詢的車牌號:")
        for car in self.car_list:
            if car.car_number == car_number:
                index=self.car_list.index(car)
                change=int(input("(修改資訊的序號:\n車主0,\n聯絡方式1,\n車顏色2,\n車型3)\n輸入你要修改的資訊序號:"))
                if change==0:
                    new_info=input("輸入新的資訊:")
                    self.car_list[index].car_owner=new_info
                    print("車主名修改成功")
                    break
                elif change==1:
                    new_info=input("輸入新的資訊:")
                    self.car_list[index].contact_way=new_info
                    print("聯絡方式修改成功")
                    break
                elif change==2:
                    new_info=input("輸入新的資訊:")
                    self.car_list[index].car_color=new_info
                    print("車顏色修改成功")
                    break
                elif change==3:
                    new_info=input("輸入新的資訊:")
                    self.car_list[index].car_model=new_info
                    print("車型修改成功")
                    break
        else:
            print("未找到車牌號為%s的車輛" % car_number)

    def delete_car(self,car):
        """刪除車輛資訊"""
        exit_time=time.ctime()
        car["exit_time"]=exit_time
        car.slot_card()
        self.car_list.remove(car)
        print("車牌號為%s的車兩成功刪除"%car.car_number)


    def statistics(self):
        """統計車輛資訊"""
        sedan_car_number=0
        pickup_truck_number=0
        middle_truck_number=0
        super_truck_number=0
        for car in self.car_list:
            if car.car_model=='0':
                sedan_car_number+=1
            elif car.car_model=='1':
                pickup_truck_number+=1
            elif car.car_model=='2':
                middle_truck_number+=1
            elif car.car_model=='3':
                super_truck_number+=1
        else:
            print("小汽車:%s\n"
                  "小  卡:%s\n"
                  "中  卡:%s\n"
                  "大  卡:%s\n"
                  %(sedan_car_number,pickup_truck_number,middle_truck_number,super_truck_number))

在main_fun.py中建立主函式並執行

import re
from  setting_Car import Car
from setting_Manage import ParkManage


def check_car_number(car_number):    #判斷車牌號是否合法
    pattern = re.compile(u'[\u4e00-\u9fa5]?')
    pattern1 = re.compile(u'[A-Z]+')
    pattern2 = re.compile(u'[0-9]+')

    match = pattern.search(car_number)
    match1 = pattern1.search(car_number)
    match2 = pattern2.search(car_number)
    if match and match1 and match2:
        return True
    else:
        return False

def check_contact_way(contact_way):   #判斷手機號是否合法
    pattern = re.compile(u'1[3|4|5|6|7|8|9]\d{9}$')

    match = pattern.search(contact_way)
    if match:
        return True
    else:
        return False


def main():
    parkmanage=ParkManage()
    while True:
        parkmanage.info()
        choice=input("請輸入你要的功能:")
        if choice=='1':
            check_error_list=[]
            car_number=input("請輸入車牌號:")
            if check_car_number(car_number):
                car_owner=input("請輸入車主姓名:")
                contact_way=input("請輸入車主聯絡方式:")
                if check_contact_way(contact_way):
                    car_color=input("請輸入車顏色:")
                    car_model=input("請輸入車型(小汽車:0,小卡:1,中卡:2,大卡:3):")
                    check_error_list=[car_number,car_owner,contact_way,car_color,car_model]
                    for info in check_error_list:    #判斷輸入資訊的完整性
                        if info=='':
                            print("輸入資訊不全")
                            break
                    else:
                        car = Car(car_number, car_owner, contact_way, car_color, car_model)
                        parkmanage.add_car(car)
                else:
                    print("手機號無效")
            else:
                print("車牌號不合法")

        elif choice=='2':
            parkmanage.searchCar()
        elif choice =='3':
            parkmanage.display()
        elif choice=='4':
            parkmanage.change_Carinfo()
        elif choice=='5':
            car_number = input("輸入您要刪除的車輛的車牌號:")
            for car in parkmanage.car_list:
                if car.car_number == car_number:
                    parkmanage.delete_car(car)
                    break
            else:
                print("未找到車牌號為%s的車輛" % (car_number))

        elif choice=='6':
            parkmanage.statistics()
        elif choice=='7':
            print("歡迎下次使用!!!")
            exit()
        else:
            print("請輸入正確的選項")


if __name__ == '__main__':
    main()

相關推薦

Python-停車管理系統面向物件

這個管理系統可實現車輛入庫,按車牌號或者車型查詢車輛,修改車輛資訊,車輛出庫時實現計費,按車型統計車輛數和顯示全部車輛資訊的功能 (1)定義車輛類,屬性有車牌號、顏色、車型(小汽車、小卡、中卡和大卡)、到達的時間和離開的時間等資訊和相關的對屬性做操作的行為。 (

python員工管理系統基礎版

  各位小夥伴們大家好,最近自學python已經差不多把基礎學完了,現在運用這些基礎知識寫了一個簡單版本的員工管理系統 因為在大學裡我是學過java的,所以,當有了一定的基礎和薰陶外,真心覺得python比java要簡單的多,而且學起來特快,業務 邏輯沒那麼複雜,理解起來更好理解,接下里就慢慢給大家講講思路:

python--學校管理系統在學校接口上,增加了老師的管理接口和學生的管理接口

建立 load style inpu core open .com 只需要 繼續 和上一篇隨筆一樣的要求,完善了一下老師接口和學生接口。 搞清楚了一件事情,就是import那麽多文件,該怎麽搞才比較方便。 1、先上文件目錄 在lib中定義了各個類,一看名字就知道是啥類了哦

python實現簡易工資管理系統Salary Manage源碼

容器 str strip 思路 例如 line col 用戶信息 split() 一、需求: 1.導入文件讀取員工的信息和工資信息,最後將增加、刪除或修改的員工工資信息寫入原來的文件中 2.能夠實現員工工資信息的增刪改查 3.當增加和修改員工信息時用戶用空格分隔員工姓名和薪

Java練習 SDUT-3349_答答租車系統面向物件綜合練習

答答租車系統(面向物件綜合練習) Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 各位面向物件的小夥伴們,在學習了面向物件的核心概念——類的封裝、繼承、多型之後,答答租車系統開始營運了。 請你充分利用面向物件思想,為公司解

Python--學生資訊管理系統簡易版

           學完Python基礎,結合前邊所學的知識,做一個小Demo,一來熟悉程式碼,二來鞏固和複習前邊所學的東西。 程式碼如下: #coding=utf-8 #學生管理系統 #用來儲存學生資訊 nameList = []         print("-"

Python學習之路——六面向物件

                                               面對物件程式設計 一、概述 1.全稱:OOP(Object Oriented Programming) 2.作用:一種解決軟體複用的設計和程式設計方法。使用面對物件程式設計的方

SDUT-3349 答答租車系統面向物件綜合練習

Problem Description 各位面向物件的小夥伴們,在學習了面向物件的核心概念——類的封裝、繼承、多型之後,答答租車系統開始營運了。 請你充分利用面向物件思想,為公司解決智慧租車問題,根據客戶選定的車型和租車天數,來計算租車費用,最大載客人數,最大載載重量。

物件陣列增刪練習之《學生資訊管理系統使用ArrayList

//請完善實驗給定程式碼,使得工程可以完成學生資訊的管理功能,主要功能包括:新增學生資料、列印學生名單、刪除學生資料三個功能。 import java.io.*; import java.util.ArrayList; import java.util.Scanner;

python學習筆記19面向物件程式設計

面向物件程式設計 基礎概念: 物件: 把資料及對資料的操作方法放在一起,作為一個相互依存的整體,即為物件。 類: 對同類物件抽象出其共性,形成類。 注意: 類中的大多數資料,只能用本類的方法進行處理。 類通過一個簡單的外部介面與外界發生關係,物件與物件之間通過訊息進行通訊 面向物件是

Python專案:學生資訊管理系統完整版

主要包括有:            完善部分:輸入錯誤;無資料查詢等異常錯誤            新的功能:檔案的操作:檔案的讀寫,其中重點是對文字字串的詳細解析(關於整個解析拆解和重組詳見程式碼,以及添加了註釋)學生資訊管理系統(完整版) 學生資訊管理專案,要求帶操作介面

Python實現學生資訊管理系統修改版

在學習之前先要了解sqlite遊標的使用方法python使用sqlite3時遊標的使用方法 繼上篇部落格Python實現學生資訊管理系統後,我就覺得寫的太複雜了,然後又是一通優化、優化、優化; 本次優化主要修改了: 1.使用遊標的方法連線、增、刪、改、查資

學習Python就業有哪些方向,附加視訊教程python3從入門到進階面向物件,實戰爬蟲,飛機遊戲,GUI實戰視訊教程

python3從入門到進階(面向物件),實戰(爬蟲,飛機遊戲,GUI實戰)視訊教程連結:http://pan.baidu.com/s/1kUG0pLH密碼:加以下微信為好友,朋友圈獲取。入門與基礎面向物件程式設計爬蟲實戰GUI實戰飛機遊戲Python是一門面向物件的程式語言,

學院管理系統mysql版

desc pen 退出 strip() log mod 創建 print status 需求 用戶角色,講師\學員, 用戶登陸後根據角色不同,能做的事情不同,分別如下 講師視圖   管理班級,可創建班級,根據學員qq號把學員加入班級   可創建指定班級的上課紀錄,註意一節上

教你做一個單機版人事管理系統Winform版treeview與listview使用詳情

不讓 ogr lena 位置 exc bject tel horizon raw ------------------------------------------------------------------部門部分--------------------------

鏈表實現學生健康信息管理系統簡略版

nbsp 使用數組 自動 退出 輸入數據 ren 個學生 系統 進行 "Stdent.h"頭文件 #ifndef _STUDENT_H_#define _STUDENT_H_#include <iostream>#include <string>#i

圖書管理系統增刪改

分享 bootstra url jquery .cn 添加 啟動 管理 bootstrap 圖書管理系統半成: 數據庫配置,urls配置,views配置,前端頁面配置,setting配置 先來一張簡單的配置圖: setting數據庫配置: 前端頁面編寫(h5,boots

CentOS 7.0 使用MariaDB數據庫管理系統唐傑

數據庫 mariadb 管理系統 http://note.youdao.com/noteshare?id=94f07019c1e4af1a5a077591690e5c96本文出自 “新網學會博客” 博客,請務必保留此出處http://xwxhvip.blog.51cto.com/13020757/

從零開始的全棧工程師——js篇2.12面向物件

面向物件 Js一開始就是寫網頁特效,面向過程的,作者發現這樣寫不好,程式碼重複利用率太高,計算機記憶體消耗太大,網頁效能很差。 所以作者就收到java和c的影響,往面向物件靠齊。Js天生有一個Object,但他沒有面向物件的特徵(封裝,繼承,多型)。 最後研究出了建構函式。 建構函式最終目的是生成物件

使用兩層卷積神經網路來實現手寫數字集面向物件

介紹使用卷積神經網路來實現手寫數字集的識別 主要採用面向物件的變成方法實現, 程式碼可以直接執行,分別有訓練模型,儲存模型,和運用儲存好的模型測試單張圖片 import tensorflow as tf from tensorflow.examples.tutorials.mnist i