0% found this document useful (0 votes)
6 views28 pages

Python Vehicle Parking System Project

The document describes a Python-based vehicle parking management system project developed by N. Rajkumar under the mentorship of Jenita. It includes features for managing parking slots, vehicle details, and a user-friendly GUI built with PyQt. The system allows for the reservation of parking slots, displays parking history, and provides an admin login interface for managing the application.
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
6 views28 pages

Python Vehicle Parking System Project

The document describes a Python-based vehicle parking management system project developed by N. Rajkumar under the mentorship of Jenita. It includes features for managing parking slots, vehicle details, and a user-friendly GUI built with PyQt. The system allows for the reservation of parking slots, displays parking history, and provides an admin login interface for managing the application.
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

‭Besant Technologies‬

‭Python‬‭Programming‬
‭Project‬
‭Mentor‬‭: Jenita‬

‭Delivered By‬
‭[Link]‬
‭ABSTRACT‬
‭ his‬‭vehicle‬‭parking‬‭system‬‭project‬‭in‬‭Python‬‭focuses‬‭mainly‬‭on‬‭dealing‬
T
‭with‬ ‭customer’s‬ ‭parking‬ ‭details‬ ‭with‬ ‭their‬ ‭number,‬ ‭and‬ ‭slot.‬ ‭Also,‬ ‭the‬
‭system‬ ‭allows‬ ‭inserting‬ ‭details‬ ‭of‬ ‭vehicle‬ ‭owners‬‭including‬‭their‬‭contact‬
‭number,‬ ‭vehicle‬ ‭number,‬ ‭and‬ ‭vehicle‬ ‭category.‬ ‭But‬ ‭here,‬ ‭the‬ ‭system‬
‭automatically‬ ‭sets‬ ‭a‬ ‭slot‬ ‭for‬ ‭reservation‬ ‭after‬ ‭inserting‬ ‭vehicle‬ ‭details‬
‭until‬ ‭the‬ ‭vehicle‬ ‭gets‬ ‭out.‬ ‭Talking‬ ‭about‬ ‭parking‬ ‭slots,‬ ‭the‬ ‭system‬
‭indicates‬ ‭empty‬ ‭and‬ ‭occupied‬ ‭slots‬ ‭with‬ ‭green‬ ‭and‬ ‭red‬ ‭color‬
‭respectively.‬ ‭In‬ ‭an‬ ‭overview‬ ‭of‬ ‭this‬ ‭app,‬ ‭the‬ ‭system‬ ‭displays‬ ‭all‬ ‭the‬
‭parked‬ ‭vehicles‬ ‭under‬ ‭the‬ ‭manage‬‭vehicles‬‭section‬‭where‬‭the‬‭user‬‭can‬
‭cancel‬‭the‬‭parking‬‭once‬‭it’s‬‭[Link]‬‭addition,‬‭the‬‭system‬‭displays‬‭all‬‭the‬
‭parking‬ ‭history‬ ‭to‬ ‭date‬ ‭for‬ ‭both‬ ‭two‬ ‭and‬ ‭four-wheelers.‬ ‭Besides,‬ ‭the‬
‭admin‬ ‭must‬ ‭set‬ ‭the‬ ‭total‬ ‭number‬ ‭of‬ ‭parking‬ ‭slots‬ ‭for‬ ‭both‬ ‭two‬ ‭and‬
‭four-wheelers‬ ‭during‬ ‭the‬ ‭installation.‬ ‭On‬ ‭the‬ ‭other‬ ‭hand,‬ ‭the‬ ‭system‬
‭captures‬ ‭the‬ ‭current‬ ‭time‬ ‭while‬ ‭inserting‬ ‭the‬ ‭vehicle‬ ‭record‬ ‭for‬ ‭parking,‬
‭and‬ ‭then‬ ‭calculates‬ ‭the‬ ‭total‬ ‭time‬ ‭after‬ ‭cancelling‬ ‭the‬ ‭parking‬ ‭records.‬
‭With‬ ‭all‬ ‭these‬ ‭time‬ ‭stamps,‬ ‭the‬ ‭system‬ ‭displays‬ ‭it‬ ‭under‬ ‭the‬ ‭history‬
‭section‬ ‭with‬ ‭information‬ ‭such‬ ‭as‬ ‭customer’s‬ ‭name,‬‭contact‬‭info,‬‭vehicle‬
‭number,‬‭and‬‭parking‬‭[Link]‬‭but‬‭not‬‭least,‬‭a‬‭clean‬‭and‬‭simple‬‭GUI‬‭is‬
‭presented‬ ‭with‬ ‭simple‬ ‭color‬ ‭combinations‬ ‭for‬ ‭greater‬ ‭user‬ ‭experience‬
‭while‬ ‭using‬ ‭this‬ ‭vehicle‬ ‭parking‬ ‭management‬ ‭system‬ ‭in‬ ‭Python.‬ ‭For‬ ‭its‬
‭UI‬ ‭elements,‬ ‭a‬ ‭cross-platform‬ ‭GUI‬ ‭toolkit‬ ‭Qt;‬ ‭PyQT‬ ‭is‬ ‭on‬ ‭board.‬
‭Presenting‬ ‭a‬ ‭new‬ ‭vehicle‬ ‭parking‬ ‭system‬ ‭in‬ ‭Python‬ ‭project‬ ‭which‬
‭includes‬‭a‬‭user‬‭panel‬‭that‬‭contains‬‭all‬‭the‬‭essential‬‭features‬‭to‬‭follow‬‭up,‬
‭and a knowledgeable resource for learning purposes.‬
‭PROGRAM : -‬
‭[Link]‬

import‬‭
‭ sys‬
import‬‭
‭ os‬
from‬‭
‭ InstallWindow‬‭
import‬‭
InstallWindow‬
from‬‭
‭ LoginWindow‬‭
import‬‭
LoginScreen‬
from‬‭
‭ PyQt5‬
.‬
‭ QtWidgets‬‭
‭ import‬‭
QApplication‬
,‭
‭Q‬SplashScreen‬
,‬
‭ QLabel‬

from‬‭
‭ PyQt5‬
.‬
‭ QtGui‬‭
‭ import‬‭
QPixmap‬
from‬‭
‭ PyQt5‬
.‬
‭ QtCore‬‭
‭ import‬‭
Qt‬
,‬
‭ QTimer‬

class‬‭
‭ MainScreen‬
():‬

def‬‭
‭ showSplashScreen‬
(‬
‭ self‬
‭ ):‬

self‬
‭ .‭
‭p‬ix‬
=‭
‭ Q
‬Pixmap‬
(‬
‭ "slash_img.jpg"‬
‭ )‬

self‬
‭ .‭
‭s‬plassh‬
=‬
‭ QSplashScreen‬
‭ (‬
‭ self‬
‭ .‬
‭ pix‬
‭ ,‬
‭ Qt‬
‭ .WindowStaysOnTopHint)‬

self‬
‭ .‭
‭s‬plassh‬
.‬
‭ show‬
‭ ()‬

def‬‭
‭ showSetupWindow‬
():‬

mainScreen‬
‭ .‬
‭ splassh‬
‭ .‬
‭ close‬
‭ ()‬

installWindow‬
‭ .‬
‭ show‬
‭ ()‬

def‬‭
‭ showLoginWindow‬
():‬

mainScreen‬
‭ .‬
‭ splassh‬
‭ .‬
‭ close‬
‭ ()‬

login‬
‭ .‬
‭ showLoginScreen‬
‭ ()‬

app‬
‭ =‭
‭ Q
‬Application‬
(‭
‭s‬ys‬
.‬
‭ argv‬
‭ )‬

login‬
‭ =‭
‭L‬oginScreen‬
()‬

mainScreen‬
‭ =‬
‭ MainScreen‬
‭ ()‬

mainScreen‬
‭ .‬
‭ showSplashScreen‬
‭ ()‬

installWindow‬
‭ =‬
‭ InstallWindow‬
‭ ()‬

if‬‭
‭ os‬
.‭
‭p‬ath‬
.‬
‭ exists‬
‭ (‬
‭ "./[Link]"‬
‭ ):‬

QTimer‬
‭ .‬
‭ singleShot‬
‭ (‬
‭ 3000‬
‭ ,‭
‭s‬howLoginWindow‬
)‬

else‬
‭ :‬

QTimer‬
‭ .‬
‭ singleShot‬
‭ (‬
‭ 3000‬
‭ ,‭
‭s‬howSetupWindow‬
)‬

sys‬
‭ .‭
‭ e
‬xit‬
(‭
‭a‬pp‬
.‭
‭ e
‬xec_‬
())‬

‭[Link]‬

from‬‭
‭ PyQt5‬
.‬
‭ QtWidgets‬‭
‭ import‬
QWidget‬
‭ ,‬
‭ QVBoxLayout‬
‭ ,‭
‭Q‬PushButton‬
,‬
‭ QLabel‬
‭ ,‬
‭ QLineEdit‬
‭ ,‭
‭Q‬Application‬
import‬‭
‭ sys‬
from‬‭
‭ DataBaseOperation‬‭
import‬‭
DBOperation‬
from‬‭
‭ HomeWindow‬‭
import‬‭
HomeScreen‬

class‬‭
‭ LoginScreen‬
(‬
‭ QWidget‬
‭ ):‬

def‬‭
‭ __init__‬
(‭
‭s‬elf‬
):‬

super‬
‭ ().‬
‭ __init__‬
‭ ()‬

self‬
‭ .‭
‭s‬etWindowTitle‬
(‬
‭ "Admin Login"‬
‭ )‬

self‬
‭ .‭
‭r‬esize‬
(‭
‭3‬00‬
,‭
‭ 1
‬00‬
)‬

layout‬
‭ =‬
‭ QVBoxLayout‬
‭ ()‬

label_username‬
‭ =‬
‭ QLabel‬
‭ (‬
‭ "Username : "‬
‭ )‬

label_username‬
‭ .‬
‭ setStyleSheet‬
‭ (‬
‭ "color:#000;padding:8px‬

0px;font-size:18px;"‬
‭ )‬

self‬
‭ .‭
‭i‬nput_username‬
=‬
‭ QLineEdit‬
‭ ()‬

self‬
‭ .‭
‭i‬nput_username‬
.‬
‭ setStyleSheet‬
‭ (‬
‭ "padding:5px;font-size:17px"‬
‭ )‬

label_password‬
‭ =‬
‭ QLabel‬
‭ (‬
‭ "Password : "‬
‭ )‬

label_password‬
‭ .‬
‭ setStyleSheet‬
‭ (‬
‭ "color:#000;padding:8px‬

0px;font-size:18px;"‬
‭ )‬

self‬
‭ .‭
‭e‬rror_msg‬
=‬
‭ QLabel‬
‭ ()‬

self‬
‭ .‭
‭e‬rror_msg‬
.‬
‭ setStyleSheet‬
‭ (‬
‭ "color:red;padding:8px‬

0px;font-size:18px;text-align:center"‬
‭ )‬

self‬
‭ .‭
‭i‬nput_password‬
=‬
‭ QLineEdit‬
‭ ()‬

self‬
‭ .‭
‭i‬nput_password‬
.‬
‭ setStyleSheet‬
‭ (‬
‭ "padding:5px;font-size:17px"‬
‭ )‬

btn_login‬
‭ =‬
‭ QPushButton‬
‭ (‬
‭ "Login"‬
‭ )‬

btn_login‬
‭ .‬
‭ setStyleSheet‬
‭ (‭
‭"‬padding:5px;font-size:20px;background:green;co‬
lor:#fff"‬
‭ )‬

layout‬
‭ .‬
‭ addWidget‬
‭ (‬
‭ label_username‬
‭ )‬

layout‬
‭ .‬
‭ addWidget‬
‭ (‬
‭ self‬
‭ .‬
‭ input_username‬
‭ )‬

layout‬
‭ .‬
‭ addWidget‬
‭ (‬
‭ label_password‬
‭ )‬

layout‬
‭ .‬
‭ addWidget‬
‭ (‬
‭ self‬
‭ .‬
‭ input_password‬
‭ )‬

layout‬
‭ .‬
‭ addWidget‬
‭ (‬
‭ btn_login‬
‭ )‬

layout‬
‭ .‬
‭ addWidget‬
‭ (‬
‭ self‬
‭ .‬
‭ error_msg‬
‭ )‬

layout‬
‭ .‬
‭ addStretch‬
‭ ()‬

btn_login‬
‭ .‬
‭ clicked‬
‭ .‬
‭ connect‬
‭ (‭
‭s‬elf‬
.‬
‭ showHome‬
‭ )‬

self‬
‭ .‭
‭s‬etLayout‬
(‬
‭ layout‬
‭ )‬

