为了完成学校的实践,做了一个类似于自助取款机的系统。。。

应用语言:python

核心控件:pymysql (数据库),wxpython(GUI)

主要功能:

  1. 登录功能:通过python访问数据库,对用户输入的账号密码进行验证。
  2. 存款/取款功能:根据用户登录时输入的账号在card表中进行查找,找到该账号所对应的的信息,如果操作为存款则 余额=余额+(存款金额),如果为取款先判断余额是否大于取款金额,如果大于则 余额=余额+(取款金额),否则操作失败,提示余额不足。
  3. 查询交易记录功能:根据用户登录时输入的账号在bill表中查询该账号的交易记录,如果记录为空则提示交易记录为空,否则显示交易记录。
  4. 转账功能:在转账界面用户输入目标账号(目标账号不能与自己账号相同)
  5. 修改密码功能:根据用户输入的账号,找到card表中该账号的信息,输入账号和确认账号(确保两次输入相同)对该账号的密码进行修改

数据库结构:

bank表

bill表结构

card表结构

user表结构

具体实现:

img文件夹存放GUI设计的背景图片

Deposit  存款功能

import wx
import pymysql
from MySQL import Make_bill,function
import threading
import time
class Deposit1(wx.App):def doClose(self,j):time.sleep(j)self.frame.Close()def __init__(self,YuanZhangH):self.YuanZhangH=YuanZhangHwx.App.__init__(self)self.frame = wx.Frame(parent=None,title='存 款',size=(535,450),style=wx.DEFAULT_FRAME_STYLE ^ wx.RESIZE_BORDER ^ wx.MAXIMIZE_BOX )panel=wx.Panel(self.frame,-1)panel.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBack)label_pass = wx.StaticText(panel,-1,"存款金额:", pos=(80,200))#style 为设置输入self.JinE = wx.TextCtrl(panel,-1, size=(250,35), pos=(140,190))self.QueDing_button = wx.Button(panel, -1, "确        认", size=(80,60),  pos=(120,280))self.QuXiao_button         = wx.Button(panel, -1, "反        回", size=(80, 60), pos=(340,280))self.QueDing_button.SetBackgroundColour('#0a74f7')self.QuXiao_button.SetBackgroundColour('#0a74f7')self.Bind(wx.EVT_BUTTON, self.CunK, self.QueDing_button)self.Bind(wx.EVT_BUTTON, self.QU, self.QuXiao_button)self.frame.Center()self.frame.Show(True)def show_message(self,word=""):dlg = wx.MessageDialog(None, word, u"错误", wx.YES_NO | wx.ICON_QUESTION)if dlg.ShowModal() == wx.ID_YES:#self.Close(True)passdlg.Destroy()def show_check(self,word=""):dlg = wx.MessageDialog(None, word, u"提示", wx.YES_NO | wx.ICON_QUESTION)if dlg.ShowModal() == wx.ID_YES:#self.Close(True)passdlg.Destroy()def QU(self,event):t = threading.Thread(target=self.doClose, args=(0.05,))t.start()jie = function.Jiemian(self.YuanZhangH)jie.MainLoop()def CunK(self,event):#连接到本地数据库z2= self.JinE.GetValue()YuanZhangH=self.YuanZhangH# sql = """ UPDATE card set 余额=余额+z2 WHERE Card_Number= '%s' """ % (z1)sql = "update card set 余额 = 余额+'{}' where Card_Number = '{}'".format(float(z2),YuanZhangH)#判断,查看用户名和密码名是否为空#不为空之后在进行查询和判断#不然当密码或用户名为空时会出现会导致出错if z2:db = pymysql.connect(host="localhost", user="root",password="111111", db="银行存款记录数据库", port=3306)# 使用cursor()方法获取操作游标cur = db.cursor()try:cur.execute(sql)  # 执行sql语句db.commit()Make_bill.Make_Bill(YuanZhangH, "存款", float(z2), "无")self.show_check(word='存款成功')except Exception as e:db.rollback()finally:db.close()  # 关闭连接else:self.show_message(word='存款金额不能为空')def OnEraseBack(self, event):dc = event.GetDC()if not dc:dc = wx.ClientDC(self)rect = self.GetUpdateRegion().GetBox()dc.SetClippingRect(rect)dc.Clear()bmp = wx.Bitmap('img\\instagram.jpg')dc.DrawBitmap(bmp, 0, 0)

