停车场系统封装代码(全)
1、database基类
import pymysql
# 数据库基本操作封装
class Database:
def __init__(self, password, db, host="localhost", port=3306, user="root"):
self.conn = self.get_conn(host, port, user, password, db) # 连接对象
self.cursor = self.get_cursor() # 游标对象
def get_conn(self, host, port, user, password, db):
"""
获取连接对象
:param host:
:param port:
:param user:
:param password: 数据库连接密码
:param db:
:return:
"""
conn = pymysql.connect(host=host, port=port, user=user, passwd=password, db=db)
return conn
def get_cursor(self):
"""
获取游标对象
:return: 游标对象
"""
cursor = self.conn.cursor()
return cursor
def select_all(self, sql):
"""
查询全部
:param sql:查询语句
:return: [{},{}]
"""
self.cursor.execute(sql)
return self.cursor.fetchall()
def select_one(self, sql):
"""
查询一个
:param sql: 查询语句
:return: {}
"""
self.cursor.execute(sql)
return self.cursor.fetchone() # 获取单条数据
def commit_data(self, sql):
"""
提交数据,用于增删改查
:param sql:
:return:
"""
self.cursor.execute(sql)
self.conn.commit()
print("表连接对象,提交成功")
def __del__(self):
self.cursor.close()
self.conn.close()
2、进一步封装操作
from Database import *
import time
from datetime import datetime
class DataProcess(Database):
def __init__(self, password, db, host="localhost", port=3306, user="root"):
super().__init__(password, db, host, port, user) # 将参数传给父类
def create_usr_table(self):
"""
创建用户表
:return:
"""
# self.cursor.execute(DROp TABLE IF EXISTS usr_table)
sql = """
CREATE TABLE if not exists usr_table(
usr_id int(6) NOT NULL AUTO_INCREMENT,
usr_phone varchar(12) NOT NULL,
car_num varchar(9) NOT NULL,
usr_state varchar(2) NOT NULL,
primary key(usr_id)
)ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
"""
self.cursor.execute(sql)
def create_inout_table(self):
"""
创建进出表
:return:
"""
# self.cursor.execute(DROP TABLE IF EXISTS in_out)
sql = """
CREATE TABLE if not exists in_out(
running_id int(6) NOT NULL AUTO_INCREMENT,
car_num varchar(9) NOT NULL,
in_time varchar(20) NOT NULL,
out_time varchar(20) NOT NULL,
car_state varchar(2) NOT NULL,
primary key(running_id)
)ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
"""
self.cursor.execute(sql)
def insert_usr_table(self, usr_phone, car_num):
"""
将数据插入用户表
:param usr_phone: 用户手机号
:param car_num: 用户车牌号
:return:
"""
# data = [("157xxxx3029", "赣AMxxxx", "1")] ##数据格式
in_data = [(usr_phone, car_num, "1")]
self.cursor.executemany("insert into usr_table(usr_phone, car_num, usr_state) values (%s, %s, %s)", in_data)
self.conn.commit()
def insert_intime(self, car_num):
"""
用户进入停车场
:param car_num: 车牌号
:return:
"""
# data = [("赣AM9xx2", "2021-8-30 22:50", "2021-8-31 22:50", "1")] ##数据格式
cur_time = time.strftime("%Y-%m-%d %H:%M", time.localtime())
cur_time = "".join('%s' % id for id in cur_time)
in_data = [(car_num, cur_time, "", 1)]
self.cursor.executemany("insert into in_out(car_num, in_time, out_time, car_state) values (%s, %s, %s, %s)",
in_data)
self.conn.commit()
def insert_outtime(self, car_num):
"""
用户出停车场
:param car_num: 车牌号
:return:
"""
cur_time = time.strftime("%Y-%m-%d %H:%M", time.localtime())
cur_time = "".join('%s' % id for id in cur_time) # 获取当前时间
sql = "update in_out set out_time = '%s' where car_num= '%s' and out_time = '' and car_state = '1'" % (
cur_time, car_num)
self.commit_data(sql)
def check_inout_car(self):
"""
查看所有没缴费的车辆
:return:
"""
sql = "select * from in_out where car_state = '1'"
print(self.select_all(sql))
def get_parking_time(self, car_num):
"""
停车时长
:return:停车的时间长度
"""
sql = "select in_time,out_time from in_out where car_num= '%s' and car_state = '1'" % car_num
result = self.select_one(sql)
print(result)
d1 = datetime.strptime(result[0], "%Y-%m-%d %H:%M")
d2 = datetime.strptime(result[1], "%Y-%m-%d %H:%M")
time = (d2 - d1).days * 24 * 60 + (d2 - d1).seconds / 60
# print(d2 - d1)
# print((d2 - d1).days, (d2 - d1).seconds)
# print(int(time))
return int(time)
def pay_already(self, car_num):
"""
缴费成功,则将该条信息设置为0
:param car_num:
:return:
"""
sql = "update in_out set car_state = '0' where car_num= '%s' " % (car_num)
self.commit_data(sql)
# if __name__ == "__main__":
# database = DataProcess("root", "parking_lot")
# database.create_usr_table()
# database.create_inout_table()
# # database.insert_usr_table("157xxxx4324", "赣AM9xx2")
# # database.insert_intime("赣AM9xx2")
# database.insert_outtime("赣AM9xx2")
# print(database.get_parking_time("赣AM9xx2"))
# database.pay_already("赣AM9xx2")