def‬‭
‭ showLoginScreen‬
(‭
‭s‬elf‬
):‬

self‬
‭ .‭
‭s‬how‬
()‬

def‬‭
‭ showHome‬
(‭
‭s‬elf‬
):‬

if‬‭
‭ self‬
.‬
‭ input_username‬
‭ .‭
‭t‬ext‬
()‬
‭ ==‬
‭ ""‬
‭ :‬

self‬
‭ .‭
‭e‬rror_msg‬
.‭
‭s‬etText‬
(‬
‭ "Please Enter Username"‬
‭ )‬

return‬

if‬‭
‭ self‬
.‬
‭ input_password‬
‭ .‭
‭t‬ext‬
()‬
‭ ==‬
‭ ""‬
‭ :‬

self‬
‭ .‭
‭e‬rror_msg‬
.‭
‭s‬etText‬
(‬
‭ "Please Enter Password"‬
‭ )‬

return‬

dboperation‬
‭ =‭
‭D‬BOperation‬
()‬

result‬
‭ =‭
‭d‬boperation‬
.‬
‭ doAdminLogin‬
‭ (‬
‭ self‬
‭ .‬
‭ input_username‬
‭ .‭
‭t‬ext‬
(),‬
‭ self‬
‭ .‬
‭ input_p‬

assword‬
‭ .‬
‭ text‬
‭ ())‬

if‬‭
‭ result‬
:‬

self‬
‭ .‭
‭e‬rror_msg‬
.‭
‭s‬etText‬
(‬
‭ "Login Successful"‬
‭ )‬

self‬
‭ .‭
‭c‬lose‬
()‬

self‬
‭ .‭
‭h‬ome‬‭
=‬‭
HomeScreen‬
()‬

self‬
‭ .‭
‭h‬ome‬
.‬
‭ show‬
‭ ()‬

else‬
‭ :‬

self‬
‭ .‭
‭e‬rror_msg‬
.‭
‭s‬etText‬
(‬
‭ "Invalid Login Details"‬
‭ )‬

‭[Link]‬

from‬‭
‭ PyQt5‬
.‬
‭ QtWidgets‬‭
‭ import‬
QWidget‬
‭ ,‬
‭ QPushButton‬
‭ ,‭
‭Q‬VBoxLayout‬
,‬
‭ QLabel‬
‭ ,‬
‭ QLineEdit‬

from‬‭
‭ LoginWindow‬‭
import‬‭
LoginScreen‬
import‬‭
‭ json‬
from‬‭
‭ DataBaseOperation‬‭
import‬‭
DBOperation‬

class‬‭
‭ InstallWindow‬
(‭
‭Q‬Widget‬
):‬

def‬‭
‭ __init__‬
(‭
‭s‬elf‬
):‬

super‬
‭ ().‬
‭ __init__‬
‭ ()‬

self‬
‭ .‭
‭s‬etWindowTitle‬
(‬
‭ "Install Vehical Parking System"‬
‭ )‬

self‬
‭ .‭
‭r‬esize‬
(‭
‭4‬00‬
,‭
‭ 2
‬00‬
)‬

layout‬
‭ =‬
‭ QVBoxLayout‬
‭ ()‬

label_db_name‬
‭ =‬
‭ QLabel‬
‭ (‬
‭ "Database Name : "‬
‭ )‬

label_db_name‬
‭ .‬
‭ setStyleSheet‬
‭ (‬
‭ "color:#000;padding:8px‬

0px;font-size:18px;"‬
‭ )‬

label_db_username‬
‭ =‬
‭ QLabel‬
‭ (‬
‭ "Database Username‬‭
‭ : "‬
)‬

label_db_username‬
‭ .‬
‭ setStyleSheet‬
‭ (‬
‭ "color:#000;padding:8px‬

0px;font-size:18px;"‬
‭ )‬

label_db_password‬
‭ =‬
‭ QLabel‬
‭ (‬
‭ "Database Password‬‭
‭ : "‬
)‬

label_db_password‬
‭ .‬
‭ setStyleSheet‬
‭ (‬
‭ "color:#000;padding:8px‬

0px;font-size:18px;"‬
‭ )‬

label_admin_username‬
‭ =‬
‭ QLabel‬
‭ (‬
‭ "Admin Username‬‭
‭ : "‬
)‬

label_admin_username‬
‭ .‬
‭ setStyleSheet‬
‭ (‬
‭ "color:#000;padding:8px‬

0px;font-size:18px;"‬
‭ )‬

label_admin_password‬
‭ =‬
‭ QLabel‬
‭ (‬
‭ "Admin Password‬‭
‭ : "‬
)‬

label_admin_password‬
‭ .‬
‭ setStyleSheet‬
‭ (‬
‭ "color:#000;padding:8px‬

0px;font-size:18px;"‬
‭ )‬

label_no_of_two_seater‬
‭ =‭
‭Q‬Label‬
(‭
‭"‬No of Two Wheeler‬‭
Space : "‬
)‬

label_no_of_two_seater‬
‭ .‭
‭s‬etStyleSheet‬
(‭
‭"‬color:#000;padding:8px‬
0px;font-size:18px;"‬
‭ )‬

label_no_of_four_seater‬
‭ =‬
‭ QLabel‬
‭ (‬
‭ "No. of Four‬‭
‭ Wheeler Space : "‬
)‬

label_no_of_four_seater‬
‭ .‬
‭ setStyleSheet‬
‭ (‬
‭ "color:#000;padding:8px‬

0px;font-size:18px;"‬
‭ )‬

self‬
‭ .‭
‭i‬nput_db_name‬
=‭
‭Q‬LineEdit‬
()‬

self‬
‭ .‭
‭i‬nput_db_name‬
.‭
‭s‬etText‬
(‬
‭ "vehicle_parking"‬
‭ )‬

self‬
‭ .‭
‭i‬nput_db_name‬
.‭
‭s‬etStyleSheet‬
(‭
‭"‬padding:5px;font-size:17px"‬
)‬

self‬
‭ .‭
‭i‬nput_db_username‬
=‭
‭Q‬LineEdit‬
()‬

self‬
‭ .‭
‭i‬nput_db_username‬
.‭
‭s‬etText‬
(‬
‭ "vehicle"‬
‭ )‬

self‬
‭ .‭
‭i‬nput_db_username‬
.‬
‭ setStyleSheet‬
‭ (‬
‭ "padding:5px;font-size:17px"‬
‭ )‬

self‬
‭ .‭
‭i‬nput_db_password‬
=‭
‭Q‬LineEdit‬
()‬

self‬
‭ .‭
‭i‬nput_db_password‬
.‭
‭s‬etText‬
(‬
‭ "vehicle_password"‬
‭ )‬

self‬
‭ .‭
‭i‬nput_db_password‬
.‬
‭ setStyleSheet‬
‭ (‬
‭ "padding:5px;font-size:17px"‬
‭ )‬

self‬
‭ .‭
‭i‬nput_admin_username‬
=‭
‭Q‬LineEdit‬
()‬

self‬
‭ .‭
‭i‬nput_admin_username‬
.‬
‭ setStyleSheet‬
‭ (‬
‭ "padding:5px;font-size:17px"‬
‭ )‬

self‬
‭ .‭
‭i‬nput_admin_password‬
=‭
‭Q‬LineEdit‬
()‬

self‬
‭ .‭
‭i‬nput_admin_password‬
.‬
‭ setStyleSheet‬
‭ (‬
‭ "padding:5px;font-size:17px"‬
‭ )‬

self‬
‭ .‭
‭i‬nput_two_wheeler‬
=‭
‭Q‬LineEdit‬
()‬

self‬
‭ .‭
‭i‬nput_two_wheeler‬
.‬
‭ setStyleSheet‬
‭ (‬
‭ "padding:5px;font-size:17px"‬
‭ )‬

self‬
‭ .‭
‭i‬nput_four_wheeler‬
=‬
‭ QLineEdit‬
‭ ()‬

self‬
‭ .‭
‭i‬nput_four_wheeler‬
.‭
‭s‬etStyleSheet‬
(‭
‭"‬padding:5px;font-size:17px"‬
)‬

buttonsave‬
‭ =‬
‭ QPushButton‬
‭ (‭
‭"‬save config"‬
)‬

buttonsave‬
‭ .‬
‭ setStyleSheet‬
‭ (‬
‭ "padding:5px;font-size:17px;background:green;c‬

olor:#fff"‬
‭ )‬

self‬
‭ .‭
‭e‬rror_label‬
=‬
‭ QLabel‬
‭ ()‬

self‬
‭ .‭
‭e‬rror_label‬
.‬
‭ setStyleSheet‬
‭ (‬
‭ "color:red"‬
‭ )‬

layout‬
‭ .‬
‭ addWidget‬
‭ (‬
‭ label_db_name‬
‭ )‬

layout‬
‭ .‬
‭ addWidget‬
‭ (‬
‭ self‬
‭ .‬
‭ input_db_name‬
‭ )‬

layout‬
‭ .‬
‭ addWidget‬
‭ (‬
‭ label_db_username‬
‭ )‬

layout‬
‭ .‬
‭ addWidget‬
‭ (‬
‭ self‬
‭ .‬
‭ input_db_username‬
‭ )‬

layout‬
‭ .‬
‭ addWidget‬
‭ (‬
‭ label_db_password‬
‭ )‬

layout‬
‭ .‬
‭ addWidget‬
‭ (‬
‭ self‬
‭ .‬
‭ input_db_password‬
‭ )‬

layout‬
‭ .‬
‭ addWidget‬
‭ (‬
‭ label_admin_username‬
‭ )‬

layout‬
‭ .‬
‭ addWidget‬
‭ (‬
‭ self‬
‭ .‬
‭ input_admin_username‬
‭ )‬

layout‬
‭ .‬
‭ addWidget‬
‭ (‬
‭ label_admin_password‬
‭ )‬

layout‬
‭ .‬
‭ addWidget‬
‭ (‬
‭ self‬
‭ .‬
‭ input_admin_password‬
‭ )‬

layout‬
‭ .‬
‭ addWidget‬
‭ (‬
‭ label_no_of_two_seater‬
‭ )‬

layout‬
‭ .‬
‭ addWidget‬
‭ (‬
‭ self‬
‭ .‬
‭ input_two_wheeler‬
‭ )‬

layout‬
‭ .‬
‭ addWidget‬
‭ (‬
‭ label_no_of_four_seater‬
‭ )‬

layout‬
‭ .‬
‭ addWidget‬
‭ (‬
‭ self‬
‭ .‬
‭ input_four_wheeler‬
‭ )‬

layout‬
‭ .‬
‭ addWidget‬
‭ (‬
‭ buttonsave‬
‭ )‬

layout‬
‭ .‬
‭ addWidget‬
‭ (‬
‭ self‬
‭ .‬
‭ error_label‬
‭ )‬

buttonsave‬
‭ .‬
‭ clicked‬
‭ .‭
‭c‬onnect‬
(‬
‭ self‬
‭ .‬
‭ showStepInfo‬
‭ )‬

self‬
‭ .‭
‭s‬etLayout‬
(‬
‭ layout‬
‭ )‬

def‬‭
‭ showStepInfo‬
(‬
‭ self‬
‭ ):‬

if‬‭
‭ self‬
.‬
‭ input_db_name‬
‭ .‬
‭ text‬
‭ ()‬
‭ ==‬
‭ ""‬
‭ :‬

self‬
‭ .‭
‭e‬rror_label‬
.‬
‭ setText‬
‭ (‬
‭ "Please Enter DB Name"‬
‭ )‬

return‬

if‬‭
‭ self‬
.‬
‭ input_db_username‬
‭ .‭
‭t‬ext‬
()‬
‭ ==‬
‭ ""‬
‭ :‬

self‬
‭ .‭
‭e‬rror_label‬
.‬
‭ setText‬
‭ (‬
‭ "Please Enter‬‭
‭ DB Username"‬
)‬

return‬

if‬‭
‭ self‬
.‬
‭ input_db_password‬
‭ .‭
‭t‬ext‬
()‬
‭ ==‬
‭ ""‬
‭ :‬

self‬
‭ .‭
‭e‬rror_label‬
.‬
‭ setText‬
‭ (‬
‭ "Please Enter‬‭
‭ DB Password"‬
)‬

return‬

if‬‭
‭ self‬
.‬
‭ input_admin_username‬
‭ .‬
‭ text‬
‭ ()‬
‭ ==‬
‭ ""‬
‭ :‬

self‬
‭ .‭
‭e‬rror_label‬
.‬
‭ setText‬
‭ (‬
‭ "Please Enter‬‭
‭ Admin Username"‬
)‬

