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

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

应用语言:python

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

主要功能:

登录功能:通过python访问数据库,对用户输入的账号密码进行验证。

存款/取款功能:根据用户登录时输入的账号在card表中进行查找,找到该账号所对应的的信息,如果操作为存款则 余额=余额+(存款金额),如果为取款先判断余额是否大于取款金额,如果大于则 余额=余额+(取款金额),否则操作失败,提示余额不足。

查询交易记录功能:根据用户登录时输入的账号在bill表中查询该账号的交易记录,如果记录为空则提示交易记录为空,否则显示交易记录。

转账功能:在转账界面用户输入目标账号(目标账号不能与自己账号相同)

修改密码功能:根据用户输入的账号,找到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=YuanZhangH

wx.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)

pass

dlg.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)

pass

dlg.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=Num

self.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.Num

t = threading.Thread(target=self.doClose, args=(0.05,))

t.start()

app = transfer.Transfer(Num)

app.MainLoop()

def depos(self,event):

Num=self.Num

t = threading.Thread(target=self.doClose, args=(0.05,))

t.start()

app = Deposit.Deposit1(Num)

app.MainLoop()

def withdraw(self,event):

Num=self.Num

t = threading.Thread(target=self.doClose, args=(0.05,))

t.start()

app=Withdrawal.Withdrawal1(Num)

app.MainLoop()

def gaim(self,event):

Num=self.Num

t = 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=YuanZhangH

wx.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)

pass

dlg.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)

pass

dlg.Destroy()

def Xiu(self,event):

YuanZhangH=self.YuanZhangH

z1 = 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() # 关闭连接

pass

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()

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=Num

self.stt=stt

self.val=val

self.Mnum=Mnum

self.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=card

wx.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)

pass

dlg.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 function

class 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)

pass

dlg.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=YuanZhangH

wx.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)

pass

dlg.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)

pass

dlg.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=YuanZhangH

wx.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)

pass

dlg.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)

pass

dlg.Destroy()

def QuK(self, event):

# 连接到本地数据库

z2 = self.JinE.GetValue()

YuanZhangH = self.YuanZhangH

sql1 = "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()

效果:

登录界面

功能板界面

查询界面

存/取款界面

转账界面

改密界面

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

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python可以通过GUIMySQL实现学生信息管理系统。以下是一个简单的示例: ```python import mysql.connector from tkinter import * from tkinter import messagebox # 连接到MySQL数据库 mydb = mysql.connector.connect( host="localhost", user="yourusername", password="yourpassword", database="students" ) # 创建一个指向数据库的游标 mycursor = mydb.cursor() # 创建一个GUI窗口 root = Tk() root.title("学生信息管理系统") # 创建标签和输入框 label1 = Label(root, text="姓名") label1.grid(row=0, column=0) entry1 = Entry(root) entry1.grid(row=0, column=1) label2 = Label(root, text="年龄") label2.grid(row=1, column=0) entry2 = Entry(root) entry2.grid(row=1, column=1) label3 = Label(root, text="性别") label3.grid(row=2, column=0) entry3 = Entry(root) entry3.grid(row=2, column=1) label4 = Label(root, text="成绩") label4.grid(row=3, column=0) entry4 = Entry(root) entry4.grid(row=3, column=1) # 定义插入函数 def insert(): # 获取输入框中的值 name = entry1.get() age = entry2.get() gender = entry3.get() score = entry4.get() # 插入数据到数据库 sql = "INSERT INTO students (name, age, gender, score) VALUES (%s, %s, %s, %s)" val = (name, age, gender, score) mycursor.execute(sql, val) mydb.commit() # 提示插入成功 messagebox.showinfo("提示", "插入成功") # 定义查询函数 def query(): # 查询所有学生信息 mycursor.execute("SELECT * FROM students") myresult = mycursor.fetchall() # 在GUI窗口中显示查询结果 result = "" for x in myresult: result += str(x) + "\n" messagebox.showinfo("查询结果", result) # 创建插入和查询按钮 button1 = Button(root, text="插入", command=insert) button1.grid(row=4, column=0) button2 = Button(root, text="查询", command=query) button2.grid(row=4, column=1) # 运行GUI窗口 root.mainloop() ``` 该示例使用了Tkinter库创建了一个简单的GUI窗口,用户可以在窗口中输入学生的姓名、年龄、性别和成绩,并将这些信息插入到MySQL数据库中。用户还可以点击“查询”按钮来查询所有学生的信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值