function  功能界面

import wx
from MySQL import transfer,Deposit,Withdrawal,Gaim,Make_bill,Query
import threading,time
class Jiemian(wx.App):def doClose(self,j):time.sleep(j)self.frame.Close()def __init__(self,Num):wx.App.__init__(self)self.Num=Numself.frame = wx.Frame(parent=None,title='自助银行',size=(1000,750),style=wx.DEFAULT_FRAME_STYLE ^ wx.RESIZE_BORDER ^ wx.MAXIMIZE_BOX )panel=wx.Panel(self.frame,-1)# img=wx.Icon(name='logo.png',type=wx.BITMAP_TYPE_PNG)# wx.StaticBitmap(panel,-1,bitmap=img,pos=(0,0))# image = wx.Image("instagram.jpg", wx.BITMAP_TYPE_JPEG).ConvertToBitmap()panel.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBack)self.Query_transaction_records_button = wx.Button(panel, -1, "查询交易记录", size=(200,60),  pos=(0,250))self.transfer_accounts_button         = wx.Button(panel, -1, "转        账", size=(200, 60), pos=(0,375))self.deposit    = wx.Button(panel, -1, "存        款", size=(200, 60), pos=(800, 375))self.withdrawal = wx.Button(panel, -1, "取        款", size=(200, 60), pos=(800, 250))self.gaimi = wx.Button(panel, -1, "改        密", size=(200, 60), pos=(0, 500))self.jiaofei = wx.Button(panel, -1, "缴        费", size=(200, 60), pos=(800, 500))self.tuichu = wx.Button(panel, -1, "退        卡", size=(200, 60), pos=(800, 625))self.Bind(wx.EVT_BUTTON, self.qery, self.Query_transaction_records_button)self.Bind(wx.EVT_BUTTON, self.transf, self.transfer_accounts_button)self.Bind(wx.EVT_BUTTON, self.depos, self.deposit)self.Bind(wx.EVT_BUTTON, self.withdraw, self.withdrawal)self.Bind(wx.EVT_BUTTON, self.gaim, self.gaimi)self.Bind(wx.EVT_BUTTON,self.Tui,self.tuichu)self.frame.Center()self.frame.Show(True)def OnEraseBack(self, event):dc = event.GetDC()if not dc:dc = wx.ClientDC(self)rect = self.GetUpdateRegion().GetBox()dc.SetClippingRect(rect)dc.Clear()bmp = wx.Bitmap('img\\功能界面2.jpg')dc.DrawBitmap(bmp, 0, 0)def transf(self,event):Num=self.Numt = threading.Thread(target=self.doClose, args=(0.05,))t.start()app = transfer.Transfer(Num)app.MainLoop()def depos(self,event):Num=self.Numt = threading.Thread(target=self.doClose, args=(0.05,))t.start()app = Deposit.Deposit1(Num)app.MainLoop()def withdraw(self,event):Num=self.Numt = threading.Thread(target=self.doClose, args=(0.05,))t.start()app=Withdrawal.Withdrawal1(Num)app.MainLoop()def gaim(self,event):Num=self.Numt = threading.Thread(target=self.doClose, args=(0.05,))t.start()app = Gaim.Gaim1(Num)app.MainLoop()def Tui(self,event):t = threading.Thread(target=self.doClose, args=(0.05,))t.start()def qery(self,event):t = threading.Thread(target=self.doClose, args=(0.05,))t.start()app = Query.Query(self.Num)app.MainLoop()

Gaim  修改密码功能

