GUI程式設計--班級資訊收集系

礼拜天。發表於2024-06-03

`#建立資料庫
import pymysql
db =pymysql.connect(host='localhost',user='root',password='Lwq020330',database="xinji_inf",charset='utf8')

使用cursor()方法建立一個遊標物件

cursor = db.cursor()

如果存在則刪除

cursor.execute("DROP TABLE IF EXISTS AccountPassword")
sql ="""
CREATE TABLE AccountPassword(
class VARCHAR(50) NOT NULL,
name VARCHAR(50) NOT NULL,
number VARCHAR(50) NOT NULL
)
"""

執行sql語句

cursor.execut
import pymysql
import wx
class MyFrame(wx.Frame):
def init(self,parent,id):
wx.Frame.init(self,parent,id,'班級資訊收集',size=(400,300))
#建立皮膚
panel = wx.Panel(self)

#建立“儲存”和“查詢”按鈕,並繫結事件
    self.bt_storage = wx.Button(panel,label="儲存")
    self.bt_storage.Bind(wx.EVT_BUTTON,self.OnclickStorage)
    self.bt_inquire = wx.Button(panel,label ='查詢')
    self.bt_inquire.Bind(wx.EVT_BUTTON,self.OnclickInquire)
    #建立文字,左對齊
    self.title =wx.StaticText(panel,label ="儲存資訊請輸入使用者的學號班級和姓名\n\t查詢請輸入姓名或學號")
    self.label_class =wx.StaticText(panel,label ="班級:")
    self.text_class =wx.TextCtrl(panel,style =wx.TE_LEFT)
    self.label_user =wx.StaticText(panel,label ="姓名:")
    self.text_user =wx.TextCtrl(panel,style =wx.TE_LEFT)
    self.label_number = wx.StaticText(panel,label ="學號:")
    self.text_number = wx.TextCtrl(panel,style =wx.TE_LEFT)
    #新增容器,容器中控制元件橫向排列
    hsizer_class =wx.BoxSizer(wx.HORIZONTAL)
    hsizer_class.Add(self.label_class,proportion=0,flag=wx.ALL,border=5)
    hsizer_class.Add(self.text_class,proportion=1,flag=wx.ALL,border=5)
    hsizer_user = wx.BoxSizer(wx.HORIZONTAL)
    hsizer_user.Add(self.label_user,proportion=0,flag=wx.ALL,border=5)
    hsizer_user.Add(self.text_user,proportion=1,flag =wx.ALL,border=5)
    hsizer_number =wx.BoxSizer(wx.HORIZONTAL)
    hsizer_number.Add(self.label_number,proportion=0,flag=wx.ALL,border=5)
    hsizer_number.Add(self.text_number,proportion=1,flag=wx.ALL,border=5)
    hsizer_button =wx.BoxSizer(wx.HORIZONTAL)
    hsizer_button.Add(self.bt_storage,proportion=0,flag=wx.ALIGN_CENTER,border=5)
    hsizer_button.Add(self.bt_inquire,proportion=0,flag=wx.ALIGN_CENTER,border=5)
    #新增容器,容器中的控制元件縱向排列
    vsizer_all = wx.BoxSizer(wx.VERTICAL)
    vsizer_all.Add(self.title,proportion=0,flag=wx.BOTTOM |wx.TOP |wx.ALIGN_CENTER,border=15)
    vsizer_all.Add(hsizer_class,proportion=0,flag=wx.EXPAND |wx.LEFT |wx.RIGHT,border=45)
    vsizer_all.Add(hsizer_user,proportion=0,flag=wx.EXPAND |wx.LEFT |wx.RIGHT,border=45)
    vsizer_all.Add(hsizer_number,proportion=0,flag=wx.EXPAND |wx.LEFT |wx.RIGHT,border=45)
    vsizer_all.Add(hsizer_button,proportion=0,flag=wx.ALIGN_CENTER |wx.TOP,border=15)
    panel.SetSizer(vsizer_all)
    
def OnclickStorage(self,event):
    "單擊儲存按鈕"
    #連線資料庫
    db =pymysql.connect(host='localhost',user='root',password='Lwq020330',database="xinji_inf",charset='utf8')
    message =""
    classname =self.text_class.GetValue()                   #獲取輸入的班級
    username =self.text_user.GetValue()                     #獲取輸入的使用者名稱
    number =self.text_number.GetValue()                     #獲取輸入的學號
    #使用cursor()方法建立一個遊標物件
    cursor = db.cursor()
    #判斷是否為空
    if classname =="" or username =="" or number =="":
        message ='班級或名字或密碼不能為空'
    else:
        
        #資料列表
        data = [(classname,username,number)]
        try:
            #執行sql語句,插入資料
            sql="insert into accountpassword(class, name, number) values(%s,%s,%s)"
            cursor.executemany(sql,data)
            #提交資料
            db.commit()
        except:
            #發生錯誤時回滾
            db.rollback()
            #關閉連線
            db.close()
            message ='儲存成功'                                   #使用者名稱或密碼錯誤
    wx.MessageBox(message)                                   #彈出提示框
    
def OnclickInquire(self,event):
    "單擊查詢按鈕"
    username =self.text_user.GetValue()                     #獲取輸入的使用者名稱
    number =self.text_number.GetValue()                     #獲取輸入的學號
    db =pymysql.connect(host='localhost',user='root',password='Lwq020330',database="xinji_inf",charset='utf8')
    #使用cursor()方法建立一個遊標物件
    cursor = db.cursor()
    sql =""
    message =""
    if username and number:
        sql ="SELECT * FROM ACCOUNTPASSWORD \
              WHERE NUMBER = %s"                              #查詢學號
        try:
            #執行sql語句
            cursor.execute(sql,number)
            #獲取記錄
            results =cursor.fetchall()
            if results:
                for row in results:
                    classname = row[0]
                    username_sql =row[1]
                    number_sql =row[2]
        except:
            print("Error: unable to fecth data")
        if username_sql == username:
            message ="班級:{}\n姓名:{}\n學號:{}\n".format(classname,username_sql,number_sql)
        else:
            message ="姓名與學號不匹配"
    elif username:
        sql ="SELECT * FROM ACCOUNTPASSWORD \
              WHERE NAME = %s"                               #找到該名字
        try:
            #執行sql語句
            cursor.execute(sql,username)
            #獲取記錄
            results =cursor.fetchall()
            if results:                                      #若找到不為空,輸出對應的資訊
                for row in results:
                    classname = row[0]
                    username =row[1]
                    number =row[2]
                message ="班級:{}\n姓名:{}\n學號:{}\n".format(classname,username,number)
            else:
                message ="沒有這個名字"
        except:
            print("Error: unable to fecth data")              #資料錯誤--
    elif number:
        sql ="SELECT * FROM ACCOUNTPASSWORD \
              WHERE NUMBER = %s"                              #查詢學號,同上
        try:
            #執行sql語句
            cursor.execute(sql,number)
            #獲取記錄
            results =cursor.fetchall()
            if results:
                for row in results:
                    classname = row[0]
                    username =row[1]
                    number =row[2]
                message ="班級:{}\n姓名:{}\n學號:{}\n".format(classname,username,number)
            else:
                message ="沒有這個學號"
        except:
            print("Error: unable to fecth data")
    else:
        message ="班級或名字或密碼不能為空"
    #關閉資料庫
    db.close()
    wx.MessageBox(message)

if name =='main':
app = wx.App() #初始化應用
frame = MyFrame(parent=None, id=-1) #例項MyFrame類,並傳遞引數
frame.Show() #顯示視窗
app.MainLoop() #呼叫主迴圈方法
`

相關文章