此段代码是曾经的一个小作业,模拟一个虚拟银行的业务,例如开户,取款,存款,转账之类的。和前面一样,也是用可视化编程重新写了,并且在之前的基础上增加了一些完善的地方。例如,将客户信息存入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,来开发一些日常工作中可以使用的小工具。以上。