import wx
import pymysql,threading,time
from MySQL import function
class Gaim1(wx.App):def doClose(self,j):time.sleep(j)self.frame.Close()def __init__(self,YuanZhangH):self.YuanZhangH=YuanZhangHwx.App.__init__(self)self.frame = wx.Frame(parent=None,title='修改密码',size=(535,450),style=wx.DEFAULT_FRAME_STYLE ^ wx.RESIZE_BORDER ^ wx.MAXIMIZE_BOX )panel=wx.Panel(self.frame,-1)panel.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBack)label_user = wx.StaticText(panel,-1,"密    码:", pos=(80,160))label_pass = wx.StaticText(panel,-1,"确认密码:", pos=(80,215))self.mim = wx.TextCtrl(panel,-1,size=(250,35), pos=(140,150), style=wx.TE_PASSWORD)#style 为设置输入self.qmim = wx.TextCtrl(panel,-1, size=(250,35), pos=(140,205), style=wx.TE_PASSWORD)self.QueDing_button = wx.Button(panel, -1, "修        改", size=(80,60),  pos=(120,280))self.QuXiao_button         = wx.Button(panel, -1, "反        回", size=(80, 60), pos=(340,280))self.QueDing_button.SetBackgroundColour('#0a74f7')self.QuXiao_button.SetBackgroundColour('#0a74f7')self.Bind(wx.EVT_BUTTON, self.Xiu, self.QueDing_button)self.Bind(wx.EVT_BUTTON, self.QU, self.QuXiao_button)self.frame.Center()self.frame.Show(True)def show_message(self,word=""):dlg = wx.MessageDialog(None, word, u"错误", wx.YES_NO | wx.ICON_QUESTION)if dlg.ShowModal() == wx.ID_YES:#self.Close(True)passdlg.Destroy()def show_check(self,word=""):dlg = wx.MessageDialog(None, word, u"提示", wx.YES_NO | wx.ICON_QUESTION)if dlg.ShowModal() == wx.ID_YES:#self.Close(True)passdlg.Destroy()def Xiu(self,event):YuanZhangH=self.YuanZhangHz1 = self.mim.GetValue()z2 = self.qmim.GetValue()sql = "update card set password = '{}' where Card_Number = '{}'".format(z1, YuanZhangH)if z1 and z2:db = pymysql.connect(host="localhost", user="root",password="111111", db="银行存款记录数据库", port=3306)# 使用cursor()方法获取操作游标cur = db.cursor()try:if z1==z2:cur.execute(sql)  # 执行sql语句db.commit()self.show_check(word='密码修改成功')results = cur.fetchall()  # 获取查询的所有记录#返回值是一个元组的形式else:self.show_message(word='请确保两次输入密码相同')except Exception as e:db.rollback()finally:db.close()  # 关闭连接passdef OnEraseBack(self, event):dc = event.GetDC()if not dc:dc = wx.ClientDC(self)rect = self.GetUpdateRegion().GetBox()dc.SetClippingRect(rect)dc.Clear()bmp = wx.Bitmap('img\\instagram.jpg')dc.DrawBitmap(bmp, 0, 0)def QU(self, event):t = threading.Thread(target=self.doClose, args=(0.05,))t.start()jie = function.Jiemian(self.YuanZhangH)jie.MainLoop()

main  程序入口

from MySQL import t1
if __name__=='__main__':app = t1.MyApp()app.MainLoop()

Make_bill  生成流水订单功能

import random
import time
import pymysql
class Make_Bill():def __init__(self,Num,stt,val,Mnum):self.Num=Numself.stt=sttself.val=valself.Mnum=Mnumself.Make(self.Num)def makeid(self):return int(random.uniform(10000001,10999999))def Make(self,Num):sql = "SELECT card类型,Card_Number FROM card WHERE Card_Number = %s" % (self.Num)db = pymysql.connect(host="localhost", user="root",password="111111", db="银行存款记录数据库", port=3306)cur=db.cursor()try:cur.execute(sql)  # 执行sql语句results=cur.fetchall()print(type(results))YH=results[0][0]YC=results[0][1]tim=time.strftime('%Y-%m-%d %H:%M:%S ',time.localtime(time.time()))sql2= "INSERT INTO bill VALUES ('%s',%s, '%s','%s', %s,'%s','%s')" % (tim,self.makeid(),YH, self.stt, self.val,YC,self.Mnum)cur.execute(sql2)db.commit()except Exception as e:db.rollback()finally:db.close()  # 关闭连接# MM=Make_Bill("62155504510128","转账",1000,"62155504510112")

