例:from database.数据库 import database
import wx import datetime import pyodbc import re import sys sys.path.append('../')#向上回一级目录,否则会报错 from database.数据库 import database from GUI.管理员界面 import manageMenu from GUI.学生界面 import stumenu from demo.Student import student from demo.Textbook import textbook from demo.Reserve import reserve from demo.Cost import cost #登录 login_sql ='select * from students where 姓名=? and 密码=?' look_book='select * from books'#查看所有教材 #学生 reserve_book='insert into reserve values(?,?,?)'#向reserve表中插入信息 back_book='delete from reserve where 姓名=? and 书名=?'#通过姓名+书名删除reserve表的信息 select_reserved='select * from reserve where 姓名=?'#通过姓名查找reserve表该学生征订教材信息 select_stu='select * from students where 姓名=?'#通过姓名查找students表该学生个人信息 book_price='select 价格 from books where 书名=? '#通过书名查找books表该教材价格 insert_cost='insert into cost values (?,?)'#向cost表里插入教材费用 select_cost1='select * from cost where 姓名=?'#通过姓名查找cost表该学生的教材费用 update_cost='update cost set 教材总费用=? where 姓名=?'#通过姓名更改cost表该学生的教材费用 reserved_name='select * from reserve where 姓名=?'#通过姓名查找reserve表该学生所有的征订教材 reserve_1='select * from reserve where 姓名=? and 书名=?' #管理员 insert_book='insert into books values(?,?,?,?,?)'#向books里增加教材 delete_book='delete from books where 书号=? and 书名=?'#通过书号和书名从books里删除教材 select_allstu='select * from students'#查询所有学生的个人信息 select_cost='select * from cost'#查询cost里的所有信息 # #主函数 if __name__=='__main__': solve=database() try: class wxGUI(wx.App): # ***********************登录界面************************************ # ****************************************************************** def Login(self): # login框架 框架大小1000*800 self.frame_Login = wx.frame(None, title="Login", size=(500, 320)) # 窗口的容器(面板) 父参数是wx.frame() self.panel_Login = wx.Panel(self.frame_Login, -1) # 在面板上添加StaticText() 父参数是wx.StaticText() self.label1 = wx.StaticText(self.panel_Login, -1, '教材征订系统', pos=(180, 60), style=wx.ALIGN_CENTER) # 设置字体 font = wx.Font(18, wx.ROMAN, wx.ITALIC, wx.NORMAL) self.label1.SetFont(font) self.label2 = wx.StaticText(self.panel_Login, -1, '用户名:', pos=(180, 100), style=wx.ALIGN_LEFT) self.textuser = wx.TextCtrl(self.panel_Login, -1, pos=(220, 100), size=(100, 20)) # self.Bind(wx.EVT_COMBOBOX, self.Oncombo2, self.combobox2) # 密码 self.label3 = wx.StaticText(self.panel_Login, -1, '密 码:', pos=(180, 140), style=wx.ALIGN_LEFT) self.textpasswd = wx.TextCtrl(self.panel_Login, -1, pos=(220, 140), size=(100, 20), style=wx.TE_PASSWORD) self.textpasswd.SetMaxLength(8) # 安全登录按钮 self.button_paswd = wx.Button(self.panel_Login, -1, '安全登录', pos=(180, 180), size=(144, 30)) # 绑定事件类型EVT_BUTTON,事件名OnButton_paswd,按钮button_paswd self.Bind(wx.EVT_BUTTON, self.OnButton_paswd, self.button_paswd) self.button_paswd.SetDefault() self.frame_Login.Show() # ***********************登录界面************************************ # ****************************************************************** # 校验用户名与密码 def OnButton_paswd(self, event): userName = self.textuser.GetValue() userPassword = self.textpasswd.GetValue() stu = student('', '', '', '', '') stu.setSname(userName) stu.setPassword(userPassword) # solve.cur 获得database中的游标 solve.cur.execute(login_sql, (stu.getSname(), stu.getPassword())) # 使用游标中的execute()方法执行sql语句 row = solve.cur.fetchone() # 获取一行数据,如果没有,则会返回null # print(row) if row: stumenu.Student_Menu(self,stu.getSname()) # 把姓名传给转向的Student_Menu()界面 elif userName == "管理员" and userPassword == "cumtxhxy": manageMenu.Management_Menu(self) else: wx.MessageBox("密码或用户名错误") # 查看图书 def OnLook(self, event): solve.cur.execute(look_book) result=solve.cur.fetchall() x=str(result).split("),") s="" for i in x: s=s+str(i)+"n" wx.MessageBox(s) # -------------------------------------------------------------------- # ***********************管理员功能开始************************************ #查询所有学生教材费用 def OnCost(self,event): solve.cur.execute(select_cost) result=solve.cur.fetchall() x = str(result).split("),") s = "" for i in x: s1=re.findall(r"[u4E00-u9FA5]+",i)#匹配汉字 s2=re.findall(r"d+.?d*",i)#匹配价格 s = s+s1[0]+"的教材费用为:"+s2[0]+ "n" wx.MessageBox(s) # 查询所有学生信息 def OnLook_Allstudent(self, event): solve.cur.execute(select_allstu) result = solve.cur.fetchall() x = str(result).split("),") s = "" for i in x: s = s + str(i) + "n" wx.MessageBox(s) #增加教材 def OnAdd(self,event): self.frame_onadd = wx.frame(None, -1, title="增加教材", size=(500, 300)) self.panel_onadd = wx.Panel(self.frame_Onadd, -1) self.label1 = wx.StaticText(self.panel_Onadd, -1, '书号', pos=(20, 20), style=wx.ALIGN_LEFT) self.text1 = wx.TextCtrl(self.panel_Onadd,-1,pos=(100, 20), size=(150, 20)) self.label2 = wx.StaticText(self.panel_Onadd, -1, '书名', pos=(20, 50), style=wx.ALIGN_LEFT) self.text2 = wx.TextCtrl(self.panel_Onadd,-1,pos=(100, 50), size=(150, 20)) self.label3 = wx.StaticText(self.panel_Onadd, -1, '作者', pos=(20, 80), style=wx.ALIGN_LEFT) self.text3 = wx.TextCtrl(self.panel_Onadd, -1, pos=(100, 80), size=(150, 20)) self.label4 = wx.StaticText(self.panel_Onadd, -1, '出版社', pos=(20, 110), style=wx.ALIGN_LEFT) self.text4 = wx.TextCtrl(self.panel_Onadd, -1, pos=(100, 110), size=(150, 20)) self.label5 = wx.StaticText(self.panel_Onadd, -1, '价格', pos=(20, 140), style=wx.ALIGN_LEFT) self.text5 = wx.TextCtrl(self.panel_Onadd, -1, pos=(100, 140), size=(150, 20)) self.button_Add=wx.Button(self.panel_Onadd,-1, "OK",pos=(175,165)) self.Bind(wx.EVT_BUTTON,self.OnButton_Add,self.button_Add) self.frame_Onadd.Show() def OnButton_Add(self,event): book=textbook('','','','','') book.setCno(self.text1.GetValue()) book.setCname(self.text2.GetValue()) book.setAuthor(self.text3.GetValue()) book.setPress(self.text4.GetValue()) book.setPrice(self.text5.GetValue()) solve.cur.execute(insert_book, ( book.getCno(), book.getCname(),book.getAuthor(),book.getPress(),book.getPrice())) solve.conn.commit() self.ltime = datetime.datetime.now() # 购买时间 self.ltimes = self.ltime.strftime('%Y-%m-%d %H:%M:%S') # 设置时间格式 message2 = "增加书籍成功! n" + "书名:" + self.text2.GetValue() + "n" + "时间:" + self.ltimes wx.MessageBox(message2) #删除教材 def OnDelete(self,event): self.frame_ondelete = wx.frame(None, -1, title="删除教材", size=(500, 300)) self.panel_ondelete = wx.Panel(self.frame_Ondelete, -1) self.label1 = wx.StaticText(self.panel_Ondelete, -1, '书号', pos=(20, 20), style=wx.ALIGN_LEFT) self.text1 = wx.TextCtrl(self.panel_Ondelete, -1, pos=(100, 20), size=(150, 20)) self.label2 = wx.StaticText(self.panel_Ondelete, -1, '书名', pos=(20, 50), style=wx.ALIGN_LEFT) self.text2 = wx.TextCtrl(self.panel_Ondelete, -1, pos=(100, 50), size=(150, 20)) self.button_delete=wx.Button(self.panel_Ondelete,-1,"OK",pos=(175,75)) self.Bind(wx.EVT_BUTTON,self.OnButton_Delete,self.button_delete) self.frame_Ondelete.Show() def OnButton_Delete(self,event): solve.cur.execute(delete_book,(self.text1.GetValue(),self.text2.GetValue())) solve.conn.commit() self.ltime = datetime.datetime.now() # 删除时间 self.ltimes = self.ltime.strftime('%Y-%m-%d %H:%M:%S') # 设置时间格式 message2 = "删除书籍成功! n" + "书名:" + self.text2.GetValue() + "n" + "时间:" + self.ltimes wx.MessageBox(message2) # 切换登陆 def OnSwitch_manage(self, event): self.frame_Manage.Destroy() self.Login() # 退出 def OnOut_manage(self, event): wx.MessageBox("谢谢您的使用!") self.frame_Manage.Destroy() # ***********************管理员功能结束************************************ # -------------------------------------------------------------------- # #<<---------------------------------------------------------------- # #***********************学生功能开始******************************>> #教材费用 def OnLookmoney(self,event): solve.cur.execute(select_reserved, self.name) # 执行查询预定语句,传入姓名 result = solve.cur.fetchall() # result是list类型 list1=[] sum=0.0 for i in range(len(result)): list1.append(result[i][1])#所有已预订的教材的书名 for i in list1: solve.cur.execute(book_price,i)#根据书名到books表中找到对应的价格price price=solve.cur.fetchone() # print(price) price1=re.findall(r"d+.?d*",str(price))#正则表达式找到str类型的浮点数部分 sum+=float(price1[0])#转化为浮点数 sum=round(sum,1) wx.MessageBox("学生"+self.name+"的教材总费用为:"+str(sum)) # 查看个人信息 def OnLookstu(self, event): solve.cur.execute(select_stu, self.name) result = solve.cur.fetchone() print(type(result)) wx.MessageBox(str(result)) # 征订部分 def OnReserve(self, event,): solve.cur.execute(look_book) result = solve.cur.fetchall() book_name = [] for i in range(len(result)): book_name.append(result[i][1]) print(book_name) self.frame_Reserve = wx.frame(None, -1, title="征订书籍", size=(500, 300)) self.panel_Reserve = wx.Panel(self.frame_Reserve, -1) self.label13 = wx.StaticText(self.panel_Reserve, -1, '教材名称', pos=(20, 80), style=wx.ALIGN_LEFT) self.combobox3 = wx.ComboBox(self.panel_Reserve, value="请选择教材", choices=book_name, pos=(100, 80), size=(150, 30)) self.label14 = wx.StaticText(self.panel_Reserve, -1, '征订数量', pos=(20, 120), style=wx.ALIGN_LEFT) self.Number = wx.ComboBox(self.panel_Reserve, choices=["1"], pos=(100, 120), size=(150, 20)) self.button_Reserve = wx.Button(self.panel_Reserve, -1, 'OK', pos=(175, 160)) # 绑定事件类型EVT_BUTTON,事件内容Onbutton_Reserve,按钮button_Buy self.Bind(wx.EVT_BUTTON, self.Onbutton_Reserve, self.button_Reserve) self.frame_Reserve.Show()#展示框架 def Onbutton_Reserve(self, event): #执行sql语句reserve_book,传入姓名,书名和预定数量 solve.cur.execute(reserve_1,(self.name,self.combobox3.GetValue())) result=solve.cur.fetchone() if result: self.ltime = datetime.datetime.now() # 购买时间 self.ltimes = self.ltime.strftime('%Y-%m-%d %H:%M:%S') # 设置时间格式 wx.MessageBox("该教材已征订!n"+"征订失败时间:"+self.ltimes) else: res = reserve('', '', '') res.setSname(self.name) res.setCname(self.combobox3.GetValue()) res.setNumber(self.Number.GetValue()) solve.cur.execute(reserve_book, (res.getSname(),res.getCname(),res.getNumber())) solve.conn.commit() solve.cur.execute(select_reserved, self.name) # 执行查询预定语句,传入姓名 result = solve.cur.fetchall() # result是list类型 list1 = [] sum = 0.0 for i in range(len(result)): list1.append(result[i][1]) # 所有已预订的教材的书名 for i in list1: solve.cur.execute(book_price, i) # 根据书名到books表中找到对应的价格price price = solve.cur.fetchone() print(price) price1 = re.findall(r"d+.?d*", str(price)) # 正则表达式找到str类型的浮点数部分 # print(price1) sum += float(price1[0]) # 转化为浮点数 sum = round(sum, 1) # print(sum) solve.cur.execute(select_cost1, self.name) # 根据学生姓名找cost表里是否有对应的行 result = solve.cur.fetchone() # print(result) if result: # 如果有,更新该学生的教材费用 solve.cur.execute(update_cost, (sum, self.name)) else: # 如果没有,创建该学生的教材费用 cost=cost('','') cost.setSname(self.name) cost.setSmoney(sum) solve.cur.execute(insert_cost, (cost.getSname(),cost.getMoney())) solve.conn.commit() self.ltime = datetime.datetime.now() # 购买时间 self.ltimes = self.ltime.strftime('%Y-%m-%d %H:%M:%S') # 设置时间格式 message2 = "征订成功! n" + "书名:" + self.combobox3.GetValue() + "n" + "征订时间:" + self.ltimes wx.MessageBox(message2) # wx.MessageBox()里是str # self.frame_Reserve.Destroy() # 退订部分 def OnBack(self, event): solve.cur.execute(reserved_name,self.name) result = solve.cur.fetchall() book_name = [] for i in range(len(result)): book_name.append(result[i][1]) self.frame_Back = wx.frame(None, -1, title="Back Books", size=(500, 300)) self.panel_Back = wx.Panel(self.frame_Back, -1) self.label15 = wx.StaticText(self.panel_Back, -1, '教材名称', pos=(20, 80), style=wx.ALIGN_LEFT) self.combobox5 = wx.ComboBox(self.panel_Back, value="请选择教材", choices=book_name, pos=(100, 80), size=(150, 30)) self.label16 = wx.StaticText(self.panel_Back, -1, '退订数量', pos=(20, 120), style=wx.ALIGN_LEFT) self.textBack_Number = wx.ComboBox(self.panel_Back, choices=["1"], pos=(100, 120), size=(150, 20)) self.button_Back = wx.Button(self.panel_Back, -1, 'OK', pos=(175, 160)) self.Bind(wx.EVT_BUTTON, self.OnButton_Back, self.button_Back)#ok控件绑定退订功能 self.frame_Back.Show() def OnButton_Back(self, event): solve.cur.execute(back_book,(self.name,self.combobox5.GetValue()))#语句执行 solve.conn.commit()#连接数据库实现 solve.cur.execute(select_reserved, self.name) # 执行查询预定语句,传入姓名 result = solve.cur.fetchall() # result是list类型 list1 = [] sum = 0.0 for i in range(len(result)): list1.append(result[i][1]) # 所有已预订的教材的书名 for i in list1: solve.cur.execute(book_price, i) # 根据书名到books表中找到对应的价格price price = solve.cur.fetchone() #print(price) price1 = re.findall(r"d+.?d*", str(price)) # 正则表达式找到str类型的浮点数部分 sum += float(price1[0]) # 转化为浮点数 sum = round(sum, 1) # print(sum) solve.cur.execute(update_cost, (sum, self.name))#更新该学生的教材费用 solve.conn.commit() self.ltime2 = datetime.datetime.now() # 借出时间 self.ltimes2 = self.ltime2.strftime('%Y-%m-%d %H:%M:%S') message3 = "退订成功! n" + "书名:" + self.combobox5.GetValue() + "n" + "退订时间:" + self.ltimes2 wx.MessageBox(message3)#Wx.MessageBox()里是str #查询已预订部分 def OnSelect(self,event): solve.cur.execute(select_reserved,self.name)#执行查询预定语句,传入姓名 result=solve.cur.fetchall()#result是list类型 x=str(result).split("),")#用str的split方法切分字符串 # print(x) s="" for i in x: s=s+i+"n" #i是str类型 wx.MessageBox(s) # 切换登陆 def OnSwitch_stu(self, event): self.frame_Stu.Destroy() self.Login() # 退出 def OnOut_stu(self, event): wx.MessageBox("谢谢您的使用!") self.frame_Stu.Destroy() # # <<--------------------学生功能结束-------------------------------- # # ***************************************************************>># app = wxGUI() app.Login() app.MainLoop() finally: solve.cur.close() solve.conn.close()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)