您的位置:首页 > 编程语言 > Python开发

python实现简单银行管理系统

2019-10-28 18:07 1211 查看

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

自己写的练手小程序,练习面向对象的概念,代码中都有注释,刚学的同学也可以很容易看懂(需要自己用pickle模块新建一个database.txt文件,用来存储用户数据信息)。

# atm.py
# 各种操作类
import random
from card import Card
from user import User
import time

class ATM(object):
# 初始化
def __init__(self, allUsersInfo):
# 将所有用户信息传递过来,以便后续操作
self.allUsersInfo = allUsersInfo # 卡号 :用户

# 确认密码
def checkPwd(self, realPwd):
myList = [3, 2, 1, 0]
for i in myList:
# 如果密码输入错误超过三次
if i == 0:
return False
rePass = input('请再次输入密码:')
if realPwd == rePass:
return True
elif (i - 1) != 0:
print('输入错误,你还有%d次输入的机会!' % (i - 1))

# 随机生成开户卡号
def randomId(self):
while True:
# 存储卡号
str = ''

# 随机生成6位卡号
for i in range(6):
ch = chr(random.randrange(ord('0'), ord('9') + 1))
str += ch

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

# 开卡操作
def createUser(self):
try:
name = input('请输入姓名:') # 用户姓名
idCard = input('请输入身份证号码:') # 用户身份证号
phone = input('请输入电话号码:') # 用户的电话号码
preMoney = int(input('请输入预存金额:')) # 用户的预存金额

# 预存金额少于0则开户失败
if preMoney < 0:
print('预存金额有误,开户失败!')
return -1

# 设置密码
onePwd = input('请输入密码:') # 第一次密码
twoPwd = self.checkPwd(onePwd)

if not twoPwd:
print('确认密码错误,开户失败!')
return -1

# 以上全部完成,则开户所需的信息准备齐全,开户成功
# 系统生成开户卡号

# 生成卡号
cardStr = self.randomId()

# 创建一个卡的实例,用于存储卡的信息
card = Card(cardStr, onePwd, preMoney)

# 创建一个用户实例,用于存储用户的信息
user = User(name, idCard, phone, card)

# 按 卡号 : 用户信息 键值对的形式存入字典中
self.allUsersInfo[cardStr] = user

# 提示用户,已经开户成功
time.sleep(1)
print('开户成功,请牢记卡号({})...'.format(cardStr))

except Exception as e:
print('抱歉,系统出现故障,暂时无法操作!')
return

# 判断卡号是否存在
def isExistence(self, cardStrInp):
# 卡号不存在,直接退回到选项界面
if self.allUsersInfo.get(cardStrInp):
return True

# 卡号不存在的情况下
else:
print('卡号不存在!')
return False

# 做查询等操作时,输入密码
def secretOption(self, cardStrInp):
myList = [3, 2, 1, 0]
for i in myList:
# 如果密码输入错误超过三次
if i == 0:
return False
passInp = input('请输入密码:')
if passInp == self.allUsersInfo[cardStrInp].cardInfo.cardPwd:
return True
elif (i - 1) != 0:
print('输入错误,你还有%d次输入的机会!' % (i - 1))

# 查询用户信息
def searchUserInfo(self):
cardStrInp = input('请输入卡号:') # 用户想要查询的卡号

# 判断卡号的状态
isExist = self.isExistence(cardStrInp)

# 卡号存在
if isExist:
# 是否被锁定
if not self.allUsersInfo[cardStrInp].cardInfo.isLock:
# 输入密码并判断
# 密码正确则输出余额
if self.secretOption(cardStrInp):
print('账号:%s 余额:%d' % (cardStrInp, self.allUsersInfo[cardStrInp].cardInfo.cardMoney))
return 0

# 密码错误则锁定卡号
else:
print('密码输入错误超过3次,卡号已被锁定,请先解锁!')
self.allUsersInfo[cardStrInp].cardInfo.isLock = True
return -1
else:
print('该卡号已被锁定,请先解锁!')
return -1

# 取钱
def getMoney(self):
cardStrInp = input('请输入卡号:')

isExist = self.isExistence(cardStrInp)
# print(isExist)

# 如果卡号存在
if isExist:
# 如果没被锁定
if not self.allUsersInfo[cardStrInp].cardInfo.isLock:

# 如果密码正确
if self.secretOption(cardStrInp):
getMoney = int(input('请输入取款金额:'))

