您好,登錄后才能下訂單哦!
本文為大家分享了python實現外賣信息管理系統的具體代碼,供大家參考,具體內容如下
一、需求分析
需求分析包含如下:
1、問題描述
以外賣信息系統管理員身份登陸該系統,實現對店鋪信息、派送員信息、客服人員信息、訂單信息、配送信息等進行有條件查詢以及信息的錄入、修改、刪除等功能。
2、系統功能描述
(1)信息錄入:使用wxpython設計排版編寫窗口界面,給出錄入信息的接口,通過python語句實現與數據庫的連接,從而向數據庫中插入相應數據。
(2)信息修改:使用wxpython設計排版編寫窗口界面,給出修改信息的接口,通過python語句實現與數據庫的連接,從而修改數據庫中相應數據。
(3)信息查詢:在窗口界面中,通過響應的按鈕觸發,實現與數據庫的連接查詢,得到所有在線店鋪信息。
(4)數據統計:在數據庫中編寫相應的存儲過程,輸入店鋪名稱即可select其所管理的派送員和客服人員。
3、系統功能模塊圖
二、概念結構設計
系統整體的E-R模型:
三、邏輯結構設計
本系統所用到的表結構以及其聯系:
1、店鋪基本信息foodshop表
主鍵:shop_name
2、客服基本信息server表
主鍵:server_id
外鍵:shopname_shop_name
參考表:shopname 參考屬性:shop_name
3、派送員基本信息courier表
主鍵:courier_id
外鍵:shopname_shop_name
參考表:shopname 參考屬性:shop_name
4、學生基本信息student表
主鍵:student_phone
5、訂單基本信息book表
主鍵:(student_phone,server_id)
外鍵:student_phone,參考表student,參考屬性student_phone
外鍵:server_id,參考表server,參考屬性server_id
6、配送基本信息delivery表
主鍵:(student_phone,courier_id)
外鍵:student_phone,參考表student,參考屬性student_phone
外鍵:courier_id,參考表courier,參考屬性courier_id
四、具體實現
登陸界面:
附上源代碼:
# coding:utf8 ########################################################################### ## Python code generated with wxFormBuilder (version Jun 17 2015) ## http://www.wxformbuilder.org/ ## ## PLEASE DO "NOT" EDIT THIS FILE! ########################################################################### import wx #導入wxpyhton,pyhton自帶的GUI庫 #import wx.xrc import pymysql #用于操作數據庫 import sys reload(sys) sys.setdefaultencoding('utf8') ########################################################################### ## Class MyFrame1 ########################################################################### #建一個窗口類MyFrame1繼承wx.Frame class MyFrame1(wx.Frame): def __init__(self, parent): #Wx.Frame (parent, id, title, pos, size, style, name) wx.Frame.__init__(self, parent, id=wx.ID_ANY, title=u"外賣信息管理系統", pos=wx.DefaultPosition, size=wx.Size(610, 400), style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL) self.Center() #居中顯示 # 小構件,如按鈕,文本框等被放置在面板窗口。 wx.Panel類通常是被放在一個wxFrame對象中。這個類也繼承自wxWindow類。 self.m_panel1 = wx.Panel(self) # 標簽,一行或多行的只讀文本,Wx.StaticText(parent, id, label, position, size, style) self.m_staticText1 = wx.StaticText(self.m_panel1, wx.ID_ANY, u"關于店鋪:", (20, 20)) self.m_button1 = wx.Button(self.m_panel1, wx.ID_ANY, u"店鋪信息", (130, 20), wx.DefaultSize, style=wx.BORDER_MASK) self.m_button2 = wx.Button(self.m_panel1, wx.ID_ANY, u"店鋪上架", (250, 20), wx.DefaultSize, style=wx.BORDER_MASK) self.m_button3 = wx.Button(self.m_panel1, wx.ID_ANY, u"店鋪下架", (370, 20), wx.DefaultSize, style=wx.BORDER_MASK) self.m_staticText2 = wx.StaticText(self.m_panel1, wx.ID_ANY, u"關于派送員:", (20, 90)) self.m_button4 = wx.Button(self.m_panel1, wx.ID_ANY, u"派送員信息", (130, 90), wx.DefaultSize, style=wx.BORDER_MASK) self.m_button5 = wx.Button(self.m_panel1, wx.ID_ANY, u"聘請派送員", (250, 90), wx.DefaultSize, style=wx.BORDER_MASK) self.m_button6 = wx.Button(self.m_panel1, wx.ID_ANY, u"解雇派送員", (370, 90), wx.DefaultSize, style=wx.BORDER_MASK) self.m_staticText3 = wx.StaticText(self.m_panel1, wx.ID_ANY, u"關于客服人員:", (20, 160)) self.m_button7 = wx.Button(self.m_panel1, wx.ID_ANY, u"客服人員信息", (130, 160), wx.DefaultSize, style=wx.BORDER_MASK) self.m_button8 = wx.Button(self.m_panel1, wx.ID_ANY, u"聘請客服人員", (250, 160), wx.DefaultSize, style=wx.BORDER_MASK) self.m_button9 = wx.Button(self.m_panel1, wx.ID_ANY, u"解雇客服人員", (370, 160), wx.DefaultSize, style=wx.BORDER_MASK) self.m_staticText4 = wx.StaticText(self.m_panel1, wx.ID_ANY, u"關于訂單:", (20, 230)) self.m_button10 = wx.Button(self.m_panel1, wx.ID_ANY, u"訂單信息", (130, 230), wx.DefaultSize, style=wx.BORDER_MASK) self.m_button11 = wx.Button(self.m_panel1, wx.ID_ANY, u"學生訂餐", (250, 230), wx.DefaultSize, style=wx.BORDER_MASK) self.m_button12 = wx.Button(self.m_panel1, wx.ID_ANY, u"取消訂單", (370, 230), wx.DefaultSize, style=wx.BORDER_MASK) self.m_button13 = wx.Button(self.m_panel1, wx.ID_ANY, u"修改訂單", (490, 230), wx.DefaultSize, style=wx.BORDER_MASK) self.m_staticText5 = wx.StaticText(self.m_panel1, wx.ID_ANY, u"關于物流:", (20, 300)) self.m_button14 = wx.Button(self.m_panel1, wx.ID_ANY, u"配送信息", (130, 300), wx.DefaultSize, style=wx.BORDER_MASK) self.m_button15 = wx.Button(self.m_panel1, wx.ID_ANY, u"安排配送", (250, 300), wx.DefaultSize, style=wx.BORDER_MASK) self.m_button16 = wx.Button(self.m_panel1, wx.ID_ANY, u"取消配送", (370, 300), wx.DefaultSize, style=wx.BORDER_MASK) #按鈕綁定對話框的彈出 #在創建應用程序時,Bind函數可以將按鈕的動作與特定的函數綁定,當按鈕上有動作時,這個函數就會啟動,從而處理響應的事件。 #個Button被單擊發生了EVT_BUTTON事件 self.m_button1.Bind(wx.EVT_BUTTON, MyDialog11(None).OnClick) self.m_button2.Bind(wx.EVT_BUTTON, MyDialog12(None).OnClick) self.m_button3.Bind(wx.EVT_BUTTON, MyDialog13(None).OnClick) self.m_button4.Bind(wx.EVT_BUTTON, MyDialog21(None).OnClick) self.m_button5.Bind(wx.EVT_BUTTON, MyDialog22(None).OnClick) self.m_button6.Bind(wx.EVT_BUTTON, MyDialog23(None).OnClick) self.m_button7.Bind(wx.EVT_BUTTON, MyDialog31(None).OnClick) self.m_button8.Bind(wx.EVT_BUTTON, MyDialog32(None).OnClick) self.m_button9.Bind(wx.EVT_BUTTON, MyDialog33(None).OnClick) self.m_button10.Bind(wx.EVT_BUTTON, MyDialog41(None).OnClick) self.m_button11.Bind(wx.EVT_BUTTON, MyDialog42(None).OnClick) self.m_button12.Bind(wx.EVT_BUTTON, MyDialog43(None).OnClick) self.m_button13.Bind(wx.EVT_BUTTON, MyDialog44(None).OnClick) self.m_button14.Bind(wx.EVT_BUTTON, MyDialog51(None).OnClick) self.m_button15.Bind(wx.EVT_BUTTON, MyDialog52(None).OnClick) self.m_button16.Bind(wx.EVT_BUTTON, MyDialog53(None).OnClick) #設置按鈕的背景顏色 self.m_button1.SetBackgroundColour('#0a74f7') self.m_button1.SetForegroundColour('white') self.m_button2.SetBackgroundColour('#0a74f7') self.m_button2.SetForegroundColour('white') self.m_button3.SetBackgroundColour('#0a74f7') self.m_button3.SetForegroundColour('white') self.m_button4.SetBackgroundColour('#238E23') self.m_button4.SetForegroundColour('white') self.m_button5.SetBackgroundColour('#238E23') self.m_button5.SetForegroundColour('white') self.m_button6.SetBackgroundColour('#238E23') self.m_button6.SetForegroundColour('white') self.m_button7.SetBackgroundColour('#6F4242') self.m_button7.SetForegroundColour('white') self.m_button8.SetBackgroundColour('#6F4242') self.m_button8.SetForegroundColour('white') self.m_button9.SetBackgroundColour('#6F4242') self.m_button9.SetForegroundColour('white') self.m_button10.SetBackgroundColour('#8E6B23') self.m_button10.SetForegroundColour('white') self.m_button11.SetBackgroundColour('#8E6B23') self.m_button11.SetForegroundColour('white') self.m_button12.SetBackgroundColour('#8E6B23') self.m_button12.SetForegroundColour('white') self.m_button13.SetBackgroundColour('#8E6B23') self.m_button13.SetForegroundColour('white') self.m_button14.SetBackgroundColour('#545454') self.m_button14.SetForegroundColour('white') self.m_button15.SetBackgroundColour('#545454') self.m_button15.SetForegroundColour('white') self.m_button16.SetBackgroundColour('#545454') self.m_button16.SetForegroundColour('white') self.m_panel1.SetBackgroundColour('white') #設置面板的背景顏色 ########################################################################### ## Class MyDialog11 ########################################################################### #一個對話框的類繼承wx.Dialog class MyDialog11(wx.Dialog): def __init__(self, parent): wx.Dialog.__init__(self, parent, id=wx.ID_ANY, title=u"店鋪信息", pos=wx.DefaultPosition, size=wx.Size(302, 362), style=wx.DEFAULT_DIALOG_STYLE) self.Center() self.panel = wx.Panel(self) self.panel.SetBackgroundColour('white') wx.StaticText(self.panel, -1, "店鋪名稱", (20, 20)) wx.StaticText(self.panel, -1, "月銷量", (80, 20)) def OnClick(self, event): conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='project', charset='utf8') cursor = conn.cursor() try: sql = "select * from foodshop" cursor.execute(sql) rs = cursor.fetchall() h = 30 for row in rs: h = h + 20 shop_name = row[0] salenum = row[1] #注意數據庫中的數據為數字 int 類型時的讀取方式 id = '%d' % i[0] wx.StaticText(self.panel, -1, shop_name, (20, h)) wx.StaticText(self.panel, -1, salenum, (80, h)) except: conn.rollback() finally: cursor.close() conn.close() self.ShowModal() ########################################################################### ## Class MyDialog12 ########################################################################### class MyDialog12(wx.Dialog): def __init__(self, parent): wx.Dialog.__init__(self, parent, id=wx.ID_ANY, title=u"店鋪上架", pos=wx.DefaultPosition, size=wx.Size(302, 250), style=wx.DEFAULT_DIALOG_STYLE) self.Center() self.panel = wx.Panel(self) self.panel.SetBackgroundColour('white') wx.StaticText(self.panel, -1, "請輸入店鋪名稱:", (20, 20)) # 可編輯文本框的創建使用wx.TextCtrl,默認情況下,文本框只能編輯一行文字(無論文字多長均不換行) self.t1 = wx.TextCtrl(self.panel, pos=(130, 20), size=(120, 25)) wx.StaticText(self.panel, -1, "請輸入月銷量:", (20, 80)) self.t2 = wx.TextCtrl(self.panel, pos=(130, 80), size=(120, 25)) def OnClick(self, e): dialog12 = MyDialog12(None) btn = wx.Button(parent=dialog12.panel, label="上架", pos=(20, 150), size=(100, 45), style=wx.BORDER_MASK) btn.Bind(wx.EVT_BUTTON, dialog12.insert) dialog12.ShowModal() def insert(self, event): conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='project', charset='utf8') cursor = conn.cursor() shop_name = self.t1.GetValue().encode('utf8') #注意GetValue()獲取的是unicode編碼, salenum = self.t2.GetValue().encode('utf8') #你使用的#coding=utf8,那就對獲取的數據.encode('utf8')重新編碼 data = (shop_name, salenum) try: sql = "insert into foodshop values (%s,%s)" cursor.execute(sql, data) conn.commit() #提交給后臺數據庫 dial = wx.MessageDialog(None, '成功上架!', '結果', wx.YES_NO) # 創建一個帶按鈕的消息框, 語法是(self, 框中內容, 框標題, ID) dial.ShowModal() # 顯示對話框 except: conn.rollback() finally: cursor.close() conn.close() ########################################################################### ## Class MyDialog13 ########################################################################### class MyDialog13(wx.Dialog): def __init__(self, parent): wx.Dialog.__init__(self, parent, id=wx.ID_ANY, title=u"店鋪下架", pos=wx.DefaultPosition, size=wx.Size(200, 200), style=wx.DEFAULT_DIALOG_STYLE) self.Center() self.panel = wx.Panel(self) self.panel.SetBackgroundColour('white') wx.StaticText(self.panel, -1, "店鋪名稱:", (20, 20)) self.t1 = wx.TextCtrl(self.panel, pos=(20, 50), size=(120, 25)) def OnClick(self, e): dialog13 = MyDialog13(None) btn = wx.Button(parent=dialog13.panel, label="下架", pos=(20, 90), size=(90, 40)) btn.Bind(wx.EVT_BUTTON, dialog13.delete) dialog13.ShowModal() def delete(self, e): conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='project', charset='utf8') cursor = conn.cursor() shop_name = self.t1.GetValue().encode('utf8') # 注意GetValue()獲取的是unicode編碼 try: sql = "delete from foodshop where shop_name=%s" cursor.execute(sql, shop_name) conn.commit() dial = wx.MessageDialog(None, '成功下架!', '結果', wx.YES_NO) # 創建一個帶按鈕的對話框, 語法是(self, 內容, 標題, ID) dial.ShowModal() # 顯示對話框 except: conn.rollback() finally: cursor.close() conn.close() ########################################################################### ## Class MyDialog21 ########################################################################### class MyDialog21(wx.Dialog): def __init__(self, parent): wx.Dialog.__init__(self, parent, id=wx.ID_ANY, title=u"派送員信息", pos=wx.DefaultPosition, size=wx.Size(400, 415), style=wx.DEFAULT_DIALOG_STYLE) self.Center() self.panel = wx.Panel(self) self.panel.SetBackgroundColour('white') wx.StaticText(self.panel, -1, "店鋪名稱:", (20, 20)) self.t1 = wx.TextCtrl(self.panel, pos=(90, 20), size=(120, 25)) #btn = wx.Button(parent=self.panel, label="查詢", pos=(240, 20), size=(70, 25)) #btn.Bind(wx.EVT_BUTTON, self.find) wx.StaticText(self.panel, -1, "派送員編號", (20, 60)) wx.StaticText(self.panel, -1, "派送員姓名", (120, 60)) wx.StaticText(self.panel, -1, "派送員電話", (220, 60)) def OnClick(self, event): dialog21 = MyDialog21(None) btn = wx.Button(parent=dialog21.panel, label="查詢", pos=(240, 20), size=(70, 25)) btn.Bind(wx.EVT_BUTTON, dialog21.find) dialog21.ShowModal() def find(self, event): ''' if self.t1.GetValue() == '肯德基': wx.StaticText(self.panel, -1, '派送員編號', (20, h)) wx.StaticText(self.panel, -1, '派送員姓名', (120, h)) ''' conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='project', charset='utf8') cursor = conn.cursor() try: sql = "select * from courier" cursor.execute(sql) rs = cursor.fetchall() h = 80 for row in rs: if row[3] == self.t1.GetValue(): h = h + 20 courier_id = row[0] courier_name = row[1] courier_phone = row[2] wx.StaticText(self.panel, -1, courier_id, (20, h)) wx.StaticText(self.panel, -1, courier_name, (120, h)) wx.StaticText(self.panel, -1, courier_phone, (220, h)) except: conn.rollback() finally: cursor.close() conn.close() ########################################################################### ## Class MyDialog22 ########################################################################### class MyDialog22(wx.Dialog): def __init__(self, parent): wx.Dialog.__init__(self, parent, id=wx.ID_ANY, title=u"聘請派送員", pos=wx.DefaultPosition, size=wx.Size(400, 350), style=wx.DEFAULT_DIALOG_STYLE) self.Center() self.panel = wx.Panel(self) self.panel.SetBackgroundColour('white') wx.StaticText(self.panel, -1, "請輸入店鋪名稱:", (20, 20)) self.t1 = wx.TextCtrl(self.panel, pos=(140, 20), size=(120, 25)) wx.StaticText(self.panel, -1, "請輸入派送員編號:", (20, 80)) self.t2 = wx.TextCtrl(self.panel, pos=(140, 80), size=(120, 25)) wx.StaticText(self.panel, -1, "請輸入派送員姓名:", (20, 140)) self.t3 = wx.TextCtrl(self.panel, pos=(140, 140), size=(120, 25)) wx.StaticText(self.panel, -1, "請輸入派送員電話:", (20, 200)) self.t4 = wx.TextCtrl(self.panel, pos=(140, 200), size=(120, 25)) def OnClick(self, e): dialog22 = MyDialog22(None) btn = wx.Button(parent=dialog22.panel, label="聘請", pos=(20, 250), size=(100, 45)) btn.Bind(wx.EVT_BUTTON, dialog22.insert) dialog22.ShowModal() def insert(self, e): conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='project', charset='utf8') cursor = conn.cursor() shop_name = self.t1.GetValue().encode('utf8') # 注意GetValue()獲取的是unicode編碼, courier_id = self.t2.GetValue().encode('utf8') # 你使用的#coding=utf8,那就對獲取的數據.encode('utf8') courier_name = self.t3.GetValue().encode('utf8') courier_phone = self.t4.GetValue().encode('utf8') data = (courier_id, courier_name, courier_phone, shop_name) try: sql = "insert into courier values (%s,%s,%s,%s)" cursor.execute(sql, data) conn.commit() dial = wx.MessageDialog(None, '成功聘請派送員!', '結果', wx.YES_NO) # 創建一個帶按鈕的對話框, 語法是(self, 內容, 標題, ID) dial.ShowModal() # 顯示對話框 except: conn.rollback() finally: cursor.close() conn.close() ########################################################################### ## Class MyDialog23 ########################################################################### class MyDialog23(wx.Dialog): def __init__(self, parent): wx.Dialog.__init__(self, parent, id=wx.ID_ANY, title=u"解雇派送員", pos=wx.DefaultPosition, size=wx.Size(200, 200), style=wx.DEFAULT_DIALOG_STYLE) self.Center() self.panel = wx.Panel(self) self.panel.SetBackgroundColour('white') wx.StaticText(self.panel, -1, "派送員編號:", (20, 20)) self.t1 = wx.TextCtrl(self.panel, pos=(20, 50), size=(120, 25)) def OnClick(self, e): dialog23 = MyDialog23(None) btn = wx.Button(parent=dialog23.panel, label="解雇", pos=(20, 90), size=(90, 40)) btn.Bind(wx.EVT_BUTTON, dialog23.delete) dialog23.ShowModal() def delete(self, e): conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='project', charset='utf8') cursor = conn.cursor() courier_id = self.t1.GetValue().encode('utf8') # 注意GetValue()獲取的是unicode編碼 try: sql = "delete from courier where courier_id=%s" cursor.execute(sql, courier_id) conn.commit() dial = wx.MessageDialog(None, '成功解雇派送員!', '結果', wx.YES_NO) # 創建一個帶按鈕的對話框, 語法是(self, 內容, 標題, ID) dial.ShowModal() # 顯示對話框 except: conn.rollback() finally: cursor.close() conn.close() ########################################################################### ## Class MyDialog31 ########################################################################### class MyDialog31(wx.Dialog): def __init__(self, parent): wx.Dialog.__init__(self, parent, id=wx.ID_ANY, title=u"客服人員信息", pos=wx.DefaultPosition, size=wx.Size(400, 401), style=wx.DEFAULT_DIALOG_STYLE) self.Center() self.panel = wx.Panel(self) self.panel.SetBackgroundColour('white') wx.StaticText(self.panel, -1, "店鋪名稱:", (20, 20)) self.t1 = wx.TextCtrl(self.panel, pos=(90, 20), size=(120, 25)) # btn = wx.Button(parent=self.panel, label="查詢", pos=(240, 20), size=(70, 25)) # btn.Bind(wx.EVT_BUTTON, self.find) wx.StaticText(self.panel, -1, "客服人員編號", (20, 60)) wx.StaticText(self.panel, -1, "客服人員姓名", (120, 60)) def OnClick(self, e): dialog31 = MyDialog31(None) btn = wx.Button(parent=dialog31.panel, label="查詢", pos=(240, 20), size=(70, 25)) btn.Bind(wx.EVT_BUTTON, dialog31.find) dialog31.ShowModal() def find(self, event): conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='project', charset='utf8') cursor = conn.cursor() try: sql = "select * from server" cursor.execute(sql) rs = cursor.fetchall() h = 80 for row in rs: if row[2] == self.t1.GetValue(): h = h + 20 server_id = row[0] server_name = row[1] wx.StaticText(self.panel, -1, server_id, (20, h)) wx.StaticText(self.panel, -1, server_name, (120, h)) except: conn.rollback() finally: cursor.close() conn.close() ########################################################################### ## Class MyDialog32 ########################################################################### class MyDialog32(wx.Dialog): def __init__(self, parent): wx.Dialog.__init__(self, parent, id=wx.ID_ANY, title=u"聘請客服人員", pos=wx.DefaultPosition, size=wx.Size(400, 300), style=wx.DEFAULT_DIALOG_STYLE) self.Center() self.panel = wx.Panel(self) self.panel.SetBackgroundColour('white') wx.StaticText(self.panel, -1, "請輸入店鋪名稱:", (20, 20)) self.t1 = wx.TextCtrl(self.panel, pos=(160, 20), size=(120, 25)) wx.StaticText(self.panel, -1, "請輸入客服人員編號:", (20, 80)) self.t2 = wx.TextCtrl(self.panel, pos=(160, 80), size=(120, 25)) wx.StaticText(self.panel, -1, "請輸入客服人員姓名:", (20, 140)) self.t3 = wx.TextCtrl(self.panel, pos=(160, 140), size=(120, 25)) def OnClick(self, e): dialog32 = MyDialog32(None) btn = wx.Button(parent=dialog32.panel, label="聘請", pos=(20, 200), size=(100, 45)) btn.Bind(wx.EVT_BUTTON, dialog32.insert) dialog32.ShowModal() def insert(self, e): conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='project', charset='utf8') cursor = conn.cursor() shop_name = self.t1.GetValue().encode('utf8') # 注意GetValue()獲取的是unicode編碼, server_id = self.t2.GetValue().encode('utf8') # 你使用的#coding=utf8,那就對獲取的數據.encode('utf8') server_name = self.t3.GetValue().encode('utf8') data = (server_id, server_name, shop_name) try: sql = "insert into server values(%s,%s,%s)" cursor.execute(sql, data) conn.commit() dial = wx.MessageDialog(None, '成功聘請客服!', '結果', wx.YES_NO) # 創建一個帶按鈕的對話框, 語法是(self, 內容, 標題, ID) dial.ShowModal() # 顯示對話框 except: conn.rollback() finally: cursor.close() conn.close() ########################################################################### ## Class MyDialog33 ########################################################################### class MyDialog33(wx.Dialog): def __init__(self, parent): wx.Dialog.__init__(self, parent, id=wx.ID_ANY, title=u"解雇客服人員", pos=wx.DefaultPosition, size=wx.Size(200, 200), style=wx.DEFAULT_DIALOG_STYLE) self.Center() self.panel = wx.Panel(self) self.panel.SetBackgroundColour('white') wx.StaticText(self.panel, -1, "客服人員編號:", (20, 20)) self.t1 = wx.TextCtrl(self.panel, pos=(20, 50), size=(120, 25)) def OnClick(self, e): dialog33 = MyDialog33(None) btn = wx.Button(parent=dialog33.panel, label="解雇", pos=(20, 90), size=(90, 40)) btn.Bind(wx.EVT_BUTTON, dialog33.delete) dialog33.ShowModal() def delete(self, e): conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='project', charset='utf8') cursor = conn.cursor() server_id = self.t1.GetValue().encode('utf8') # 注意GetValue()獲取的是unicode編碼 try: sql = "delete from server where server_id=%s" cursor.execute(sql, server_id) conn.commit() dial = wx.MessageDialog(None, '成功解雇客服!', '結果', wx.YES_NO) # 創建一個帶按鈕的對話框, 語法是(self, 內容, 標題, ID) dial.ShowModal() # 顯示對話框 except: conn.rollback() finally: cursor.close() conn.close() ########################################################################### ## Class MyDialog41 ########################################################################### class MyDialog41(wx.Dialog): def __init__(self, parent): wx.Dialog.__init__(self, parent, id=wx.ID_ANY, title=u"訂單信息", pos=wx.DefaultPosition, size=wx.Size(500, 400), style=wx.DEFAULT_DIALOG_STYLE) self.Center() self.panel = wx.Panel(self) self.panel.SetBackgroundColour('white') wx.StaticText(self.panel, -1, "買家電話:", (20, 20)) self.t1 = wx.TextCtrl(self.panel, pos=(90, 20), size=(120, 25)) # btn = wx.Button(parent=self.panel, label="查詢", pos=(240, 20), size=(70, 25)) # btn.Bind(wx.EVT_BUTTON, self.find) wx.StaticText(self.panel, -1, "客服人員編號", (20, 60)) wx.StaticText(self.panel, -1, "訂單編號", (120, 60)) wx.StaticText(self.panel, -1, "訂單金額", (220, 60)) wx.StaticText(self.panel, -1, "訂餐方式", (320, 60)) def OnClick(self, e): dialog41 = MyDialog41(None) btn = wx.Button(parent=dialog41.panel, label="查詢", pos=(240, 20), size=(70, 25)) btn.Bind(wx.EVT_BUTTON, dialog41.find) dialog41.ShowModal() def find(self, event): conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='project', charset='utf8') cursor = conn.cursor() try: sql = "select * from book" cursor.execute(sql) rs = cursor.fetchall() h = 80 for row in rs: if row[0] == self.t1.GetValue(): h = h + 20 server_id = row[1] order_id = row[2] order_money = row[3] order_way = row[4] wx.StaticText(self.panel, -1, server_id, (20, h)) wx.StaticText(self.panel, -1, order_id, (120, h)) wx.StaticText(self.panel, -1, order_money, (220, h)) wx.StaticText(self.panel, -1, order_way, (320, h)) except: conn.rollback() finally: cursor.close() conn.close() ########################################################################### ## Class MyDialog42 ########################################################################### class MyDialog42(wx.Dialog): def __init__(self, parent): wx.Dialog.__init__(self, parent, id=wx.ID_ANY, title=u"學生訂餐", pos=wx.DefaultPosition, size=wx.Size(400, 400), style=wx.DEFAULT_DIALOG_STYLE) self.Center() self.panel = wx.Panel(self) self.panel.SetBackgroundColour('white') wx.StaticText(self.panel, -1, "請輸入買家電話:", (20, 20)) self.t1 = wx.TextCtrl(self.panel, pos=(150, 20), size=(120, 25)) wx.StaticText(self.panel, -1, "請輸入客服人員編號:", (20, 80)) self.t2 = wx.TextCtrl(self.panel, pos=(150, 80), size=(120, 25)) wx.StaticText(self.panel, -1, "請輸入訂單編號:", (20, 140)) self.t3 = wx.TextCtrl(self.panel, pos=(150, 140), size=(120, 25)) wx.StaticText(self.panel, -1, "請輸入訂單金額:", (20, 200)) self.t4 = wx.TextCtrl(self.panel, pos=(150, 200), size=(120, 25)) wx.StaticText(self.panel, -1, "請輸入訂餐方式:", (20, 260)) self.t5 = wx.TextCtrl(self.panel, pos=(150, 260), size=(120, 25)) def OnClick(self, e): dialog42 = MyDialog42(None) btn = wx.Button(parent=dialog42.panel, label="訂餐", pos=(20, 310), size=(100, 45)) btn.Bind(wx.EVT_BUTTON, dialog42.insert) dialog42.ShowModal() def insert(self, e): conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='project', charset='utf8') cursor = conn.cursor() student_phone = self.t1.GetValue().encode('utf8') # 注意GetValue()獲取的是unicode編碼, server_id = self.t2.GetValue().encode('utf8') # 你使用的#coding=utf8,那就對獲取的數據.encode('utf8') order_id = self.t3.GetValue().encode('utf8') order_money = self.t4.GetValue().encode('utf8') order_way = self.t5.GetValue().encode('utf8') data = (student_phone, server_id, order_id, order_money, order_way) try: sql = "insert into book values(%s,%s,%s,%s,%s)" cursor.execute(sql, data) conn.commit() dial = wx.MessageDialog(None, '成功訂餐!', '結果', wx.YES_NO) # 創建一個帶按鈕的對話框, 語法是(self, 內容, 標題, ID) dial.ShowModal() # 顯示對話框 except: conn.rollback() finally: cursor.close() conn.close() ########################################################################### ## Class MyDialog43 ########################################################################### class MyDialog43(wx.Dialog): def __init__(self, parent): wx.Dialog.__init__(self, parent, id=wx.ID_ANY, title=u"刪除訂單", pos=wx.DefaultPosition, size=wx.Size(300, 300), style=wx.DEFAULT_DIALOG_STYLE) self.Center() self.panel = wx.Panel(self) self.panel.SetBackgroundColour('white') wx.StaticText(self.panel, -1, "客服人員編號:", (20, 20)) self.t1 = wx.TextCtrl(self.panel, pos=(20, 50), size=(120, 25)) wx.StaticText(self.panel, -1, "買家電話:", (20, 90)) self.t2 = wx.TextCtrl(self.panel, pos=(20, 120), size=(120, 25)) def OnClick(self, e): dialog43 = MyDialog43(None) btn = wx.Button(parent=dialog43.panel, label="取消訂單", pos=(20, 170), size=(90, 40)) btn.Bind(wx.EVT_BUTTON, dialog43.delete) dialog43.ShowModal() def delete(self, e): conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='project', charset='utf8') cursor = conn.cursor() server_id = self.t1.GetValue().encode('utf8') # 注意GetValue()獲取的是unicode編碼 student_phone = self.t2.GetValue().encode('utf8') data = (server_id, student_phone) try: sql = "delete from book where server_id=%s and student_phone=%s" cursor.execute(sql, data) conn.commit() dial = wx.MessageDialog(None, '成功刪除訂單!', '結果', wx.YES_NO) # 創建一個帶按鈕的對話框, 語法是(self, 內容, 標題, ID) dial.ShowModal() # 顯示對話框 except: conn.rollback() finally: cursor.close() conn.close() ########################################################################### ## Class MyDialog44 ########################################################################### class MyDialog44(wx.Dialog): def __init__(self, parent): wx.Dialog.__init__(self, parent, id=wx.ID_ANY, title=u"修改訂單", pos=wx.DefaultPosition, size=wx.Size(400, 300), style=wx.DEFAULT_DIALOG_STYLE) self.Center() self.panel = wx.Panel(self) self.panel.SetBackgroundColour('white') wx.StaticText(self.panel, -1, "請輸入客服編號:", (20, 20)) self.t1 = wx.TextCtrl(self.panel, pos=(160, 20), size=(120, 25)) wx.StaticText(self.panel, -1, "請輸入買家電話:", (20, 80)) self.t2 = wx.TextCtrl(self.panel, pos=(160, 80), size=(120, 25)) wx.StaticText(self.panel, -1, "請更正訂單金額:", (20, 140)) self.t3 = wx.TextCtrl(self.panel, pos=(160, 140), size=(120, 25)) def OnClick(self, e): dialog44 = MyDialog44(None) btn = wx.Button(parent=dialog44.panel, label="確認修改", pos=(20, 200), size=(100, 45)) btn.Bind(wx.EVT_BUTTON, dialog44.change) dialog44.ShowModal() def change(self, e): conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='project', charset='utf8') cursor = conn.cursor() server_id = self.t1.GetValue().encode('utf8') student_phone = self.t2.GetValue().encode('utf8') order_money = self.t3.GetValue().encode('utf8') data = (order_money, server_id, student_phone) try: sql = "update book set order_money=%s where server_id=%s and student_phone=%s" cursor.execute(sql, data) conn.commit() dial = wx.MessageDialog(None, '成功修改訂單!', '結果', wx.YES_NO) # 創建一個帶按鈕的對話框, 語法是(self, 內容, 標題, ID) dial.ShowModal() # 顯示對話框 except: conn.rollback() finally: cursor.close() conn.close() ########################################################################### ## Class MyDialog51 ########################################################################### class MyDialog51(wx.Dialog): def __init__(self, parent): wx.Dialog.__init__(self, parent, id=wx.ID_ANY, title=u"配送信息", pos=wx.DefaultPosition, size=wx.Size(502, 362), style=wx.DEFAULT_DIALOG_STYLE) self.Center() self.panel = wx.Panel(self) self.panel.SetBackgroundColour('white') wx.StaticText(self.panel, -1, "買家電話:", (20, 20)) self.t1 = wx.TextCtrl(self.panel, pos=(90, 20), size=(120, 25)) # btn = wx.Button(parent=self.panel, label="查詢", pos=(240, 20), size=(70, 25)) # btn.Bind(wx.EVT_BUTTON, self.find) wx.StaticText(self.panel, -1, "派送員編號", (20, 60)) wx.StaticText(self.panel, -1, "預計派送時間", (120, 60)) def OnClick(self, e): dialog51 = MyDialog51(None) btn = wx.Button(parent=dialog51.panel, label="查詢", pos=(240, 20), size=(70, 25)) btn.Bind(wx.EVT_BUTTON, dialog51.find) dialog51.ShowModal() def find(self, event): conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='project', charset='utf8') cursor = conn.cursor() try: sql = "select * from delivery" cursor.execute(sql) rs = cursor.fetchall() h = 80 for row in rs: if row[0] == self.t1.GetValue(): h = h + 20 courier_id = row[1] deliver_time = row[2] wx.StaticText(self.panel, -1, courier_id, (20, h)) wx.StaticText(self.panel, -1, deliver_time, (120, h)) except: conn.rollback() finally: cursor.close() conn.close() ########################################################################### ## Class MyDialog52 ########################################################################### class MyDialog52(wx.Dialog): def __init__(self, parent): wx.Dialog.__init__(self, parent, id=wx.ID_ANY, title=u"安排配送", pos=wx.DefaultPosition, size=wx.Size(400, 300), style=wx.DEFAULT_DIALOG_STYLE) self.Center() self.panel = wx.Panel(self) self.panel.SetBackgroundColour('white') wx.StaticText(self.panel, -1, "請輸入買家電話:", (20, 20)) self.t1 = wx.TextCtrl(self.panel, pos=(160, 20), size=(120, 25)) wx.StaticText(self.panel, -1, "請輸入派送員編號:", (20, 80)) self.t2 = wx.TextCtrl(self.panel, pos=(160, 80), size=(120, 25)) wx.StaticText(self.panel, -1, "請輸入預計派送時間:", (20, 140)) self.t3 = wx.TextCtrl(self.panel, pos=(160, 140), size=(120, 25)) def OnClick(self, e): dialog52 = MyDialog52(None) btn = wx.Button(parent=dialog52.panel, label="配送", pos=(20, 200), size=(100, 45)) btn.Bind(wx.EVT_BUTTON, dialog52.insert) dialog52.ShowModal() def insert(self, e): conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='project', charset='utf8') cursor = conn.cursor() student_phone = self.t1.GetValue().encode('utf8') # 注意GetValue()獲取的是unicode編碼, courier_id = self.t2.GetValue().encode('utf8') # 你使用的#coding=utf8,那就對獲取的數據.encode('utf8') deliver_time = self.t3.GetValue().encode('utf8') data = (student_phone, courier_id, deliver_time) try: sql = "insert into delivery values(%s,%s,%s)" cursor.execute(sql, data) conn.commit() dial = wx.MessageDialog(None, '成功安排派送!', '結果', wx.YES_NO) # 創建一個帶按鈕的對話框, 語法是(self, 內容, 標題, ID) dial.ShowModal() # 顯示對話框 except: conn.rollback() finally: cursor.close() conn.close() ########################################################################### ## Class MyDialog53 ########################################################################### class MyDialog53(wx.Dialog): def __init__(self, parent): wx.Dialog.__init__(self, parent, id=wx.ID_ANY, title=u"取消配送", pos=wx.DefaultPosition, size=wx.Size(300, 300), style=wx.DEFAULT_DIALOG_STYLE) self.Center() self.panel = wx.Panel(self) self.panel.SetBackgroundColour('white') wx.StaticText(self.panel, -1, "派送員編號:", (20, 20)) self.t1 = wx.TextCtrl(self.panel, pos=(20, 50), size=(120, 25)) wx.StaticText(self.panel, -1, "買家電話:", (20, 90)) self.t2 = wx.TextCtrl(self.panel, pos=(20, 120), size=(120, 25)) def OnClick(self, e): dialog53 = MyDialog53(None) btn = wx.Button(parent=dialog53.panel, label="取消配送", pos=(20, 170), size=(90, 40)) btn.Bind(wx.EVT_BUTTON, dialog53.delete) dialog53.ShowModal() def delete(self, e): conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='project', charset='utf8') cursor = conn.cursor() courier_id = self.t1.GetValue().encode('utf8') # 注意GetValue()獲取的是unicode編碼 student_phone = self.t2.GetValue().encode('utf8') data = (courier_id, student_phone) try: sql = "delete from delivery where courier_id=%s and student_phone=%s" cursor.execute(sql, data) conn.commit() dial = wx.MessageDialog(None, '成功取消配送!', '結果', wx.YES_NO) # 創建一個帶按鈕的對話框, 語法是(self, 內容, 標題, ID) dial.ShowModal() # 顯示對話框 except: conn.rollback() finally: cursor.close() conn.close() if __name__ == "__main__": app = wx.App() MyFrame1(None).Show() app.MainLoop()
程序演示:
(1)店鋪信息
(2)店鋪上架
(3)店鋪下架
(4)派送員信息
(5)訂單信息
(6)買家訂餐
(7)修改訂單
查看訂單信息確認已經修改
至此python借助pymysql操作Mysql數據庫的增、刪、改、查功能演示完畢,剩下功能不一一截圖,原理類似。
五、總結
通過本次課程設計,我對本學期所學的“數據庫”和python內容有了更深一層的理解和學習。對數據庫的認識不再僅僅停留在課本的理論知識上,能夠更加清楚的理解其后臺的操作流程。對python的應用不再局限于編寫簡單小程序,而是做到了與數據庫進行連接,通過wxpython前臺窗口,對數據庫傳入相應的sql語句,從而實現數據庫的插入、修改、增加、刪除等操作,實現sql語句的前臺明了化。在設計E-R圖時,采用了Navicat for mysql這一針對mysql的可視化工具,使得表與表之間的關系得以清晰的呈現,這次課程設計使我獲益匪淺,在鞏固與拓展知識的同時,還學會了許多工具的使用,這對以后的開發提供了寶貴的經驗和基石。
更多學習資料請關注專題《管理系統開發》。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。