Query  查询订单功能

import  wx,threading,time
import pymysql
from MySQL import function
class Query(wx.App):def doClose(self,j):time.sleep(j)self.frame.Close()def __init__(self,card):self.card=cardwx.App.__init__(self)self.frame = wx.Frame(parent=None,title='查询',size=(700,600),style=wx.DEFAULT_FRAME_STYLE ^ wx.RESIZE_BORDER ^ wx.MAXIMIZE_BOX )self.panel=wx.Panel(self.frame,-1)self.panel.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBack)self.tex1 = wx.StaticText(self.panel,-1,  "交易时间              订 单 ID        所属银行   交易类型    交易金额       账户信息              目标账户",pos=(70,220))# self.entry_tim = wx.TextCtrl(panel,-1,size=(150,35), pos=(120,120))# self.entry_ztim = wx.TextCtrl(panel,-1, size=(150,35), pos=(370,120))self.button=wx.Button(self.panel,-1,"查   询",size=(100,35),pos=(210,120))self.button2 = wx.Button(self.panel, -1, "返   回", size=(100, 35), pos=(400, 120))self.sampleList=[]self.Bind(wx.EVT_BUTTON,self.Query_transaction_records,self.button)self.Bind(wx.EVT_BUTTON, self.QU, self.button2)# listBox.SetSelection(3)self.frame.Center()self.frame.Show(True)def QU(self, event):t = threading.Thread(target=self.doClose, args=(0.05,))t.start()jie = function.Jiemian(self.card)jie.MainLoop()def Query_transaction_records(self,event):sql="SELECT * FROM bill where 银行卡号='{}'" .format(self.card)db = pymysql.connect(host="localhost", user="root",password="111111", db="银行存款记录数据库", port=3306)# 使用cursor()方法获取操作游标cur = db.cursor()try:cur.execute(sql)results = cur.fetchall()print(len(results))sampleList =[]# self.sampleList.extend(sample)print(self.sampleList)if results:for i in range(len(results)):wor=""for j in range(len(results[i])):print(results[i][j],end=" ")wor+=str(results[i][j])wor+="       "print("")sampleList.append(wor)listBox = wx.ListBox(self.panel, -1, (20, 250), (680, 350), sampleList, wx.LB_SINGLE)listBox.SetSelection(3)else:self.show_message(word="交易记录为空")except Exception as e:db.rollback()finally:db.close()  # 关闭连接def show_message(self,word=""):dlg = wx.MessageDialog(None, word, u"提示", wx.YES_NO | wx.ICON_QUESTION)if dlg.ShowModal() == wx.ID_YES:#self.Close(True)passdlg.Destroy()def OnEraseBack(self, event):dc = event.GetDC()if not dc:dc = wx.ClientDC(self)rect = self.GetUpdateRegion().GetBox()dc.SetClippingRect(rect)dc.Clear()bmp = wx.Bitmap('img\\instagram.jpg')dc.DrawBitmap(bmp, 0, 0)# if __name__ == '__main__':
#     app=Query("62155504510128")
#     app.MainLoop()

t1  登录功能