return‬

if‬‭
‭ self‬
.‬
‭ input_admin_password‬
‭ .‬
‭ text‬
‭ ()‬
‭ ==‬
‭ ""‬
‭ :‬

self‬
‭ .‭
‭e‬rror_label‬
.‬
‭ setText‬
‭ (‬
‭ "Please Enter‬‭
‭ Admin Password"‬
)‬

return‬

if‬‭
‭ self‬
.‬
‭ input_two_wheeler‬
‭ .‭
‭t‬ext‬
()‬
‭ ==‬
‭ ""‬
‭ :‬

self‬
‭ .‭
‭e‬rror_label‬
.‬
‭ setText‬
‭ (‬
‭ "Please Enter‬‭
‭ Two Wheeler Space"‬
)‬

return‬

if‬‭
‭ self‬
.‬
‭ input_four_wheeler‬
‭ .‬
‭ text‬
‭ ()‬
‭ ==‬
‭ ""‬
‭ :‬

self‬
‭ .‭
‭e‬rror_label‬
.‬
‭ setText‬
‭ (‬
‭ "Please Enter‬‭
‭ Four Wheeler Space"‬
)‬

return‬

data‬
‭ =‭
‭{‬‭
"
‬username"‬
:‭
‭s‬elf‬
.‬
‭ input_db_username‬
‭ .‬
‭ text‬
‭ (),‬
‭ "database"‬
‭ :‬
‭ self‬
‭ .‭
‭i‬nput_db‬
_name‬
‭ .‭
‭t‬ext‬
(),‬
‭ "password"‬
‭ :‭
‭ s
‬elf‬
.‬
‭ input_db_password‬
‭ .‬
‭ text‬
‭ ()}‬

file‬
‭ =‭
‭o‬pen‬
(‬
‭ "./[Link]"‬
‭ ,‭
‭"‬w"‬
)‬

file‬
‭ .‭
‭w‬rite‬
(‬
‭ json‬
‭ .‭
‭d‬umps‬
(‬
‭ data‬
‭ ))‬

file‬
‭ .‭
‭c‬lose‬
()‬

dbOperation‬
‭ =‭
‭D‬BOperation‬
()‬

dbOperation‬
‭ .‭
‭C‬reateTables‬
()‬

dbOperation‬
‭ .‬
‭ InsertAdmin‬
‭ (‭
‭s‬elf‬
.‬
‭ input_admin_username‬
‭ .‬
‭ text‬
‭ (),‬
‭ self‬
‭ .‬
‭ input_adm‬

in_password‬
‭ .‬
‭ text‬
‭ ())‬

dbOperation‬
‭ .‬
‭ InsertOneTimeData‬
‭ (‬
‭ int‬
‭ (‭
‭s‬elf‬
.‬
‭ input_two_wheeler‬
‭ .‬
‭ text‬
‭ ()),‬
‭ int‬
‭ (‬
‭ se‬

lf‬
‭ .‬
‭ input_four_wheeler‬
‭ .‬
‭ text‬
‭ ()))‬

self‬
‭ .‭
‭c‬lose‬
()‬

self‬
‭ .‭
‭l‬ogin‬
=‬
‭ LoginScreen‬
‭ ()‬

self‬
‭ .‭
‭l‬ogin‬
.‬
‭ showLoginScreen‬
‭ ()‬

print‬
‭ (‬
‭ "Save"‬
‭ )‬

‭[Link]‬

from‬‭
‭ PyQt5‬
.‬
‭ QtWidgets‬‭
‭ import‬
QWidget‬
‭ ,‬
‭ QMainWindow‬
‭ ,‭
‭Q‬PushButton‬
,‬
‭ QLineEdit‬
‭ ,‬
‭ QLabel‬
‭ ,‭
‭Q‬VBoxLayout‬
,‬
‭ QHBoxLayou‬

t‭
‭,‬‭
Q
‬Frame‬
,‭
‭Q‬GridLayout‬
,‬
‭ QComboBox‬
‭ ,‭
‭Q‬TableWidget‬
,‬
‭ QTableWidgetItem‬

from‬‭
‭ DataBaseOperation‬‭
import‬‭
DBOperation‬
from‬‭
‭ PyQt5‬
.‬
‭ QtWidgets‬‭
‭ import‬‭
QHeaderView‬
,‬
‭ qApp‬

import‬‭
‭ PyQt5‬
.‭
‭Q‬tGui‬

class‬‭
‭ HomeScreen‬
(‭
‭Q‬MainWindow‬
):‬

def‬‭
‭ __init__‬
(‭
‭s‬elf‬
):‬

super‬
‭ ().‬
‭ __init__‬
‭ ()‬

self‬
‭ .‭
‭s‬etWindowTitle‬
(‬
‭ "Home"‬
‭ )‬

self‬
‭ .‭
‭d‬bOperation‬
=‬
‭ DBOperation‬
‭ ()‬

widget‬
‭ =‬
‭ QWidget‬
‭ ()‬

widget‬
‭ .‬
‭ setStyleSheet‬
‭ (‬
‭ "background:#000"‬
‭ )‬

layout_horizontal‬
‭ =‬
‭ QHBoxLayout‬
‭ ()‬

menu_vertical_layout‬
‭ =‬
‭ QVBoxLayout‬
‭ ()‬

self‬
‭ .‭
‭b‬tn_home‬
=‬
‭ QPushButton‬
‭ (‭
‭"‬Home"‬
)‬

self‬
‭ .‭
‭b‬tn_add‬‭
=‬‭
QPushButton‬
(‬
‭ "Add Vehicle"‬
‭ )‬

self‬
‭ .‭
‭b‬tn_manage‬‭
=‬‭
QPushButton‬
(‭
‭"‬Manage Vehicle"‬
)‬

self‬
‭ .‭
‭b‬tn_history‬‭
=‬‭
QPushButton‬
(‬
‭ "History"‬
‭ )‬

menu_vertical_layout‬
‭ .‬
‭ setContentsMargins‬
‭ (‬
‭ 0‭
‭,‬‬
0‬
‭ ,‭
‭0‬‬
,‬
‭ 0‬
‭ )‬

menu_vertical_layout‬
‭ .‬
‭ setSpacing‬
‭ (‬
‭ 0‭
‭)‬‬

self‬
‭ .‭
‭b‬tn_home‬
.‬
‭ setStyleSheet‬
‭ (‬
‭ "width:200px;height:160px;font-size:20px;ba‬

ckground:#1A3668;color:#fff;font-weight:bold;border:1px solid white"‬
‭ )‬

self‬
‭ .‭
‭b‬tn_add‬
.‭
‭s‬etStyleSheet‬
(‭
‭"‬width:200px;height:160px;font-size:20px;bac‬
kground:#A4866F;color:#fff;font-weight:bold;border:1px solid white"‬
‭ )‬

self‬
‭ .‭
‭b‬tn_manage‬
.‬
‭ setStyleSheet‬
‭ (‬
‭ "width:200px;height:160px;font-size:20px;‬

background:#A4866F;color:#fff;font-weight:bold;border:1px solid white"‬
‭ )‬

self‬
‭ .‭
‭b‬tn_history‬
.‭
‭s‬etStyleSheet‬
(‭
‭"‬width:200px;height:160px;font-size:20px‬
;background:#A4866F;color:#fff;font-weight:bold;border:1px solid‬

white"‬
‭ )‬

self‬
‭ .‭
‭b‬tn_home‬
.‬
‭ clicked‬
‭ .‬
‭ connect‬
‭ (‭
‭s‬elf‬
.‬
‭ showHome‬
‭ )‬

self‬
‭ .‭
‭b‬tn_add‬
.‬
‭ clicked‬
‭ .‬
‭ connect‬
‭ (‬
‭ self‬
‭ .‬
‭ showAdd‬
‭ )‬

self‬
‭ .‭
‭b‬tn_manage‬
.‭
‭ c
‬licked‬
.‬
‭ connect‬
‭ (‬
‭ self‬
‭ .‭
‭s‬howManage‬
)‬

self‬
‭ .‭
‭b‬tn_history‬
.‬
‭ clicked‬
‭ .‬
‭ connect‬
‭ (‭
‭s‬elf‬
.‬
‭ showHistory‬
‭ )‬

menu_frame‬
‭ =‬
‭ QFrame‬
‭ ()‬

menu_vertical_layout‬
‭ .‬
‭ addWidget‬
‭ (‬
‭ self‬
‭ .‬
‭ btn_home‬
‭ )‬

menu_vertical_layout‬
‭ .‬
‭ addWidget‬
‭ (‬
‭ self‬
‭ .‬
‭ btn_add‬
‭ )‬

menu_vertical_layout‬
‭ .‬
‭ addWidget‬
‭ (‬
‭ self‬
‭ .‬
‭ btn_manage‬
‭ )‬

menu_vertical_layout‬
‭ .‬
‭ addWidget‬
‭ (‬
‭ self‬
‭ .‬
‭ btn_history‬
‭ )‬

menu_vertical_layout‬
‭ .‬
‭ addStretch‬
‭ ()‬

menu_frame‬
‭ .‬
‭ setLayout‬
‭ (‬
‭ menu_vertical_layout‬
‭ )‬

#menu_frame.setMinimumWidth(200)‬

#menu_frame.setMaximumHeight(200)‬

parent_vertical‬
‭ =‭
‭Q‬VBoxLayout‬
()‬

parent_vertical‬
‭ .‭
‭s‬etContentsMargins‬
(‬
‭ 0‬
‭ ,‭
‭0‬‬
,‬
‭ 0‬
‭ ,‭
‭0‬‬
)‬

self‬
‭ .‭
‭v‬ertical_1‬
=‭
‭ Q
‬VBoxLayout‬
()‬

self‬
‭ .‭
‭a‬ddHomePageData‬
()‬

self‬
‭ .‭
‭v‬ertical_2‬
=‭
‭ Q
‬VBoxLayout‬
()‬

self‬
‭ .‭
‭v‬ertical_2‬
.‭
‭ s
‬etContentsMargins‬
(‬
‭ 0‬
‭ ,‭
‭0‬‬
,‬
‭ 0‬
‭ ,‭
‭0‬‬
)‬

self‬
‭ .‭
‭a‬ddAddStudentPage‬
()‬

self‬
‭ .‭
‭v‬ertical_3‬
=‭
‭ Q
‬VBoxLayout‬
()‬

self‬
‭ .‭
‭v‬ertical_3‬
.‭
‭ s
‬etContentsMargins‬
(‬
‭ 0‬
‭ ,‭
‭0‬‬
,‬
‭ 0‬
‭ ,‭
‭0‬‬
)‬

self‬
‭ .‭
‭a‬ddManagePage‬
()‬

self‬
‭ .‭
‭v‬ertical_4‬
=‭
‭ Q
‬VBoxLayout‬
()‬

self‬
‭ .‭
‭a‬ddHistoryPage‬
()‬

self‬
‭ .‭
‭f‬rame_1‬
=‬
‭ QFrame‬
‭ ()‬

self‬
‭ .‭
‭f‬rame_1‬
.‬
‭ setMinimumWidth‬
‭ (‬
‭ self‬
‭ .‬
‭ width‬
‭ ())‬

self‬
‭ .‭
‭f‬rame_1‬
.‬
‭ setMaximumWidth‬
‭ (‬
‭ self‬
‭ .‬
‭ width‬
‭ ())‬

self‬
‭ .‭
‭f‬rame_1‬
.‬
‭ setMaximumHeight‬
‭ (‭
‭s‬elf‬
.‬
‭ width‬
‭ ())‬

self‬
‭ .‭
‭f‬rame_1‬
.‬
‭ setMaximumHeight‬
‭ (‭
‭s‬elf‬
.‬
‭ width‬
‭ ())‬

self‬
‭ .‭
‭f‬rame_1‬
.‬
‭ setLayout‬
‭ (‭
‭s‬elf‬
.‬
‭ vertical_1‬
‭ )‬

self‬
‭ .‭
‭f‬rame_2‬
=‬
‭ QFrame‬
‭ ()‬

self‬
‭ .‭
‭f‬rame_2‬
.‬
‭ setLayout‬
‭ (‭
‭s‬elf‬
.‬
‭ vertical_2‬
‭ )‬

self‬
‭ .‭
‭f‬rame_3‬
=‬
‭ QFrame‬
‭ ()‬

self‬
‭ .‭
‭f‬rame_3‬
.‬
‭ setLayout‬
‭ (‭
‭s‬elf‬
.‬
‭ vertical_3‬
‭ )‬

self‬
‭ .‭
‭f‬rame_4‬
=‬
‭ QFrame‬
‭ ()‬