# 如果取款金额超出余额
if getMoney > self.allUsersInfo[cardStrInp].cardInfo.cardMoney:
print('余额不足,取款失败!')
return -1

# 余额足够的情况,取款成功
else:
self.allUsersInfo[cardStrInp].cardInfo.cardMoney -= getMoney
print('取款成功,卡上余额:%d' % self.allUsersInfo[cardStrInp].cardInfo.cardMoney)
return 0
else:
print('密码输入错误超过3次,卡号已被锁定,请先解锁!')
self.allUsersInfo[cardStrInp].cardInfo.isLock = True
return -1
else:
print('该卡号已被锁定,请先解锁!')
return -1

# 存钱
def saveMoney(self):
cardStrInp = input('请输入卡号:')

isExist = self.isExistence(cardStrInp)

if isExist:
# 如果没被锁定
if not self.allUsersInfo[cardStrInp].cardInfo.isLock:

# 如果密码正确
if self.secretOption(cardStrInp):
saveMoney = int(input('请输入存款金额:'))
if saveMoney <= 0:
print('无效的存款金额!')
return -1
else:
# 存款成功
self.allUsersInfo[cardStrInp].cardInfo.cardMoney += saveMoney
print('存款成功,卡内余额为%d!' % self.allUsersInfo[cardStrInp].cardInfo.cardMoney)
else:
print('密码输入错误超过3次,卡号已被锁定,请先解锁!')
self.allUsersInfo[cardStrInp].cardInfo.isLock = True
return -1
else:
print('该卡号已被锁定,请先解锁!')
return -1

# 转账
def transMoney(self):
cardInp = input('请输入卡号:')

isExist = self.isExistence(cardInp)

# 卡号存在
if isExist:
# 没被锁定
if not self.allUsersInfo[cardInp].cardInfo.isLock:
# 密码正确
if self.secretOption(cardInp):
transCardInp = input('请输入要转账的卡号:')
isExistTrans = self.isExistence(transCardInp)

# 要转账的卡号存在
if isExistTrans:
# 要转账的卡号没被锁定
if not self.allUsersInfo[transCardInp].cardInfo.isLock:
# 要转账的卡号不是自己的卡号
if transCardInp != cardInp:
transMoneyInp = int(input('请输入要转账的金额:'))
# 判断转账金额是否大于卡内余额
if transMoneyInp > self.allUsersInfo[cardInp].cardInfo.cardMoney:
print('余额不足,转账失败!')
return -1
else:
self.allUsersInfo[cardInp].cardInfo.cardMoney -= transMoneyInp
self.allUsersInfo[transCardInp].cardInfo.cardMoney += transMoneyInp
print('转账成功,卡内余额为%d!' % self.allUsersInfo[cardInp].cardInfo.cardMoney)
else:
print('无法转入自己的账户!')
return -1
else:
print('对方卡号已被锁定,无法转账,请先解锁!')
return -1
else:
print('密码输入错误超过3次,卡号已被锁定,请先解锁!')
self.allUsersInfo[cardInp].cardInfo.isLock = True
return -1
else:
print('该卡号已被锁定,请先解锁!')
return -1

# 改密
def changePwd(self):
cardStrInp = input('请输入卡号:')

isExist = self.isExistence(cardStrInp)

if isExist:
# 如果没被锁定
if not self.allUsersInfo[cardStrInp].cardInfo.isLock:

# 如果密码正确
if self.secretOption(cardStrInp):
# 输入修改后的密码
changePwd = input('请输入新密码:')

# 不允许新密码和旧密码相同
if changePwd != self.allUsersInfo[cardStrInp].cardInfo.cardPwd:
myList = [3, 2, 1, 0]
for i in myList:
# 如果密码输入错误超过三次
if i == 0:
print('确认密码错误次数超过3次,修改密码失败!')
return -1
passInp = input('请确认新密码:')

# 如果新密码确认成功,则修改密码
if passInp == changePwd:
print('密码修改成功!')
self.allUsersInfo[cardStrInp].cardInfo.cardPwd = changePwd
return 0
elif (i - 1) != 0:
print('输入错误,你还有%d次输入的机会!' % (i - 1))
# 新密码和旧密码相同,不允许修改,提示并退出
else:
print('新密码不允许和旧密码相同!')
return -1
# 密码不正确
else:
print('密码输入错误超过3次,卡号已被锁定,请先解锁!')
self.allUsersInfo[cardStrInp].cardInfo.isLock = True
return -1
else:
print('该卡号已被锁定,请先解锁!')
return -1

