python实现银行实战系统

2020-09-23 0 139

本文实例为大家分享了python实现银行实战系统的具体代码,供大家参考,具体内容如下

先附上源代码:

│ admin.py                         管理员界面
│ alluser.txt                        保存用户信息
│ atm.py                             银行的各部分操作方法(存钱取钱等等)
│ card.py                            定义卡的类
│ main.py                           主程序 while True
│ user.py                            用户的类 

main.py的源代码

\"\"\"
人
类名:User
属性:姓名 身份证号 电话号 卡
行为:

卡
类名:Card
属性:卡号 密码 余额
行为:

提款机
类名:ATM
属性:用户字典
行为:开户 查询 取款 存款 转账 改密 锁定 解密 补卡 销户 退出

管理员
类名:Admin
属性:
行为:管理员界面 管理员验证 系统功能界面

\"\"\"
import os
import pickle

import admin
from atm import ATM


def main():
 # 管理员对象
 admin1 = admin.Admin()

 # 管理员开机
 admin1.printAdminView()
 if admin1.adminOption():
 return -1

 # 提款机对象
 filepath = os.path.join(os.getcwd(), \"alluser.txt\")
 f = open(filepath, \"rb\")
 allUsers = pickle.load(f)
 f.close()
 atm = ATM(allUsers)

 while True:
 admin1.printFunctionView()
 # 等待用户的操作
 option = input(\"请输入您的操作:\")
 if option == \"1\" or option == \"开户\":
 atm.creatUser()
 elif option == \"2\" or option == \"查询\":
 atm.searchUserInfo()
 elif option == \"3\" or option == \"取款\":
 atm.withdrawals()
 elif option == \"4\" or option == \"存款\":
 atm.saveMoney()
 elif option == \"5\" or option == \"转账\":
 atm.transferMoney()
 elif option == \"6\" or option == \"改密\":
 atm.changePasswd()
 elif option == \"7\" or option == \"锁定\":
 atm.lockUser()
 elif option == \"8\" or option == \"解锁\":
 atm.unlockUser()
 elif option == \"9\" or option == \"补卡\":
 atm.newCard()
 elif option == \"0\" or option == \"销户\":
 atm.killUser()
 elif option == \"t\" or option == \"退出\":
 if not admin1.adminOption():
 # 将当前系统中的用户信息保存到文件中
 f = open(filepath, \"wb\")
 pickle.dump(atm.allUsers, f, 2)
 f.close()
 return -1
 else:
 print(\"指令错误,请重新输入!!\")

 admin.timeFlush()


if __name__ == \'__main__\':
 main()

admin.py的源代码

import time


def timeFlush():
 sum = 2 # 设置倒计时时间
 timeflush = 0.25 # 设置屏幕刷新的间隔时间
 for i in range(0, int(sum / timeflush)):
 list = [\"\\\\\", \"|\", \"/\", \"—\"]
 index = i % 4
 print(\"\\r操作成功!请稍等 {} \".format(list[index]), end=\"\")
 time.sleep(timeflush)


class Admin(object):
 admin = \"1\"
 passwd = \"1\"

 def printAdminView(self):
 print(\"*****************************************************************\")
 print(\"* *\")
 print(\"* *\")
 print(\"* 欢迎登录csdn银行 *\")
 print(\"* *\")
 print(\"* *\")
 print(\"*****************************************************************\")

 def printFunctionView(self):
 print(\"\\r*****************************************************************\")
 print(\"* 开 户(1) 查 询(2) *\")
 print(\"* 取 款(3) 存 款(4) *\")
 print(\"* 转 账(5) 改 密(6) *\")
 print(\"* 锁 定(7) 解 锁(8) *\")
 print(\"* 补 卡(9) 销 户(0) *\")
 print(\"* 退 出(t) *\")
 print(\"*******************************************************************\")

 def adminOption(self):
 inputAdmin = input(\"请输入管理员账号:\")
 if self.admin != inputAdmin:
 print(\"账号输入有误!!\")
 return -1
 inputPasswd = input(\"请输入管理员密码:\")
 if self.passwd != inputPasswd:
 print(\"密码输入有误!!\")
 return -1

 # 能执行到这里说明账户密码正确!!
 timeFlush()
 return 0

user.py的源代码

class User(object):
 def __init__(self, name, idCard, phone, card):
 self.name = name
 self.idCard = idCard
 self.phone = phone
 self.card = card

card.py的源代码

class Card(object):
 def __init__(self, cardId, cardPasswd, cardMoney):
 self.cardId = cardId
 self.cardPasswd = cardPasswd
 self.cardMoney = cardMoney
 self.cardLock = False

atm.py的源代码

import random

from card import Card
from user import User


class ATM(object):
 def __init__(self, allUsers):
 self.allUsers = allUsers

 # 开户
 def creatUser(self):
 # 向用户字典中添加一对键值对(卡号 -- 用户)
 name = input(\"请输入您的姓名:\")
 idCard = input(\"请输入您的身份证号码:\")
 phone = input(\"请输入您的电话号码:\")

 prestoreMoney = int(input(\"请输入预存储金额:\"))
 if prestoreMoney < 0:
 print(\"预存储金额有误!!开户失败\")
 return -1

 onePasswd = input(\"请设置密码:\")
 # 验证密码
 if not self.checkPasswd(onePasswd):
 print(\"密码输入错误!!开户失败\")
 return -1

 # 生成随机的卡号
 cardId = self.randomCardId()

 # 生成卡的信息
 card = Card(cardId, onePasswd, prestoreMoney)
 # 生成用户信息
 user = User(name, idCard, phone, card)

 # 存到字典里面
 self.allUsers[cardId] = user
 print(\"您的卡号是%s, 请牢记卡号!!\" % cardId)

 # 查询
 def searchUserInfo(self):
 cardNum = input(\"请输入您的卡号:\")
 # 验证是否存在该卡号
 user = self.allUsers.get(cardNum)
 if not user:
 print(\"该卡号不存在!!查询失败\")
 return -1
 if user.card.cardLock:
 print(\"该卡已被锁定!!请解锁后在进行其他操作!\")
 return -1

 # 验证密码
 if not self.checkPasswd(user.card.cardPasswd):
 print(\"密码输入错误!!该卡已被锁定!!请解锁后在进行其他操作!\")
 user.card.cardLock = True
 return -1
 print(\"账号:%s 余额:%d\" % (user.card.cardId, user.card.cardMoney))

 # 取款
 def withdrawals(self):
 cardNum = input(\"请输入您的卡号:\")
 # 验证是否存在该卡号
 user = self.allUsers.get(cardNum)
 if not user:
 print(\"该卡号不存在!!查询失败\")
 return -1
 if user.card.cardLock:
 print(\"该卡已被锁定!!请解锁后在进行其他操作!\")
 return -1

 # 验证密码
 if not self.checkPasswd(user.card.cardPasswd):
 print(\"密码输入错误!!该卡已被锁定!!请解锁后在进行其他操作!\")
 user.card.cardLock = True
 return -1

 # 进行到这一步说明卡号信息都正确,进行取款操作
 theMoney = int(input(\"请输入您需要取款的金额:\"))
 if theMoney > user.card.cardMoney:
 print(\"余额不足!!\")
 return -1
 elif theMoney < 0:
 print(\"您输入金额有误!!\")
 else:
 user.card.cardMoney -= theMoney
 print(\"取款成功!! 余额为:%d\" % user.card.cardMoney)

 # 存款
 def saveMoney(self):
 cardNum = input(\"请输入您的卡号:\")
 # 验证是否存在该卡号
 user = self.allUsers.get(cardNum)
 if not user:
 print(\"该卡号不存在!!查询失败\")
 return -1
 if user.card.cardLock:
 print(\"该卡已被锁定!!请解锁后在进行其他操作!\")
 return -1

 # 验证密码
 if not self.checkPasswd(user.card.cardPasswd):
 print(\"密码输入错误!!该卡已被锁定!!请解锁后在进行其他操作!\")
 user.card.cardLock = True
 return -1

 # 进行到这一步说明卡号信息都正确,进行存款操作
 theMoney = int(input(\"请输入您需要存款的金额:\"))
 if theMoney < 0:
 print(\"您输入金额有误!!\")
 else:
 user.card.cardMoney += theMoney
 print(\"存款成功!! 余额为:%d\" % user.card.cardMoney)

 # 转账
 def transferMoney(self):
 cardNum = input(\"请输入您的卡号:\")
 # 验证是否存在该卡号
 user = self.allUsers.get(cardNum)
 if not user:
 print(\"该卡号不存在!!查询失败\")
 return -1
 if user.card.cardLock:
 print(\"该卡已被锁定!!请解锁后在进行其他操作!\")
 return -1

 # 验证密码
 if not self.checkPasswd(user.card.cardPasswd):
 print(\"密码输入错误!!该卡已被锁定!!请解锁后在进行其他操作!\")
 user.card.cardLock = True
 return -1

 # 到这里说明卡号信息正确,进行转账操作
 theOtherCardId = input(\"请输入您需要转账的卡号:\")
 # 验证是否存在该卡号
 otheruser = self.allUsers.get(theOtherCardId)
 if not otheruser:
 print(\"该卡号不存在!!转账失败\")
 return -1
 if otheruser.card.cardLock:
 print(\"该卡已被锁定!!\")
 return -1
 theOtherCardName = input(\"请输入您需要转账人的姓名:\")
 # 验证转账人的姓名是否正确
 if otheruser.name != theOtherCardName:
 print(\"转账人姓名输入错误\")
 return -1
 print(\"您的账户为%s 您的余额为%d\" % (user.card.cardId, user.card.cardMoney))
 # 开始转账
 theMoney = int(input(\"请输入您需要转账的金额:\"))
 if theMoney < 0:
 print(\"您输入金额有误!!\")
 else:
 user.card.cardMoney -= theMoney
 otheruser.card.cardMoney += theMoney
 print(\"转账成功!!您的余额为%d\" % user.card.cardMoney)
 return -1

 # 改密
 def changePasswd(self):
 cardNum = input(\"请输入您的卡号:\")
 # 验证是否存在该卡号
 user = self.allUsers.get(cardNum)
 if not user:
 print(\"该卡号不存在!!查询失败\")
 return -1
 if user.card.cardLock:
 print(\"该卡已被锁定!!请解锁后在进行其他操作!\")
 return -1

 # 验证密码
 if not self.checkPasswd(user.card.cardPasswd):
 print(\"密码输入错误!!该卡已被锁定!!请解锁后在进行其他操作!\")
 user.card.cardLock = True
 return -1

 # 下面进行改密操作
 newPasswd = input(\"请输入新密码:\")
 if newPasswd == user.card.cardPasswd:
 print(\"新旧密码不能一致!!操作失败\")
 return -1
 # 验证密码
 if not self.checkPasswd(newPasswd):
 print(\"密码输入错误!!\")
 return -1
 user.card.cardPasswd = newPasswd
 print(\"密码修改成功!!请牢记您的密码\")

 # 锁定
 def lockUser(self):
 cardNum = input(\"请输入您的卡号:\")
 # 验证是否存在该卡号
 user = self.allUsers.get(cardNum)
 if not user:
 print(\"该卡号不存在!!输入错误\")
 return -1
 if user.card.cardLock:
 print(\"该卡已被锁定!!请解锁后再使用其他功能\")
 return -1
 # 验证密码
 if not self.checkPasswd(user.card.cardPasswd):
 print(\"密码输入错误!!锁定失败\")
 return -1
 tempIdCard = input(\"请输入您的身份证号码\")
 if tempIdCard != user.idCard:
 print(\"身份证输入错误!!锁定失败\")
 return -1
 # 进行到这一步说明信息输入成功,锁定开始
 user.card.cardLock = True
 print(\"锁定成功\")

 # 解锁
 def unlockUser(self):
 cardNum = input(\"请输入您的卡号:\")
 # 验证是否存在该卡号
 user = self.allUsers.get(cardNum)
 if not user:
 print(\"该卡号不存在!!输入错误\")
 return -1
 if not user.card.cardLock:
 print(\"该卡没有被锁定!!无需解锁\")
 return -1
 # 验证密码
 if not self.checkPasswd(user.card.cardPasswd):
 print(\"密码输入错误!!锁定失败\")
 return -1
 tempIdCard = input(\"请输入您的身份证号码\")
 if tempIdCard != user.idCard:
 print(\"身份证输入错误!!锁定失败\")
 return -1
 # 进行到这一步说明信息输入成功,解锁开始
 user.card.cardLock = False
 print(\"解锁成功\")

 # 补卡
 def newCard(self):
 cardNum = input(\"请输入您的卡号:\")
 # 验证是否存在该卡号
 user = self.allUsers.get(cardNum)
 if not user:
 print(\"该卡号不存在!!查询失败\")
 return -1
 if user.card.cardLock:
 print(\"该卡已被锁定!!请解锁后在进行其他操作!\")
 return -1

 # 验证密码
 if not self.checkPasswd(user.card.cardPasswd):
 print(\"密码输入错误!!该卡已被锁定!!请解锁后在进行其他操作!\")
 user.card.cardLock = True
 return -1

 CardName = input(\"请输入您的姓名:\")
 # 验证姓名是否正确
 if user.name != CardName:
 print(\"姓名输入错误!!\")
 return -1

 useridCard = input(\"请输入您的身份证号码:\")
 # 验证身份证是否正确
 if user.idCard != useridCard:
 print(\"身份证号码输入错误!!\")
 return -1

 # 进行到这一步说明信息都正确,下面进行补卡操作,只换卡号,其他信息都不换
 newIdCard= self.randomCardId()
 self.allUsers[newIdCard] = self.allUsers.pop(user.card.cardId)
 user.card.cardId = newIdCard
 print(\"您的新卡号为:%s 请牢记!!\" % user.card.cardId)

 # 销户
 def killUser(self):
 cardNum = input(\"请输入您的卡号:\")
 # 验证是否存在该卡号
 user = self.allUsers.get(cardNum)
 if not user:
 print(\"该卡号不存在!!查询失败\")
 return -1
 if user.card.cardLock:
 print(\"该卡已被锁定!!请解锁后在进行其他操作!\")
 return -1

 # 验证密码
 if not self.checkPasswd(user.card.cardPasswd):
 print(\"密码输入错误!!该卡已被锁定!!请解锁后在进行其他操作!\")
 user.card.cardLock = True
 return -1

 CardName = input(\"请输入您的姓名:\")
 # 验证姓名是否正确
 if user.name != CardName:
 print(\"姓名输入错误!!\")
 return -1

 useridCard = input(\"请输入您的身份证号码:\")
 # 验证身份证是否正确
 if user.idCard != useridCard:
 print(\"身份证号码输入错误!!\")
 return -1

 answer = input(\"请问您确定要销户吗?确定(1) 取消(2)\")
 if answer == \"1\" or answer == \"确定\":
 del self.allUsers[cardNum]
 print(\"已销户\")
 return -1
 elif answer == \"2\" or answer == \"取消\":
 print(\"取消成功!!\")
 return -1
 else:
 print(\"输入错误!!\")
 return -1

 # 验证密码
 def checkPasswd(self, realPasswd):
 for i in range(3):
 tempPasswd = input(\"请再次输入密码:\")
 if tempPasswd == realPasswd:
 return True

 return False

 def randomCardId(self):
 while True:
 str = \"\"
 for i in range(6):
 # 随机生成一个数字
 ch = chr(random.randrange(ord(\"0\"), ord(\"9\") + 1))
 str += ch

 # 判断是否重复
 if not self.allUsers.get(str):
 return str

alluser.txt源代码

�}q X 123456qcuser
User
q)�q}q(X nameqX 1qX idCardqhX phoneqhX cardq ccard
Card
q
)�q }q (X cardIdq
hX
 cardPasswdqhX cardMoneyqKX cardLockq�ububs.

因为运用pickle库,要持久化存储用户信息(字典),故打开读取写入会乱码,第一排中的123456是卡号,其他信息全部是1,不要试图pycharm中修改这个allUserstxt文件,否则会产生无法启动程序的bug,这个笔者也不知道该如何改进乱码现象,希望读者能优化

如果遇到因为alluser.txt而无法运行的情况:请往下看:

因为pickle库的原因,开始我们是要读取这个文件的,读的到程序顺利,读不到程序凉凉,故我们必须要在alluser.txt里面有pickle库可以识别的源代码。如果您是在pycharm里面复制粘贴的因为alluser.txt代码,故pycharm会自动转化为utf-8或者其他

我们要先把alluser.txt删除,让pickle库先不读取,创建一个空字典,我们先开户,然后退出程序是会自动创建一个新的alluser.txt文件,会把我们刚刚创建好的用户信息全部保存在txt文件中,这样我们再恢复,达到持久化保存的目的

filepath = os.path.join(os.getcwd(), \"alluser.txt\")
 # 把之前的给注释掉,不让程序读取
 # f = open(filepath, \"rb\")
 # allUsers = pickle.load(f)
 # f.close()
 # 创建一个新的空字典
 allUsers = {}
 atm = ATM(allUsers)

然后我们进行开户操作,最后退出,会自动创建一个全新的alluser.txt文件

filepath = os.path.join(os.getcwd(), \"alluser.txt\")
 f = open(filepath, \"rb\")
 allUsers = pickle.load(f)
 f.close()
 # 然后我们恢复它
 # allUsers = {}
 atm = ATM(allUsers)

ok,完成了

运行结果:

python实现银行实战系统

更多学习资料请关注专题《管理系统开发》。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自学编程网。

遇见资源网 Python python实现银行实战系统 http://www.ox520.com/24453.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务