import wx
import random
import pymysql
import time
import threading
#由于当前对布局管理器不是很熟悉,所系使用的是固定位置,导致窗口拉伸的效果不是很好
from MySQL import functionclass MyApp(wx.App):def doClose(self,j):time.sleep(j)self.frame.Close()def __init__(self):wx.App.__init__(self)self.frame = wx.Frame(parent=None,title='Login',size=(600,460),style=wx.DEFAULT_FRAME_STYLE ^ wx.RESIZE_BORDER ^ wx.MAXIMIZE_BOX )#设置窗口的左上角的图标#其中参数type表示图片的类型,还有ico,jpgm等类型icon_1 = wx.Icon(name='img\\favicon.png',type=wx.BITMAP_TYPE_PNG)self.frame.SetIcon(icon_1)panel = wx.Panel(self.frame,-1)# 向panel中添加图片image =wx.Image("img\\Login2.jpg", wx.BITMAP_TYPE_JPEG).ConvertToBitmap()panel.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBack)#添加文本输入框self.entry_user = wx.TextCtrl(panel,-1,size=(225,35), pos=(150,225))#style 为设置输入self.entry_pass = wx.TextCtrl(panel,-1, size=(225,35), pos=(150,270), style=wx.TE_PASSWORD)#添加按钮self.but_login = wx.Button(panel,-1,"登陆", size=(130,50), pos=(140,340))self.but_register = wx.Button(panel,-1,"注册", size=(130,50), pos=(297,340))#设置按钮的颜色self.but_login.SetBackgroundColour("#0a74f7")self.but_register.SetBackgroundColour("#282c34")#给按钮绑定事件self.Bind(wx.EVT_BUTTON,self.on_but_login,self.but_login)self.Bind(wx.EVT_BUTTON,self.on_but_register,self.but_register)self.frame.Center()self.frame.Show(True)def OnEraseBack(self, event):dc = event.GetDC()if not dc:dc = wx.ClientDC(self)rect = self.GetUpdateRegion().GetBox()dc.SetClippingRect(rect)dc.Clear()bmp = wx.Bitmap("img\\Login2.jpg")dc.DrawBitmap(bmp, 0, 0)#定义一个消息弹出框的函数def show_message(self,word=""):dlg = wx.MessageDialog(None, word, u"错误", wx.YES_NO | wx.ICON_QUESTION)if dlg.ShowModal() == wx.ID_YES:#self.Close(True)passdlg.Destroy()def show_que(self,word=""):dlg = wx.MessageDialog(None, word, u"提示", wx.YES_NO | wx.ICON_QUESTION)if dlg.ShowModal() == wx.ID_YES:# self.Close(True)t = threading.Thread(target=self.doClose, args=(0.5,))t.start()dlg.Destroy()def on_but_login(self,event):#连接到本地数据库user_name = self.entry_user.GetValue()pass_word= self.entry_pass.GetValue()sql = """select password from card where Card_Number ='%s' """ % (user_name)#判断,查看用户名和密码名是否为空#不为空之后在进行查询和判断#不然当密码或用户名为空时会出现会导致出错if user_name and pass_word:print(user_name, "   ", pass_word)db = pymysql.connect(host="localhost", user="root",password="111111", db="银行存款记录数据库", port=3306)# 使用cursor()方法获取操作游标cur = db.cursor()try:cur.execute(sql)  # 执行sql语句results = cur.fetchall()  # 获取查询的所有记录#返回值是一个元组的形式print(type(results))if results:# print(type(results[0][0]))# print(results[0][0])if results[0][0] == int(pass_word):self.show_que(word="登陆成功")jie=function.Jiemian(user_name)jie.MainLoop()# self.page1 = function.Jiemian()# je=Jiemian()# je.MainLoop()# self.AddPage(self.page1, "xxpage")else:self.show_message(word="密码错误")else:self.show_message(word='用户名不存在')except Exception as e:db.rollback()finally:db.close()  # 关闭连接else:self.show_message(word='账号和密码不能为空')def on_but_register(self,event):#类似上上面的查询,只需获取相关内容插入到数据库就可以做出相关的操作#内容与上面内容相似,不再经行书写pass# je=Jiemian()# je.MainLoop()

transfer 转账功能