self‬
‭ .‭
‭f‬rame_4‬
.‬
‭ setLayout‬
‭ (‭
‭s‬elf‬
.‬
‭ vertical_4‬
‭ )‬

parent_vertical‬
‭ .‭
‭a‬ddWidget‬
(‭
‭s‬elf‬
.‬
‭ frame_1‬
‭ )‬

parent_vertical‬
‭ .‭
‭a‬ddWidget‬
(‭
‭s‬elf‬
.‬
‭ frame_2‬
‭ )‬

parent_vertical‬
‭ .‭
‭a‬ddWidget‬
(‭
‭s‬elf‬
.‬
‭ frame_3‬
‭ )‬

parent_vertical‬
‭ .‭
‭a‬ddWidget‬
(‭
‭s‬elf‬
.‬
‭ frame_4‬
‭ )‬

layout_horizontal‬
‭ .‬
‭ addWidget‬
‭ (‬
‭ menu_frame‬
‭ )‬

layout_horizontal‬
‭ .‬
‭ addLayout‬
‭ (‬
‭ parent_vertical‬
‭ )‬

layout_horizontal‬
‭ .‬
‭ setContentsMargins‬
‭ (‭
‭0‬‬
,‬
‭ 0‬
‭ ,‭
‭0‬‬
,‬
‭ 0‭
‭)‬‬
parent_vertical‬
‭ .‭
‭s‬etContentsMargins‬
(‬
‭ 0‬
‭ ,‭
‭0‬‬
,‬
‭ 0‬
‭ ,‭
‭0‬‬
)‬

parent_vertical‬
‭ .‭
‭a‬ddStretch‬
()‬

#menu_vertical_layout.addStretch()‬

layout_horizontal‬
‭ .‬
‭ addStretch‬
‭ ()‬

widget‬
‭ .‬
‭ setLayout‬
‭ (‬
‭ layout_horizontal‬
‭ )‬

self‬
‭ .‭
‭f‬rame_1‬
.‬
‭ show‬
‭ ()‬

self‬
‭ .‭
‭f‬rame_2‬
.‬
‭ hide‬
‭ ()‬

self‬
‭ .‭
‭f‬rame_3‬
.‬
‭ hide‬
‭ ()‬

self‬
‭ .‭
‭f‬rame_4‬
.‬
‭ hide‬
‭ ()‬

self‬
‭ .‭
‭s‬etCentralWidget‬
(‬
‭ widget‬
‭ )‬

def‬‭
‭ showHistory‬
(‭
‭s‬elf‬
):‬

self‬
‭ .‭
‭b‬tn_home‬
.‬
‭ setStyleSheet‬
‭ (‬
‭ "width:200px;height:160px;font-size:20px;ba‬

ckground:#A4866F;color:#fff;font-weight:bold;border:1px solid white"‬
‭ )‬

self‬
‭ .‭
‭b‬tn_add‬
.‭
‭s‬etStyleSheet‬
(‭
‭"‬width:200px;height:160px;font-size:20px;bac‬
kground:#A4866F;color:#fff;font-weight:bold;border:1px solid white"‬
‭ )‬

self‬
‭ .‭
‭b‬tn_manage‬
.‬
‭ setStyleSheet‬
‭ (‬
‭ "width:200px;height:160px;font-size:20px;‬

background:#A4866F;color:#fff;font-weight:bold;border:1px solid white"‬
‭ )‬

self‬
‭ .‭
‭b‬tn_history‬
.‭
‭s‬etStyleSheet‬
(‭
‭"‬width:200px;height:160px;font-size:20px‬
;background:#1A3668;color:#fff;font-weight:bold;border:1px solid‬

white"‬
‭ )‬

self‬
‭ .‭
‭f‬rame_1‬
.‬
‭ hide‬
‭ ()‬

self‬
‭ .‭
‭f‬rame_2‬
.‬
‭ hide‬
‭ ()‬

self‬
‭ .‭
‭f‬rame_3‬
.‬
‭ hide‬
‭ ()‬

self‬
‭ .‭
‭f‬rame_4‬
.‬
‭ show‬
‭ ()‬

def‬‭
‭ showManage‬
(‬
‭ self‬
‭ ):‬

self‬
‭ .‭
‭b‬tn_home‬
.‬
‭ setStyleSheet‬
‭ (‬
‭ "width:200px;height:160px;font-size:20px;ba‬

ckground:#A4866F;color:#fff;font-weight:bold;border:1px solid white"‬
‭ )‬

self‬
‭ .‭
‭b‬tn_add‬
.‭
‭s‬etStyleSheet‬
(‭
‭"‬width:200px;height:160px;font-size:20px;bac‬
kground:#A4866F;color:#fff;font-weight:bold;border:1px solid white"‬
‭ )‬

self‬
‭ .‭
‭b‬tn_manage‬
.‬
‭ setStyleSheet‬
‭ (‬
‭ "width:200px;height:160px;font-size:20px;‬

background:#1A3668;color:#fff;font-weight:bold;border:1px solid white"‬
‭ )‬

self‬
‭ .‭
‭b‬tn_history‬
.‭
‭s‬etStyleSheet‬
(‭
‭"‬width:200px;height:160px;font-size:20px‬
;background:#A4866F;color:#fff;font-weight:bold;border:1px solid‬

white"‬
‭ )‬

self‬
‭ .‭
‭f‬rame_1‬
.‬
‭ hide‬
‭ ()‬

self‬
‭ .‭
‭f‬rame_2‬
.‬
‭ hide‬
‭ ()‬

self‬
‭ .‭
‭f‬rame_4‬
.‬
‭ hide‬
‭ ()‬

self‬
‭ .‭
‭f‬rame_3‬
.‬
‭ show‬
‭ ()‬

def‬‭
‭ showAdd‬
(‬
‭ self‬
‭ ):‬

self‬
‭ .‭
‭b‬tn_home‬
.‬
‭ setStyleSheet‬
‭ (‬
‭ "width:200px;height:160px;font-size:20px;ba‬

ckground:#A4866F;color:#fff;font-weight:bold;border:1px solid white"‬
‭ )‬

self‬
‭ .‭
‭b‬tn_add‬
.‭
‭s‬etStyleSheet‬
(‭
‭"‬width:200px;height:160px;font-size:20px;bac‬
kground:#1A3668;color:#fff;font-weight:bold;border:1px solid white"‬
‭ )‬

self‬
‭ .‭
‭b‬tn_manage‬
.‬
‭ setStyleSheet‬
‭ (‬
‭ "width:200px;height:160px;font-size:20px;‬

background:#A4866F;color:#fff;font-weight:bold;border:1px solid white"‬
‭ )‬

self‬
‭ .‭
‭b‬tn_history‬
.‭
‭s‬etStyleSheet‬
(‭
‭"‬width:200px;height:160px;font-size:20px‬
;background:#A4866F;color:#fff;font-weight:bold;border:1px solid‬

white"‬
‭ )‬

self‬
‭ .‭
‭f‬rame_1‬
.‬
‭ hide‬
‭ ()‬

self‬
‭ .‭
‭f‬rame_3‬
.‬
‭ hide‬
‭ ()‬

self‬
‭ .‭
‭f‬rame_4‬
.‬
‭ hide‬
‭ ()‬

self‬
‭ .‭
‭f‬rame_2‬
.‬
‭ show‬
‭ ()‬

def‬‭
‭ showHome‬
(‭
‭s‬elf‬
):‬

self‬
‭ .‭
‭b‬tn_home‬
.‬
‭ setStyleSheet‬
‭ (‬
‭ "width:200px;height:160px;font-size:20px;ba‬

ckground:#1A3668;color:#fff;font-weight:bold;border:1px solid white"‬
‭ )‬

self‬
‭ .‭
‭b‬tn_add‬
.‭
‭s‬etStyleSheet‬
(‭
‭"‬width:200px;height:160px;font-size:20px;bac‬
kground:#A4866F;color:#fff;font-weight:bold;border:1px solid white"‬
‭ )‬

self‬
‭ .‭
‭b‬tn_manage‬
.‬
‭ setStyleSheet‬
‭ (‬
‭ "width:200px;height:160px;font-size:20px;‬

background:#A4866F;color:#fff;font-weight:bold;border:1px solid white"‬
‭ )‬

self‬
‭ .‭
‭b‬tn_history‬
.‭
‭s‬etStyleSheet‬
(‭
‭"‬width:200px;height:160px;font-size:20px‬
;background:#A4866F;color:#fff;font-weight:bold;border:1px solid‬

white"‬
‭ )‬

self‬
‭ .‭
‭f‬rame_2‬
.‬
‭ hide‬
‭ ()‬

self‬
‭ .‭
‭f‬rame_3‬
.‬
‭ hide‬
‭ ()‬

self‬
‭ .‭
‭f‬rame_4‬
.‬
‭ hide‬
‭ ()‬

self‬
‭ .‭
‭f‬rame_1‬
.‬
‭ show‬
‭ ()‬

def‬‭
‭ refreshHome‬
(‭
‭s‬elf‬
):‬

while‬‭
‭ self‬
.‬
‭ gridLayout‬
‭ .‬
‭ count‬
‭ ():‬

child‬
‭ =‬
‭ self‬
‭ .‬
‭ gridLayout‬
‭ .‭
‭t‬akeAt‬
(‭
‭0‬‬
)‬

if‬‭
‭ child‬
.‬
‭ widget‬
‭ ():‬

child‬
‭ .‬
‭ widget‬
‭ ().‬
‭ deleteLater‬
‭ ()‬

row‬
‭ =‬
‭ 0‬

i‭
‭=‬‬
0‬

alldata‬
‭ =‬
‭ self‬
‭ .‬
‭ dbOperation‬
‭ .‬
‭ getSlotSpace‬
‭ ()‬

for‬‭
‭ data‬‭
in‬‭
alldata‬
:‬

label‬
‭ =‬
‭ QPushButton‬
‭ (‬
‭ "Slot "‬
‭ +‭
‭s‬tr‬
(‬
‭ data‬
‭ [‬
‭ 0‬
‭ ])‬
‭ +‬
‭ "‬‭
‭ \n‬‭
"‬+‬
‭ str‬
‭ (‬
‭ data‬
‭ [‬
‭ 1‬
‭ ]))‬

if‬‭
‭ data‬
[‭
‭3‬‬
]‬
‭ ==‬
‭ 1‬
‭ :‬

label‬
‭ .‭
‭s‬etStyleSheet‬
(‭
‭"‬background-color:green;color:white;padding:5px;wid‬
th:100px;height:100px;border:1px solid‬

white;text-align:center;font-weight:bold"‬
‭ )‬

else‬
‭ :‬

label‬
‭ .‭
‭s‬etStyleSheet‬
(‭
‭"‬background-color:red;color:white;padding:5px;width‬
:100px;height:100px;border:1px solid‬

white;text-align:center;font-weight:bold"‬
‭ )‬

if‬‭
‭ i‬%‭
‭5‬‬
==‬
‭ 0‬
‭ :‬

i‭
‭=‬‬
0‬

row‬
‭ =‭
‭r‬ow‬
+‭
‭ 1
‬‬

self‬
‭ .‭
‭g‬ridLayout‬
.‬
‭ addWidget‬
‭ (‭
‭l‬abel‬
,‬
‭ row‬
‭ ,‬
‭ i‭
‭)‬‬
i‭
‭=‬‬
i‬
‭ +‬
‭ 1‬

def‬‭
‭ addHomePageData‬
(‭
‭s‬elf‬
):‬

self‬
‭ .‭
‭v‬ertical_1‬
.‭
‭ s
‬etContentsMargins‬
(‬
‭ 0‬
‭ ,‭
‭0‬‬
,‬
‭ 0‬
‭ ,‭
‭0‬‬
)‬

button‬
‭ =‬
‭ QPushButton‬
‭ (‭
‭"‬Refresh Slot"‬
)‬

button‬
‭ .‬
‭ setStyleSheet‬
‭ (‬
‭ "color:#fff;padding:8px‬

0px;font-size:20px;background:#696969;border:1px solid white"‬
‭ )‬

button‬
‭ .‬
‭ clicked‬
‭ .‬
‭ connect‬
‭ (‭
‭s‬elf‬
.‬
‭ refreshHome‬
‭ )‬

vertical_layout‬
‭ =‭
‭Q‬VBoxLayout‬
()‬

vertical_layout‬
‭ .‭
‭s‬etContentsMargins‬
(‬
‭ 0‬
‭ ,‭
‭0‬‬
,‬
‭ 0‬
‭ ,‭
‭0‬‬
)‬

frame‬
‭ =‬
‭ QFrame‬
‭ ()‬

