自助取款机系统(python+mysql+GUI)

这是一篇关于使用Python编程语言,结合pymysql数据库库和wxpython GUI库,实现一个简易自助取款机系统的文章。系统包括登录验证、存款、取款、查询交易记录、转账和修改密码等功能。在数据库层面,涉及了多个表的设计,如user、card、bill等。尽管界面朴素,但实现了完整的ATM操作流程。
摘要由CSDN通过智能技术生成

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

应用语言: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=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))
        sel
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值