import wx
import pymysql,time,threading
from MySQL import Make_bill,function
class Transfer(wx.App):def doClose(self,j):time.sleep(j)self.frame.Close()def __init__(self,YuanZhangH):self.YuanZhangH=YuanZhangHwx.App.__init__(self)self.frame = wx.Frame(parent=None,title='转 账',size=(535,450),style=wx.DEFAULT_FRAME_STYLE ^ wx.RESIZE_BORDER ^ wx.MAXIMIZE_BOX )panel=wx.Panel(self.frame,-1)panel.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBack)label_user = wx.StaticText(panel,-1,"账    号:", pos=(80,160))label_pass = wx.StaticText(panel,-1,"转账金额:", pos=(80,215))self.ZhangHao = wx.TextCtrl(panel,-1,size=(250,35), pos=(140,150))#style 为设置输入self.JinE = wx.TextCtrl(panel,-1, size=(250,35), pos=(140,205))self.YanZheng_button = wx.Button(panel, -1, "验证", size=(50, 35), pos=(400, 150))self.QueDing_button = wx.Button(panel, -1, "转        账", size=(80,60),  pos=(120,280))self.QuXiao_button         = wx.Button(panel, -1, "反        回", size=(80, 60), pos=(340,280))self.YanZheng_button.SetBackgroundColour('#0a74f7')self.QueDing_button.SetBackgroundColour('#0a74f7')self.QuXiao_button.SetBackgroundColour('#0a74f7')self.Bind(wx.EVT_BUTTON, self.YanCard, self.YanZheng_button)self.Bind(wx.EVT_BUTTON, self.ZhuanZhang, self.QueDing_button)self.Bind(wx.EVT_BUTTON, self.QU, self.QuXiao_button)self.frame.Center()self.frame.Show(True)def show_message(self,word=""):dlg = wx.MessageDialog(None, word, u"错误", wx.YES_NO | wx.ICON_QUESTION)if dlg.ShowModal() == wx.ID_YES:#self.Close(True)passdlg.Destroy()def show_check(self,word=""):dlg = wx.MessageDialog(None, word, u"提示", wx.YES_NO | wx.ICON_QUESTION)if dlg.ShowModal() == wx.ID_YES:#self.Close(True)passdlg.Destroy()def QU(self, event):t = threading.Thread(target=self.doClose, args=(0.05,))t.start()jie = function.Jiemian(self.YuanZhangH)jie.MainLoop()def YanCard(self,event):z1 = self.ZhangHao.GetValue()sql = """select 持卡人姓名,card类型 from card where Card_Number ='%s' """ % (z1)if z1!=self.YuanZhangH:db = pymysql.connect(host="localhost", user="root",password="111111", db="银行存款记录数据库", port=3306)# 使用cursor()方法获取操作游标cur = db.cursor()try:cur.execute(sql)  # 执行sql语句results = cur.fetchall()  # 获取查询的所有记录#返回值是一个元组的形式print(type(results))if results:# print(type(results[0][0]))# print(results[0][0])stt="持卡人姓名:"+results[0][0]+"     "+"银行类型:"+results[0][1]self.show_check(stt)print(results[0][0],"   ",results[0][1])else:self.show_message(word='账号不存在')except Exception as e:db.rollback()finally:db.close()  # 关闭连接else:self.show_message(word="转账账号不能与自己相同")def ZhuanZhang(self,event):#连接到本地数据库z1= self.ZhangHao.GetValue()z2= self.JinE.GetValue()YuanZhangH=self.YuanZhangH# sql = """ UPDATE card set 余额=余额+z2 WHERE Card_Number= '%s' """ % (z1)sql = "update card set 余额 = 余额+'{}' where Card_Number = '{}'".format(float(z2),z1)sql1 = "SELECT 余额 FROM card WHERE Card_Number = %s" % (z1)sql2 = "update card set 余额 = 余额-'{}' where Card_Number = '{}'".format(float(z2), YuanZhangH)if z1!=self.YuanZhangH:if z1 and z2:db = pymysql.connect(host="localhost", user="root",password="111111", db="银行存款记录数据库", port=3306)# 使用cursor()方法获取操作游标cur = db.cursor()try:cur.execute(sql1)results = cur.fetchall()if results[0][0] >= float(z2):cur.execute(sql)  # 执行sql语句db.commit()cur.execute(sql2)db.commit()Make_bill.Make_Bill(YuanZhangH,"转账",float(z2),z1)self.show_check(word='转账成功')else:self.show_message(word='余额不足')except Exception as e:db.rollback()finally:db.close()  # 关闭连接else:self.show_message(word='账号和转账金额不能为空')else:self.show_message(word="转账账号不能与自己相同")def OnEraseBack(self, event):dc = event.GetDC()if not dc:dc = wx.ClientDC(self)rect = self.GetUpdateRegion().GetBox()dc.SetClippingRect(rect)dc.Clear()bmp = wx.Bitmap('img\\instagram.jpg')dc.DrawBitmap(bmp, 0, 0)# if __name__=='__main__':
#     app = Transfer("62155504510128")
#     app.MainLoop()