horizontal‬
‭ =‬
‭ QHBoxLayout‬
‭ ()‬

horizontal‬
‭ .‬
‭ setContentsMargins‬
‭ (‭
‭0‬‬
,‬
‭ 0‭
‭,‬‬
0‬
‭ ,‬
‭ 0‭
‭)‬‬
vertical_layout‬
‭ .‭
‭a‬ddLayout‬
(‭
‭h‬orizontal‬
)‬

alldata‬
‭ =‬
‭ self‬
‭ .‬
‭ dbOperation‬
‭ .‬
‭ getSlotSpace‬
‭ ()‬

self‬
‭ .‭
‭g‬ridLayout‬
=‭
‭ Q
‬GridLayout‬
()‬

self‬
‭ .‭
‭g‬ridLayout‬
.‭
‭ s
‬etContentsMargins‬
(‬
‭ 0‬
‭ ,‭
‭0‬‬
,‬
‭ 0‬
‭ ,‭
‭0‬‬
)‬

self‬
‭ .‭
‭g‬ridLayout‬
.‭
‭ s
‬etHorizontalSpacing‬
(‭
‭0‬‬
)‬

self‬
‭ .‭
‭g‬ridLayout‬
.‭
‭ s
‬etVerticalSpacing‬
(‬
‭ 0‬
‭ )‬

vertical_layout‬
‭ .‭
‭a‬ddWidget‬
(‭
‭b‬utton‬
)‬

vertical_layout‬
‭ .‭
‭a‬ddLayout‬
(‭
‭s‬elf‬
.‬
‭ gridLayout‬
‭ )‬

row‬
‭ =‬
‭ 0‬

i‭
‭=‬‬
0‬

for‬‭
‭ data‬‭
in‬‭
alldata‬
:‬

label‬
‭ =‬
‭ QPushButton‬
‭ (‬
‭ "Slot "‬
‭ +‭
‭s‬tr‬
(‬
‭ data‬
‭ [‬
‭ 0‬
‭ ])‬
‭ +‬
‭ "‬‭
‭ \n‬‭
"‬+‬
‭ str‬
‭ (‬
‭ data‬
‭ [‬
‭ 1‬
‭ ]))‬

if‬‭
‭ data‬
[‭
‭3‬‬
]‬
‭ ==‬
‭ 1‬
‭ :‬

label‬
‭ .‭
‭s‬etStyleSheet‬
(‭
‭"‬background-color:green;color:white;padding:5px;wid‬
th:100px;height:100px;border:1px solid‬

white;text-align:center;font-weight:bold"‬
‭ )‬

else‬
‭ :‬

label‬
‭ .‭
‭s‬etStyleSheet‬
(‭
‭"‬background-color:red;color:white;padding:5px;width‬
:100px;height:100px;border:1px solid‬

white;text-align:center;font-weight:bold"‬
‭ )‬

if‬‭
‭ i‬%‭
‭5‬‬
==‬
‭ 0‬
‭ :‬

i‭
‭=‬‬
0‬

row‬
‭ =‭
‭r‬ow‬
+‭
‭ 1
‬‬

self‬
‭ .‭
‭g‬ridLayout‬
.‬
‭ addWidget‬
‭ (‭
‭l‬abel‬
,‬
‭ row‬
‭ ,‬
‭ i‭
‭)‬‬
i‭
‭=‬‬
i‬
‭ +‬
‭ 1‬

frame‬
‭ .‬
‭ setLayout‬
‭ (‭
‭v‬ertical_layout‬
)‬

self‬
‭ .‭
‭v‬ertical_1‬
.‭
‭ a
‬ddWidget‬
(‭
‭f‬rame‬
)‬

self‬
‭ .‭
‭v‬ertical_1‬
.‭
‭ a
‬ddStretch‬
()‬

def‬‭
‭ addAddStudentPage‬
(‬
‭ self‬
‭ ):‬

layout‬
‭ =‬
‭ QVBoxLayout‬
‭ ()‬

frame‬
‭ =‬
‭ QFrame‬
‭ ()‬

name_label‬
‭ =‬
‭ QLabel‬
‭ (‬
‭ "Name : "‬
‭ )‬

name_label‬
‭ .‬
‭ setStyleSheet‬
‭ (‬
‭ "color:#fff;padding:8px‬

0px;font-size:20px"‬
‭ )‬

mobile_label‬
‭ =‬
‭ QLabel‬
‭ (‬
‭ "Mobile : "‬
‭ )‬

mobile_label‬
‭ .‬
‭ setStyleSheet‬
‭ (‬
‭ "color:#fff;padding:8px‬

0px;font-size:20px"‬
‭ )‬

vechicle_label‬
‭ =‬
‭ QLabel‬
‭ (‬
‭ "Vehicle No : "‬
‭ )‬

vechicle_label‬
‭ .‬
‭ setStyleSheet‬
‭ (‬
‭ "color:#fff;padding:8px‬

0px;font-size:20px"‬
‭ )‬

vechicle_type‬
‭ =‬
‭ QLabel‬
‭ (‬
‭ "Vehicle Type : "‬
‭ )‬

vechicle_type‬
‭ .‬
‭ setStyleSheet‬
‭ (‬
‭ "color:#fff;padding:8px‬

0px;font-size:20px"‬
‭ )‬

error_label‬
‭ =‭
‭Q‬Label‬
(‭
‭"‬"‬
)‬

error_label‬
‭ .‭
‭s‬etStyleSheet‬
(‭
‭"‬color:red;padding:8px‬
0px;font-size:20px"‬
‭ )‬

name_input‬
‭ =‬
‭ QLineEdit‬
‭ ()‬

name_input‬
‭ .‬
‭ setStyleSheet‬
‭ (‬
‭ "color:#fff;padding:8px‬

0px;font-size:20px"‬
‭ )‬

mobile_input‬
‭ =‬
‭ QLineEdit‬
‭ ()‬

mobile_input‬
‭ .‬
‭ setStyleSheet‬
‭ (‬
‭ "color:#fff;padding:8px‬

0px;font-size:20px"‬
‭ )‬

vehicle_input‬
‭ =‬
‭ QLineEdit‬
‭ ()‬

vehicle_input‬
‭ .‬
‭ setStyleSheet‬
‭ (‬
‭ "color:#fff;padding:8px‬

0px;font-size:20px"‬
‭ )‬

vtype‬
‭ =‬
‭ QComboBox‬
‭ ()‬

vtype‬
‭ .‬
‭ setStyleSheet‬
‭ (‬
‭ "color:#fff;padding:8px‬

0px;font-size:20px;border:1px solid white"‬
‭ )‬

vtype‬
‭ .‬
‭ addItem‬
‭ (‬
‭ "2 Wheeler"‬
‭ )‬

vtype‬
‭ .‬
‭ addItem‬
‭ (‬
‭ "4 Wheeler"‬
‭ )‬

button‬
‭ =‬
‭ QPushButton‬
‭ (‭
‭"‬Add Vehicle"‬
)‬

button‬
‭ .‬
‭ setStyleSheet‬
‭ (‬
‭ "color:#fff;padding:8px‬

0px;font-size:20px;background:green;border:1px solid white"‬
‭ )‬

layout‬
‭ .‬
‭ addWidget‬
‭ (‬
‭ name_label‬
‭ )‬

layout‬
‭ .‬
‭ addWidget‬
‭ (‬
‭ name_input‬
‭ )‬

layout‬
‭ .‬
‭ addWidget‬
‭ (‬
‭ mobile_label‬
‭ )‬

layout‬
‭ .‬
‭ addWidget‬
‭ (‬
‭ mobile_input‬
‭ )‬

layout‬
‭ .‬
‭ addWidget‬
‭ (‬
‭ vechicle_label‬
‭ )‬

layout‬
‭ .‬
‭ addWidget‬
‭ (‬
‭ vehicle_input‬
‭ )‬

layout‬
‭ .‬
‭ addWidget‬
‭ (‬
‭ vechicle_type‬
‭ )‬

layout‬
‭ .‬
‭ addWidget‬
‭ (‬
‭ vtype‬
‭ )‬

layout‬
‭ .‬
‭ addWidget‬
‭ (‬
‭ button‬
‭ )‬

layout‬
‭ .‬
‭ addWidget‬
‭ (‬
‭ error_label‬
‭ )‬

layout‬
‭ .‬
‭ setContentsMargins‬
‭ (‭
‭0‬‬
,‬
‭ 0‬
‭ ,‭
‭0‬‬
,‬
‭ 0‭
‭)‬‬
frame‬
‭ .‬
‭ setMinimumHeight‬
‭ (‭
‭s‬elf‬
.‬
‭ height‬
‭ ())‬

frame‬
‭ .‬
‭ setMinimumWidth‬
‭ (‬
‭ self‬
‭ .‬
‭ width‬
‭ ())‬

frame‬
‭ .‬
‭ setMaximumHeight‬
‭ (‭
‭s‬elf‬
.‬
‭ width‬
‭ ())‬

frame‬
‭ .‬
‭ setMaximumWidth‬
‭ (‬
‭ self‬
‭ .‬
‭ width‬
‭ ())‬

layout‬
‭ .‬
‭ addStretch‬
‭ ()‬

frame‬
‭ .‬
‭ setLayout‬
‭ (‭
‭l‬ayout‬
)‬

button‬
‭ .‭
‭c‬licked‬
.‬
‭ connect‬
‭ (‬
‭ lambda‬
‭ :‬
‭ self‬
‭ .‬
‭ addVehicles‬
‭ (‬
‭ name_input‬
‭ .‬
‭ text‬
‭ (),‬
‭ vehicl‬

e_input‬
‭ .‬
‭ text‬
‭ (),‬
‭ mobile_input‬
‭ .‬
‭ text‬
‭ (),‬
‭ vtype‬
‭ .‭
‭c‬urrentIndex‬
(),‬
‭ error_label‬
‭ ))‬

self‬
‭ .‭
‭v‬ertical_2‬
.‭
‭ a
‬ddWidget‬
(‭
‭f‬rame‬
)‬

def‬‭
‭ addVehicles‬
(‭
‭s‬elf‬
,‬
‭ name‬
‭ ,‬
‭ vehicleno‬
‭ ,‬
‭ mobile‬
‭ ,‬
‭ index‬
‭ ,‬
‭ error_label‬
‭ ):‬

vtp‬
‭ =‬
‭ 2‬

if‬‭
‭ index‬
==‬
‭ 0‬
‭ :‬

vtp‬
‭ =‬
‭ 2‬

else‬
‭ :‬

vtp‬
‭ =‬
‭ 4‬

data‬
‭ =‭
‭s‬elf‬
.‬
‭ dbOperation‬
‭ .‬
‭ AddVehicles‬
‭ (‭
‭n‬ame‬
,‬
‭ vehicleno‬
‭ ,‭
‭m‬obile‬
,‭
‭s‬tr‬
(‬
‭ vtp‬
‭ ))‬

if‬‭
‭ data‬
==‬
‭ True‬
‭ :‬

error_label‬
‭ .setText(‬
‭ "Added Successfully"‬
‭ )‬

elif‬‭
‭ data‬
==‬
‭ False‬
‭ :‬

error_label‬
‭ .setText(‬
‭ "Failed to Add Vehicle"‬
‭ )‬

else‬
‭ :‬

error_label‬
‭ .setText(‬
‭ str‬
‭ (‬
‭ data‬
‭ ))‬

def‬‭
‭ addManagePage‬
(‬
‭ self‬
‭ ):‬

data‬
‭ =‭
‭s‬elf‬
.‬
‭ dbOperation‬
‭ .‬
‭ getCurrentVehicle‬
‭ ()‬

self‬
‭ .‭
‭t‬able‬
=‬
‭ QTableWidget‬
‭ ()‬

self‬
‭ .‭
‭t‬able‬
.‬
‭ setStyleSheet‬
‭ (‬
‭ "background:#fff"‬
‭ )‬

self‬
‭ .‭
‭t‬able‬
.‬
‭ resize‬
‭ (‬
‭ self‬
‭ .‭
‭w‬idth‬
(),‬
‭ self‬
‭ .‬
‭ height‬
‭ ())‬

self‬
‭ .‭
‭t‬able‬
.‬
‭ setRowCount‬
‭ (‭
‭l‬en‬
(‬
‭ data‬
‭ ))‬

self‬
‭ .‭
‭t‬able‬
.‬
‭ setColumnCount‬
‭ (‭
‭7‬‬
)‬

self‬
‭ .‭
‭t‬able‬
.‬
‭ horizontalHeader‬
‭ ().‬
‭ setSectionResizeMode‬
‭ (‬
‭ QHeaderView‬
‭ .ResizeTo‬

Contents)‬

