python银行系统-python实现简单银行管理系统

本文为大家分享了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银行系统-python实现简单银行管理系统)