完整代码、数据库资源:资源下载

20220520_002105

项目要求

车次管理(车次、起止地点、到达时间、开车时间)
每一车次的车票管理(车厢号、座位号)
售票
退票
查询(按车次,按起止地点,按发车时间等)

开发语言

开发语言:python(pycharm)、mysql(navicat)
开发工具:QT Designer、pyqt5、pymysql

数据库设计

在这里插入图片描述

代码实现

主函数:实现页面跳转关系,以及部分逻辑关系

import sys
import os
import string
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import QMessageBox
from PyQt5.QtCore import pyqtSlot, QDate
import datetime
from loginUI import Ui_MainWindow as login_ui#登录界面
from Register import Ui_MainWindow as register_ui #注册页面
from User_homeUI import Ui_MainWindow as user_ui#用户主页界面
from Admin_homeUI import Ui_MainWindow as admin_ui#管理员主页界面
from p_informationUI import Ui_MainWindow as p_infor_ui#个人信息页面
from modify_passwdUI import Ui_MainWindow as modify_pwui#修改密码页面
from voucher_centerUI import Ui_MainWindow as voucher_ui #充值页面
from Ticket_hallUI import Ui_MainWindow as tickethall_ui #购票大厅
from buy_ticketUI import Ui_MainWindow as buytickethall_ui#购票页面
from my_orderUI import  Ui_MainWindow as myorder_ui#我的订单页面
from user_manageUI import Ui_MainWindow as usermanage_ui #用户管理页面
from ticket_informationUI import Ui_MainWindow as ticketinformation_ui #票务信息页面
from update_trainUI import Ui_MainWindow as updatetrain_ui #更新列车状态
from train_manageUI import Ui_MainWindow as trainmanage_ui #列车管理页面
from add_trainUI import Ui_MainWindow as addtrain_ui #添加列车
import pymysql
import time


class loginWindow(QtWidgets.QMainWindow,login_ui):
    switch_window1 = QtCore.pyqtSignal()
    switch_window2 = QtCore.pyqtSignal()
    switch_window3 = QtCore.pyqtSignal()   #注册信号
    def  __init__(self):
        super(loginWindow,self).__init__()
        self.setupUi(self)
        self.L_button.clicked.connect(self.goUser)
        self.S_button.clicked.connect(self.goRegister)
    def goUser(self):
        conn = pymysql.connect(
            host='localhost',
            port=3306,
            user='root',
            passwd='111111',
            db='train',
            charset='utf8'
        )
        id = self.id_choice.currentText()
        ac = self.Laccount.text()
        pw = self.Lpasswd.text()
        if ac=='' or pw=='':
            QMessageBox.critical(self,"错误","请输入完整信息!!!")
        else:
         if id == '用户':
            print("%s  用户:%s 在尝试登录" % (datetime.datetime.now(), self.Laccount.text()))
            user = conn.cursor()
            sql = "select * from 用户表 where 手机号='%s' and 密码='%s'" % (ac, pw)
            user.execute(sql)
            if len(user.fetchall()) == 0:
                print("%s 登录失败" % datetime.datetime.now())
                self.error_reminder.show()
            else:
                print("%s 登录成功,进入用户主页" % datetime.datetime.now())
                self.switch_window1.emit()
                self.error_reminder.hide()
            user.close()
         if id == '管理员':
            print("%s  管理员:%s 在尝试登录" % (datetime.datetime.now(), self.Laccount.text()))
            admin = conn.cursor()
            sql = "select * from 管理员表 where 管理员账号='%s' and 密码='%s'" % (ac, pw)
            admin.execute(sql)
            if len(admin.fetchall()) == 0:
                print("%s 登录失败" % datetime.datetime.now())
                self.error_reminder.show()
            else:
                print("%s 登录成功,进入管理员主页" % datetime.datetime.now())
                self.switch_window2.emit()
                self.error_reminder.hide()
            admin.close()
            conn.close()

    def goRegister(self):
        self.switch_window3.emit()
        self.hide()

class registerWindow(QtWidgets.QMainWindow,register_ui):
    switch_window1 = QtCore.pyqtSignal()
    def __init__(self):
        super(registerWindow, self).__init__()
        self.setupUi(self)
        self.pushButton_2.clicked.connect(self.goLogin1)
    def goLogin1(self):
        self.switch_window1.emit()
        self.close()



class userWindow(QtWidgets.QMainWindow,user_ui):
    switch_window1 = QtCore.pyqtSignal() #退出信号
    switch_window2 = QtCore.pyqtSignal() #个人信息信号
    switch_window3 = QtCore.pyqtSignal() #购票大厅
    switch_window4 = QtCore.pyqtSignal()#我的订单
    def __init__(self):
        super(userWindow,self).__init__()
        self.setupUi(self)
        self.L_out.clicked.connect(self.goLogin)
        self.P_information.clicked.connect(self.goInformation)
        self.M_order.clicked.connect(self.gomyorder)
        self.T_hall.clicked.connect(self.goHall)
    def goLogin(self):
        print("%s 退出登录" %datetime.datetime.now())
        self.switch_window1.emit()
        self.hide()
    def goInformation(self):
        print("%s 进入个人信息页面" %datetime.datetime.now())
        self.switch_window2.emit()
        self.hide()
    def goHall(self):
        print("%s 进入购票大厅页面" % datetime.datetime.now())
        self.switch_window3.emit()
        self.hide()
    def gomyorder(self):
        print("%s 进入我的订单页面" % datetime.datetime.now())
        self.switch_window4.emit()
        self.hide()



class adminWindow(QtWidgets.QMainWindow,admin_ui):
    switch_window1 = QtCore.pyqtSignal()#退出管理员页面信号
    switch_window2 = QtCore.pyqtSignal()#进入用户管理页面信号
    switch_window3 = QtCore.pyqtSignal()#进入票务信息页面信号
    switch_window4 = QtCore.pyqtSignal()#进入更新列车状态页面信号
    switch_window5 = QtCore.pyqtSignal()#进入列车管理页面信号
    def __init__(self):
        super(adminWindow,self).__init__()
        self.setupUi(self)
        self.L_out.clicked.connect(self.goLogin)
        self.User_manage.clicked.connect(self.gousermanage)
        self.ticket_informations.clicked.connect(self.goticketInformation)
        self.update_train.clicked.connect(self.goupdatetrain)
        self.train_manage.clicked.connect(self.gotrainmanage)
    def goLogin(self):
        print("%s 退出登录" % datetime.datetime.now())
        self.switch_window1.emit()
        self.close()
    def gousermanage(self):
        print("%s 进入用户管理页面" % datetime.datetime.now())
        self.switch_window2.emit()
        self.close()
    def goticketInformation(self):
        print("%s 进入票务信息页面" % datetime.datetime.now())
        self.switch_window3.emit()
        self.close()
    def goupdatetrain(self):
        print("%s 进入更新列车状态页面" % datetime.datetime.now())
        self.switch_window4.emit()
        self.close()
    def gotrainmanage(self):
        print("%s 进入列车管理页面" % datetime.datetime.now())
        self.switch_window5.emit()
        self.close()

class pinfromationWindow(QtWidgets.QMainWindow,p_infor_ui):
    switch_window1 = QtCore.pyqtSignal()
    switch_window2 = QtCore.pyqtSignal()
    switch_window3 = QtCore.pyqtSignal()
    def __init__(self):
        super(pinfromationWindow,self).__init__()
        self.setupUi(self)
        self.e_p_informstion.clicked.connect(self.goUser)
        self.M_pwbutton.clicked.connect(self.goModify)
        self.add_moneybutton.clicked.connect(self.goVoucher)
    def goUser(self):
        print("%s 退出个人信息页面" % datetime.datetime.now())
        self.switch_window1.emit()
        self.close()
    def goModify(self):
        print("%s 进入修改密码页面" % datetime.datetime.now())
        self.switch_window2.emit()
        self.close()
    def goVoucher(self):
        print("%s 进入充值中心页面" % datetime.datetime.now())
        self.switch_window3.emit()
        self.close()




class modifyWindow(QtWidgets.QMainWindow,modify_pwui):#修改密码
    switch_window1 = QtCore.pyqtSignal()
    def __init__(self):
        super(modifyWindow,self).__init__()
        self.setupUi(self)
        self.exitButton.clicked.connect(self.goInformation)
    def goInformation(self):
        print("%s 退出修改密码页面" % datetime.datetime.now())
        self.switch_window1.emit()
        self.close()

class voucherWindow(QtWidgets.QMainWindow,voucher_ui):#充值页面
    switch_window1 = QtCore.pyqtSignal()
    def __init__(self):
        super(voucherWindow,self).__init__()
        self.setupUi(self)
        self.exitButton.clicked.connect(self.goinformation)
    def goinformation(self):
        print("%s 退出充值中心页面" % datetime.datetime.now())
        self.switch_window1.emit()
        self.close()

class ticketWindow(QtWidgets.QMainWindow,tickethall_ui):#购票大厅
    switch_window1 = QtCore.pyqtSignal()
    switch_window2 = QtCore.pyqtSignal()
    def __init__(self):
        super(ticketWindow,self).__init__()
        self.setupUi(self)
        place = ["广州", "深圳", "佛山", "东莞","中山","珠海","江门","肇庆","惠州","汕头","潮州","揭阳","汕尾","湛江","茂名","阳江","云浮","韶关","清远","梅州", "河源"]
        self.comboBox.addItems(place)
        place.remove('广州')
        self.comboBox_2.addItems(place)
        self.comboBox.currentTextChanged.connect(self.update5)
        self.exitbutton.clicked.connect(self.gouser1)
    def gouser1(self):
        print("%s 退出购票大厅页面" % datetime.datetime.now())
        self.switch_window1.emit()
        self.close()
    def update5(self):   #终点和起始点列表不同
        place1 = ["广州", "深圳", "佛山", "东莞","中山","珠海","江门","肇庆","惠州","汕头","潮州","揭阳","汕尾","湛江","茂名","阳江","云浮","韶关","清远","梅州", "河源"]
        n = self.comboBox.currentText()
        place1.remove(n)
        self.comboBox_2.clear()
        self.comboBox_2.addItems(place1)
    def pr(self):
        s = self.sender().objectName()
        y = s.strip('buyButton')
        y1 = int(y)
        exec(''' 
self.train.clear()
self.train_no.clear()
self.b_station.clear()
self.e_station.clear()
self.b_date.clear()
self.b_time.clear()
self.e_date.clear()
self.e_time.clear()
self.first_p.clear()
self.second_p.clear()
self.train.setText(self.train{i}.text())
self.train_no.setText(self.train_no{i}.text())
self.b_station.setText(self.b_station{i}.text())
self.e_station.setText(self.e_station{i}.text())
self.b_date.setText(self.b_date{i}.text())
self.e_date.setText(self.e_date{i}.text())
self.b_time.setText(self.b_time{i}.text())
self.e_time.setText(self.e_time{i}.text())
self.first_p.setText(self.first_p{i}.text())
self.second_p.setText(self.second_p{i}.text())
'''.format(i=y1))
        self.switch_window2.emit()
        self.hide()


class buyticketWindow(QtWidgets.QMainWindow,buytickethall_ui):  # 购票页面
     switch_window1 = QtCore.pyqtSignal()
     switch_window2 = QtCore.pyqtSignal()#切换等级刷新金额/车厢号
     def __init__(self):
        super(buyticketWindow, self).__init__()
        self.setupUi(self)
        self.exitButton.clicked.connect(self.gotickethall)
        self.comboBox.addItems(["一等座","二等座"])
        self.comboBox.currentTextChanged.connect(self.update1)
        self.comboBox_1.currentTextChanged.connect(self.update2)
     def gotickethall(self):
        self.switch_window1.emit()
        self.close()
     def update1(self):
        self.switch_window2.emit()
     def update2(self):
         self.comboBox_2.clear()
         train = int(self.T_date.text())
         items = ['1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20']
         chexian = self.comboBox_1.currentText()
         chexian1 = chexian.strip('号车厢')
         chexian2 = 0
         if chexian1=='':
             return
         else:
             chexian2 = int(chexian1)
         conn = pymysql.connect(
             host='localhost',
             port=3306,
             user='root',
             passwd='111111',
             db='train',
             charset='utf8'
         )
         cursor = conn.cursor()
         cursor.execute("select 座位 from 座位表 where 列车编号=%s and 车厢=%s"%(train,chexian2))
         zuowei = cursor.fetchall()
         for i in zuowei:
             for j in i:
                 print("%s %s号座位已售出"%(chexian,j))
                 items.remove(str(j))
         self.comboBox_2.addItems(items)
         cursor.close()
         conn.close()


class myorderWindow(QtWidgets.QMainWindow,myorder_ui):  # 个人订单页面
    switch_window1 = QtCore.pyqtSignal() #去用户个人中心
    def __init__(self):
        super(myorderWindow, self).__init__()
        self.setupUi(self)
        self.exitButton.clicked.connect(self.gouser2)
    def gouser2(self):
        print("%s 退出我的订单页面" % datetime.datetime.now())
        self.switch_window1.emit()
        self.close()

class usermanageWindow(QtWidgets.QMainWindow,usermanage_ui):#用户管理页面
    switch_window1 = QtCore.pyqtSignal()
    def __init__(self):
        super(usermanageWindow, self).__init__()
        self.setupUi(self)
        self.exitButton.clicked.connect(self.goadmin)
    def goadmin(self):
        print("%s 退出用户管理页面" % datetime.datetime.now())
        self.switch_window1.emit()
        self.close()
class ticketInformationWindow(QtWidgets.QMainWindow,ticketinformation_ui):#用户管理页面
    switch_window1 = QtCore.pyqtSignal()
    def __init__(self):
        super(ticketInformationWindow, self).__init__()
        self.setupUi(self)
        self.exitButton.clicked.connect(self.goAdmin)
    def goAdmin(self):
        print("%s 退出票务信息页面" % datetime.datetime.now())
        self.switch_window1.emit()
        self.close()
class updatetrainWindow(QtWidgets.QMainWindow,updatetrain_ui):#更新列车状态页面
    switch_window1 = QtCore.pyqtSignal()
    def __init__(self):
        super(updatetrainWindow, self).__init__()
        self.setupUi(self)
        self.exitButton.clicked.connect(self.goAdmin)
    def goAdmin(self):
        print("%s 退出更新列车状态页面" % datetime.datetime.now())
        self.switch_window1.emit()
        self.close()
class trainManageWindow(QtWidgets.QMainWindow,trainmanage_ui):#列车管理页面
    switch_window1 = QtCore.pyqtSignal()
    switch_window2 = QtCore.pyqtSignal()
    def __init__(self):
        super(trainManageWindow, self).__init__()
        self.setupUi(self)
        self.exitButton.clicked.connect(self.goAdmin)
        self.add_trainButton.clicked.connect(self.goAddtrain)
    def goAdmin(self):
        print("%s 退出列车管理页面" % datetime.datetime.now())
        self.switch_window1.emit()
        self.close()
    def goAddtrain(self):
        print("%s 进入添加列车页面" % datetime.datetime.now())
        self.switch_window2.emit()
        self.close()

class addTrainWindow(QtWidgets.QMainWindow,addtrain_ui):#列车管理页面
    switch_window1 = QtCore.pyqtSignal()
    def __init__(self):
        super(addTrainWindow, self).__init__()
        self.setupUi(self)
        self.exitButton.clicked.connect(self.gotrainManage)
    def gotrainManage(self):
        print("%s 退出添加列车页面" % datetime.datetime.now())
        self.switch_window1.emit()
        self.close()