self‬
‭ .‭
‭t‬able‬
.‬
‭ setHorizontalHeaderItem‬
‭ (‬
‭ 0‬
‭ ,‭
‭Q‬TableWidgetItem‬
(‬
‭ "ID"‬
‭ ))‬

self‬
‭ .‭
‭t‬able‬
.‬
‭ setHorizontalHeaderItem‬
‭ (‬
‭ 1‬
‭ ,‭
‭Q‬TableWidgetItem‬
(‬
‭ "Name"‬
‭ ))‬

self‬
‭ .‭
‭t‬able‬
.‬
‭ setHorizontalHeaderItem‬
‭ (‬
‭ 2‬
‭ ,‭
‭Q‬TableWidgetItem‬
(‬
‭ "VEHICLE‬

No"‬
‭ ))‬

self‬
‭ .‭
‭t‬able‬
.‬
‭ setHorizontalHeaderItem‬
‭ (‬
‭ 3‬
‭ ,‬
‭ QTableWidgetItem‬
‭ (‬
‭ "MOBILE"‬
‭ ))‬

self‬
‭ .‭
‭t‬able‬
.‬
‭ setHorizontalHeaderItem‬
‭ (‬
‭ 4‬
‭ ,‭
‭Q‬TableWidgetItem‬
(‬
‭ "VEHICLE‬

TYPE"‬
‭ ))‬

self‬
‭ .‭
‭t‬able‬
.‬
‭ setHorizontalHeaderItem‬
‭ (‬
‭ 5‬
‭ ,‭
‭Q‬TableWidgetItem‬
(‬
‭ "ENTRY‬

TIME"‬
‭ ))‬

self‬
‭ .‭
‭t‬able‬
.‬
‭ setHorizontalHeaderItem‬
‭ (‬
‭ 6‬
‭ ,‬
‭ QTableWidgetItem‬
‭ (‬
‭ "ACTION"‬
‭ ))‬

loop‬
‭ =‭
‭0‬‬
for‬‭
‭ smalldata‬‭
in‬‭
data‬
:‬

self‬
‭ .‭
‭t‬able‬
.‬
‭ setItem‬
‭ (‬
‭ loop‬
‭ ,‭
‭0‬‬
,‬
‭ QTableWidgetItem‬
‭ (‬
‭ str‬
‭ (‬
‭ smalldata‬
‭ [‬
‭ 0‬
‭ ])))‬

self‬
‭ .‭
‭t‬able‬
.‬
‭ setItem‬
‭ (‬
‭ loop‬
‭ ,‭
‭1‬‬
,‬
‭ QTableWidgetItem‬
‭ (‬
‭ str‬
‭ (‬
‭ smalldata‬
‭ [‬
‭ 1‬
‭ ])))‬

self‬
‭ .‭
‭t‬able‬
.‬
‭ setItem‬
‭ (‬
‭ loop‬
‭ ,‭
‭2‬‬
,‬
‭ QTableWidgetItem‬
‭ (‬
‭ str‬
‭ (‬
‭ smalldata‬
‭ [‬
‭ 6‬
‭ ])))‬

self‬
‭ .‭
‭t‬able‬
.‬
‭ setItem‬
‭ (‬
‭ loop‬
‭ ,‭
‭3‬‬
,‬
‭ QTableWidgetItem‬
‭ (‬
‭ str‬
‭ (‬
‭ smalldata‬
‭ [‬
‭ 2‬
‭ ])))‬

self‬
‭ .‭
‭t‬able‬
.‬
‭ setItem‬
‭ (‬
‭ loop‬
‭ ,‭
‭4‬‬
,‬
‭ QTableWidgetItem‬
‭ (‬
‭ str‬
‭ (‬
‭ smalldata‬
‭ [‬
‭ 7‬
‭ ])))‬

self‬
‭ .‭
‭t‬able‬
.‬
‭ setItem‬
‭ (‬
‭ loop‬
‭ ,‭
‭5‬‬
,‬
‭ QTableWidgetItem‬
‭ (‬
‭ str‬
‭ (‬
‭ smalldata‬
‭ [‬
‭ 3‬
‭ ])))‬

self‬
‭ .‭
‭b‬utton_exit‬
=‬
‭ QPushButton‬
‭ (‭
‭"‬Exit"‬
)‬

self‬
‭ .‭
‭b‬utton_exit‬
.‬
‭ setStyleSheet‬
‭ (‬
‭ "color:#fff;padding:8px‬

0px;font-size:20px;background:green;border:1px solid white"‬
‭ )‬

self‬
‭ .‭
‭t‬able‬
.‬
‭ setCellWidget‬
‭ (‬
‭ loop‬
‭ ,‬
‭ 6‬
‭ ,‬
‭ self‬
‭ .‭
‭b‬utton_exit‬
)‬

self‬
‭ .‭
‭b‬utton_exit‬
.‬
‭ clicked‬
‭ .‬
‭ connect‬
‭ (‭
‭s‬elf‬
.‬
‭ exitCall‬
‭ )‬

loop‬
‭ =‭
‭l‬oop‬
+‬
‭ 1‬

frame‬
‭ =‬
‭ QFrame‬
‭ ()‬

layout‬
‭ =‬
‭ QVBoxLayout‬
‭ ()‬

button‬
‭ =‬
‭ QPushButton‬
‭ (‭
‭"‬Refresh"‬
)‬

button‬
‭ .‬
‭ setStyleSheet‬
‭ (‬
‭ "color:#fff;padding:8px‬

0px;font-size:20px;background:green;border:1px solid white"‬
‭ )‬

button‬
‭ .‬
‭ clicked‬
‭ .‬
‭ connect‬
‭ (‭
‭s‬elf‬
.‬
‭ refreshManage‬
‭ )‬

layout‬
‭ .‬
‭ setContentsMargins‬
‭ (‭
‭0‬‬
,‬
‭ 0‬
‭ ,‭
‭0‬‬
,‬
‭ 0‭
‭)‬‬
layout‬
‭ .‬
‭ setSpacing‬
‭ (‬
‭ 0‭
‭)‬‬
layout‬
‭ .‬
‭ addWidget‬
‭ (‬
‭ button‬
‭ )‬

layout‬
‭ .‬
‭ addWidget‬
‭ (‬
‭ self‬
‭ .‬
‭ table‬
‭ )‬

frame‬
‭ .‬
‭ setLayout‬
‭ (‭
‭l‬ayout‬
)‬

frame‬
‭ .‬
‭ setContentsMargins‬
‭ (‬
‭ 0‭
‭,‬‬
0‬
‭ ,‬
‭ 0‭
‭,‬‬
0‬
‭ )‬

frame‬
‭ .‬
‭ setMaximumWidth‬
‭ (‬
‭ self‬
‭ .‬
‭ width‬
‭ ())‬

frame‬
‭ .‬
‭ setMinimumWidth‬
‭ (‬
‭ self‬
‭ .‬
‭ width‬
‭ ())‬

frame‬
‭ .‬
‭ setMaximumHeight‬
‭ (‭
‭s‬elf‬
.‬
‭ height‬
‭ ())‬

frame‬
‭ .‬
‭ setMinimumHeight‬
‭ (‭
‭s‬elf‬
.‬
‭ height‬
‭ ())‬

self‬
‭ .‭
‭v‬ertical_3‬
.‭
‭ a
‬ddWidget‬
(‭
‭f‬rame‬
)‬

self‬
‭ .‭
‭v‬ertical_3‬
.‭
‭ a
‬ddStretch‬
()‬

def‬‭
‭ refreshManage‬
(‬
‭ self‬
‭ ):‬

data‬
‭ =‭
‭s‬elf‬
.‬
‭ dbOperation‬
‭ .‬
‭ getCurrentVehicle‬
‭ ()‬

self‬
‭ .‭
‭t‬able‬
.‬
‭ setRowCount‬
‭ (‭
‭l‬en‬
(‬
‭ data‬
‭ ))‬

self‬
‭ .‭
‭t‬able‬
.‬
‭ setColumnCount‬
‭ (‭
‭7‬‬
)‬

loop‬
‭ =‭
‭0‬‬
for‬‭
‭ smalldata‬‭
in‬‭
data‬
:‬

self‬
‭ .‭
‭t‬able‬
.‬
‭ setItem‬
‭ (‬
‭ loop‬
‭ ,‭
‭0‬‬
,‬
‭ QTableWidgetItem‬
‭ (‬
‭ str‬
‭ (‬
‭ smalldata‬
‭ [‬
‭ 0‬
‭ ])))‬

self‬
‭ .‭
‭t‬able‬
.‬
‭ setItem‬
‭ (‬
‭ loop‬
‭ ,‭
‭1‬‬
,‬
‭ QTableWidgetItem‬
‭ (‬
‭ str‬
‭ (‬
‭ smalldata‬
‭ [‬
‭ 1‬
‭ ])))‬

self‬
‭ .‭
‭t‬able‬
.‬
‭ setItem‬
‭ (‬
‭ loop‬
‭ ,‭
‭2‬‬
,‬
‭ QTableWidgetItem‬
‭ (‬
‭ str‬
‭ (‬
‭ smalldata‬
‭ [‬
‭ 6‬
‭ ])))‬

self‬
‭ .‭
‭t‬able‬
.‬
‭ setItem‬
‭ (‬
‭ loop‬
‭ ,‭
‭3‬‬
,‬
‭ QTableWidgetItem‬
‭ (‬
‭ str‬
‭ (‬
‭ smalldata‬
‭ [‬
‭ 2‬
‭ ])))‬

self‬
‭ .‭
‭t‬able‬
.‬
‭ setItem‬
‭ (‬
‭ loop‬
‭ ,‭
‭4‬‬
,‬
‭ QTableWidgetItem‬
‭ (‬
‭ str‬
‭ (‬
‭ smalldata‬
‭ [‬
‭ 7‬
‭ ])))‬

self‬
‭ .‭
‭t‬able‬
.‬
‭ setItem‬
‭ (‬
‭ loop‬
‭ ,‭
‭5‬‬
,‬
‭ QTableWidgetItem‬
‭ (‬
‭ str‬
‭ (‬
‭ smalldata‬
‭ [‬
‭ 3‬
‭ ])))‬

self‬
‭ .‭
‭b‬utton_exit‬
=‬
‭ QPushButton‬
‭ (‭
‭"‬Exit"‬
)‬

self‬
‭ .‭
‭t‬able‬
.‬
‭ setCellWidget‬
‭ (‬
‭ loop‬
‭ ,‬
‭ 6‬
‭ ,‬
‭ self‬
‭ .‭
‭b‬utton_exit‬
)‬

self‬
‭ .‭
‭b‬utton_exit‬
.‬
‭ clicked‬
‭ .‬
‭ connect‬
‭ (‭
‭s‬elf‬
.‬
‭ exitCall‬
‭ )‬

loop‬
‭ =‭
‭l‬oop‬
+‬
‭ 1‬

def‬‭
‭ refreshHistory‬
(‬
‭ self‬
‭ ):‬

self‬
‭ .‭
‭t‬able1‬
.‭
‭c‬learContents‬
()‬

data‬
‭ =‭
‭s‬elf‬
.‬
‭ dbOperation‬
‭ .‬
‭ getAllVehicle‬
‭ ()‬

loop‬
‭ =‭
‭0‬‬
self‬
‭ .‭
‭t‬able1‬
.‭
‭s‬etRowCount‬
(‬
‭ len‬
‭ (‬
‭ data‬
‭ ))‬

self‬
‭ .‭
‭t‬able1‬
.‭
‭s‬etColumnCount‬
(‬
‭ 7‬
‭ )‬

for‬‭
‭ smalldata‬‭
in‬‭
data‬
:‬

self‬
‭ .‭
‭t‬able1‬
.‬
‭ setItem‬
‭ (‭
‭l‬oop‬
,‬
‭ 0‬
‭ ,‭
‭Q‬TableWidgetItem‬
(‬
‭ str‬
‭ (‬
‭ smalldata‬
‭ [‬
‭ 0‭
‭]‬)))‬

self‬
‭ .‭
‭t‬able1‬
.‬
‭ setItem‬
‭ (‭
‭l‬oop‬
,‬
‭ 1‬
‭ ,‭
‭Q‬TableWidgetItem‬
(‬
‭ str‬
‭ (‬
‭ smalldata‬
‭ [‬
‭ 1‭
‭]‬)))‬

