虚拟小银行 GUI

此段代码是曾经的一个小作业,模拟一个虚拟银行的业务,例如开户,取款,存款,转账之类的。和前面一样,也是用可视化编程重新写了,并且在之前的基础上增加了一些完善的地方。例如,将客户信息存入excel之中保存,每个ID身份只能最多开5个账户,完善了银行卡号可能重复的问题等等。在写代码的过程中,思考了很多以前从未注意的问题,也运用到了读写excel,可视化编程,函数和类这些方面的技巧,可以说是更进一步熟练了自己吧。总之是一次挺不错的编程体验,希望后续体验会越来越好。

from PySide2.QtWidgets import QApplication, QMessageBox
from PySide2.QtUiTools import QUiLoader
from PySide2.QtCore import QFile
#from PySide2.QtWidgets import QWidget, QPushButton, QLabel, QApplication
import sys
import random
import openpyxl

class Stats0:

    def __init__(self):
        # 从文件中加载UI定义
        #qfile_stats = QFile('1.ui')
        #qfile_stats.open(QFile.ReadOnly)
        #qfile_stats.close()

        # 从 UI 定义中动态 创建一个相应的窗口对象
        # 注意:里面的控件对象也成为窗口对象的属性了
        # 比如 self.ui.button , self.ui.textEdit

        #self.ui = QUiLoader().load(qfile_stats)
        self.ui = QUiLoader().load('loadin.ui')


class Stats1:

    def __init__(self):

        self.ui = QUiLoader().load('bank UI.ui')


class Stats2:

    def __init__(self):

        self.ui = QUiLoader().load('creatuser.ui')

        self.ui.pushButton.clicked.connect(self.creat)

    def creat(self):

        name = self.ui.plainTextEdit2.toPlainText()
        IDcard = self.ui.plainTextEdit3.toPlainText()
        phone = self.ui.plainTextEdit4.toPlainText()
        prestoremoney = float(self.ui.plainTextEdit5.toPlainText())
        password = self.ui.plainTextEdit6.toPlainText()
        accountmoney = 0


        if len(IDcard) == 18:

            if len(phone) ==11:

                if prestoremoney >= 0:

                    accountmoney=prestoremoney

                    wb = openpyxl.load_workbook('accountinfo.xlsx')

                    sheet = wb['info']

                    rownum = sheet.max_row

                    IDinfo = []

                    cardNOinfo = []

                    for i in range (1, rownum+1):

                        IDinfo.append(sheet.cell(i+1,2).value)
                        cardNOinfo.append(sheet.cell(i+1,4).value)
                    
                    while 1==1:

                        cardNO= str(random.randint(6217582000000000000,6217582099999999999))

                        if cardNO in cardNOinfo:

                            continue

                        else:

                            break

                    info = [name, IDcard, phone, cardNO, accountmoney, password]

                    
                    for k in IDinfo:

                        if IDinfo.count(k)>4 and k ==IDcard:

                            QMessageBox.about(self.ui,
                                        '结果',
                                        '''此身份证号在我行开通的账号数量已达到上限,禁止开户!'''
                                        )
                            break

                        else:

                            for j in range (0,6):

                                sheet.cell(rownum+1,j+1).value = info[j]

                                wb.save('accountinfo.xlsx')             

                            QMessageBox.about(self.ui,
                                        '结果',
                                        f'''开户成功!记住您的卡号:\n{cardNO}'''
                                        )
                            self.ui.close()
                        break

                else:

                    QMessageBox.about(self.ui,
                                '结果',
                                '''预存款错误!'''
                                )

            else:

                QMessageBox.about(self.ui,
                            '结果',
                            '''手机号码长度错误!'''
                            )

        else:

            QMessageBox.about(self.ui,
                        '结果',
                        '''身份证号码长度错误!'''
                        )


class Stats3:

    def __init__(self):

        self.ui = QUiLoader().load('cashout.ui')


class Stats4:

    def __init__(self):

        self.ui = QUiLoader().load('cashin.ui')




if __name__ == '__main__':
    app = QApplication(sys.argv)
    stats0 = Stats0()
    stats1 = Stats1()
    stats2 = Stats2()
    stats3 = Stats3()
    stats4 = Stats4()
    stats0.ui.show()


    def verify():
            
        cardNO = stats0.ui.plainTextEdit2.toPlainText()
        password = stats0.ui.plainTextEdit3.toPlainText()

        wb = openpyxl.load_workbook('accountinfo.xlsx')
        sheet = wb['info']
        rownum = sheet.max_row

        cardNOinfo = []
        pwd = []
        accountmoney = []

        for i in range (1, rownum+1):

            cardNOinfo.append(sheet.cell(i+1,4).value)
            pwd.append(sheet.cell(i+1,6).value)
            accountmoney.append(sheet.cell(i+1,5).value)

        if cardNO in cardNOinfo:

                x = cardNOinfo.index(cardNO)

                if password == pwd[x]:

                    stats1.ui.show()
                    stats0.ui.close()

                else:
                    QMessageBox.about(stats0.ui,
                                '结果',
                                '''密码错误!''')
        
        else:

            QMessageBox.about(stats0.ui,
                        '结果',
                        '''账号错误!''')

        
        def yue():

            QMessageBox.about(stats1.ui,
                        '结果',
                        f'''您的余额是{sheet.cell(x+2,5).value}元''')

        def cashout():

            cash = float(stats3.ui.plainTextEdit2.toPlainText())

            if cash >= 0 and cash <= accountmoney[x] :

                accountmoney[x] = accountmoney[x]-cash
                sheet.cell(x+2,5).value = accountmoney[x]
                wb.save('accountinfo.xlsx')

                stats3.ui.plainTextEdit2.clear()
                QMessageBox.about(stats3.ui,
                            '结果',
                            '''取款成功!''')
            else:
                QMessageBox.about(stats3.ui,
                            '结果',
                            '''取款额错误!''')

        def cashin():

            cash = float(stats4.ui.plainTextEdit2.toPlainText())

            if cash >= 0 :

                accountmoney[x] = accountmoney[x]+cash
                sheet.cell(x+2,5).value = accountmoney[x]
                wb.save('accountinfo.xlsx')

                stats4.ui.plainTextEdit2.clear()
                QMessageBox.about(stats4.ui,
                            '结果',
                            '''存款成功!''')
            else:

                stats4.ui.plainTextEdit2.clear()
                QMessageBox.about(stats4.ui,
                            '结果',
                            '''存款额错误!''')



        stats1.ui.pushButton2.clicked.connect(yue)              #查询余额
        stats3.ui.pushButton.clicked.connect(cashout)           #取款
        stats4.ui.pushButton.clicked.connect(cashin)            #存款

    stats0.ui.pushButton.clicked.connect(verify)                #验证账号密码进行登录
    stats0.ui.pushButton2.clicked.connect(stats2.ui.show)       #开户
    stats1.ui.pushButton3.clicked.connect(stats3.ui.show)       #取款界面
    stats1.ui.pushButton4.clicked.connect(stats4.ui.show)       #存款界面
    stats1.ui.pushButton7.clicked.connect(stats1.ui.close)      #退出
    #app.exec_()
    sys.exit(app.exec_())

当然,这段代码并不是完成品,里面还有2个功能没有开发,但是原理和已经开发的功能差不多,故不作强求。嘿嘿…
可能后续这是一个学习方向吧,可视化编程+读写excel,来开发一些日常工作中可以使用的小工具。以上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值