withdraw 取款功能

import wx
import pymysql,time,threading
from MySQL import Make_bill,function
class Withdrawal1(wx.App):def doClose(self,j):time.sleep(j)self.frame.Close()def __init__(self,YuanZhangH):self.YuanZhangH=YuanZhangHwx.App.__init__(self)self.frame = wx.Frame(parent=None,title='取 款',size=(535,450),style=wx.DEFAULT_FRAME_STYLE ^ wx.RESIZE_BORDER ^ wx.MAXIMIZE_BOX )panel=wx.Panel(self.frame,-1)panel.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBack)label_pass = wx.StaticText(panel,-1,"取款金额:", pos=(80,200))#style 为设置输入self.JinE = wx.TextCtrl(panel,-1, size=(250,35), pos=(140,190))self.QueDing_button = wx.Button(panel, -1, "确        认", size=(80,60),  pos=(120,280))self.QuXiao_button         = wx.Button(panel, -1, "反        回", size=(80, 60), pos=(340,280))self.QueDing_button.SetBackgroundColour('#0a74f7')self.QuXiao_button.SetBackgroundColour('#0a74f7')self.Bind(wx.EVT_BUTTON, self.QuK, self.QueDing_button)self.Bind(wx.EVT_BUTTON, self.QU, self.QuXiao_button)self.frame.Center()self.frame.Show(True)def show_message(self,word=""):dlg = wx.MessageDialog(None, word, u"错误", wx.YES_NO | wx.ICON_QUESTION)if dlg.ShowModal() == wx.ID_YES:#self.Close(True)passdlg.Destroy()def show_check(self,word=""):dlg = wx.MessageDialog(None, word, u"提示", wx.YES_NO | wx.ICON_QUESTION)if dlg.ShowModal() == wx.ID_YES:#self.Close(True)passdlg.Destroy()def QuK(self, event):# 连接到本地数据库z2 = self.JinE.GetValue()YuanZhangH = self.YuanZhangHsql1 = "SELECT 余额 FROM card WHERE Card_Number = %s" % (YuanZhangH)sql2 = "update card set 余额 = 余额-'{}' where Card_Number = '{}'".format(float(z2), YuanZhangH)# 判断,查看用户名和密码名是否为空# 不为空之后在进行查询和判断# 不然当密码或用户名为空时会出现会导致出错if z2:db = pymysql.connect(host="localhost", user="root",password="111111", db="银行存款记录数据库", port=3306)# 使用cursor()方法获取操作游标cur = db.cursor()try:cur.execute(sql1)results = cur.fetchall()if results[0][0] >= float(z2):cur.execute(sql2)db.commit()Make_bill.Make_Bill(YuanZhangH, "取款", float(z2), "无")self.show_check(word='取款成功')else:self.show_message(word='余额不足')except Exception as e:db.rollback()finally:db.close()  # 关闭连接else:self.show_message(word='取款金额不能为空')def OnEraseBack(self, event):dc = event.GetDC()if not dc:dc = wx.ClientDC(self)rect = self.GetUpdateRegion().GetBox()dc.SetClippingRect(rect)dc.Clear()bmp = wx.Bitmap('img\\instagram.jpg')dc.DrawBitmap(bmp, 0, 0)def QU(self, event):t = threading.Thread(target=self.doClose, args=(0.05,))t.start()jie = function.Jiemian(self.YuanZhangH)jie.MainLoop()

效果:

登录界面

功能板界面

查询界面

存/取款界面

转账界面

改密界面

具体实现就是这样,界面挺丑的。。。。