self‬
‭ .‭
‭t‬able1‬
.‬
‭ setItem‬
‭ (‭
‭l‬oop‬
,‬
‭ 2‬
‭ ,‭
‭Q‬TableWidgetItem‬
(‬
‭ str‬
‭ (‬
‭ smalldata‬
‭ [‬
‭ 6‭
‭]‬)))‬
self‬
‭ .‭
‭t‬able1‬
.‬
‭ setItem‬
‭ (‭
‭l‬oop‬
,‬
‭ 3‬
‭ ,‭
‭Q‬TableWidgetItem‬
(‬
‭ str‬
‭ (‬
‭ smalldata‬
‭ [‬
‭ 2‭
‭]‬)))‬

self‬
‭ .‭
‭t‬able1‬
.‬
‭ setItem‬
‭ (‭
‭l‬oop‬
,‬
‭ 4‬
‭ ,‭
‭Q‬TableWidgetItem‬
(‬
‭ str‬
‭ (‬
‭ smalldata‬
‭ [‬
‭ 7‭
‭]‬)))‬

self‬
‭ .‭
‭t‬able1‬
.‬
‭ setItem‬
‭ (‭
‭l‬oop‬
,‬
‭ 5‬
‭ ,‭
‭Q‬TableWidgetItem‬
(‬
‭ str‬
‭ (‬
‭ smalldata‬
‭ [‬
‭ 3‭
‭]‬)))‬

self‬
‭ .‭
‭t‬able1‬
.‬
‭ setItem‬
‭ (‭
‭l‬oop‬
,‬
‭ 6‬
‭ ,‭
‭Q‬TableWidgetItem‬
(‬
‭ str‬
‭ (‬
‭ smalldata‬
‭ [‬
‭ 4‭
‭]‬)))‬
loop‬
‭ =‭
‭l‬oop‬
+‬
‭ 1‬

def‬‭
‭ addHistoryPage‬
(‬
‭ self‬
‭ ):‬

data‬
‭ =‭
‭s‬elf‬
.‬
‭ dbOperation‬
‭ .‬
‭ getAllVehicle‬
‭ ()‬

self‬
‭ .‭
‭t‬able1‬
=‭
‭Q‬TableWidget‬
()‬

self‬
‭ .‭
‭t‬able1‬
.‭
‭r‬esize‬
(‭
‭s‬elf‬
.‬
‭ width‬
‭ (),‬
‭ self‬
‭ .‭
‭h‬eight‬
())‬

self‬
‭ .‭
‭t‬able1‬
.‭
‭s‬etRowCount‬
(‬
‭ len‬
‭ (‬
‭ data‬
‭ ))‬

self‬
‭ .‭
‭t‬able1‬
.‭
‭s‬etStyleSheet‬
(‭
‭"‬background:#fff"‬
)‬

self‬
‭ .‭
‭t‬able1‬
.‭
‭s‬etColumnCount‬
(‬
‭ 7‬
‭ )‬

button‬
‭ =‬
‭ QPushButton‬
‭ (‭
‭"‬Refresh"‬
)‬

button‬
‭ .‬
‭ setStyleSheet‬
‭ (‬
‭ "color:#fff;padding:8px‬

0px;font-size:20px;background:green;border:1px solid white"‬
‭ )‬

button‬
‭ .‬
‭ clicked‬
‭ .‬
‭ connect‬
‭ (‭
‭s‬elf‬
.‬
‭ refreshHistory‬
‭ )‬

self‬
‭ .‭
‭t‬able1‬
.‬
‭ horizontalHeader‬
‭ ().‬
‭ setSectionResizeMode‬
‭ (‭
‭Q‬HeaderView‬
.ResizeT‬

oContents)‬

self‬
‭ .‭
‭t‬able1‬
.‭
‭s‬etHorizontalHeaderItem‬
(‬
‭ 0‭
‭,‬‬
QTableWidgetItem‬
‭ (‭
‭"‬ID"‬
))‬

self‬
‭ .‭
‭t‬able1‬
.‭
‭s‬etHorizontalHeaderItem‬
(‬
‭ 1‭
‭,‬‬
QTableWidgetItem‬
‭ (‭
‭"‬Name"‬
))‬

self‬
‭ .‭
‭t‬able1‬
.‭
‭s‬etHorizontalHeaderItem‬
(‬
‭ 2‭
‭,‬‬
QTableWidgetItem‬
‭ (‭
‭"‬VEHICLE‬
No"‬
‭ ))‬

self‬
‭ .‭
‭t‬able1‬
.‬
‭ setHorizontalHeaderItem‬
‭ (‬
‭ 3‬
‭ ,‭
‭Q‬TableWidgetItem‬
(‬
‭ "MOBILE"‬
‭ ))‬

self‬
‭ .‭
‭t‬able1‬
.‭
‭s‬etHorizontalHeaderItem‬
(‬
‭ 4‭
‭,‬‬
QTableWidgetItem‬
‭ (‭
‭"‬VEHICLE‬
TYPE"‬
‭ ))‬

self‬
‭ .‭
‭t‬able1‬
.‭
‭s‬etHorizontalHeaderItem‬
(‬
‭ 5‭
‭,‬‬
QTableWidgetItem‬
‭ (‭
‭"‬ENTRY‬
TIME"‬
‭ ))‬

self‬
‭ .‭
‭t‬able1‬
.‭
‭s‬etHorizontalHeaderItem‬
(‬
‭ 6‭
‭,‬‬
QTableWidgetItem‬
‭ (‭
‭"‬EXIT‬
TIME"‬
‭ ))‬

loop‬
‭ =‭
‭0‬‬
for‬‭
‭ smalldata‬‭
in‬‭
data‬
:‬

self‬
‭ .‭
‭t‬able1‬
.‬
‭ setItem‬
‭ (‭
‭l‬oop‬
,‬
‭ 0‬
‭ ,‭
‭Q‬TableWidgetItem‬
(‬
‭ str‬
‭ (‬
‭ smalldata‬
‭ [‬
‭ 0‭
‭]‬)))‬

self‬
‭ .‭
‭t‬able1‬
.‬
‭ setItem‬
‭ (‭
‭l‬oop‬
,‬
‭ 1‬
‭ ,‭
‭Q‬TableWidgetItem‬
(‬
‭ str‬
‭ (‬
‭ smalldata‬
‭ [‬
‭ 1‭
‭]‬)))‬

self‬
‭ .‭
‭t‬able1‬
.‬
‭ setItem‬
‭ (‭
‭l‬oop‬
,‬
‭ 2‬
‭ ,‭
‭Q‬TableWidgetItem‬
(‬
‭ str‬
‭ (‬
‭ smalldata‬
‭ [‬
‭ 6‭
‭]‬)))‬

self‬
‭ .‭
‭t‬able1‬
.‬
‭ setItem‬
‭ (‭
‭l‬oop‬
,‬
‭ 3‬
‭ ,‭
‭Q‬TableWidgetItem‬
(‬
‭ str‬
‭ (‬
‭ smalldata‬
‭ [‬
‭ 2‭
‭]‬)))‬

self‬
‭ .‭
‭t‬able1‬
.‬
‭ setItem‬
‭ (‭
‭l‬oop‬
,‬
‭ 4‬
‭ ,‭
‭Q‬TableWidgetItem‬
(‬
‭ str‬
‭ (‬
‭ smalldata‬
‭ [‬
‭ 7‭
‭]‬)))‬

self‬
‭ .‭
‭t‬able1‬
.‬
‭ setItem‬
‭ (‭
‭l‬oop‬
,‬
‭ 5‬
‭ ,‭
‭Q‬TableWidgetItem‬
(‬
‭ str‬
‭ (‬
‭ smalldata‬
‭ [‬
‭ 3‭
‭]‬)))‬

self‬
‭ .‭
‭t‬able1‬
.‬
‭ setItem‬
‭ (‭
‭l‬oop‬
,‬
‭ 6‬
‭ ,‭
‭Q‬TableWidgetItem‬
(‬
‭ str‬
‭ (‬
‭ smalldata‬
‭ [‬
‭ 4‭
‭]‬)))‬
loop‬
‭ =‭
‭l‬oop‬
+‬
‭ 1‬

self‬
‭ .‭
‭f‬rame5‬
=‭
‭Q‬Frame‬
()‬

self‬
‭ .‭
‭l‬ayout1‬
=‬
‭ QVBoxLayout‬
‭ ()‬

self‬
‭ .‭
‭l‬ayout1‬
.‬
‭ setContentsMargins‬
‭ (‬
‭ 0‭
‭,‬‬
0‬
‭ ,‬
‭ 0‭
‭,‬‬
0‬
‭ )‬

self‬
‭ .‭
‭l‬ayout1‬
.‬
‭ setSpacing‬
‭ (‬
‭ 0‬
‭ )‬

self‬
‭ .‭
‭l‬ayout1‬
.‬
‭ addWidget‬
‭ (‭
‭b‬utton‬
)‬

self‬
‭ .‭
‭l‬ayout1‬
.‬
‭ addWidget‬
‭ (‭
‭s‬elf‬
.‬
‭ table1‬
‭ )‬

self‬
‭ .‭
‭f‬rame5‬
.‭
‭s‬etLayout‬
(‬
‭ self‬
‭ .‬
‭ layout1‬
‭ )‬

self‬
‭ .‭
‭f‬rame5‬
.‭
‭s‬etContentsMargins‬
(‬
‭ 0‬
‭ ,‭
‭0‬‬
,‬
‭ 0‬
‭ ,‭
‭0‬‬
)‬

self‬
‭ .‭
‭f‬rame5‬
.‭
‭s‬etMaximumWidth‬
(‬
‭ self‬
‭ .‭
‭w‬idth‬
())‬

self‬
‭ .‭
‭f‬rame5‬
.‭
‭s‬etMinimumWidth‬
(‬
‭ self‬
‭ .‭
‭w‬idth‬
())‬

self‬
‭ .‭
‭f‬rame5‬
.‭
‭s‬etMaximumHeight‬
(‬
‭ self‬
‭ .‬
‭ height‬
‭ ())‬

self‬
‭ .‭
‭f‬rame5‬
.‭
‭s‬etMinimumHeight‬
(‬
‭ self‬
‭ .‬
‭ height‬
‭ ())‬

self‬
‭ .‭
‭v‬ertical_4‬
.‭
‭ a
‬ddWidget‬
(‭
‭s‬elf‬
.‬
‭ frame5‬
‭ )‬

self‬
‭ .‭
‭v‬ertical_4‬
.‭
‭ a
‬ddStretch‬
()‬

def‬‭
‭ exitCall‬
(‭
‭s‬elf‬
):‬

btton‬
‭ =‬
‭ self‬
‭ .‬
‭ sender‬
‭ ()‬

if‬‭
‭ btton‬
:‬

row‬
‭ =‬
‭ self‬
‭ .‬
‭ table‬
‭ .‭
‭i‬ndexAt‬
(‬
‭ btton‬
‭ .pos()).‬
‭ row‬
‭ ()‬

id‬‭
‭ =‬str‬
‭ (‭
‭s‬elf‬
.‬
‭ table‬
‭ .‭
‭i‬tem‬
(‬
‭ row‬
‭ ,‬
‭ 0‭
‭)‬.‬
text‬
‭ ())‬

self‬
‭ .‭
‭d‬bOperation‬
.‬
‭ exitVehicle‬
‭ (‭
‭i‬d‬
)‬

self‬
‭ .‭
‭t‬able‬
.‬
‭ removeRow‬
‭ (‬
‭ row‬
‭ )‬

‭[Link]‬

import‬‭
‭ mysql‬
.‭
‭c‬onnector‬
import‬‭
‭ json‬
from‬‭
‭ datetime‬‭
import‬‭
datetime‬

class‬‭
‭ DBOperation‬
():‬

def‬‭
‭ __init__‬
(‭
‭s‬elf‬
):‬

file‬
‭ =‭
‭o‬pen‬
(‬
‭ "./[Link]"‬
‭ ,‭
‭"‬r"‬
)‬

datadic‬
‭ =‬
‭ json‬
‭ .‬
‭ loads‬
‭ (‭
‭f‬ile‬
.‬
‭ read‬
‭ ())‬

file‬
‭ .‭
‭c‬lose‬
()‬

self‬
‭ .‭
‭m‬ydb‬
=‬
‭ mysql‬
‭ .‬
‭ connector‬
‭ .‬
‭ connect‬
‭ (‭
‭h‬ost‬
=‬
‭ "localhost"‬
‭ ,‬
‭ user‬
‭ =‭
‭"‬root"‬
,‭
‭p‬asswd‬
=‭
‭"‬‬
"‭
‭,‬‭
d
‬atabase‬
=‬
‭ "vpms_py"‬
‭ )‬

def‬‭
‭ CreateTables‬
(‬
‭ self‬
‭ ):‬