class Controller:
    def __init__(self):
        pass
        self.login = loginWindow()
    def show_login(self):
        self.login = loginWindow()
        self.login.switch_window1.connect(self.show_user)
        self.login.switch_window2.connect(self.show_admin)
        self.login.switch_window3.connect(self.show_register)
        self.login.show()
    def show_register(self):#注册界面
        self.register = registerWindow()
        self.register.switch_window1.connect(self.show_login)
        self.register.show()
        self.login.hide()
    def show_user(self):#用户页面
        self.user = userWindow()
        self.user.switch_window1.connect(self.show_login1)
        self.user.switch_window2.connect(self.show_information)
        self.user.switch_window3.connect(self.show_tickethall)
        self.user.switch_window4.connect(self.show_myorder)
        u = self.login.Laccount.text()#传输账号信息
        self.user.U_date.setText(str(u))#写到用户页面
        self.user.show()
        self.login.hide()
    def show_admin(self):#管理员页面
        self.admin = adminWindow()
        self.admin.switch_window1.connect(self.show_login1)
        self.admin.switch_window2.connect(self.show_usermanage)
        self.admin.switch_window3.connect(self.show_ticketinformation)
        self.admin.switch_window4.connect(self.show_updatetrain)
        self.admin.switch_window5.connect(self.show_trainmanage)
        s = self.login.Laccount.text()
        self.admin.A_date.setText(str(s))
        self.admin.show()
        self.login.hide()
    def show_login1(self):
        self.login.Lpasswd.clear()
        self.login.show()

    def show_information(self):#个人信息页面
        conn = pymysql.connect(
            host='localhost',
            port=3306,
            user='root',
            passwd='111111',
            db='train',
            charset='utf8'
        )
        self.infromation = pinfromationWindow()
        self.infromation.switch_window1.connect(self.show_user)
        self.infromation.switch_window2.connect(self.show_modifypw)
        self.infromation.switch_window3.connect(self.show_voucher)
        self.infromation.show()
        u = self.user.U_date.text()#获取用户信息
        self.infromation.U_date.setText(u)
        infor = conn.cursor()
        infor.execute("select * from 用户表 where 手机号='%s'" %u)
        ud = []
        for i in infor.fetchall():
            for t in i:
                ud.insert(0,str(t))
        infor.close()
        conn.close()
        self.infromation.U_phonenumber.setText(ud[4])
        self.infromation.U_password.setText(ud[3])
        self.infromation.U_name.setText(ud[2])
        self.infromation.U_id.setText(ud[1])
        self.infromation.U_balance.setText(ud[0])
        self.user.hide()
    def show_modifypw(self):#修改密码页面
        self.modifypw = modifyWindow()
        self.modifypw.switch_window1.connect(self.show_information)
        u = self.infromation.U_date.text()
        self.modifypw.U_date.setText(u)
        self.modifypw.show()
        self.infromation.hide()
    def show_voucher(self):#充值中心页面
        self.voucher = voucherWindow()
        self.voucher.switch_window1.connect(self.show_information)
        u = self.infromation.U_date.text()
        self.voucher.U_date.setText(u)
        self.voucher.show()
        self.infromation.hide()
    def show_tickethall(self):
        self.tickethall = ticketWindow()
        self.tickethall.switch_window1.connect(self.show_user)
        self.tickethall.switch_window2.connect(self.show_buyticket)
        u = self.user.U_date.text()
        self.tickethall.U_data.setText(u)
        self.tickethall.show()
        self.user.hide()
    def db(self,amount):
        conn = pymysql.connect(
            host='localhost',
            port=3306,
            user='root',
            passwd='111111',
            db='train',
            charset='utf8'
        )
        cursor = conn.cursor()
        cursor.execute("select 一等座数量,二等座数量 from 列车表 where 列车编号=%s" %int(self.tickethall.train.text()))
        amount = []
        for i in cursor.fetchall():
            for j in i:
                amount.append(j)
        cursor.close()
        conn.close()
        return amount
    def show_buyticket(self):
        self.buyticket = buyticketWindow()
        self.buyticket.switch_window1.connect(self.show_tickethall1)
        self.buyticket.switch_window2.connect(self.show_updatemoney)
        u = self.tickethall.U_data.text()
        self.buyticket.U_date.setText(u)
        l = self.tickethall.train.text()
        self.buyticket.T_date.setText(l)
        self.buyticket.B_time.setText("<html><head/><body><p><span style=\" font-size:18pt; font-weight:600;\">%s</span></p></body></html>"%self.tickethall.b_time.text())
        self.buyticket.B_station.setText("<html><head/><body><p><span style=\" font-size:12pt; font-weight:600;\">%s</span></p></body></html>"%self.tickethall.b_station.text())
        self.buyticket.label_4.setText("<html><head/><body><p><span style=\" font-weight:600;\">————————————————————&gt;</span></p></body></html>")
        self.buyticket.E_time.setText("<html><head/><body><p><span style=\" font-size:18pt; font-weight:600;\">%s</span></p></body></html>"%self.tickethall.e_time.text())
        self.buyticket.E_station.setText( "<html><head/><body><p><span style=\" font-size:12pt; font-weight:600;\">%s</span></p></body></html>"%self.tickethall.e_station.text())
        self.buyticket.train_No.setText("<html><head/><body><p><span style=\" font-size:11pt; font-weight:600;\">%s</span></p></body></html>"%self.tickethall.train_no.text())
        self.buyticket.B_date.setText("<html><head/><body><p><span style=\" font-size:12pt; font-weight:600;\">%s</span></p></body></html>"%self.tickethall.b_date.text())
        self.buyticket.E_date.setText("<html><head/><body><p><span style=\" font-size:12pt; font-weight:600;\">%s</span></p></body></html>" % self.tickethall.e_date.text())
        amount = []
        self.buyticket.money.setText("<html><head/><body><p><span style=\" font-size:16pt; font-weight:600;\">¥%s</span></p></body></html>"%self.tickethall.first_p.text())
        self.buyticket.M_date.setText(self.tickethall.first_p.text())
        m = 0
        if self.db(amount)[0]%20>=1 :
            m = int(self.db(amount)[0]/20+1)
        else:
            m = int(self.db(amount)[0]/20)
        for n in range(m):
            self.buyticket.comboBox_1.addItem(str(n+1)+"号车厢")
        conn = pymysql.connect(
            host='localhost',
            port=3306,
            user='root',
            passwd='111111',
            db='train',
            charset='utf8'
        )
        cursor = conn.cursor()
        cursor.execute("select 途径站 from 列车表 where 列车编号='%s'"%self.buyticket.T_date.text())
        for x in cursor.fetchall():
            for y in x:
                self.buyticket.by_date.setText(y)
        self.buyticket.show()
        self.tickethall.hide()
    def show_tickethall1(self):#退出购票,大厅刷新票数,但是起始站和终点站不刷新
        self.tickethall.checkButton.click()
        self.buyticket.close()
        self.tickethall.show()
    def show_updatemoney(self):#刷新金额/车厢号
        amount = 0
        if self.buyticket.comboBox.currentText() =="一等座":
            self.buyticket.comboBox_1.clear()
            m = 0
            if self.db(amount)[0] % 20 >= 1:
                m = int(self.db(amount)[0] / 20 + 1)
            else:
                m = int(self.db(amount)[0] / 20)
            for n in range(m):
                self.buyticket.comboBox_1.addItem(str(n + 1) + '号车厢')
            self.buyticket.M_date.clear()
            self.buyticket.money.clear()
            self.buyticket.money.setText("<html><head/><body><p><span style=\" font-size:16pt; font-weight:600;\">¥%s</span></p></body></html>" % self.tickethall.first_p.text())
            self.buyticket.M_date.setText(self.tickethall.first_p.text())
        else:
            self.buyticket.comboBox_1.clear()
            m = 0
            se = 0
            if self.db(amount)[0] % 20 >= 1:
                m = int(self.db(amount)[0] / 20 + 1)
            else:
                m = int(self.db(amount)[0] / 20)
            if self.db(amount)[1] % 20 >= 1:
                se = int(self.db(amount)[1] / 20 + 1)
            else:
                se = int(self.db(amount)[1] / 20)
            for t in range(se):
                self.buyticket.comboBox_1.addItem(str(m + 1) + '号车厢')
                m = m + 1
            self.buyticket.M_date.clear()
            self.buyticket.money.clear()
            self.buyticket.money.setText( "<html><head/><body><p><span style=\" font-size:16pt; font-weight:600;\">¥%s</span></p></body></html>" % self.tickethall.second_p.text())
            self.buyticket.M_date.setText(self.tickethall.second_p.text())
    def show_myorder(self):
        self.myorder = myorderWindow()
        self.myorder.switch_window1.connect(self.show_user)
        self.myorder.U_date.setText(self.user.U_date.text())
        self.myorder.updateButton.click()
        self.myorder.show()
        self.user.close()
    def show_usermanage(self):
        self.usermanage = usermanageWindow()
        self.usermanage.switch_window1.connect(self.show_admin)
        self.usermanage.searchButton.click()
        self.usermanage.A_date.setText(self.admin.A_date.text())
        self.usermanage.show()
        self.admin.close()
    def show_ticketinformation(self):
        self.ticketinformation = ticketInformationWindow()
        self.ticketinformation.switch_window1.connect(self.show_admin)
        self.ticketinformation.A_date.setText(self.admin.A_date.text())
        self.ticketinformation.show()
        self.admin.close()
    def show_updatetrain(self):
        self.updatetrain = updatetrainWindow()
        self.updatetrain.switch_window1.connect(self.show_admin)
        self.updatetrain.A_date.setText(self.admin.A_date.text())
        self.updatetrain.searchButton.click()
        self.updatetrain.show()
        self.admin.close()
    def show_trainmanage(self):
        self.trainManage = trainManageWindow()
        self.trainManage.switch_window1.connect(self.show_admin)
        self.trainManage.switch_window2.connect(self.show_addtrain)
        self.trainManage.A_date.setText(self.admin.A_date.text())
        self.trainManage.updateButton.click()
        self.trainManage.show()
        self.admin.close()
    def show_addtrain(self):
        self.addTrain = addTrainWindow()
        self.addTrain.switch_window1.connect(self.show_trainmanage)
        self.addTrain.A_date.setText(self.trainManage.A_date.text())
        self.addTrain.show()
        self.trainManage.close()


def main():

    app = QtWidgets.QApplication(sys.argv)
    controller = Controller() #控制器实例
    controller.show_login() #默认展示的是登录页面
    sys.exit(app.exec_())
if __name__ == '__main__':
    main()