# 解锁
def unlockUser(self):
cardStrInp = input('请输入卡号:')

isExist = self.isExistence(cardStrInp)

# 存在
if isExist:
# 被锁定
if self.allUsersInfo[cardStrInp].cardInfo.isLock:
# 如果密码正确
if self.secretOption(cardStrInp):
# 输入身份证号信息做确认
idCardInp = input('请输入身份证号:')

# 身份证号信息匹配
if idCardInp == self.allUsersInfo[cardStrInp].idCard:
# 解锁成功
print('解锁成功!')
self.allUsersInfo[cardStrInp].cardInfo.isLock = False
return 0
else:
print('身份证号信息不匹配,解锁失败!')
return -1
# 密码不正确
else:
print('密码输出错误,解锁失败!')
return -1
else:
print('该卡号未被锁定,无需解锁!')
return -1
# card.py
# 卡类
class Card(object):
def __init__(self, cardStr, cardPwd, cardMoney):
self.cardStr = cardStr # 卡号
self.cardPwd = cardPwd # 卡密
self.cardMoney = cardMoney # 卡中余额

self.isLock = False # 卡号是否被锁
# main.py
# 主函数
from view import View
import pickle
from atm import ATM
import time

def main():
# 定义管理员对象
admin = View()

# 管理员登录界面
admin.printAdminView()

# 如果管理员账号、密码输入错误则退出
if admin.adminOption():
return -1

# 读取存储在文件中的所有用户的信息
file = open('database.txt', 'rb')
allUsersInfo = pickle.load(file) # 将所有用户信息存储到 allUsersInfo中去
file.close() # 关闭文件

# 打印所有用户信息,以便验证
print('*' * 10)
print('usersInfo:', allUsersInfo)

# 创建atm实例,并将所有用户信息传递过去,进行初始化
atm = ATM(allUsersInfo)

# 循环进行操作选项
while True:
# 调用功能显示方法,显示功能选项
admin.printSysFunctionView()

# 提示用户输入功能选项进行操作
option= input('请输入操作选项(数字):')

# 对用户的操作选项进行判断
if option == "1": # 开户操作
atm.createUser()

elif option == "2": # 查询余额操作
atm.searchUserInfo()

elif option == "3": # 取钱操作
atm.getMoney()

elif option == "4": # 存钱操作
atm.saveMoney()

elif option == "5": # 转账操作
atm.transMoney()

elif option == "6": # 改密码操作
atm.changePwd()

elif option == "7": # 解锁操作
atm.unlockUser()

# 以下操作暂时未写
# elif option == "q": # 退出操作
# # atm.quitSys()
# print('退出')

# elif option == "9": # 补卡操作
# print("补卡")
#
# elif option == "0": # 销户操作
# print("销户")

elif option == "8": # 退出系统
return 0

# 如果用户输入的不是上述操作
else:
print('无效的操作选项!')
return -1

# 将新信息写入文件
# 将当前系统中的用户信息保存到文件中
f = open('database.txt', "wb")
pickle.dump(allUsersInfo, f)
f.close()

if __name__ == '__main__':
main()
# user.py
# 用户信息类
class User(object):
def __init__(self, name, idCard, phone, cardInfo):
self.name = name # 用户姓名
self.idCard = idCard # 用户身份证号
self.phone = phone # 用户的手机号码
self.cardInfo = cardInfo # 用户的卡的信息(卡号、密码、余额)
# view.py
# 视图类
import time

class View(object):
admin = '1'
pwd = '1'

# 管理员登录界面
def printAdminView(self):
print("*****************************************************************")
print("*        *")
print("*        *")
print("*   欢迎登陆丹丹的银行   *")
print("*        *")
print("*        *")
print("*****************************************************************")

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

def adminOption(self):
inputAdmin = input('请输入管理员账号:')

if inputAdmin != self.admin:
print('账号错误!')
return -1

inputPwd = input('请输入管理员密码:')

if inputPwd != self.pwd:
print('密码错误!')
return -1

# 管理员账号和密码全部正确
print('操作成功,请稍后...')
time.sleep(2)
return 0

# view = View()
# view.printAdminView()
# view.adminOption()
# view.printSysFunctionView()

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

以上就是本文的全部内容,希望对大家的学习有所帮助

您可能感兴趣的文章:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 银行 管理系统