自助取款机系统(python+mysql+GUI)相关推荐

  1. python做一个银行系统的gui_自助取款机系统(python+mysql+GUI)

    为了完成学校的实践,做了一个类似于自助取款机的系统... 应用语言:python 核心控件:pymysql (数据库),wxpython(GUI) 主要功能: 登录功能:通过python访问数据库,对 ...

  2. 自助取款机系统(C#)

    ATM(自动取款机)系统向用户提供一个方便.简单.及时.随时随地可以随心所欲存取款的.互联的.计算机化的网络系统 ,可以大大减少工作人员,节约人力资源的开销:同时,由于手续减少,减轻了业务员的工作负担 ...

  3. java实现ATM取款机系统(无GUI)

    JAVAstudy/JAVA进阶学习/src/ATM at master · 13779962543/JAVAstudy (github.com)https://github.com/13779962 ...

  4. C语言项目-ATM自助取款机(无图形化界面)

    目录 1.项目介绍 1.1项目期望目标与内容 1.2 项目实现的主要过程 1.3分文件操作 1.4项目实现平台 1.5说明 2.项目的具体实现过程 2.1头文件BankCard.h编写 2.1.1结构 ...

  5. python mysql 内存_Python将系统内存使用量写入mysql数据库

    1.前提创建数据库和表格式 [root@python ~]# mysql -uroot -pcentos mysql> create database memory; mysql> use ...

  6. 基于C#Winform+MySQL的商务娱乐会馆自助服务系统

    写在前面:纪念一下大三最后一次期末设计.使用C#语言和MySQL数据库实现一个会员管理系统.题目的要求非常细致又模糊,规定了要大概实现会员等级和积分余额等细节,却又没有任何题材上的框架,并且时间要求非 ...

  7. 餐馆点餐系统(Java GUI + mysql)

    餐馆点餐系统(Java GUI + mysql) 开发环境:eclipse,mysql 开发语言:Java,SQL 本系统采用MVC模式开发的"果冻点餐系统",适合Java初级选手 ...

  8. python项目实战——银行取款机系统(七)

    项目实战目录 python项目实战--银行取款机系统(一) python项目实战--银行取款机系统(二) python项目实战--银行取款机系统(三) python项目实战--银行取款机系统(四) p ...

  9. python项目实战——银行取款机系统(一)

    项目实战目录 python项目实战--银行取款机系统(一) 前言 今天我们将通过python完成简易银行提款机系统的实战,我们一步步实现我们的要求.话不多说,看操作. 环境使用 python 3.9 ...

最新文章

  1. 常用图像格式(PNG,JPG)到SGI图像格式(RGB,BW)的转换
  2. 重磅消息:Spring 6 和Spring Boot 3
  3. [NOI2012]骑行川藏
  4. Qt-qml元素布局
  5. jquery.lazyload.js详解
  6. Linux中切换用户(su命令)
  7. python爬虫网络出错怎么办_python爬虫之headers处理、网络超时问题处理
  8. MLFlow︱机器学习工作流框架:MLFlow docker 实践(二)
  9. 微服务学习之Hystrix图形化DashBoard监控【Hoxton.SR1版】
  10. koa2与php比较,模仿KOA,用php来写一个极简的开发框架
  11. php 卡密支付破解 yj,卡密功能自助授权功能源码
  12. python调用pyd文件_python的py文件生成pyd文件,pycharm直接调用pyd文件
  13. dlopen failed: empty/missing DT_HASH in quot;libx.soquot; (built with --hash-style=gnu?)
  14. hive中的order by、sort by、distribute by、cluster by排序
  15. RJ45接头接法(转)
  16. 正在载入中......loading页面的几种方法
  17. cve查询_CVE年满21岁:如何实现这一里程碑
  18. CDN内容分发网络(上)
  19. windows2003+apache2.2+python2.7配置django mod_wsgi
  20. Maven(m2e)集成之二

热门文章

  1. OpenLayers 之 地图图层数据来源(ol.source)详解,ps图层混合模式详解
  2. java日志管理-学习(一)
  3. unity pico3 手柄摇杆控制物体移动和旋转
  4. 数字 IC 技能拓展(16)Zynq 与 Pynq 都是什么呢
  5. 【表白程序】盛开的玫瑰代码
  6. 消防气体灭火系统(二)
  7. 2019阿里暑期实习一面
  8. 内网DNS报错:** server can‘t find ns1.aaa.com: SERVFAIL
  9. php 黄页,PHPCMS企业黄页
  10. 【iOS开发】—— 通过URL Scheme调用外部地图软件