登录界面UI设计:包含管理员和用户登录选择、以及注册功能

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'loginUI.ui'
#
# Created by: PyQt5 UI code generator 5.15.6
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets
import pymysql
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox
import datetime
conn = pymysql.connect(
    host='localhost',
    port=3306,
    user='root',
    passwd='111111',
    db='train',
    charset='utf8'
)

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        MainWindow.setStyleSheet("#MainWindow{border-image: url(:/thpic/60.jpg);}")
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.id_choice = QtWidgets.QComboBox(self.centralwidget)
        self.id_choice.setGeometry(QtCore.QRect(330, 250, 120, 22))
        self.id_choice.setObjectName("id_choice")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(250, 20, 281, 41))
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(280, 160, 51, 16))
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(280, 200, 51, 16))
        self.label_3.setObjectName("label_3")
        self.Laccount = QtWidgets.QLineEdit(self.centralwidget)
        self.Laccount.setGeometry(QtCore.QRect(330, 160, 120, 21))
        self.Laccount.setObjectName("Laccount")
        self.Lpasswd = QtWidgets.QLineEdit(self.centralwidget)
        self.Lpasswd.setGeometry(QtCore.QRect(330, 200, 120, 21))
        self.Lpasswd.setEchoMode(QtWidgets.QLineEdit.Password)
        self.Lpasswd.setObjectName("Lpasswd")
        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        self.label_4.setGeometry(QtCore.QRect(240, 250, 81, 20))
        self.label_4.setObjectName("label_4")
        self.L_button = QtWidgets.QPushButton(self.centralwidget)
        self.L_button.setGeometry(QtCore.QRect(280, 330, 101, 28))
        self.L_button.setObjectName("L_button")
        self.S_button = QtWidgets.QPushButton(self.centralwidget)
        self.S_button.setGeometry(QtCore.QRect(400, 330, 93, 28))
        self.S_button.setObjectName("S_button")
        #self.F_passwd = QtWidgets.QLabel(self.centralwidget)
        #self.F_passwd.setGeometry(QtCore.QRect(460, 200, 101, 16))
        #self.F_passwd.setObjectName("F_passwd")
        self.error_reminder = QtWidgets.QLabel(self.centralwidget)
        self.error_reminder.setGeometry(QtCore.QRect(260, 110, 301, 16))
        self.error_reminder.setObjectName("error_reminder")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.id_choice.addItems(['用户','管理员'])#身份选择列表

       # self.L_button.clicked.connect(self.login)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    '''def login(self):
        id = self.id_choice.currentText()
        ac = self.Laccount.text()
        pw = self.Lpasswd.text()
        if id=='用户':
            print("%s  用户:%s 在尝试登录" %(datetime.datetime.now(),self.Laccount.text()))
            user = conn.cursor()
            sql = "select * from 用户表 where 手机号='%s' and 密码='%s'"%(ac,pw)
            user.execute(sql)
            if len(user.fetchall())==0:
                print("%s 登录失败"%datetime.datetime.now())
                self.error_reminder.show()
            else:
                print("%s 登录成功,进入用户主页" % datetime.datetime.now())
                self.error_reminder.hide()
            user.close()
        if id=='管理员':
            print("%s  管理员:%s 在尝试登录" % (datetime.datetime.now(), self.Laccount.text()))
            admin = conn.cursor()
            sql = "select * from 管理员表 where 管理员账号='%s' and 密码='%s'" %(ac,pw)
            admin.execute(sql)
            if len(admin.fetchall())==0:
                print("%s 登录失败" % datetime.datetime.now())
                self.error_reminder.show()
            else:
                print("%s 登录成功,进入管理员主页" % datetime.datetime.now())
                self.error_reminder.hide()
            admin.close()'''

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "登录界面"))
        self.label.setText(_translate("MainWindow", "<html><head/><body><p><span style=\" font-size:16pt; font-weight:600;\">火车售票管理信息系统</span></p></body></html>"))
        self.label_2.setText(_translate("MainWindow", "账号:"))
        self.Laccount.setPlaceholderText(_translate("MainWindow", "请输入手机号"))
        self.Lpasswd.setPlaceholderText(_translate("MainWindow", "请输入密码"))
        self.label_3.setText(_translate("MainWindow", "密码:"))
        self.label_4.setText(_translate("MainWindow", "请选择身份:"))
        self.L_button.setText(_translate("MainWindow", "登录"))
        self.S_button.setText(_translate("MainWindow", "注册"))
        #self.F_passwd.setText(_translate("MainWindow", "忘记密码?"))
        self.error_reminder.setText(_translate("MainWindow", "<html><head/><body><p><span style=\" color:#ff0000;\">密码或账号错误,请重新输入!!!</span></p></body></html>"))
        self.error_reminder.hide()
import thp
if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

注册UI实现:通过显示验证码的方式来实现验证

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'register.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox
import random
import pymysql

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        font = QtGui.QFont()
        font.setFamily("Arial")
        MainWindow.setFont(font)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(300, 460, 121, 51))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(24)
        self.pushButton.setFont(font)
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(620, 20, 101, 41))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(18)
        self.pushButton_2.setFont(font)
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_3.setGeometry(QtCore.QRect(390, 360, 81, 41))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(18)
        self.pushButton_3.setFont(font)
        self.pushButton_3.setObjectName("pushButton_3")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(470, 90, 171, 31))
        palette = QtGui.QPalette()
        brush = QtGui.QBrush(QtGui.QColor(231, 56, 13))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(231, 56, 13))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(120, 120, 120))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush)
        self.label.setPalette(palette)
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(470, 140, 171, 31))
        palette = QtGui.QPalette()
        brush = QtGui.QBrush(QtGui.QColor(234, 6, 41))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(234, 6, 41))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(120, 120, 120))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush)
        self.label_2.setPalette(palette)
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(470, 200, 171, 31))
        palette = QtGui.QPalette()
        brush = QtGui.QBrush(QtGui.QColor(232, 9, 50))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(232, 9, 50))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(120, 120, 120))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush)
        self.label_3.setPalette(palette)
        self.label_3.setObjectName("label_3")
        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        self.label_4.setGeometry(QtCore.QRect(470, 250, 171, 31))
        palette = QtGui.QPalette()
        brush = QtGui.QBrush(QtGui.QColor(239, 7, 61))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(239, 7, 61))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(120, 120, 120))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush)
        self.label_4.setPalette(palette)
        self.label_4.setObjectName("label_4")
        self.label_5 = QtWidgets.QLabel(self.centralwidget)
        self.label_5.setGeometry(QtCore.QRect(470, 300, 171, 31))
        palette = QtGui.QPalette()
        brush = QtGui.QBrush(QtGui.QColor(239, 13, 43))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(239, 13, 43))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(120, 120, 120))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush)
        self.label_5.setPalette(palette)
        self.label_5.setObjectName("label_5")
        self.label_6 = QtWidgets.QLabel(self.centralwidget)
        self.label_6.setGeometry(QtCore.QRect(230, 410, 171, 31))
        palette = QtGui.QPalette()
        brush = QtGui.QBrush(QtGui.QColor(239, 11, 34))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(239, 11, 34))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(120, 120, 120))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush)
        self.label_6.setPalette(palette)
        self.label_6.setTextFormat(QtCore.Qt.AutoText)
        self.label_6.setObjectName("label_6")
        self.widget = QtWidgets.QWidget(self.centralwidget)
        self.widget.setGeometry(QtCore.QRect(220, 80, 241, 261))
        self.widget.setObjectName("widget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.widget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setSpacing(10)
        self.verticalLayout.setObjectName("verticalLayout")
        self.lineEdit_6 = QtWidgets.QLineEdit(self.widget)
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(18)
        self.lineEdit_6.setFont(font)
        self.lineEdit_6.setObjectName("lineEdit_6")
        self.verticalLayout.addWidget(self.lineEdit_6)
        self.lineEdit = QtWidgets.QLineEdit(self.widget)
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(18)
        self.lineEdit.setFont(font)
        self.lineEdit.setObjectName("lineEdit")
        self.verticalLayout.addWidget(self.lineEdit)
        self.lineEdit_2 = QtWidgets.QLineEdit(self.widget)
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(18)
        self.lineEdit_2.setFont(font)
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.verticalLayout.addWidget(self.lineEdit_2)


        self.lineEdit_3 = QtWidgets.QLineEdit(self.widget)
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(18)
        self.lineEdit_3.setFont(font)
        self.lineEdit_3.setObjectName("lineEdit_3")
        self.verticalLayout.addWidget(self.lineEdit_3)
        self.lineEdit_4 = QtWidgets.QLineEdit(self.widget)
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(18)
        self.lineEdit_4.setFont(font)
        self.lineEdit_4.setObjectName("lineEdit_4")
        self.verticalLayout.addWidget(self.lineEdit_4)
        self.widget1 = QtWidgets.QWidget(self.centralwidget)
        self.widget1.setGeometry(QtCore.QRect(220, 350, 161, 61))
        self.widget1.setObjectName("widget1")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.widget1)
        self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.lineEdit_5 = QtWidgets.QLineEdit(self.widget1)
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(18)
        self.lineEdit_5.setFont(font)
        self.lineEdit_5.setObjectName("lineEdit_5")
        self.horizontalLayout.addWidget(self.lineEdit_5)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
        self.menubar.setObjectName("menubar")
        self.menu = QtWidgets.QMenu(self.menubar)
        self.menu.setObjectName("menu")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.menubar.addAction(self.menu.menuAction())

        self.pushButton.clicked.connect(self.go_Log2)
        a = self.random_num()
        self.pushButton_3.setText(a)
        self.pushButton_3.clicked.connect(self.yzm)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)


        self.label_2.setVisible(False)
        self.label_3.setVisible(False)

        self.label.setVisible(False)     #手机号
        self.label_4.setVisible(False)   #密码
        self.label_5.setVisible(False)   #身份证
        self.label_6.setVisible(False)  #验证码

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "确认"))
        self.pushButton_2.setText(_translate("MainWindow", "返回"))
        self.label.setText(_translate("MainWindow", "当前手机号已存在"))
        self.label_2.setText(_translate("MainWindow", "当前用户名已存在"))
        self.label_3.setText(_translate("MainWindow", "请输入全部的信息"))
        self.label_4.setText(_translate("MainWindow", "密码不一致,请重新输入"))
        self.label_5.setText(_translate("MainWindow", "当身份证号已被绑定"))
        self.label_6.setText(_translate("MainWindow", "请重新输入验证码"))
        self.lineEdit_6.setPlaceholderText(_translate("MainWindow", "请输入手机号"))
        self.lineEdit.setPlaceholderText(_translate("MainWindow", "请输入用户名"))
        self.lineEdit_2.setPlaceholderText(_translate("MainWindow", "请输入密码"))
        self.lineEdit_3.setPlaceholderText(_translate("MainWindow", "再次输入确认密码"))
        self.lineEdit_4.setPlaceholderText(_translate("MainWindow", "请输入身份证号"))
        self.lineEdit_5.setPlaceholderText(_translate("MainWindow", "请输入验证码"))
        self.menu.setTitle(_translate("MainWindow", "账号注册"))

        #在进入注册界面时先生成一个随机验证码


    def yzm(self):
        b = self.random_num()
        self.pushButton_3.setText(b)

    def random_num(self):
        temp = ''
        check_num = 4   #验证码位数
        for i in range(check_num):  # check_num为需要循环的次数,也就是需要生成验证码的个数,默认为4
            choice = random.randint(1, 3)  # 生成1到3的随机数
            if choice  ==  1:  # 如果choice为1,则随机验证码的值为数字
                temp += random.choice('0123456789')
            elif choice  ==  2:  # 如果choice为2,则随机验证码的值为大写字母
                num = random.randint(65, 90)
                temp += chr(num)
            elif choice  ==  3:  # 如果choice为3,则随机验证码的值为小写字母
                num = random.randint(97, 122)
                temp += chr(num)
        return temp


    def go_Log2(self):

        conn = pymysql.connect(host='localhost',
                               port=3306,
                               user='root',
                               password='111111',
                               database='train',
                               charset='utf8')
        cursor = conn.cursor()
        success = 0     #用于确保全部注册信息都正确
        #每次点击确认出错后,下一次点击时先清空错误提示
        self.label.setVisible(False)     #手机号
        self.label_4.setVisible(False)   #密码
        self.label_5.setVisible(False)   #身份证
        self.label_6.setVisible(False)  #验证码

        tel = self.lineEdit_6.text()
        usr = self.lineEdit.text()
        pas1 = self.lineEdit_2.text()
        pas2 = self.lineEdit_3.text()
        ide = self.lineEdit_4.text()
        code = self.lineEdit_5.text()

        if tel != '' and usr != '' and pas1 != '' and pas2 != '' and ide != '' and code != '' :

            sql1 = "select * from 用户表 where 手机号 = '%s' " %(tel)
            cursor.execute(sql1)
            r = cursor.fetchall()
            lr = len(r)

            sql2 = "select * from 用户表 where 身份证号 = '%s' " %(ide)
            cursor.execute(sql2)
            r2 = cursor.fetchall()
            lr2 = len(r2)

            if lr != 0:
                self.label.setVisible(True)
                success = 1

            if lr2 != 0:
                self.label_5.setVisible(True)
                success = 1

            #获取当前的验证码的值
            c = self.pushButton_3.text()
            if code != c :
                #验证码输入错误时,自动刷新生成新的验证码
                self.yzm()
                self.label_6.setVisible(True)
                success = 1

            if pas1 != pas2 :
                self.label_4.setVisible(True)
                success = 1

            checkID = "select * from 身份表 where 姓名='%s' and 身份证号码='%s'" % (usr, ide)
            cursor.execute(checkID)
            if cursor.rowcount == 0:
                success = 1
                QMessageBox.critical(self, "身份信息错误", "请重新输入正确的身份信息")

            checkPhone = "select * from 手机号表 where 手机号码='%s'" % (tel)
            cursor.execute(checkPhone)
            if cursor.rowcount == 0:
                success = 1
                QMessageBox.critical(self, "手机号码错误", "请重新输入正确的手机号码信息")

            if success == 0:
                sql3 = "insert into 用户表 (手机号,密码,姓名,身份证号,余额) values ('%s','%s','%s','%s',0)" % (tel,pas1,usr,ide)
                cursor.execute(sql3)
                conn.commit() #提交数据
                QMessageBox.information(self, "注册", "注册成功!!!")
                self.pushButton_2.click()
        else:
            self.label_3.setVisible(True)
            QMessageBox.critical(self, "错误", "请输入完整信息!!!")



if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

用户主页UI功能设计:个人信息、购票大厅、我的订单三个功能模块、内含部分逻辑设计

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'User_homeUI.ui'
#
# Created by: PyQt5 UI code generator 5.15.6
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets
import thp

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        MainWindow.setStyleSheet("#MainWindow{border-image: url(:/thpic/60.jpg);}")
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(250, 20, 281, 41))
        self.label.setObjectName("label")
        self.L_out = QtWidgets.QPushButton(self.centralwidget)
        self.L_out.setGeometry(QtCore.QRect(630, 70, 93, 28))
        self.L_out.setObjectName("L_out")
        self.U_date = QtWidgets.QLabel(self.centralwidget)
        self.U_date.setGeometry(QtCore.QRect(30, 510, 72, 15))
        self.U_date.setObjectName("U_date")
        self.P_information = QtWidgets.QPushButton(self.centralwidget)
        self.P_information.setGeometry(QtCore.QRect(80, 290, 211, 141))
        self.P_information.setObjectName("P_information")
        self.M_order = QtWidgets.QPushButton(self.centralwidget)
        self.M_order.setGeometry(QtCore.QRect(520, 290, 211, 141))
        self.M_order.setObjectName("M_order")
        self.T_hall = QtWidgets.QPushButton(self.centralwidget)
        self.T_hall.setGeometry(QtCore.QRect(300, 290, 211, 141))
        self.T_hall.setObjectName("T_hall")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "用户主页"))
        self.label.setText(_translate("MainWindow", "<html><head/><body><p><span style=\" font-size:16pt; font-weight:600;\">火车售票管理信息系统</span></p></body></html>"))
        self.L_out.setText(_translate("MainWindow", "退出登录"))
        self.U_date.setText(_translate("MainWindow", "TextLabel"))
        self.P_information.setText(_translate("MainWindow", "个人信息"))
        self.M_order.setText(_translate("MainWindow", "我的订单"))
        self.T_hall.setText(_translate("MainWindow", "购票大厅"))
        self.U_date.hide()

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

用户-个人信息UI设计:展示用户的信息,内含充值以及修改密码的功能

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'p_informationUI.ui'
#
# Created by: PyQt5 UI code generator 5.15.6
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets
import pymysql
import thp
conn = pymysql.connect(
    host='localhost',
    port=3306,
    user='root',
    passwd='111111',
    db='train',
    charset='utf8'
)




class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        MainWindow.setStyleSheet("#MainWindow{border-image: url(:/thpic/60.jpg);}")
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(330, 20, 131, 41))
        self.label.setObjectName("label")
        self.U_date = QtWidgets.QLabel(self.centralwidget)
        self.U_date.setGeometry(QtCore.QRect(30, 510, 72, 15))
        self.U_date.setObjectName("U_date")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(270, 130, 71, 21))
        self.label_2.setObjectName("label_2")
        self.U_phonenumber = QtWidgets.QLabel(self.centralwidget)
        self.U_phonenumber.setGeometry(QtCore.QRect(340, 130, 151, 21))
        self.U_phonenumber.setObjectName("U_phonenumber")
        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        self.label_4.setGeometry(QtCore.QRect(290, 170, 51, 21))
        self.label_4.setObjectName("label_4")
        self.U_password = QtWidgets.QLabel(self.centralwidget)
        self.U_password.setGeometry(QtCore.QRect(340, 170, 151, 21))
        self.U_password.setObjectName("U_password")
        self.label_6 = QtWidgets.QLabel(self.centralwidget)
        self.label_6.setGeometry(QtCore.QRect(290, 210, 41, 21))
        self.label_6.setObjectName("label_6")
        self.U_name = QtWidgets.QLabel(self.centralwidget)
        self.U_name.setGeometry(QtCore.QRect(340, 210, 151, 21))
        self.U_name.setObjectName("U_name")
        self.label_8 = QtWidgets.QLabel(self.centralwidget)
        self.label_8.setGeometry(QtCore.QRect(240, 250, 101, 21))
        self.label_8.setObjectName("label_8")
        self.U_id = QtWidgets.QLabel(self.centralwidget)
        self.U_id.setGeometry(QtCore.QRect(340, 250, 151, 21))
        self.U_id.setObjectName("U_id")
        self.label_10 = QtWidgets.QLabel(self.centralwidget)
        self.label_10.setGeometry(QtCore.QRect(290, 290, 51, 21))
        self.label_10.setObjectName("label_10")
        self.U_balance = QtWidgets.QLabel(self.centralwidget)
        self.U_balance.setGeometry(QtCore.QRect(340, 290, 151, 21))
        self.U_balance.setObjectName("U_balance")
        self.M_pwbutton = QtWidgets.QPushButton(self.centralwidget)
        self.M_pwbutton.setGeometry(QtCore.QRect(280, 360, 93, 28))
        self.M_pwbutton.setObjectName("M_pwbutton")
        self.add_moneybutton = QtWidgets.QPushButton(self.centralwidget)
        self.add_moneybutton.setGeometry(QtCore.QRect(380, 360, 93, 28))
        self.add_moneybutton.setObjectName("add_moneybutton")
        self.e_p_informstion = QtWidgets.QPushButton(self.centralwidget)
        self.e_p_informstion.setGeometry(QtCore.QRect(280, 410, 191, 28))
        self.e_p_informstion.setObjectName("e_p_informstion")


        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "个人信息"))
        self.label.setText(_translate("MainWindow", "<html><head/><body><p><span style=\" font-size:16pt; font-weight:600;\">个人信息</span></p></body></html>"))
        self.U_date.setText(_translate("MainWindow", "TextLabel"))
        self.label_2.setText(_translate("MainWindow", "<html><head/><body><p><span style=\" font-size:11pt;\">手机号:</span></p></body></html>"))
        self.label_4.setText(_translate("MainWindow", "<html><head/><body><p><span style=\" font-size:11pt;\">密码:</span></p></body></html>"))
        self.label_6.setText(_translate("MainWindow", "<html><head/><body><p><span style=\" font-size:11pt;\">姓名:</span></p></body></html>"))
        self.label_8.setText(_translate("MainWindow", "<html><head/><body><p><span style=\" font-size:11pt;\">身份证号码:</span></p></body></html>"))
        self.label_10.setText(_translate("MainWindow", "<html><head/><body><p><span style=\" font-size:11pt;\">余额:</span></p></body></html>"))
        self.M_pwbutton.setText(_translate("MainWindow", "修改密码"))
        self.add_moneybutton.setText(_translate("MainWindow", "充值"))
        self.e_p_informstion.setText(_translate("MainWindow", "返回"))
        self.U_date.hide()


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

用户-个人信息-修改密码UI设计

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'modify_passwdUI.ui'
#
# Created by: PyQt5 UI code generator 5.15.6
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets
import pymysql
import datetime
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox
class Ui_MainWindow(object):

    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(330, 20, 131, 41))
        self.label.setObjectName("label")
        self.ensureButton = QtWidgets.QPushButton(self.centralwidget)
        self.ensureButton.setGeometry(QtCore.QRect(330, 230, 141, 28))
        self.ensureButton.setObjectName("ensureButton")
        self.exitButton = QtWidgets.QPushButton(self.centralwidget)
        self.exitButton.setGeometry(QtCore.QRect(330, 270, 141, 28))
        self.exitButton.setObjectName("exitButton")
        self.M_passwd = QtWidgets.QLineEdit(self.centralwidget)
        self.M_passwd.setGeometry(QtCore.QRect(330, 120, 141, 31))
        self.M_passwd.setObjectName("M_passwd")
        self.M_passwd1 = QtWidgets.QLineEdit(self.centralwidget)
        self.M_passwd1.setGeometry(QtCore.QRect(330, 160, 141, 31))
        self.M_passwd1.setObjectName("M_passwd1")
        self.error_reminder = QtWidgets.QLabel(self.centralwidget)
        self.error_reminder.setGeometry(QtCore.QRect(330, 200, 141, 20))
        self.error_reminder.setObjectName("error_reminder")
        self.U_date = QtWidgets.QLabel(self.centralwidget)
        self.U_date.setGeometry(QtCore.QRect(40, 510, 72, 15))
        self.U_date.setObjectName("U_date")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.ensureButton.clicked.connect(self.modify)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "修改密码"))
        self.label.setText(_translate("MainWindow", "<html><head/><body><p><span style=\" font-size:16pt; font-weight:600;\">修改密码</span></p></body></html>"))
        self.ensureButton.setText(_translate("MainWindow", "确定修改"))
        self.exitButton.setText(_translate("MainWindow", "退出修改"))
        self.M_passwd.setPlaceholderText(_translate("MainWindow", "请输入新的密码"))
        self.M_passwd1.setPlaceholderText(_translate("MainWindow", "请再次输入新的密码"))
        self.U_date.setText(_translate("MainWindow", "TextLabel"))
        self.U_date.hide()

    def modify(self):
        self.error_reminder.setText("<html><head/><body><p><span style=\" color:#ff0000;\">密码不一致!!!</span></p></body></html>")
        self.error_reminder.hide()
        conn = pymysql.connect(
            host='localhost',
            port=3306,
            user='root',
            passwd='111111',
            db='train',
            charset='utf8'
        )
        u = self.U_date.text()
        p = self.M_passwd.text()
        p1 = self.M_passwd1.text()
        if p!=p1:
            print("%s 修改密码失败"%datetime.datetime.now())
            self.error_reminder.show()
        else:
            cursor = conn.cursor()
            sql = "update 用户表 set 密码='%s' where 手机号='%s' "%(p,u)
            cursor.execute(sql)
            conn.commit()
            cursor.close()
            conn.close()
            QMessageBox.information(self,"成功","成功修改密码!")
            self.exitButton.click()


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

用户-个人信息-充值中心UI设计

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'voucher_centerUI.ui'
#
# Created by: PyQt5 UI code generator 5.15.6
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.

from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox
from PyQt5 import QtCore, QtGui, QtWidgets
import string
import pymysql
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(330, 20, 131, 41))
        self.label.setObjectName("label")
        self.ensureButton = QtWidgets.QPushButton(self.centralwidget)
        self.ensureButton.setGeometry(QtCore.QRect(330, 230, 141, 28))
        self.ensureButton.setObjectName("ensureButton")
        self.exitButton = QtWidgets.QPushButton(self.centralwidget)
        self.exitButton.setGeometry(QtCore.QRect(330, 270, 141, 28))
        self.exitButton.setObjectName("exitButton")
        self.re_amount = QtWidgets.QLineEdit(self.centralwidget)
        self.re_amount.setGeometry(QtCore.QRect(330, 160, 141, 31))
        self.re_amount.setObjectName("re_amount")
        self.U_date = QtWidgets.QLabel(self.centralwidget)
        self.U_date.setGeometry(QtCore.QRect(40, 510, 72, 15))
        self.U_date.setObjectName("U_date")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(240, 160, 81, 41))
        self.label_2.setObjectName("label_2")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.ensureButton.clicked.connect(self.addmoney)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "充值中心"))
        self.label.setText(_translate("MainWindow", "<html><head/><body><p><span style=\" font-size:16pt; font-weight:600;\">充值中心</span></p></body></html>"))
        self.ensureButton.setText(_translate("MainWindow", "确定充值"))
        self.exitButton.setText(_translate("MainWindow", "关闭充值窗口"))
        self.re_amount.setPlaceholderText(_translate("MainWindow", "请输入金额"))
        self.U_date.setText(_translate("MainWindow", "TextLabel"))
        self.label_2.setText(_translate("MainWindow", "<html><head/><body><p><span style=\" font-size:11pt; font-weight:600;\">充值金额:</span></p></body></html>"))
        self.U_date.hide()
    def addmoney(self):
        user = self.U_date.text()
        money = self.re_amount.text()
        m = int(money)
        conn = pymysql.connect(
            host='localhost',
            port=3306,
            user='root',
            passwd='111111',
            db='train',
            charset='utf8'
        )
        cursor = conn.cursor()
        sql = "update 用户表 set 余额=余额+%s where 手机号='%s'"%(m,user)
        cursor.execute(sql)
        conn.commit()
        cursor.close()
        conn.close()
        re = "成功充值"+money+"元!!!"
        QMessageBox.information(self,"充值",re)
        self.exitButton.click()

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

用户-购票大厅UI设计:通过时间、起始站和终点站进行检索,以列表的方式展示列车信息,这里需要熟悉python的exec()函数,还需要注意列表中的功能键绑定
exec()函数的使用可以参考其他博主的介绍,例如:添加链接描述

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'Ticket_hallUI.ui'
#
# Created by: PyQt5 UI code generator 5.15.6
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.

import datetime
import pymysql
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import pyqtSlot, QDate

from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox
import time
import string
import thp

class Ui_MainWindow(object):
    numb = 0
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        MainWindow.setStyleSheet("#MainWindow{border-image: url(:/thpic/60.jpg);}")
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.comboBox = QtWidgets.QComboBox(self.centralwidget)
        self.comboBox.setGeometry(QtCore.QRect(120, 70, 87, 22))
        self.comboBox.setObjectName("comboBox")
        self.dateEdit = QtWidgets.QDateEdit(self.centralwidget)
        self.dateEdit.setGeometry(QtCore.QRect(300, 70, 110, 22))
        self.dateEdit.setObjectName("dateEdit")
        self.comboBox_2 = QtWidgets.QComboBox(self.centralwidget)
        self.comboBox_2.setGeometry(QtCore.QRect(530, 70, 87, 22))
        self.comboBox_2.setObjectName("comboBox_2")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(140, 40, 72, 15))
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(320, 40, 72, 15))
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(530, 40, 72, 15))
        self.label_3.setObjectName("label_3")
        self.scrollArea = QtWidgets.QScrollArea(self.centralwidget)
        self.scrollArea.setGeometry(QtCore.QRect(10, 130, 761, 381))
        self.scrollArea.setWidgetResizable(False)
        self.scrollArea.setObjectName("scrollArea")
        self.scrollAreaWidgetContents = QtWidgets.QWidget()
        self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 749, 349))
        self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
        self.train_no0 = QtWidgets.QLabel(self.scrollAreaWidgetContents)
        self.train_no0.setGeometry(QtCore.QRect(10, 10, 51, 16))
        self.train_no0.setObjectName("train_no0")
        self.b_station0 = QtWidgets.QLabel(self.scrollAreaWidgetContents)
        self.b_station0.setGeometry(QtCore.QRect(80, 10, 51, 16))
        self.b_station0.setObjectName("b_station0")
        self.e_station0 = QtWidgets.QLabel(self.scrollAreaWidgetContents)
        self.e_station0.setGeometry(QtCore.QRect(150, 10, 72, 15))
        self.e_station0.setObjectName("e_station0")
        self.b_date0 = QtWidgets.QLabel(self.scrollAreaWidgetContents)
        self.b_date0.setGeometry(QtCore.QRect(230, 10, 72, 15))
        self.b_date0.setObjectName("b_date0")
        self.b_time0 = QtWidgets.QLabel(self.scrollAreaWidgetContents)
        self.b_time0.setGeometry(QtCore.QRect(320, 10, 72, 15))
        self.b_time0.setObjectName("b_time0")
        self.line0 = QtWidgets.QFrame(self.scrollAreaWidgetContents)
        self.line0.setGeometry(QtCore.QRect(0, 30, 741, 20))
        self.line0.setFrameShape(QtWidgets.QFrame.HLine)
        self.line0.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line0.setObjectName("line0")
        self.e_time0 = QtWidgets.QLabel(self.scrollAreaWidgetContents)
        self.e_time0.setGeometry(QtCore.QRect(520, 10, 72, 15))
        self.e_time0.setObjectName("e_time0")
        self.e_date0 = QtWidgets.QLabel(self.scrollAreaWidgetContents)
        self.e_date0.setGeometry(QtCore.QRect(430, 10, 72, 15))
        self.e_date0.setObjectName("e_date0")
        self.scrollArea.setWidget(self.scrollAreaWidgetContents)
        self.checkButton = QtWidgets.QPushButton(self.centralwidget)
        self.checkButton.setGeometry(QtCore.QRect(650, 70, 93, 28))
        self.checkButton.setObjectName("checkButton")
        self.exitbutton = QtWidgets.QPushButton(self.centralwidget)
        self.exitbutton.setGeometry(QtCore.QRect(320, 520, 93, 28))
        self.exitbutton.setObjectName("exitbutton")
        self.U_data = QtWidgets.QLabel(self.centralwidget)
        self.U_data.setGeometry(QtCore.QRect(40, 520, 72, 15))
        self.U_data.setObjectName("U_data")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.dateEdit.setDate(QDate.fromString(str(datetime.date.today()),1)) #定义时间,获取当天时间
        self.dateEdit.setMinimumDateTime(QtCore.QDateTime(QDate.fromString(str(datetime.date.today()), 1), QtCore.QTime(0, 0, 0)))#最小时间
        self.dateEdit.setCalendarPopup(True)#开启日历
        self.dateEdit.dateTimeChanged.connect(self.check)#日期更新的时候查询

        self.train= QtWidgets.QLabel(self.centralwidget)
        self.train.setGeometry(QtCore.QRect(10, 10 ,72, 15))
        self.train.setObjectName("train")
        self.train_no = QtWidgets.QLabel(self.centralwidget)
        self.train_no.setGeometry(QtCore.QRect(90, 10 , 72, 15))
        self.train_no.setObjectName("train_no")
        self.b_station = QtWidgets.QLabel(self.centralwidget)
        self.b_station.setGeometry(QtCore.QRect(170, 10 , 72, 15))
        self.b_station.setObjectName("b_station")
        self.e_station = QtWidgets.QLabel(self.centralwidget)
        self.e_station.setGeometry(QtCore.QRect(250, 10 , 72, 15))
        self.e_station.setObjectName("e_station")
        self.b_date = QtWidgets.QLabel(self.centralwidget)
        self.b_date.setGeometry(QtCore.QRect(340, 10, 72, 15))
        self.b_date.setObjectName("b_date")
        self.e_date = QtWidgets.QLabel(self.centralwidget)
        self.e_date.setGeometry(QtCore.QRect(340, 5, 72, 15))
        self.e_date.setObjectName("e_date")
        self.b_time= QtWidgets.QLabel(self.centralwidget)
        self.b_time.setGeometry(QtCore.QRect(430, 10 , 72, 15))
        self.b_time.setObjectName("b_time")
        self.e_time = QtWidgets.QLabel(self.centralwidget)
        self.e_time.setGeometry(QtCore.QRect(520, 10, 72, 15))
        self.e_time.setObjectName("b_time")
        self.first_p = QtWidgets.QLabel(self.centralwidget)
        self.first_p.setGeometry(QtCore.QRect(610, 10 , 72, 15))
        self.first_p.setObjectName("first_p")
        self.second_p = QtWidgets.QLabel(self.centralwidget)
        self.second_p.setGeometry(QtCore.QRect(700, 10, 72, 15))
        self.second_p.setObjectName("second_p")
        conn = pymysql.connect(
            host='localhost',
            port=3306,
            user='root',
            passwd='111111',
            db='train',
            charset='utf8'
        )
        cursor = conn.cursor()
        cursor.execute("select * from 列车表 where 列车状态='运行'")
        self.numb = cursor.rowcount
        cursor.close()
        conn.close()
        for i in range(self.numb):
            exec(''' 