cursor‬
‭ =‬
‭ self‬
‭ .‭
‭m‬ydb‬
.‬
‭ cursor‬
‭ ()‬

cursor‬
‭ .‬
‭ execute‬
‭ (‬
‭ "DROP TABLE if exists admin"‬
‭ )‬

cursor‬
‭ .‬
‭ execute‬
‭ (‬
‭ "DROP TABLE if exists slots"‬
‭ )‬

cursor‬
‭ .‬
‭ execute‬
‭ (‬
‭ "DROP TABLE if exists vehicles"‬
‭ )‬

cursor‬
‭ .‭
‭e‬xecute‬
(‬
‭ "CREATE‬‭
‭ TABLE‬‭
admin‬‭
(id‬‭
int(255)‬‭
AUTO_INCREMENT‬
PRIMARY‬
‭ KEY,username‬
‭ varchar(30),password‬
‭ varchar(30),created_at‬

varchar(30))"‬
‭ )‬

cursor‬
‭ .‭
‭e‬xecute‬
(‬
‭ "CREATE‬‭
‭ TABLE‬‭
slots‬‭
(id‬‭
int(255)‬‭
AUTO_INCREMENT‬
PRIMARY‬
‭ KEY,vehicle_id‬
‭ varchar(30),space_for‬
‭ int(25),is_empty‬

int(25))"‬
‭ )‬

cursor‬
‭ .‬
‭ execute‬
‭ (‬
‭ "CREATE‬ ‭
‭ TABLE‬ ‭
vehicles‬ ‭
(id‬ ‭
int(255)‬
AUTO_INCREMENT‬
‭ PRIMARY‬
‭ KEY,name‬
‭ varchar(30),mobile‬

varchar(30),entry_time‬
‭ varchar(30),exit_time‬
‭ varchar(30),is_exit‬

varchar(30),vehicle_no‬ ‭
‭ varchar(30),vehicle_type‬ ‭
varchar(30),created_at‬
varchar(30),updated_at varchar(30))"‬
‭ )‬

cursor‬
‭ .‬
‭ close‬
‭ ()‬

def‬‭
‭ InsertOneTimeData‬
(‬
‭ self‬
‭ ,‭
‭s‬pace_for_two‬
,‭
‭s‬pace_for_four‬
):‬

cursor‬
‭ =‬
‭ self‬
‭ .‭
‭m‬ydb‬
.‬
‭ cursor‬
‭ ()‬

for‬‭
‭ x‬‭
in‬‭
range‬
(‬
‭ space_for_two‬
‭ ):‬

cursor‬
‭ .‬
‭ execute‬
‭ (‭
‭"‬INSERT‬ ‭
into‬ ‭
slots‬ ‭
(space_for,is_empty)‬
values ('2','1')"‬
‭ )‬

self‬
‭ .‭
‭m‬ydb‬
.‬
‭ commit‬
‭ ()‬

for‬‭
‭ x‬‭
in‬‭
range‬
(‬
‭ space_for_four‬
‭ ):‬

cursor‬
‭ .‬
‭ execute‬
‭ (‭
‭"‬INSERT‬ ‭
into‬ ‭
slots‬ ‭
(space_for,is_empty)‬
values ('4','1')"‬
‭ )‬

self‬
‭ .‭
‭m‬ydb‬
.‬
‭ commit‬
‭ ()‬

cursor‬
‭ .‬
‭ close‬
‭ ()‬

def‬‭
‭ InsertAdmin‬
(‭
‭s‬elf‬
,‬
‭ username‬
‭ ,‭
‭p‬assword‬
):‬

cursor‬
‭ =‬
‭ self‬
‭ .‭
‭m‬ydb‬
.‬
‭ cursor‬
‭ ()‬

val‬
‭ =‬
‭ (‭
‭u‬sername‬
,‬
‭ password‬
‭ )‬

cursor‬
‭ .‭
‭e‬xecute‬
(‬
‭ "INSERT‬ ‭
‭ into‬ ‭
admin‬ ‭
(username,password)‬ ‭
values‬
(‭
‭%‬s‬
,‭
‭ %
‬s‬
)"‬
‭ ,‭
‭v‬al‬
)‬

self‬
‭ .‭
‭m‬ydb‬
.‬
‭ commit‬
‭ ()‬

cursor‬
‭ .‬
‭ close‬
‭ ()‬

def‬‭
‭ doAdminLogin‬
(‬
‭ self‬
‭ ,‬
‭ username‬
‭ ,‬
‭ pasword‬
‭ ):‬

cursor‬
‭ =‬
‭ self‬
‭ .‭
‭m‬ydb‬
.‬
‭ cursor‬
‭ ()‬

cursor‬
‭ .‬
‭ execute‬
‭ (‬
‭ "select‬
‭ *‬
‭ from‬
‭ admin‬
‭ where‬

username='"‬
‭ +‬
‭ username‬
‭ +‬
‭ "' and password='"‬
‭ +‬
‭ pasword‬
‭ +‬
‭ "'"‬
‭ )‬

data‬
‭ =‭
‭c‬ursor‬
.‭
‭f‬etchall‬
()‬

cursor‬
‭ .‬
‭ close‬
‭ ()‬

if‬‭
‭ len‬
(‬
‭ data‬
‭ )‭
‭>‬‬
0‬
‭ :‬

return‬‭
‭ True‬
else‬
‭ :‬

return‬‭
‭ False‬

def‬‭
‭ getSlotSpace‬
(‬
‭ self‬
‭ ):‬

cursor‬
‭ =‬
‭ self‬
‭ .‭
‭m‬ydb‬
.‬
‭ cursor‬
‭ ()‬

cursor‬
‭ .‬
‭ execute‬
‭ (‬
‭ "select * from slots"‬
‭ )‬

data‬
‭ =‭
‭c‬ursor‬
.‭
‭f‬etchall‬
()‬

cursor‬
‭ .‬
‭ close‬
‭ ()‬

return‬‭
‭ data‬

def‬‭
‭ getCurrentVehicle‬
(‬
‭ self‬
‭ ):‬

cursor‬
‭ =‬
‭ self‬
‭ .‭
‭m‬ydb‬
.‬
‭ cursor‬
‭ ()‬

cursor‬
‭ .‬
‭ execute‬
‭ (‬
‭ "select * from vehicles where is_exit='0'"‬
‭ )‬

data‬
‭ =‭
‭c‬ursor‬
.‭
‭f‬etchall‬
()‬

cursor‬
‭ .‬
‭ close‬
‭ ()‬

return‬‭
‭ data‬

def‬‭
‭ getAllVehicle‬
(‬
‭ self‬
‭ ):‬

cursor‬
‭ =‬
‭ self‬
‭ .‭
‭m‬ydb‬
.‬
‭ cursor‬
‭ ()‬

cursor‬
‭ .‬
‭ execute‬
‭ (‬
‭ "select * from vehicles where is_exit='1'"‬
‭ )‬

data‬
‭ =‭
‭c‬ursor‬
.‭
‭f‬etchall‬
()‬

cursor‬
‭ .‬
‭ close‬
‭ ()‬

return‬‭
‭ data‬

def‬‭
‭ AddVehicles‬
(‭
‭s‬elf‬
,‬
‭ name‬
‭ ,‬
‭ vehicleno‬
‭ ,‬
‭ mobile‬
‭ ,‬
‭ vehicle_type‬
‭ ):‬

spacid‬
‭ =‬
‭ self‬
‭ .‭
‭s‬paceAvailable‬
(‬
‭ vehicle_type‬
‭ )‬

if‬‭
‭ spacid‬
:‬

currentdata‬
‭ =‭
‭d‬atetime‬
.‬
‭ now‬
‭ ().‬
‭ strftime‬
‭ (‬
‭ "%Y-%m-‬
‭ %d‬‭
‭ %H:%M:%S"‬
)‬

data‬
‭ =‭
‭(‬‭
n
‬ame‬
,‬
‭ mobile‬
‭ ,‬
‭ str‬
‭ (‬
‭ currentdata‬
‭ ),‬
‭ ''‬
‭ ,‭
‭'‬0'‬
,‬
‭ vehicleno‬
‭ ,‭
‭s‬tr‬
(‭
‭ c
‬urrentdata‬
),‬
‭ st‬

r‭
‭(‬‭
c
‬urrentdata‬
),‬
‭ vehicle_type‬
‭ )‬

cursor‬
‭ =‬
‭ self‬
‭ .‭
‭m‬ydb‬
.‬
‭ cursor‬
‭ ()‬

cursor‬
‭ .‬
‭ execute‬
‭ (‭
‭"‬INSERT‬ into‬
‭ vehicles‬

(name,mobile,entry_time,exit_time,is_exit,vehicle_no,created_at,updated‬

_at,vehicle_type) values (‬
‭ %s‬
‭ ,‬
‭ %s‬
‭ ,‬
‭ %s‬
‭ ,‬
‭ %s‬
‭ ,‭
‭%‬s‬
,‭
‭%‬s‬
,‬
‭ %s‬
‭ ,‬
‭ %s‬
‭ ,‬
‭ %s‬
‭ )"‬
‭ ,‬
‭ data‬
‭ )‬

self‬
‭ .‭
‭m‬ydb‬
.‬
‭ commit‬
‭ ()‬

lastid‬
‭ =‬
‭ cursor‬
‭ .‬
‭ lastrowid‬

cursor‬
‭ .‬
‭ execute‬
‭ (‭
‭"‬UPDATE‬ slots‬
‭ set‬

vehicle_id='"‬
‭ +‬
‭ str‬
‭ (‬
‭ lastid‬
‭ )‬
‭ +‬
‭ "',is_empty='0' where id='"‬
‭ +‬
‭ str‬
‭ (‬
‭ spacid‬
‭ )‬
‭ +‭
‭"‬'"‬
)‬

self‬
‭ .‭
‭m‬ydb‬
.‬
‭ commit‬
‭ ()‬

cursor‬
‭ .‬
‭ close‬
‭ ()‬

return‬‭
‭ True‬
else‬
‭ :‬

return‬‭
‭ "No Space Available for Parking"‬

def‬‭
‭ spaceAvailable‬
(‬
‭ self‬
‭ ,‬
‭ v_type‬
‭ ):‬

cursor‬
‭ =‬
‭ self‬
‭ .‭
‭m‬ydb‬
.‬
‭ cursor‬
‭ ()‬

cursor‬
‭ .‭
‭e
‬xecute‬
(‬
‭ "select‬ ‭
‭ *‬ ‭
from‬ ‭
slots‬ ‭
where‬ ‭
is_empty='1'‬ ‭
and‬
space_for='"‬
‭ +‭
‭s‬tr‬
(‭
‭ v
‬_type‬
)‭
‭+‬‬
"'"‬
‭ )‬

data‬
‭ =‭
‭c‬ursor‬
.‭
‭f‬etchall‬
()‬

cursor‬
‭ .‬
‭ close‬
‭ ()‬

if‬‭
‭ len‬
(‬
‭ data‬
‭ )‭
‭>‬‬
0‬
‭ :‬

return‬‭
‭ data‬
[‭
‭0‬‬
][‬
‭ 0‬
‭ ]‬

else‬
‭ :‬

return‬‭
‭ False‬

def‬‭
‭ exitVehicle‬
(‭
‭s‬elf‬
,‬
‭ id‬
‭ ):‬

cursor‬
‭ =‬
‭ self‬
‭ .‭
‭m‬ydb‬
.‬
‭ cursor‬
‭ ()‬

currentdata‬‭
‭ =‬‭
datetime‬
.‭
‭n‬ow‬
().‬
‭ strftime‬
‭ (‬
‭ "%Y-%m-‬
‭ %d‬‭
‭ %H:%M:%S"‬
)‬

cursor‬
‭ .‭
‭e
‬xecute‬
(‬
‭ "UPDATE‬ ‭
‭ slots‬ ‭
set‬ ‭
is_empty='1',vehicle_id=''‬
where vehicle_id='"‬
‭ +‭
‭i‬d‬
+‬
‭ "'"‬
‭ )‬

self‬
‭ .‭
‭m‬ydb‬
.‬
‭ commit‬
‭ ()‬

cursor‬
‭ .‬
‭ execute‬
‭ (‬
‭ "UPDATE‬
‭ vehicles‬
‭ set‬

is_exit='1',exit_time='"‬
‭ +‬
‭ currentdata‬
‭ +‬
‭ "' where id='"‬‭
‭ +‬‭
id‬‭
+‬‭
"'"‬
)‬

self‬
‭ .‭
‭m‬ydb‬
.‬
‭ commit‬
‭ ()‬

‭OUTPUT :‬
‭Thank you !‬

You might also like