self.train{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.train{j}.setGeometry(QtCore.QRect(650, 100+{y}, 51, 16))
self.train{j}.setObjectName("train0")
self.train_no{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.train_no{j}.setGeometry(QtCore.QRect(10, 60+{y}, 51, 16))
self.train_no{j}.setObjectName("train_no0")
self.b_station{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.b_station{j}.setGeometry(QtCore.QRect(80, 60+{y}, 51, 16))
self.b_station{j}.setObjectName("b_station0")
self.e_station{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.e_station{j}.setGeometry(QtCore.QRect(150, 60+{y}, 72, 15))
self.e_station{j}.setObjectName("e_station0")
self.b_date{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.b_date{j}.setGeometry(QtCore.QRect(230, 60+{y}, 72, 15))
self.b_date{j}.setObjectName("b_date0")
self.b_time{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.b_time{j}.setGeometry(QtCore.QRect(320, 60+{y}, 72, 15))
self.b_time{j}.setObjectName("b_time0")
self.line{j} = QtWidgets.QFrame(self.scrollAreaWidgetContents)
self.line{j}.setGeometry(QtCore.QRect(0, 120+{y}, 741, 20))
self.line{j}.setFrameShape(QtWidgets.QFrame.HLine)
self.line{j}.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line{j}.setObjectName("line")
self.buyButton{j} = QtWidgets.QPushButton(self.scrollAreaWidgetContents)
self.buyButton{j}.setGeometry(QtCore.QRect(640, 70+{y}, 93, 28))
self.buyButton{j}.setObjectName("buyButton{j}")
self.e_time{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.e_time{j}.setGeometry(QtCore.QRect(520, 60+{y}, 72, 15))
self.e_time{j}.setObjectName("e_time")
self.e_date{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.e_date{j}.setGeometry(QtCore.QRect(430, 60+{y}, 72, 15))
self.e_date{j}.setObjectName("e_date0")
self.first_txt{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.first_txt{j}.setGeometry(QtCore.QRect(10, 100+{y}, 91, 16))
self.first_txt{j}.setObjectName("first_txt0")
self.first{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.first{j}.setGeometry(QtCore.QRect(100, 100+{y}, 51, 16))
self.first{j}.setObjectName("first0")
self.first_p{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.first_p{j}.setGeometry(QtCore.QRect(260, 100+{y}, 51, 16))
self.first_p{j}.setObjectName("first_p0")
self.first_p_txt{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.first_p_txt{j}.setGeometry(QtCore.QRect(170, 100+{y}, 91, 16))
self.first_p_txt{j}.setObjectName("first_p_txt")
self.second_p_txt{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.second_p_txt{j}.setGeometry(QtCore.QRect(520, 100+{y}, 91, 16))
self.second_p_txt{j}.setObjectName("second_p_txt0")
self.second{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.second{j}.setGeometry(QtCore.QRect(450, 100+{y}, 51, 16))
self.second{j}.setObjectName("second0")
self.second_p{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.second_p{j}.setGeometry(QtCore.QRect(610, 100+{y}, 51, 16))
self.second_p{j}.setObjectName("second_p0")
self.second_txt{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.second_txt{j}.setGeometry(QtCore.QRect(360, 100+{y}, 91, 16))
self.second_txt{j}.setObjectName("second_txt0")
self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 749, 349+{y}))
self.buyButton{j}.clicked.connect(self.pr)
'''.format(j=i + 1, y=90 * i))

        self.checkButton.clicked.connect(self.check)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "购票大厅"))
        self.label.setText(_translate("MainWindow", "出发站"))
        self.label_2.setText(_translate("MainWindow", "出发日期"))
        self.label_3.setText(_translate("MainWindow", "终点站"))
        self.train_no0.setText(_translate("MainWindow", "列车号"))
        self.b_station0.setText(_translate("MainWindow", "出发站"))
        self.e_station0.setText(_translate("MainWindow", "终点站"))
        self.b_date0.setText(_translate("MainWindow", "发车日期"))
        self.b_time0.setText(_translate("MainWindow", "发车时间"))
        self.e_time0.setText(_translate("MainWindow", "到达时间"))
        self.e_date0.setText(_translate("MainWindow", "到达日期"))
        self.checkButton.setText(_translate("MainWindow", "查询车票"))
        self.exitbutton.setText(_translate("MainWindow", "返回"))
        self.U_data.setText(_translate("MainWindow", "TextLabel"))
        self.U_data.hide()
        for i in range(self.numb):
            exec(''' 
self.train{j}.hide()
self.train_no{j}.hide()
self.b_station{j}.hide()
self.e_station{j}.hide()
self.b_date{j}.hide()
self.b_time{j}.hide()
self.e_date{j}.hide()
self.e_time{j}.hide()
self.first_txt{j}.hide()
self.first{j}.hide()
self.first_p_txt{j}.hide()
self.first_p{j}.hide()
self.second_txt{j}.hide()
self.second{j}.hide()
self.second_p_txt{j}.hide()
self.second_p{j}.hide()
self.line{j}.hide()
self.buyButton{j}.hide()
self.buyButton{j}.setText("购买")
'''.format(j=i + 1))


    def check(self):
        for i in range(self.numb):
            exec('''
self.train_no{j}.hide()
self.b_station{j}.hide()
self.e_station{j}.hide()
self.b_date{j}.hide()
self.b_time{j}.hide()
self.e_date{j}.hide()
self.e_time{j}.hide()
self.first_txt{j}.hide()
self.first{j}.hide()
self.first_p_txt{j}.hide()
self.first_p{j}.hide()
self.second_txt{j}.hide()
self.second{j}.hide()
self.second_p_txt{j}.hide()
self.second_p{j}.hide()
self.line{j}.hide()
self.buyButton{j}.hide()
'''.format(j=i + 1))
        b = self.comboBox.currentText()#出发站
        e = self.comboBox_2.currentText()#终点站
        day1 = self.dateEdit.text()
        day = str(day1)
        print("账号:%s" % self.U_data.text())
        print("%s->%s,日期:%s" % (b, e, day))
        print("%s 查询列车" % datetime.datetime.now())
        conn = pymysql.connect(
                host='localhost',
                port=3306,
                user='root',
                passwd='111111',
                db='train',
                charset='utf8'
            )
        cursor = conn.cursor()
        z = "%" + b + "%" + e + "%"
        sql = "select 列车编号 from 列车表 where 途径站 like '%s' and 列车编号 in (select 车站表.列车编号 from 车站表 where 车站名='%s' and date(车站表.发车日期)='%s'and 状态='未抵达')" % (z, b, day)
        # sql = "select * from 列车表,车站表 where 车站表.列车编号 in (select 列车编号 from 列车表 where 途径站 like '%s') and 车站表.车站名 in ('%s','%s') "%(z,s,e)
        cursor.execute(sql)
        c = cursor.fetchall()
        date = []
        for i in c:
            for j in i:
                date2 = []
                date2.append(j)
                sql2 = "select 车次号,一等座数量,一等座价格,二等座数量,二等座价格 from 列车表 where 列车编号='%s'" % j
                cursor.execute(sql2)
                p = cursor.fetchall()
                for a in p:
                    for b1 in a:
                        date2.append(b1)
                sql1 = "select 车站名,发车日期,发车时间 from 车站表 where 列车编号='%s' and 车站名 in ('%s','%s') and date(发车日期)>='%s'" % (j, b, e, day)
                cursor.execute(sql1)
                y = cursor.fetchall()
                for n in y:
                    for m in n:
                        date2.append(m)
                sql3 = "select count(列车编号) from 座位表 where 列车编号='%s' and 座位级别='一等座'"%j
                cursor.execute(sql3)
                num = cursor.fetchall()
                for c in num:
                    for d in c:
                        date2[2] = date2[2]-d
                sql4 = "select count(列车编号) from 座位表 where 列车编号='%s' and 座位级别='二等座'" % j
                cursor.execute(sql4)
                num1 = cursor.fetchall()
                for c1 in num1:
                    for d1 in c1:
                        date2[4] = date2[4] -d1
                d1 = datetime.datetime.now().strftime("%Y/%m/%d %H:%M")
                d = date2[7]+" "+date2[8]
                d2 = datetime.datetime.strptime(d1,"%Y/%m/%d %H:%M")
                d3 = datetime.datetime.strptime(d,"%Y/%m/%d %H:%M")
                if d2<d3:
                 date.append(date2)
        for i in range(len(date)):
            exec(''' 
self.train_no{j}.show()
self.b_station{j}.show()
self.e_station{j}.show()
self.b_date{j}.show()
self.b_time{j}.show()
self.e_date{j}.show()
self.e_time{j}.show()
self.first_txt{j}.show()
self.first{j}.show()
self.first_p_txt{j}.show()
self.first_p{j}.show()
self.second_txt{j}.show()
self.second{j}.show()
self.second_p_txt{j}.show()
self.second_p{j}.show()
self.buyButton{j}.show()
self.line{j}.show()
self.train{j}.clear()
self.train_no{j}.clear()
self.b_station{j}.clear()
self.e_station{j}.clear()
self.b_date{j}.clear()
self.b_time{j}.clear()
self.e_date{j}.clear()
self.e_time{j}.clear()
self.first_txt{j}.clear()
self.first{j}.clear()
self.first_p_txt{j}.clear()
self.first_p{j}.clear()
self.second_txt{j}.clear()
self.second{j}.clear()
self.second_p_txt{j}.clear()
self.second_p{j}.clear()
self.train{j}.setText(str(date[{m}][0]))
self.train_no{j}.setText(str(date[{m}][1]))
self.b_station{j}.setText(str(date[{m}][6]))
self.e_station{j}.setText(str(date[{m}][9]))
self.b_date{j}.setText(str(date[{m}][7]))
self.b_time{j}.setText(str(date[{m}][8]))
self.e_date{j}.setText(str(date[{m}][10]))
self.e_time{j}.setText(str(date[{m}][11]))
self.first_txt{j}.setText("一等座余票:")
self.first{j}.setText(str(date[{m}][2]))
self.first_p_txt{j}.setText("一等座价格:")
self.first_p{j}.setText(str(date[{m}][3]))
self.second_txt{j}.setText("二等座余票:")
self.second{j}.setText(str(date[{m}][4]))
self.second_p_txt{j}.setText("二等座价格:")
self.second_p{j}.setText(str(date[{m}][5]))

'''.format(j=i + 1, y=30 * (i + 1), m=i))



if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    Form = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

用户-购票大厅-购票UI设计:这里可以选择座位所属的级别、车厢号以及座位号,购票时需要输入乘客的信息

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'buy_ticketUI.ui'
#
# Created by: PyQt5 UI code generator 5.15.6
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets
import pymysql
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox, QInputDialog, QLineEdit
import thp

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        MainWindow.setStyleSheet("#MainWindow{border-image: url(:/thpic/60.jpg);}")
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(330, 20, 131, 41))
        self.label.setObjectName("label")
        self.B_time = QtWidgets.QLabel(self.centralwidget)
        self.B_time.setGeometry(QtCore.QRect(101, 114, 101, 31))
        self.B_time.setObjectName("B_time")
        self.B_station = QtWidgets.QLabel(self.centralwidget)
        self.B_station.setGeometry(QtCore.QRect(130, 150, 41, 21))
        self.B_station.setObjectName("B_station")
        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        self.label_4.setGeometry(QtCore.QRect(230, 130, 331, 16))
        self.label_4.setObjectName("label_4")
        self.E_time = QtWidgets.QLabel(self.centralwidget)
        self.E_time.setGeometry(QtCore.QRect(591, 114, 101, 31))
        self.E_time.setObjectName("E_time")
        self.E_station = QtWidgets.QLabel(self.centralwidget)
        self.E_station.setGeometry(QtCore.QRect(620, 150, 41, 21))
        self.E_station.setObjectName("E_station")
        self.train_No = QtWidgets.QLabel(self.centralwidget)
        self.train_No.setGeometry(QtCore.QRect(370, 110, 51, 20))
        self.train_No.setObjectName("train_No")
        self.B_date = QtWidgets.QLabel(self.centralwidget)
        self.B_date.setGeometry(QtCore.QRect(100, 80, 101, 20))
        self.B_date.setObjectName("B_date")
        self.E_date = QtWidgets.QLabel(self.centralwidget)
        self.E_date.setGeometry(QtCore.QRect(590, 80, 101, 20))
        self.E_date.setObjectName("E_date")
        self.horizontalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.horizontalLayoutWidget.setGeometry(QtCore.QRect(160, 280, 451, 23))
        self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
        self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.comboBox = QtWidgets.QComboBox(self.horizontalLayoutWidget)
        self.comboBox.setObjectName("comboBox")
        self.horizontalLayout.addWidget(self.comboBox)
        self.comboBox_1 = QtWidgets.QComboBox(self.horizontalLayoutWidget)
        self.comboBox_1.setObjectName("comboBox_1")
        self.horizontalLayout.addWidget(self.comboBox_1)
        self.comboBox_2 = QtWidgets.QComboBox(self.horizontalLayoutWidget)
        self.comboBox_2.setObjectName("comboBox_2")
        self.horizontalLayout.addWidget(self.comboBox_2)
        self.horizontalLayoutWidget_2 = QtWidgets.QWidget(self.centralwidget)
        self.horizontalLayoutWidget_2.setGeometry(QtCore.QRect(160, 360, 451, 31))
        self.horizontalLayoutWidget_2.setObjectName("horizontalLayoutWidget_2")
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_2)
        self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.lineEdit = QtWidgets.QLineEdit(self.horizontalLayoutWidget_2)
        self.lineEdit.setObjectName("lineEdit")
        self.horizontalLayout_2.addWidget(self.lineEdit)
        self.lineEdit_2 = QtWidgets.QLineEdit(self.horizontalLayoutWidget_2)
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.horizontalLayout_2.addWidget(self.lineEdit_2)
        self.horizontalLayoutWidget_3 = QtWidgets.QWidget(self.centralwidget)
        self.horizontalLayoutWidget_3.setGeometry(QtCore.QRect(240, 470, 301, 31))
        self.horizontalLayoutWidget_3.setObjectName("horizontalLayoutWidget_3")
        self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_3)
        self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        self.buyButton = QtWidgets.QPushButton(self.horizontalLayoutWidget_3)
        self.buyButton.setObjectName("buyButton")
        self.horizontalLayout_3.addWidget(self.buyButton)
        self.exitButton = QtWidgets.QPushButton(self.horizontalLayoutWidget_3)
        self.exitButton.setObjectName("exitButton")
        self.horizontalLayout_3.addWidget(self.exitButton)
        self.U_date = QtWidgets.QLabel(self.centralwidget)
        self.U_date.setGeometry(QtCore.QRect(30, 500, 72, 15))
        self.U_date.setObjectName("U_date")

        self.by_date = QtWidgets.QLabel(self.centralwidget)
        self.by_date.setGeometry(QtCore.QRect(220, 150, 351, 20))
        self.by_date.setObjectName("by_date")

        self.T_date = QtWidgets.QLabel(self.centralwidget)
        self.T_date.setGeometry(QtCore.QRect(20, 530, 72, 15))
        self.T_date.setObjectName("U_date")
        self.M_date = QtWidgets.QLabel(self.centralwidget)
        self.M_date.setGeometry(QtCore.QRect(30, 530, 72, 15))
        self.M_date.setObjectName("M_date")
        self.horizontalLayoutWidget_4 = QtWidgets.QWidget(self.centralwidget)
        self.horizontalLayoutWidget_4.setGeometry(QtCore.QRect(160, 250, 451, 21))
        self.horizontalLayoutWidget_4.setObjectName("horizontalLayoutWidget_4")
        self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_4)
        self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
        self.label_8 = QtWidgets.QLabel(self.horizontalLayoutWidget_4)
        self.label_8.setObjectName("label_8")
        self.horizontalLayout_4.addWidget(self.label_8)
        self.label_7 = QtWidgets.QLabel(self.horizontalLayoutWidget_4)
        self.label_7.setObjectName("label_7")
        self.horizontalLayout_4.addWidget(self.label_7)
        self.label_5 = QtWidgets.QLabel(self.horizontalLayoutWidget_4)
        self.label_5.setObjectName("label_5")
        self.horizontalLayout_4.addWidget(self.label_5)
        self.horizontalLayoutWidget_5 = QtWidgets.QWidget(self.centralwidget)
        self.horizontalLayoutWidget_5.setGeometry(QtCore.QRect(160, 340, 451, 21))
        self.horizontalLayoutWidget_5.setObjectName("horizontalLayoutWidget_5")
        self.horizontalLayout_5 = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_5)
        self.horizontalLayout_5.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_5.setObjectName("horizontalLayout_5")
        self.label_9 = QtWidgets.QLabel(self.horizontalLayoutWidget_5)
        self.label_9.setObjectName("label_9")
        self.horizontalLayout_5.addWidget(self.label_9)
        self.label_11 = QtWidgets.QLabel(self.horizontalLayoutWidget_5)
        self.label_11.setObjectName("label_11")
        self.horizontalLayout_5.addWidget(self.label_11)
        self.money = QtWidgets.QLabel(self.centralwidget)
        self.money.setGeometry(QtCore.QRect(350, 200, 81, 31))
        self.money.setObjectName("money")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)

        self.buyButton.clicked.connect(self.buy)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)


    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "修改密码"))
        self.label.setText(_translate("MainWindow", "<html><head/><body><p><span style=\" font-size:16pt; font-weight:600;\">购票页面</span></p></body></html>"))
        self.buyButton.setText(_translate("MainWindow", "提交订单"))
        self.exitButton.setText(_translate("MainWindow", "退出"))
        self.U_date.setText(_translate("MainWindow", "U_date"))
        self.label_8.setText(_translate("MainWindow", "请选择等级"))
        self.label_7.setText(_translate("MainWindow", "请选择车厢"))
        self.label_5.setText(_translate("MainWindow", "请选择座位"))
        self.label_9.setText(_translate("MainWindow", "请输入乘车人姓名"))
        self.label_11.setText(_translate("MainWindow", "请输入乘车人身份证号码"))
        self.U_date.hide()
        self.T_date.hide()
        self.M_date.hide()
    def buy(self):
        date =[]
        success = 0
        seat_no = self.comboBox_2.currentText()
        by_name = self.lineEdit.text()
        by_id = self.lineEdit_2.text()
        if seat_no =='':
            QMessageBox.critical(self,'座位','请选择座位!')
            success=1
            return
        if by_id=='' or by_name=='':
            QMessageBox.critical(self, '乘车人', '请输入乘车人的完整信息!')
            success=1

        conn = pymysql.connect(
            host='localhost',
            port=3306,
            user='root',
            passwd='111111',
            db='train',
            charset='utf8'
        )
        cursor = conn.cursor()
        station1 = self.B_station.text()
        station = station1.strip("<html><head/><body><p><span style=\" font-size:12pt; font-weight:600;\">")
        estation1 = self.E_station.text()
        estation = estation1.strip("<html><head/><body><p><span style=\" font-size:12pt; font-weight:600;\">")
        sql = "select 车站编号 from 车站表 where 车站名='%s' and 列车编号='%s'"%(station,self.T_date.text())
        cursor.execute(sql)
        train_station_no = 0
        for i in cursor.fetchall():
            for j in i:
                train_station_no = j
        sql1 ="select max(座位编号) from 座位表"
        cursor.execute(sql1)
        seatno = 0
        ss = cursor.fetchall()
        for i in ss:
            for j in i:
                if j==None:
                    seatno = 0
                else:
                    seatno = j+1
        level = self.comboBox.currentText()
        trunk1 = self.comboBox_1.currentText()
        trunk = trunk1.strip('号车厢')
        t_no = self.U_date.text()
        train1 = self.T_date.text()
        train2 =int(train1)
        price1 = self.M_date.text()
        price = int(price1)
        sql1 ="select 余额 from 用户表 where 手机号='%s'"%t_no
        cursor.execute(sql1)
        for i in cursor.fetchall():
            for j in i:
                if j<price:
                    QMessageBox.critical(self, '余额', '余额不足,请前往充值中心充值!!!')
                    success=1
        checkID = "select * from 身份表 where 姓名='%s' and 身份证号码='%s'" % (by_name, by_id)
        cursor.execute(checkID)
        if cursor.rowcount == 0:
            success = 1
            QMessageBox.critical(self, "乘车人信息错误", "请重新输入正确的乘车人的身份信息")

        checkID2 = "select * from 座位表 where 列车编号='%s' and 乘车人姓名='%s' and 乘车人身份证='%s'" % (train2,by_name, by_id)
        cursor.execute(checkID2)
        if cursor.rowcount !=0:
            success = 1
            QMessageBox.critical(self, "无法购票", "该乘客已经购买本趟列车,无法继续购买!!!")

        if success==0:
            success1 = 0
            passwd, bool1 = QInputDialog.getText(self, '密码', '请输入密码', QLineEdit.EchoMode.Password)
            if passwd != '' and bool1:
                sql = "select 密码 from 用户表 where 手机号='%s'" % self.U_date.text()
                cursor.execute(sql)
                for i in cursor.fetchall():
                    for j in i:
                        if j == passwd:
                            success1 = 1
                        else:
                            QMessageBox.critical(self, "密码错误", "请重新输入密码!!")
            if passwd == '' and bool1:
                    success = 0
                    QMessageBox.critical(self, "错误", "请输入密码!!")
            if success1==1:
                  sql2 = "insert into 座位表(座位编号,车站编号,列车编号,出发站,终点站,座位级别,车厢,座位,价格,手机号,乘车人姓名,乘车人身份证) values (%s,%s,%s,'%s','%s','%s','%s','%s',%s,'%s','%s','%s')"%(seatno,train_station_no,train2,station,estation,level,trunk,seat_no,price,t_no,by_name,by_id)
                  #sql3 = "update 用户表 set 余额=余额-%s where 手机号='%s'"%(price,t_no)
                  cursor.execute(sql2)
                  #cursor.execute(sql3)
                  conn.commit()
                  QMessageBox.information(self, '座位', '购票成功!!!')
                  self.exitButton.click()

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

用户-我的订单UI设计:只有某列车未经过的某站才可以退票,已经过的车站的票无法退票

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'my_orderUI.ui'
#
# Created by: PyQt5 UI code generator 5.15.6
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.

from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox,QInputDialog, QLineEdit
from PyQt5 import QtCore, QtGui, QtWidgets
import pymysql
from PyQt5.QtCore import pyqtSlot, QDate
import string
import thp

class Ui_MainWindow(object):
    numb = 0
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        MainWindow.setStyleSheet("#MainWindow{border-image: url(:/thpic/60.jpg);}")
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(330, 20, 131, 41))
        self.label.setObjectName("label")
        self.U_date = QtWidgets.QLabel(self.centralwidget)
        self.U_date.setGeometry(QtCore.QRect(40, 510, 72, 15))
        self.U_date.setObjectName("U_date")
        self.scrollArea = QtWidgets.QScrollArea(self.centralwidget)
        self.scrollArea.setGeometry(QtCore.QRect(40, 130, 701, 351))
        self.scrollArea.setWidgetResizable(False)
        self.scrollArea.setObjectName("scrollArea")
        self.scrollAreaWidgetContents = QtWidgets.QWidget()
        self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 699, 349))
        self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
        self.scrollArea.setWidget(self.scrollAreaWidgetContents)
        self.exitButton = QtWidgets.QPushButton(self.centralwidget)
        self.exitButton.setGeometry(QtCore.QRect(340, 485, 93, 28))
        self.exitButton.setObjectName("exitButton")
        self.updateButton = QtWidgets.QPushButton(self.centralwidget)
        self.updateButton.setGeometry(QtCore.QRect(340, 520, 93, 28))
        self.updateButton.setObjectName("updateButton")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        conn = pymysql.connect(
            host='localhost',
            port=3306,
            user='root',
            passwd='111111',
            db='train',
            charset='utf8'
        )
        cursor = conn.cursor()
        cursor.execute("select * from 座位表")
        self.numb = cursor.rowcount
        for i in range(self.numb):
            exec('''
self.line{j} = QtWidgets.QFrame(self.scrollAreaWidgetContents)
self.line{j}.setGeometry(QtCore.QRect(0, 110+{y}, 701, 16))
self.line{j}.setFrameShape(QtWidgets.QFrame.HLine)
self.line{j}.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line{j}.setObjectName("line{j}")
self.begin_station{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.begin_station{j}.setGeometry(QtCore.QRect(20, 20+{y}, 41, 16))
self.begin_station{j}.setObjectName("begin_station{j}")
self.arrow{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.arrow{j}.setGeometry(QtCore.QRect(60, 20+{y}, 71, 16))
self.arrow{j}.setObjectName("arrow{j}")
self.end_station{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.end_station{j}.setGeometry(QtCore.QRect(140, 20+{y}, 41, 16))
self.end_station{j}.setObjectName("end_station{j}")
self.begin_data{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.begin_data{j}.setGeometry(QtCore.QRect(20, 60+{y}, 72, 15))
self.begin_data{j}.setObjectName("begin_data{j}")
self.end_data{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.end_data{j}.setGeometry(QtCore.QRect(140, 60+{y}, 72, 15))
self.end_data{j}.setObjectName("end_data{j}")
self.begin_time{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.begin_time{j}.setGeometry(QtCore.QRect(20, 40+{y}, 51, 16))
self.begin_time{j}.setObjectName("begin_time{j}")
self.end_time{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.end_time{j}.setGeometry(QtCore.QRect(140, 40+{y}, 51, 16))
self.end_time{j}.setObjectName("end_time{j}")
self.trainNO{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.trainNO{j}.setGeometry(QtCore.QRect(70, 10+{y}, 41, 16))
self.trainNO{j}.setObjectName("trainNO{j}")
self.level{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.level{j}.setGeometry(QtCore.QRect(10, 90+{y}, 61, 16))
self.level{j}.setObjectName("level{j}")
self.trunk{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.trunk{j}.setGeometry(QtCore.QRect(80, 90+{y}, 61, 16))
self.trunk{j}.setObjectName("trunk{j}")
self.seat{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.seat{j}.setGeometry(QtCore.QRect(150, 90+{y}, 72, 15))
self.seat{j}.setObjectName("seat{j}")
self.seatno{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.seatno{j}.setGeometry(QtCore.QRect(470, 90+{y}, 72, 15))
self.seatno{j}.setObjectName("seatno{j}")
self.by_name{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.by_name{j}.setGeometry(QtCore.QRect(320, 30+{y}, 72, 15))
self.by_name{j}.setObjectName("by_name{j}")
self.by_id{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.by_id{j}.setGeometry(QtCore.QRect(320, 60+{y}, 211, 16))
self.by_id{j}.setObjectName("by_id")
self.refundButton{j} = QtWidgets.QPushButton(self.scrollAreaWidgetContents)
self.refundButton{j}.setGeometry(QtCore.QRect(590, 40+{y}, 80, 28))
self.refundButton{j}.setObjectName("refundButton{j}")
self.by_name_txt{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.by_name_txt{j}.setGeometry(QtCore.QRect(260, 30+{y}, 51, 16))
self.by_name_txt{j}.setObjectName("by_name_txt{j}")
self.by_id_txt{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.by_id_txt{j}.setGeometry(QtCore.QRect(260, 60+{y}, 51, 16))
self.by_id_txt{j}.setObjectName("by_id_txt{j}")
self.price{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.price{j}.setGeometry(QtCore.QRect(490, 50+{y}, 72, 16))
self.price{j}.setObjectName("price{j}")
self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 699, 349+{y}))
self.refundButton{j}.clicked.connect(self.refund)
'''.format(j=i+1,y=115 * i))
        self.updateButton.clicked.connect(self.updatemyorder)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "我的订单"))
        self.label.setText(_translate("MainWindow", "<html><head/><body><p><span style=\" font-size:16pt; font-weight:600;\">我的订单</span></p></body></html>"))
        self.U_date.setText(_translate("MainWindow", "TextLabel"))
        self.exitButton.setText(_translate("MainWindow", "返回"))
        self.updateButton.setText(_translate("MainWindow", "刷新"))
        self.U_date.hide()
        for i in range(self.numb):
            exec('''
self.arrow{j}.setText("-------->")
self.refundButton{j}.setText("退票")
self.by_name_txt{j}.setText("乘车人:")
self.by_id_txt{j}.setText("身份证:")
'''.format(j=i+1))
    def updatemyorder(self):
        for i in range(self.numb):
            exec(''' 
self.seatno{j}.hide()
self.line{j}.hide() 
self.arrow{j}.hide()
self.refundButton{j}.hide()
self.by_name_txt{j}.hide()
self.by_id_txt{j}.hide()    
self.begin_station{j}.hide()
self.end_station{j}.hide()
self.begin_time{j}.hide()
self.begin_data{j}.hide()
self.end_time{j}.hide()
self.end_data{j}.hide()
self.trainNO{j}.hide()
self.level{j}.hide()
self.trunk{j}.hide()
self.seat{j}.hide()
self.by_name{j}.hide()
self.by_id{j}.hide()
self.price{j}.hide()
'''.format(j=i + 1))
        conn = pymysql.connect(
            host='localhost',
            port=3306,
            user='root',
            passwd='111111',
            db='train',
            charset='utf8'
        )
        cursor = conn.cursor()
        sql = "select 座位编号,列车编号,出发站,终点站,座位级别,车厢,座位,价格,乘车人姓名,乘车人身份证 from 座位表 where 手机号='%s'"%self.U_date.text()
        cursor.execute(sql)
        infor = cursor.fetchall()
        row = cursor.rowcount
        date = []
        for a in infor:
            date1 = []
            for b in a:
                 date1.append(b)
            sql1 = "select 发车日期,发车时间 from 车站表 where 列车编号=%s and 车站名 in ('%s','%s')"%(date1[1],date1[2],date1[3])
            cursor.execute(sql1)
            day = cursor.fetchall()
            for m in day:
                for n in m:
                    date1.append(n)
            sql2 = "select 车次号 from 列车表 where 列车编号=%s"%date1[1]
            cursor.execute(sql2)
            for c in cursor.fetchall():
                for d in c:
                    date1.append(d)
            sql3 = "select 状态 from 车站表 where 列车编号=%s and 车站名 ='%s'"%(date1[1],date1[2])
            cursor.execute(sql3)
            for e in cursor.fetchall():
                for f in e:
                    date1.append(f)
            date.append(date1)
        for i in range(len(date)):
            exec('''  
self.line{j}.show() 
self.arrow{j}.show()
self.by_name_txt{j}.show()
self.by_id_txt{j}.show()    
self.begin_station{j}.show()
self.end_station{j}.show()
self.begin_time{j}.show()
self.begin_data{j}.show()
self.end_time{j}.show()
self.end_data{j}.show()
self.trainNO{j}.show()
self.level{j}.show()
self.trunk{j}.show()
self.seat{j}.show()
self.by_name{j}.show()
self.by_id{j}.show()
self.price{j}.show()
self.begin_station{j}.clear()
self.seatno{j}.clear()
self.end_station{j}.clear()
self.begin_time{j}.clear()
self.begin_data{j}.clear()
self.end_time{j}.clear()
self.end_data{j}.clear()
self.trainNO{j}.clear()
self.level{j}.clear()
self.trunk{j}.clear()
self.seat{j}.clear()
self.by_name{j}.clear()
self.by_id{j}.clear()
self.price{j}.clear()  
self.seatno{j}.setText(str(date[{t}][0]))   
self.begin_station{j}.setText(str(date[{t}][2]))
self.end_station{j}.setText(str(date[{t}][3]))
self.begin_time{j}.setText(str(date[{t}][11]))
self.begin_data{j}.setText(str(date[{t}][10]))
self.end_time{j}.setText(str(date[{t}][13]))
self.end_data{j}.setText(str(date[{t}][12]))
self.trainNO{j}.setText(str(date[{t}][14]))
self.level{j}.setText(str(date[{t}][4]))
self.trunk{j}.setText(str(date[{t}][5])+"号车厢")
self.seat{j}.setText(str(date[{t}][6])+"号座位")
self.by_name{j}.setText(str(date[{t}][8]))
self.by_id{j}.setText(str(date[{t}][9]))
self.price{j}.setText(str(date[{t}][7])+"元")
if date[{t}][15]=='未抵达':self.refundButton{j}.show()
if date[{t}][15]=='抵达':self.refundButton{j}.hide()
'''.format(j=i+1,t=i))
        cursor.close()
        conn.close()
    def refund(self):
        conn = pymysql.connect(
            host='localhost',
            port=3306,
            user='root',
            passwd='111111',
            db='train',
            charset='utf8'
        )
        cursor = conn.cursor()
        s = self.sender().objectName()
        ss = s.strip('refundButton')
        ss1 = int(ss)
        success = 0
        sn = []
        exec('''
sn.append(self.seatno{k}.text())
sn.append(self.price{k}.text())
'''.format(k=ss1))
        print(ss1)
        sn1 = int(sn[0])
        money1 = sn[1].strip('元')
        money = int(money1)
        passwd,bool1= QInputDialog.getText(self,'密码','请输入密码',QLineEdit.EchoMode.Password)
        if passwd!='' and bool1:
            sql = "select 密码 from 用户表 where 手机号='%s'"%self.U_date.text()
            cursor.execute(sql)
            for i in cursor.fetchall():
                for j in i:
                    if j==passwd:
                        success = 1
                    else:
                        QMessageBox.critical(self,"错误","请重新输入密码!!")
        if passwd=='' and bool1:
                success = 0
                QMessageBox.critical(self, "错误", "请输入密码!!")
        if success==1:
               cursor.execute("delete from 座位表 where 座位编号=%s"%sn1)
               #cursor.execute("update 用户表 set 余额=余额+%s where 手机号='%s'"%(money,self.U_date.text()))
               conn.commit()
               QMessageBox.information(self, "正确", "退票成功!!!")
               self.updateButton.click()
        cursor.close()
        conn.close()

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

管理员主页UI设计:包含更新列车状态(手动更新列车状态)、用户管理(初始化用户的密码)、票务信息(乘务员查看某列车某车厢的乘客的信息)和列车管理(显示历史列车的信息和添加列车)四个功能模块

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'Admin_homeUI.ui'
#
# Created by: PyQt5 UI code generator 5.15.6
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets
import thp

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        MainWindow.setStyleSheet("#MainWindow{border-image: url(:/thpic/60.jpg);}")
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(250, 20, 281, 41))
        self.label.setObjectName("label")
        self.L_out = QtWidgets.QPushButton(self.centralwidget)
        self.L_out.setGeometry(QtCore.QRect(630, 70, 93, 28))
        self.L_out.setObjectName("L_out")
        self.A_date = QtWidgets.QLabel(self.centralwidget)
        self.A_date.setGeometry(QtCore.QRect(30, 510, 72, 15))
        self.A_date.setObjectName("A_date")
        self.train_manage = QtWidgets.QPushButton(self.centralwidget)
        self.train_manage.setGeometry(QtCore.QRect(180, 150, 211, 141))
        self.train_manage.setObjectName("train_manage")
        self.update_train = QtWidgets.QPushButton(self.centralwidget)
        self.update_train.setGeometry(QtCore.QRect(400, 150, 211, 141))
        self.update_train.setObjectName("update_train")
        self.User_manage = QtWidgets.QPushButton(self.centralwidget)
        self.User_manage.setGeometry(QtCore.QRect(400, 300, 211, 141))
        self.User_manage.setObjectName("User_manage")
        self.ticket_informations = QtWidgets.QPushButton(self.centralwidget)
        self.ticket_informations.setGeometry(QtCore.QRect(180, 300, 211, 141))
        self.ticket_informations.setObjectName("ticket_informations")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "管理员主页"))
        self.label.setText(_translate("MainWindow", "<html><head/><body><p><span style=\" font-size:16pt; font-weight:600;\">火车售票管理信息系统</span></p></body></html>"))
        self.L_out.setText(_translate("MainWindow", "退出登录"))
        self.A_date.setText(_translate("MainWindow", "TextLabel"))
        self.train_manage.setText(_translate("MainWindow", "列车管理"))
        self.update_train.setText(_translate("MainWindow", "更新列车状态"))
        self.User_manage.setText(_translate("MainWindow", "用户管理"))
        self.ticket_informations.setText(_translate("MainWindow", "票务信息"))
        self.A_date.hide()


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

管理员-用户管理UI设计:管理员有权限初始化某个用户的密码

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'user_manageUI.ui'
#
# Created by: PyQt5 UI code generator 5.15.6
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.

from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox,QInputDialog, QLineEdit
from PyQt5 import QtCore, QtGui, QtWidgets
import pymysql
from PyQt5.QtCore import pyqtSlot, QDate
import string
import datetime
import thp
class Ui_MainWindow(object):
    numb = 0
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        MainWindow.setStyleSheet("#MainWindow{border-image: url(:/thpic/60.jpg);}")
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(330, 20, 131, 41))
        self.label.setObjectName("label")
        self.A_date = QtWidgets.QLabel(self.centralwidget)
        self.A_date.setGeometry(QtCore.QRect(40, 510, 72, 15))
        self.A_date.setObjectName("A_date")
        self.scrollArea = QtWidgets.QScrollArea(self.centralwidget)
        self.scrollArea.setGeometry(QtCore.QRect(40, 130, 701, 331))
        self.scrollArea.setWidgetResizable(False)
        self.scrollArea.setObjectName("scrollArea")
        self.scrollAreaWidgetContents = QtWidgets.QWidget()
        self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 699, 329))
        self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
        self.scrollArea.setWidget(self.scrollAreaWidgetContents)
        self.exitButton = QtWidgets.QPushButton(self.centralwidget)
        self.exitButton.setGeometry(QtCore.QRect(340, 480, 93, 28))
        self.exitButton.setObjectName("exitButton")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(50, 90, 191, 16))
        self.label_2.setObjectName("label_2")
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setGeometry(QtCore.QRect(240, 90, 113, 21))
        self.lineEdit.setObjectName("lineEdit")
        self.searchButton = QtWidgets.QPushButton(self.centralwidget)
        self.searchButton.setGeometry(QtCore.QRect(650, 90, 93, 28))
        self.searchButton.setObjectName("searchButton")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        conn = pymysql.connect(
            host='localhost',
            port=3306,
            user='root',
            passwd='111111',
            db='train',
            charset='utf8'
        )
        cursor = conn.cursor()
        cursor.execute("select * from 用户表")
        self.numb = cursor.rowcount

        for i in range(self.numb):
            exec('''
self.user_txt{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.user_txt{j}.setGeometry(QtCore.QRect(10, 10+{y}, 51, 16))
self.user_txt{j}.setObjectName("user_txt")
self.user{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.user{j}.setGeometry(QtCore.QRect(60, 10+{y}, 190, 15))
self.user{j}.setObjectName("user")
self.resetButton{j} = QtWidgets.QPushButton(self.scrollAreaWidgetContents)
self.resetButton{j}.setGeometry(QtCore.QRect(580, 10+{y}, 81, 28))
self.resetButton{j}.setObjectName("resetButton{j}")
self.line{j} = QtWidgets.QFrame(self.scrollAreaWidgetContents)
self.line{j}.setGeometry(QtCore.QRect(0, 40+{y}, 701, 16))
self.line{j}.setFrameShape(QtWidgets.QFrame.HLine)
self.line{j}.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line{j}.setObjectName("line")
self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 699, 329+{y}))
self.resetButton{j}.clicked.connect(self.reset)
'''.format(j=i+1,y=40*i))
        self.searchButton.clicked.connect(self.searchuser)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "用户管理"))
        self.label.setText(_translate("MainWindow", "<html><head/><body><p><span style=\" font-size:16pt; font-weight:600;\">用户管理</span></p></body></html>"))
        self.A_date.setText(_translate("MainWindow", "TextLabel"))
        self.exitButton.setText(_translate("MainWindow", "返回"))
        self.label_2.setText(_translate("MainWindow", "请输入需要查找的用户账号:"))
        self.searchButton.setText(_translate("MainWindow", "查找"))
        self.A_date.hide()
        for i in range(self.numb):
            exec('''
self.user_txt{j}.setText("账号:")
self.resetButton{j}.setText("重置密码")
'''.format(j=i+1))
    def searchuser(self):
        conn = pymysql.connect(
            host='localhost',
            port=3306,
            user='root',
            passwd='111111',
            db='train',
            charset='utf8'
        )
        cursor = conn.cursor()
        for i in range(self.numb):
            exec('''
self.user_txt{j}.hide()
self.user{j}.hide()
self.resetButton{j}.hide()
self.line{j}.hide()    
            '''.format(j=i+1))
        if self.lineEdit.text()=='':
            cursor.execute("select 手机号 from 用户表")
            date = []
            for a in cursor.fetchall():
                for b in a:
                    date.append(b)
            for i in range(len(date)):
                exec('''
self.user_txt{j}.show()
self.user{j}.show()
self.resetButton{j}.show()
self.line{j}.show()
self.user{j}.clear()
self.user{j}.setText(date[{k}])
'''.format(j=i+1,k=i))
        else:
            cursor.execute("select 手机号 from 用户表 where 手机号='%s'"%self.lineEdit.text())
            row = cursor.rowcount
            u = cursor.fetchall()
            if row ==0:
                QMessageBox.critical(self,"错误","没有该账号!!!")
                self.lineEdit.clear()
                self.searchButton.click()
            else:
                u1 = ''
                for c in u:
                    for d in c:
                        u1 = d
                for i in range(row):
                    exec('''
self.user_txt{j}.show()
self.user{j}.show()
self.resetButton{j}.show()
self.line{j}.show()
self.user{j}.clear()
self.user{j}.setText(u1)
'''.format(j=i + 1))
        cursor.close()
        conn.close()
    def reset(self):
        conn = pymysql.connect(
            host='localhost',
            port=3306,
            user='root',
            passwd='111111',
            db='train',
            charset='utf8'
        )
        cursor = conn.cursor()
        success =0
        s = self.sender().objectName()
        ss = s.strip('resetButton')
        ss1 = int(ss)
        unum = []
        exec('''
unum.append(self.user{j}.text())
'''.format(j=ss1))
        passwd, bool1 = QInputDialog.getText(self, '密码', '请输入管理员密码', QLineEdit.EchoMode.Password)
        if passwd and bool1:
            sql = "select 密码 from 管理员表 where 管理员账号='%s'" % self.A_date.text()
            cursor.execute(sql)
            for i in cursor.fetchall():
                for j in i:
                    if j == passwd:
                        success = 1
                    else:
                        success = 0
                        QMessageBox.critical(self, "错误", "请重新输入管理员密码!!")
        if passwd=='' and bool1:
            success = 0
            QMessageBox.critical(self, "错误", "请输入管理员密码!!")
        if success==1:
            cursor.execute("update 用户表 set 密码='123456' where 手机号='%s'"%unum[0])
            conn.commit()
            QMessageBox.information(self, "正确", "该用户的密码已经初始化为123456!!!")
            print("%s 管理员:%s 将用户:%s 重置密码"%(datetime.datetime.now(),self.A_date.text(),unum[0]))
            self.lineEdit.clear()
            self.searchButton.click()
        cursor.close()
        conn.close()

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

管理员-更新列车状态UI设计:管理员可以手动更新列车的状态

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'update_trainUI.ui'
#
# Created by: PyQt5 UI code generator 5.15.6
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.
import datetime

from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox,QInputDialog, QLineEdit
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import pyqtSlot, QDate
import pymysql
import thp

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        MainWindow.setStyleSheet("#MainWindow{border-image: url(:/thpic/60.jpg);}")
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(290, 20, 181, 41))
        self.label.setObjectName("label")
        self.A_date = QtWidgets.QLabel(self.centralwidget)
        self.A_date.setGeometry(QtCore.QRect(40, 510, 72, 15))
        self.A_date.setObjectName("A_date")
        self.scrollArea = QtWidgets.QScrollArea(self.centralwidget)
        self.scrollArea.setGeometry(QtCore.QRect(40, 120, 701, 331))
        self.scrollArea.setWidgetResizable(False)
        self.scrollArea.setObjectName("scrollArea")
        self.scrollAreaWidgetContents = QtWidgets.QWidget()
        self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 699, 329))
        self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
        self.scrollArea.setWidget(self.scrollAreaWidgetContents)
        self.exitButton = QtWidgets.QPushButton(self.centralwidget)
        self.exitButton.setGeometry(QtCore.QRect(340, 480, 93, 28))
        self.exitButton.setObjectName("exitButton")
        self.label_txt1 = QtWidgets.QLabel(self.centralwidget)
        self.label_txt1.setGeometry(QtCore.QRect(50, 90, 91, 16))
        self.label_txt1.setObjectName("label_txt1")
        self.searchButton = QtWidgets.QPushButton(self.centralwidget)
        self.searchButton.setGeometry(QtCore.QRect(650, 90, 93, 28))
        self.searchButton.setObjectName("searchButton")
        self.comboBox = QtWidgets.QComboBox(self.centralwidget)
        self.comboBox.setGeometry(QtCore.QRect(140, 90, 87, 22))
        self.comboBox.setObjectName("comboBox")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.train_select()
        for i in range(10):
            exec('''
self.line{j} = QtWidgets.QFrame(self.scrollAreaWidgetContents)
self.line{j}.setGeometry(QtCore.QRect(0, 40+{y}, 701, 16))
self.line{j}.setFrameShape(QtWidgets.QFrame.HLine)
self.line{j}.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line{j}.setObjectName("line{j}")
self.train_txt{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.train_txt{j}.setGeometry(QtCore.QRect(10, 10+{y}, 51, 16))
self.train_txt{j}.setObjectName("train_txt{j}")
self.train{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.train{j}.setGeometry(QtCore.QRect(60, 10+{y}, 72, 15))
self.train{j}.setObjectName("train{j}")
self.train_NO{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.train_NO{j}.setGeometry(QtCore.QRect(20, 26+{y}, 72, 15))
self.train_NO{j}.setObjectName("train_NO{j}")
self.station_txt{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.station_txt{j}.setGeometry(QtCore.QRect(150, 10+{y}, 51, 16))
self.station_txt{j}.setObjectName("station_txt{j}")
self.station{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.station{j}.setGeometry(QtCore.QRect(200, 10+{y}, 72, 15))
self.station{j}.setObjectName("station{j}")
self.state_chose{j} = QtWidgets.QComboBox(self.scrollAreaWidgetContents)
self.state_chose{j}.setGeometry(QtCore.QRect(470, 10+{y}, 87, 22))
self.state_chose{j}.setObjectName("state_chose{j}")
self.station_state{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.station_state{j}.setGeometry(QtCore.QRect(360, 10+{y}, 72, 15))
self.station_state{j}.setObjectName("station_state{j}")
self.station_state_txt{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.station_state_txt{j}.setGeometry(QtCore.QRect(300, 10+{y}, 51, 16))
self.station_state_txt{j}.setObjectName("station_state_txt{j}")
self.modify_state{j} = QtWidgets.QPushButton(self.scrollAreaWidgetContents)
self.modify_state{j}.setGeometry(QtCore.QRect(570, 10+{y}, 93, 28))
self.modify_state{j}.setObjectName("modify_state{j}") 
self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 699, 329+{y})) 
self.modify_state{j}.clicked.connect(self.modify)          
'''.format(j=i+1,y=40*i))

        self.searchButton.clicked.connect(self.search)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "更新列车状态"))
        self.label.setText(_translate("MainWindow", "<html><head/><body><p><span style=\" font-size:16pt; font-weight:600;\">更新列车状态</span></p></body></html>"))
        self.A_date.setText(_translate("MainWindow", "TextLabel"))
        self.exitButton.setText(_translate("MainWindow", "返回"))
        self.label_txt1.setText(_translate("MainWindow", "请选择列车:"))
        self.searchButton.setText(_translate("MainWindow", "查看"))
        self.A_date.hide()
        for i in range(10):
            exec('''
self.train_txt{j}.setText("列车:")
self.station_txt{j}.setText("车站:")
self.station_state_txt{j}.setText( "状态:")
self.modify_state{j}.setText("修改状态")
self.state_chose{j}.addItems(['抵达','未抵达'])
'''.format(j=i+1))
    def train_select(self):
        conn = pymysql.connect(
            host='localhost',
            port=3306,
            user='root',
            passwd='111111',
            db='train',
            charset='utf8'
        )
        cursor = conn.cursor()
        cursor.execute("select 车次号 from 列车表 where 列车状态='运行'")
        items = []
        for i in cursor.fetchall():
            for j in i:
                items.append(j)
        self.comboBox.clear()
        self.comboBox.addItems(items)
        cursor.close()
        conn.close()
    def search(self):
        for i in range(10):
            exec('''
self.line{j}.hide()
self.train_txt{j}.hide()
self.train{j}.hide()
self.station_txt{j}.hide()
self.station_state_txt{j}.hide()
self.modify_state{j}.hide()
self.state_chose{j}.hide()
self.station{j}.hide()
self.station_state{j}.hide()
self.modify_state{j}.hide()
self.train_NO{j}.hide()
'''.format(j=i + 1))
        train = self.comboBox.currentText()
        conn = pymysql.connect(
            host='localhost',
            port=3306,
            user='root',
            passwd='111111',
            db='train',
            charset='utf8'
        )
        cursor = conn.cursor()
        cursor.execute("select 列车编号 from 列车表 where 车次号='%s' and 列车状态='运行'" % train)
        trainNO = 0
        for i in cursor.fetchall():
            for j in i:
                trainNO = j
        cursor.execute("select 车站编号,车站名,状态 from 车站表 where 列车编号=%s"%trainNO)
        infor = cursor.fetchall()
        date = []
        for a in infor:
            date1 = []
            for b in a:
                date1.append(b)
            date.append(date1)
        cursor.close()
        conn.close()
        for i in range(len(date)):
            exec('''
self.line{j}.show()
self.train_txt{j}.show()
self.train{j}.show()
self.station_txt{j}.show()
self.station_state_txt{j}.show()
self.modify_state{j}.show()
self.state_chose{j}.show()
self.station{j}.show()
self.station_state{j}.show()
self.modify_state{j}.show()
self.train{j}.clear()
self.station{j}.clear()
self.train_NO{j}.clear()
self.station_state{j}.clear()
self.train_NO{j}.setText(str(date[{k}][0]))
self.train{j}.setText(train)
self.station{j}.setText(str(date[{k}][1]))
self.station_state{j}.setText(str(date[{k}][2]))
'''.format(j=i+1,k=i))

    def modify(self):
        conn = pymysql.connect(
            host='localhost',
            port=3306,
            user='root',
            passwd='111111',
            db='train',
            charset='utf8'
        )
        cursor = conn.cursor()
        success = 0
        s = self.sender().objectName()
        ss = s.strip('modify_state')
        ss1 = int(ss)
        unum = []
        exec('''
unum.append(self.train_NO{j}.text())
unum.append(self.state_chose{j}.currentText())
        '''.format(j=ss1))
        passwd, bool1 = QInputDialog.getText(self, '密码', '请输入管理员密码', QLineEdit.EchoMode.Password)
        if passwd and bool1:
            sql = "select 密码 from 管理员表 where 管理员账号='%s'" % self.A_date.text()
            cursor.execute(sql)
            for i in cursor.fetchall():
                for j in i:
                    if j == passwd:
                        success = 1
                    else:
                        success = 0
                        QMessageBox.critical(self, "错误", "请重新输入管理员密码!!")
        if passwd == '' and bool1:
            success = 0
            QMessageBox.critical(self, "错误", "请输入管理员密码!!")
        if success == 1:
            tra = int(unum[0])
            state1 = unum[1]
            cursor.execute("update 车站表 set 状态='%s' where 车站编号=%s"%(state1,tra))
            conn.commit()
            QMessageBox.information(self, "正确", "状态修改成功!!!")
            cursor.execute("select * from 列车表,车站表 where 列车表.列车编号=车站表.列车编号 and  列车表.车次号='%s' and 列车表.列车状态='运行' and 车站表.状态='未抵达'" % self.comboBox.currentText())
            row = cursor.rowcount
            if row==0:
                cursor.execute("update 列车表 set 列车状态='已完成' where 车次号='%s' and 列车状态='运行'"%self.comboBox.currentText())
                conn.commit()
                print("%s列车:%s已完成行程"%(datetime.datetime.now(),self.comboBox.currentText()))
            self.train_select()
            self.searchButton.click()


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

管理员-票务信息UI设计:查看某运行中的列车某车厢的乘客信息

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'ticket_informationUI.ui'
#
# Created by: PyQt5 UI code generator 5.15.6
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.

from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox
from PyQt5 import QtCore, QtGui, QtWidgets
import pymysql
import thp

class Ui_MainWindow(object):
    numb = 0
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        MainWindow.setStyleSheet("#MainWindow{border-image: url(:/thpic/60.jpg);}")
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(330, 20, 131, 41))
        self.label.setObjectName("label")
        self.A_date = QtWidgets.QLabel(self.centralwidget)
        self.A_date.setGeometry(QtCore.QRect(40, 510, 72, 15))
        self.A_date.setObjectName("A_date")
        self.scrollArea = QtWidgets.QScrollArea(self.centralwidget)
        self.scrollArea.setGeometry(QtCore.QRect(40, 130, 701, 331))
        self.scrollArea.setWidgetResizable(False)
        self.scrollArea.setObjectName("scrollArea")
        self.scrollAreaWidgetContents = QtWidgets.QWidget()
        self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 699, 329))
        self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
        self.scrollArea.setWidget(self.scrollAreaWidgetContents)
        self.exitButton = QtWidgets.QPushButton(self.centralwidget)
        self.exitButton.setGeometry(QtCore.QRect(340, 480, 93, 28))
        self.exitButton.setObjectName("exitButton")
        self.label_txt1 = QtWidgets.QLabel(self.centralwidget)
        self.label_txt1.setGeometry(QtCore.QRect(50, 90, 91, 16))
        self.label_txt1.setObjectName("label_txt1")
        self.searchButton = QtWidgets.QPushButton(self.centralwidget)
        self.searchButton.setGeometry(QtCore.QRect(650, 90, 93, 28))
        self.searchButton.setObjectName("searchButton")
        self.comboBox = QtWidgets.QComboBox(self.centralwidget)
        self.comboBox.setGeometry(QtCore.QRect(140, 90, 87, 22))
        self.comboBox.setObjectName("comboBox")
        self.label_txt2 = QtWidgets.QLabel(self.centralwidget)
        self.label_txt2.setGeometry(QtCore.QRect(440, 90, 91, 16))
        self.label_txt2.setObjectName("label_txt2")
        self.comboBox_1 = QtWidgets.QComboBox(self.centralwidget)
        self.comboBox_1.setGeometry(QtCore.QRect(530, 90, 87, 22))
        self.comboBox_1.setObjectName("comboBox_1")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        conn = pymysql.connect(
            host='localhost',
            port=3306,
            user='root',
            passwd='111111',
            db='train',
            charset='utf8'
        )
        cursor = conn.cursor()
        cursor.execute("select 车次号 from 列车表 where 列车状态='运行'")
        items = []
        for i in cursor.fetchall():
            for j in i:
                items.append(j)
        cursor.execute("select * from 座位表")
        self.numb = cursor.rowcount
        cursor.close()
        conn.close()
        for i in range(self.numb):
            exec('''
self.line{j} = QtWidgets.QFrame(self.scrollAreaWidgetContents)
self.line{j}.setGeometry(QtCore.QRect(0, 80+{y}, 701, 16))
self.line{j}.setFrameShape(QtWidgets.QFrame.HLine)
self.line{j}.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line{j}.setObjectName("line{j}")
self.train_txt{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.train_txt{j}.setGeometry(QtCore.QRect(10, 10+{y}, 51, 16))
self.train_txt{j}.setObjectName("train_txt{j}")
self.train{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.train{j}.setGeometry(QtCore.QRect(60, 10+{y}, 72, 15))
self.train{j}.setObjectName("train{j}")
self.station_txt{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.station_txt{j}.setGeometry(QtCore.QRect(170, 10+{y}, 51, 16))
self.station_txt{j}.setObjectName("station_txt{j}")
self.station{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.station{j}.setGeometry(QtCore.QRect(220, 10+{y}, 72, 15))
self.station{j}.setObjectName("station")
self.trunk_txt{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.trunk_txt{j}.setGeometry(QtCore.QRect(320, 10+{y}, 51, 16))
self.trunk_txt{j}.setObjectName("trunk_txt")
self.trunk{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.trunk{j}.setGeometry(QtCore.QRect(380, 10+{y}, 72, 15))
self.trunk{j}.setObjectName("trunk{j}")
self.seat{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.seat{j}.setGeometry(QtCore.QRect(540, 10+{y}, 72, 15))
self.seat{j}.setObjectName("seat")
self.seat_txt{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.seat_txt{j}.setGeometry(QtCore.QRect(480, 10+{y}, 51, 16))
self.seat_txt{j}.setObjectName("seat_txt{j}")
self.by_name_txt{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.by_name_txt{j}.setGeometry(QtCore.QRect(10, 50+{y}, 91, 16))
self.by_name_txt{j}.setObjectName("by_name_txt{j}")
self.by_name{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.by_name{j}.setGeometry(QtCore.QRect(100, 50+{y}, 141, 16))
self.by_name{j}.setObjectName("by_name{j}")
self.by_id{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.by_id{j}.setGeometry(QtCore.QRect(440, 50+{y}, 181, 16))
self.by_id{j}.setObjectName("by_id{j}")
self.by_id_txt{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.by_id_txt{j}.setGeometry(QtCore.QRect(320, 50+{y}, 111, 16))
self.by_id_txt{j}.setObjectName("by_id_txt{j}")
self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 699, 329+{y}))
'''.format(j=i+1,y=90*i))


        self.comboBox.currentTextChanged.connect(self.updatetrunk)
        self.searchButton.clicked.connect(self.searchticket)
        self.comboBox.addItems(items)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "票务信息"))
        self.label.setText(_translate("MainWindow", "<html><head/><body><p><span style=\" font-size:16pt; font-weight:600;\">票务信息</span></p></body></html>"))
        self.A_date.setText(_translate("MainWindow", "TextLabel"))
        self.exitButton.setText(_translate("MainWindow", "返回"))
        self.label_txt1.setText(_translate("MainWindow", "请选择列车:"))
        self.searchButton.setText(_translate("MainWindow", "查看"))
        self.label_txt2.setText(_translate("MainWindow", "请选择车厢:"))
        self.A_date.hide()
        for i in range(self.numb):
            exec('''
self.train_txt{j}.setText("列车:")
self.station_txt{j}.setText("车站:")
self.trunk_txt{j}.setText("车厢号:")
self.seat_txt{j}.setText("座位号:")
self.by_name_txt{j}.setText("乘车人姓名:")
self.by_id_txt{j}.setText("乘车人身份证:")
self.line{j}.hide()
self.train_txt{j}.hide()
self.train{j}.hide()
self.station_txt{j}.hide()
self.station{j}.hide()
self.trunk_txt{j}.hide()
self.trunk{j}.hide()
self.seat_txt{j}.hide()
self.seat{j}.hide()
self.by_name_txt{j}.hide()
self.by_name{j}.hide()
self.by_id_txt{j}.hide()
self.by_id{j}.hide()       
'''.format(j=i+1))
    def updatetrunk(self):
        self.comboBox_1.clear()
        train_no = self.comboBox.currentText()#获取列车号
        conn = pymysql.connect(
            host='localhost',
            port=3306,
            user='root',
            passwd='111111',
            db='train',
            charset='utf8'
        )
        cursor = conn.cursor()
        sql = "select 一等座数量,二等座数量 from 列车表 where 车次号='%s' and 列车状态='运行'"%train_no
        cursor.execute(sql)
        num = []
        for i in cursor.fetchall():
            for j in i:
                num.append(j)
        num1 = 0
        num2 = 0
        if num[0]%20>=1:
            num1 = int(num[0]/20+1)
        if num[0]%20==0:
            num1 = int(num[0]/20)
        if num[1]%20>=1:
            num2 = int(num[1]/20+1)
        if num[1]%20==0:
            num2 = int(num[1]/20)
        for i in range(num1+num2):
            self.comboBox_1.addItem(str(i+1))
        cursor.close()
        conn.close()
    def searchticket(self):
        for i in range(self.numb):
            exec('''
self.line{j}.hide()
self.train_txt{j}.hide()
self.train{j}.hide()
self.station_txt{j}.hide()
self.station{j}.hide()
self.trunk_txt{j}.hide()
self.trunk{j}.hide()
self.seat_txt{j}.hide()
self.seat{j}.hide()
self.by_name_txt{j}.hide()
self.by_name{j}.hide()
self.by_id_txt{j}.hide()
self.by_id{j}.hide()   
'''.format(j=i + 1))
        trainno = self.comboBox.currentText()
        trunkno = self.comboBox_1.currentText()
        conn = pymysql.connect(
            host='localhost',
            port=3306,
            user='root',
            passwd='111111',
            db='train',
            charset='utf8'
        )
        cursor = conn.cursor()
        cursor.execute("select 列车编号 from 列车表 where 车次号='%s' and 列车状态='运行'"%trainno)
        trainNO = 0
        for i in cursor.fetchall():
            for j in i:
                trainNO = j
        cursor.execute("select 出发站,车厢,座位,乘车人姓名,乘车人身份证 from 座位表 where 列车编号=%s and 车厢='%s'"%(trainNO,trunkno))
        row = cursor.rowcount
        infor = cursor.fetchall()
        if row == 0:
            QMessageBox.warning(self, "警告", "该车箱暂无乘客!!!")
        else:
            date = []
            for a in infor:
                date1 = []
                for b in a:
                    date1.append(b)
                date.append(date1)
            for c in range(len(date)):
                exec('''
self.line{j}.show()
self.train_txt{j}.show()
self.train{j}.show()
self.station_txt{j}.show()
self.station{j}.show()
self.trunk_txt{j}.show()
self.trunk{j}.show()
self.seat_txt{j}.show()
self.seat{j}.show()
self.by_name_txt{j}.show()
self.by_name{j}.show()
self.by_id_txt{j}.show()
self.by_id{j}.show()
self.train{j}.clear()
self.station{j}.clear()
self.trunk{j}.clear()
self.seat{j}.clear()
self.by_name{j}.clear()
self.by_id{j}.clear()
self.train{j}.setText(trainno)
self.station{j}.setText(str(date[{k}][0]))
self.trunk{j}.setText(str(date[{k}][1]))
self.seat{j}.setText(str(date[{k}][2]))
self.by_name{j}.setText(str(date[{k}][3]))
self.by_id{j}.setText(str(date[{k}][4]))               
'''.format(j=c+1,k=c))

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

管理员-列车管理UI设计:可以展示历史列车的信息以及添加列车的功能模块

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'train_manageUI.ui'
#
# Created by: PyQt5 UI code generator 5.15.6
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets
import pymysql
import thp

class Ui_MainWindow(object):
    numb = 0
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        MainWindow.setStyleSheet("#MainWindow{border-image: url(:/thpic/60.jpg);}")
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(320, 20, 181, 41))
        self.label.setObjectName("label")
        self.A_date = QtWidgets.QLabel(self.centralwidget)
        self.A_date.setGeometry(QtCore.QRect(40, 510, 72, 15))
        self.A_date.setObjectName("A_date")
        self.scrollArea = QtWidgets.QScrollArea(self.centralwidget)
        self.scrollArea.setGeometry(QtCore.QRect(40, 130, 701, 331))
        self.scrollArea.setWidgetResizable(False)
        self.scrollArea.setObjectName("scrollArea")
        self.scrollAreaWidgetContents = QtWidgets.QWidget()
        self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 699, 329))
        self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
        self.scrollArea.setWidget(self.scrollAreaWidgetContents)
        self.exitButton = QtWidgets.QPushButton(self.centralwidget)
        self.exitButton.setGeometry(QtCore.QRect(380, 500, 93, 28))
        self.exitButton.setObjectName("exitButton")
        self.updateButton = QtWidgets.QPushButton(self.centralwidget)
        self.updateButton.setGeometry(QtCore.QRect(280, 500, 93, 28))
        self.updateButton.setObjectName("updateButton")
        self.add_trainButton = QtWidgets.QPushButton(self.centralwidget)
        self.add_trainButton.setGeometry(QtCore.QRect(280, 470, 191, 28))
        self.add_trainButton.setObjectName("add_trainButton")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        conn = pymysql.connect(
            host='localhost',
            port=3306,
            user='root',
            passwd='111111',
            db='train',
            charset='utf8'
        )
        cursor = conn.cursor()
        cursor.execute("select * from 列车表")
        self.numb = cursor.rowcount
        for i in range(self.numb):
            exec('''
self.line{j} = QtWidgets.QFrame(self.scrollAreaWidgetContents)
self.line{j}.setGeometry(QtCore.QRect(0, 150+{y}, 701, 16))
self.line{j}.setFrameShape(QtWidgets.QFrame.HLine)
self.line{j}.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line{j}.setObjectName("line{j}")
self.train_txt{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.train_txt{j}.setGeometry(QtCore.QRect(10, 10+{y}, 51, 16))
self.train_txt{j}.setObjectName("train_txt{j}")
self.train{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.train{j}.setGeometry(QtCore.QRect(60, 10+{y}, 72, 15))
self.train{j}.setObjectName("train{j}")
self.begin_txt{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.begin_txt{j}.setGeometry(QtCore.QRect(10, 40+{y}, 72, 15))
self.begin_txt{j}.setObjectName("begin_txt{j}")
self.begin{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.begin{j}.setGeometry(QtCore.QRect(90, 40+{y}, 161, 16))
self.begin{j}.setObjectName("begin{j}")
self.end_txt{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.end_txt{j}.setGeometry(QtCore.QRect(310, 40+{y}, 72, 15))
self.end_txt{j}.setObjectName("end_txt{j}")
self.end{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.end{j}.setGeometry(QtCore.QRect(390, 40+{y}, 161, 16))
self.end{j}.setObjectName("end{j}")
self.via_station_txt{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.via_station_txt{j}.setGeometry(QtCore.QRect(10, 70+{y}, 61, 16))
self.via_station_txt{j}.setObjectName("via_station_txt{j}")
self.via_station{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.via_station{j}.setGeometry(QtCore.QRect(70, 70+{y}, 621, 16))
self.via_station{j}.setObjectName("via_station{j}")
self.first_txt{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.first_txt{j}.setGeometry(QtCore.QRect(10, 100+{y}, 91, 16))
self.first_txt{j}.setObjectName("first_txt{j}")
self.first{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.first{j}.setGeometry(QtCore.QRect(100, 100+{y}, 72, 15))
self.first{j}.setObjectName("first{j}")
self.first_p{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.first_p{j}.setGeometry(QtCore.QRect(300, 100+{y}, 72, 15))
self.first_p{j}.setObjectName("first_p{j}")
self.first_p_txt{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.first_p_txt{j}.setGeometry(QtCore.QRect(210, 100+{y}, 91, 16))
self.first_p_txt{j}.setObjectName("first_p_txt{j}")
self.first_s_txt{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.first_s_txt{j}.setGeometry(QtCore.QRect(440, 100+{y}, 91, 16))
self.first_s_txt{j}.setObjectName("first_s_txt{j}")
self.first_s{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.first_s{j}.setGeometry(QtCore.QRect(530, 100+{y}, 72, 15))
self.first_s{j}.setObjectName("first_s{j}")
self.second_p_txt{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.second_p_txt{j}.setGeometry(QtCore.QRect(210, 130+{y}, 91, 16))
self.second_p_txt{j}.setObjectName("second_p_txt{j}")
self.second{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.second{j}.setGeometry(QtCore.QRect(100, 130+{y}, 72, 15))
self.second{j}.setObjectName("second{j}")
self.second_s{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.second_s{j}.setGeometry(QtCore.QRect(530, 130+{y}, 72, 15))
self.second_s{j}.setObjectName("second_s{j}")
self.second_p{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.second_p{j}.setGeometry(QtCore.QRect(300, 130+{y}, 72, 15))
self.second_p{j}.setObjectName("second_p{j}")
self.second_txt{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.second_txt{j}.setGeometry(QtCore.QRect(10, 130+{y}, 91, 16))
self.second_txt{j}.setObjectName("second_txt{j}")
self.second_s_txt{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.second_s_txt{j}.setGeometry(QtCore.QRect(440, 130+{y}, 91, 16))
self.second_s_txt{j}.setObjectName("second_s_txt{j}")
self.train_state_txt{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.train_state_txt{j}.setGeometry(QtCore.QRect(310, 10+{y}, 72, 15))
self.train_state_txt{j}.setObjectName("train_state_txt{j}")
self.train_state{j} = QtWidgets.QLabel(self.scrollAreaWidgetContents)
self.train_state{j}.setGeometry(QtCore.QRect(400, 10+{y}, 72, 15))
self.train_state{j}.setObjectName("train_state{j}")
self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 699, 329+{y}))
'''.format(j=i+1,y=155*i))

        self.updateButton.clicked.connect(self.updateTrain)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "列车管理"))
        self.label.setText(_translate("MainWindow", "<html><head/><body><p><span style=\" font-size:16pt; font-weight:600;\">列车管理</span></p></body></html>"))
        self.A_date.setText(_translate("MainWindow", "TextLabel"))
        self.exitButton.setText(_translate("MainWindow", "返回"))
        self.updateButton.setText(_translate("MainWindow", "刷新"))
        self.add_trainButton.setText(_translate("MainWindow", "添加列车"))
        self.A_date.hide()
        for i in range(self.numb):
            exec('''
self.train_txt{j}.setText(_translate("MainWindow", "列车:"))
self.begin_txt{j}.setText(_translate("MainWindow", "发车时间:"))
self.via_station_txt{j}.setText(_translate("MainWindow", "途径站:"))
self.first_txt{j}.setText(_translate("MainWindow", "一等座数量:"))
self.first_p_txt{j}.setText(_translate("MainWindow", "一等座价格:"))
self.first_s_txt{j}.setText(_translate("MainWindow", "一等座售量:"))
self.second_p_txt{j}.setText(_translate("MainWindow", "二等座价格:"))
self.second_txt{j}.setText(_translate("MainWindow", "二等座数量:"))
self.second_s_txt{j}.setText(_translate("MainWindow", "二等座售量:"))
self.train_state_txt{j}.setText(_translate("MainWindow", "列车状态:"))
self.end_txt{j}.setText(_translate("MainWindow", "抵达时间:"))
'''.format(j=i+1))
    def updateTrain(self):
        for i in range(self.numb):
            exec('''
self.end_txt{j}.hide()
self.end{j}.hide()
self.line{j}.hide()
self.train_txt{j}.hide()
self.train{j}.hide()
self.begin_txt{j}.hide()
self.begin{j}.hide()
self.via_station_txt{j}.hide()
self.via_station{j}.hide()
self.first_txt{j}.hide()
self.first{j}.hide()
self.first_p{j}.hide()
self.first_p_txt{j}.hide()
self.first_s_txt{j}.hide()
self.first_s{j}.hide()
self.second_p_txt{j}.hide()
self.second{j}.hide()
self.second_s{j}.hide()
self.second_p{j}.hide()
self.second_txt{j}.hide()
self.second_s_txt{j}.hide()
self.train_state_txt{j}.hide()
self.train_state{j}.hide()            
'''.format(j=i + 1, k=i))
        conn = pymysql.connect(
            host='localhost',
            port=3306,
            user='root',
            passwd='111111',
            db='train',
            charset='utf8'
        )
        cursor = conn.cursor()
        cursor.execute("select * from 列车表")
        date = []
        for a in cursor.fetchall():
            date1 = []
            for b in a:
                date1.append(b)
            date.append(date1)
        for i in range(len(date)):
            cursor.execute("select count(*) from 座位表 where 列车编号=%s and 座位级别='一等座'"%date[i][0])
            for c in cursor.fetchall():
                for d in c:
                    date[i].append(d)
            cursor.execute("select count(*) from 座位表 where 列车编号=%s and 座位级别='二等座'" % date[i][0])
            for c in cursor.fetchall():
                for d in c:
                    date[i].append(d)
        for i in range(len(date)):
            exec('''
self.end_txt{j}.show()
self.end{j}.show()
self.line{j}.show()
self.train_txt{j}.show()
self.train{j}.show()
self.begin_txt{j}.show()
self.begin{j}.show()
self.via_station_txt{j}.show()
self.via_station{j}.show()
self.first_txt{j}.show()
self.first{j}.show()
self.first_p{j}.show()
self.first_p_txt{j}.show()
self.first_s_txt{j}.show()
self.first_s{j}.show()
self.second_p_txt{j}.show()
self.second{j}.show()
self.second_s{j}.show()
self.second_p{j}.show()
self.second_txt{j}.show()
self.second_s_txt{j}.show()
self.train_state_txt{j}.show()
self.train_state{j}.show()
self.train{j}.clear()
self.begin{j}.clear()
self.via_station{j}.clear() 
self.first{j}.clear() 
self.first_p{j}.clear()
self.first_s{j}.clear()
self.second{j}.clear()
self.second_s{j}.clear()
self.second_p{j}.clear()
self.train_state{j}.clear()
self.end{j}.clear()
self.train{j}.setText(str(date[{k}][1]))
self.begin{j}.setText(str(date[{k}][2]))
self.end{j}.setText(str(date[{k}][3]))
self.via_station{j}.setText(str(date[{k}][4]))
self.first{j}.setText(str(date[{k}][5])) 
self.first_p{j}.setText(str(date[{k}][6]))
self.first_s{j}.setText(str(date[{k}][10]))
self.second{j}.setText(str(date[{k}][7]))
self.second_s{j}.setText(str(date[{k}][11]))
self.second_p{j}.setText(str(date[{k}][8]))
self.train_state{j}.setText(str(date[{k}][9]))           
'''.format(j=i+1,k=i))

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

管理员-列车管理-添加列车UI设计:实现添加列车功能、以逐一添加途径站的方式来实现

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'add_trainUI.ui'
#
# Created by: PyQt5 UI code generator 5.15.6
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.



from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import pyqtSlot, QDate
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox, QInputDialog, QLineEdit
import pymysql
import datetime
import thp
class Ui_MainWindow(object):
    data = []
    state1 = ''
    state2 = ''
    touch = 0
    place2 = ["广州", "深圳", "佛山", "东莞","中山","珠海","江门","肇庆","惠州","汕头","潮州","揭阳","汕尾","湛江","茂名","阳江","云浮","韶关","清远","梅州", "河源"]
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        #MainWindow.setStyleSheet("#MainWindow{border-image: url(:/thpic/60.jpg);}")
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(320, 20, 181, 41))
        self.label.setObjectName("label")
        self.A_date = QtWidgets.QLabel(self.centralwidget)
        self.A_date.setGeometry(QtCore.QRect(40, 510, 72, 15))
        self.A_date.setObjectName("A_date")
        self.exitButton = QtWidgets.QPushButton(self.centralwidget)
        self.exitButton.setGeometry(QtCore.QRect(390, 490, 121, 28))
        self.exitButton.setObjectName("exitButton")
        self.ensureButton = QtWidgets.QPushButton(self.centralwidget)
        self.ensureButton.setGeometry(QtCore.QRect(270, 490, 121, 28))
        self.ensureButton.setObjectName("ensureButton")
        self.train_txt = QtWidgets.QLabel(self.centralwidget)
        self.train_txt.setGeometry(QtCore.QRect(50, 90, 61, 16))
        self.train_txt.setObjectName("train_txt")
        self.train = QtWidgets.QLineEdit(self.centralwidget)
        self.train.setGeometry(QtCore.QRect(110, 90, 141, 21))
        self.train.setObjectName("train")
        self.via_Station_txt = QtWidgets.QLabel(self.centralwidget)
        self.via_Station_txt.setGeometry(QtCore.QRect(50, 140, 61, 16))
        self.via_Station_txt.setObjectName("via_Station_txt")
        self.comboBox = QtWidgets.QComboBox(self.centralwidget)
        self.comboBox.setGeometry(QtCore.QRect(110, 140, 141, 22))
        self.comboBox.setObjectName("comboBox")
        self.begin_date = QtWidgets.QLabel(self.centralwidget)
        self.begin_date.setGeometry(QtCore.QRect(30, 180, 72, 21))
        self.begin_date.setObjectName("begin_date")
        self.dateEdit = QtWidgets.QDateEdit(self.centralwidget)
        self.dateEdit.setGeometry(QtCore.QRect(110, 180, 141, 22))
        self.dateEdit.setObjectName("dateEdit")
        self.begin_time = QtWidgets.QLabel(self.centralwidget)
        self.begin_time.setGeometry(QtCore.QRect(30, 220, 72, 15))
        self.begin_time.setObjectName("begin_time")
        self.addButton = QtWidgets.QPushButton(self.centralwidget)
        self.addButton.setGeometry(QtCore.QRect(270, 210, 93, 31))
        self.addButton.setObjectName("addButton")
        self.timeEdit = QtWidgets.QTimeEdit(self.centralwidget)
        self.timeEdit.setGeometry(QtCore.QRect(110, 220, 141, 22))
        self.timeEdit.setObjectName("timeEdit")
        self.state_list = QtWidgets.QTextBrowser(self.centralwidget)
        self.state_list.setGeometry(QtCore.QRect(490, 60, 241, 371))
        self.state_list.setObjectName("state_list")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(490, 40, 241, 20))
        self.label_2.setObjectName("label_2")
        self.clearButton = QtWidgets.QPushButton(self.centralwidget)
        self.clearButton.setGeometry(QtCore.QRect(570, 440, 93, 28))
        self.clearButton.setObjectName("clearButton")
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(20, 350, 91, 16))
        self.label_3.setObjectName("label_3")
        self.first = QtWidgets.QLineEdit(self.centralwidget)
        self.first.setGeometry(QtCore.QRect(110, 350, 71, 21))
        self.first.setObjectName("first")
        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        self.label_4.setGeometry(QtCore.QRect(210, 350, 91, 16))
        self.label_4.setObjectName("label_4")
        self.first_p = QtWidgets.QLineEdit(self.centralwidget)
        self.first_p.setGeometry(QtCore.QRect(300, 350, 71, 21))
        self.first_p.setObjectName("first_p")
        self.label_5 = QtWidgets.QLabel(self.centralwidget)
        self.label_5.setGeometry(QtCore.QRect(20, 390, 91, 16))
        self.label_5.setObjectName("label_5")
        self.second_p = QtWidgets.QLineEdit(self.centralwidget)
        self.second_p.setGeometry(QtCore.QRect(300, 390, 71, 21))
        self.second_p.setObjectName("second_p")
        self.label_6 = QtWidgets.QLabel(self.centralwidget)
        self.label_6.setGeometry(QtCore.QRect(210, 390, 91, 16))
        self.label_6.setObjectName("label_6")
        self.second = QtWidgets.QLineEdit(self.centralwidget)
        self.second.setGeometry(QtCore.QRect(110, 390, 71, 21))
        self.second.setObjectName("second")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.dateEdit.setCalendarPopup(True)
        self.dateEdit.setDate(QDate.fromString(str(datetime.date.today()), 1))
        self.dateEdit.setMinimumDateTime(QtCore.QDateTime(QDate.fromString(str(datetime.date.today()), 1), QtCore.QTime(0, 0, 0)))
        self.addButton.clicked.connect(self.addStation)
        self.comboBox.addItems(self.place2)
        self.clearButton.clicked.connect(self.clearState)
        self.ensureButton.clicked.connect(self.ensure_addTrain)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "添加列车"))
        self.label.setText(_translate("MainWindow", "<html><head/><body><p><span style=\" font-size:16pt; font-weight:600;\">添加列车</span></p></body></html>"))
        self.A_date.setText(_translate("MainWindow", "TextLabel"))
        self.exitButton.setText(_translate("MainWindow", "返回"))
        self.ensureButton.setText(_translate("MainWindow", "确定添加"))
        self.train_txt.setText(_translate("MainWindow", "车次号:"))
        self.via_Station_txt.setText(_translate("MainWindow", "途径站:"))
        self.begin_date.setText(_translate("MainWindow", "出发日期:"))
        self.begin_time.setText(_translate("MainWindow", "出发时间:"))
        self.addButton.setText(_translate("MainWindow", "添加途径站"))
        self.timeEdit.setDisplayFormat(_translate("MainWindow", "HH:mm"))
        self.label_2.setText(_translate("MainWindow", "         途径站展示框"))
        self.clearButton.setText(_translate("MainWindow", "一键清空"))
        self.label_3.setText(_translate("MainWindow", "一等座数量:"))
        self.label_4.setText(_translate("MainWindow", "一等座价格:"))
        self.label_5.setText(_translate("MainWindow", "二等座数量:"))
        self.label_6.setText(_translate("MainWindow", "二等座价格:"))
        self.A_date.hide()

    def addStation(self):
        data1 = []
        data2 = []
        success = 0
        if self.train.text()=='' or self.first.text()=='' or self.first_p.text()=='' or self.second.text()=='' or self.second_p.text()=='':
            self.touch = 0
            QMessageBox.critical(self,"错误","请输入完整的列车信息!!!")
            return
        if int(self.first.text()) % 20 != 0 or int(self.second.text()) % 20 != 0:
            self.touch = 0
            QMessageBox.critical(self,"错误","座位数量需要输入20的整数倍!!!")
            return
        conn = pymysql.connect(
            host='localhost',
            port=3306,
            user='root',
            passwd='111111',
            db='train',
            charset='utf8'
        )
        cursor = conn.cursor()
        date1 = self.dateEdit.text()+' '+self.timeEdit.text()
        cursor.execute("select 抵达时间 from 列车表 where 车次号='%s'"%self.train.text())
        row = cursor.rowcount
        if row == 0:
            success=1
        else:
            for i in cursor.fetchall():
                  for j in i:
                      date2 = datetime.datetime.strptime(j,"%Y/%m/%d %H:%M")
                      date3 = datetime.datetime.strptime(date1,"%Y/%m/%d %H:%M")
                      day = (date3-date2).days
                      print(date3,date2,day)
                      if day>=1:
                          success = 1
                      else:
                          success = 0
                          QMessageBox.critical(self, "错误", "无法添加列车,该列车在运行或维护中!!!")

        '''if self.state2.find(self.comboBox.currentText()) != -1:
            success = 0
            QMessageBox.critical(self, "错误", "途径站不能出现相同地址!!!")'''
        if success == 1:
            self.touch = self.touch + 1
            self.train.setEnabled(False)
            self.first.setEnabled(False)
            self.first_p.setEnabled(False)
            self.second.setEnabled(False)
            self.second_p.setEnabled(False)
            print("成功添加列车途径站:%s"%self.comboBox.currentText())
            data2.append(self.comboBox.currentText())
            data2.append(self.dateEdit.text())
            data2.append(self.timeEdit.text())
            self.data.append(data2)
            if self.touch==1:
               self.state1 = self.state1 + "<p>" + self.comboBox.currentText() +"("+date1+")"+"</p>"
               self.state2 = self.state2 + self.comboBox.currentText()
            else:
                self.state1 = self.state1 +"<p>|</p>" +"<p>" + self.comboBox.currentText() +"("+date1+")"+ "</p>"
                self.state2 = self.state2 +"-"+ self.comboBox.currentText()
            self.state_list.setHtml(self.state1)
            self.place2.remove(self.comboBox.currentText())
            self.comboBox.clear()
            self.comboBox.addItems(self.place2)

    def clearState(self):
        print("清空途径站")
        self.place2=["广州", "深圳", "佛山", "东莞","中山","珠海","江门","肇庆","惠州","汕头","潮州","揭阳","汕尾","湛江","茂名","阳江","云浮","韶关","清远","梅州", "河源"]
        self.comboBox.clear()
        self.comboBox.addItems(self.place2)
        self.touch = 0
        self.train.setEnabled(True)
        self.first.setEnabled(True)
        self.first_p.setEnabled(True)
        self.second.setEnabled(True)
        self.second_p.setEnabled(True)
        self.state1=''
        self.state2=''
        self.data.clear()
        self.state_list.clear()
    def ensure_addTrain(self):
        success = 0
        if self.touch<2:
            QMessageBox.critical(self, "错误", "途径站需要两个以上!!!")
            return
        conn = pymysql.connect(
            host='localhost',
            port=3306,
            user='root',
            passwd='111111',
            db='train',
            charset='utf8'
        )
        cursor = conn.cursor()
        passwd, bool1 = QInputDialog.getText(self, '密码', '请输入管理员密码', QLineEdit.EchoMode.Password)
        if passwd and bool1:
            sql = "select 密码 from 管理员表 where 管理员账号='%s'" % self.A_date.text()
            cursor.execute(sql)
            for i in cursor.fetchall():
                for j in i:
                    if j == passwd:
                        success = 1
                    else:
                        success = 0
                        QMessageBox.critical(self, "错误", "请重新输入管理员密码!!")
        if passwd == '' and bool1:
            success = 0
            QMessageBox.critical(self, "错误", "请输入管理员密码!!")
        cursor.execute("select max(列车编号) from 列车表")
        m = 0
        for i in cursor.fetchall():
            for j in i:
                if j == None:
                    m = 0
                else:
                    m = j + 1
        a = len(self.data)
        b_t = self.data[0][1] + ' ' +self.data[0][2]
        e_t = self.data[a-1][1] + ' ' +self.data[a-1][2]
        if success ==1:
            sql = "insert into 列车表(列车编号,车次号,发车时间,抵达时间,途径站,一等座数量,一等座价格,二等座数量,二等座价格,列车状态) values (%s,'%s','%s','%s','%s',%s,%s,%s,%s,'运行')"%(m,self.train.text(),b_t,e_t,self.state2,int(self.first.text()),int(self.first_p.text()),int(self.second.text()),int(self.second_p.text()))
            cursor.execute(sql)
            conn.commit()
            cursor.execute("select max(车站编号) from 车站表")
            t_m = 0
            for q in cursor.fetchall():
                for w in q:
                    if w == None:
                       t_m = 0
                    else:
                       t_m = w+1
            print(t_m)
            for c in range(a):
                cursor.execute("insert into 车站表(车站编号,列车编号,车站名,发车日期,发车时间,状态) values(%s,%s,'%s','%s','%s','未抵达')"%(t_m,m,self.data[c][0],self.data[c][1],self.data[c][2]))
                conn.commit()
                t_m = t_m + 1
            QMessageBox.information(self,"成功","添加列车成功!!!")
            self.exitButton.click()

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

所有UI的背景实现:代码太长不挂出来了,不影响程序运行,具体可以查阅QT的背景制作,可以去掉代码里的背景代码调用

在这里插入图片描述

项目展示(UI展示)

20220520_002105

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