简易银行系统,学习Python需要走的必经之路— _ —

简易的银行系统

1、需要分好创建的类,简易的银行系统分为五大块:用户的类、银行卡的类、管理的类、bank操作的类、atm类。(最好分五个文件创建 这样看着清楚好操作。)
2、分好类后确定每个类的属性和方法(函数)
下面就是各种源代码:

### 用户类:
import  os
import pickle
class User():def __init__(self,name,uid,card):self.uid = uid         # 身份证 self.name = name		#用户名self.card = card			# 银行卡def __str__(self):return "姓名{},身份证{},卡号{},密码{}".format(self.name,self.uid,self.card.cid,self.card.pwd)###  将用户对象保存到文件中@staticmethoddef save_user(userinfo):pathname = os.path.join(os.getcwd(),'userinfo.db')with open(pathname,'wb') as fp:pickle.dump(userinfo,fp)###  从文件中取出用户对象@staticmethoddef load_user():pathname = os.path.join(os.getcwd(),'userinfo.db')if os.path.exists(pathname):with open(pathname,'rb') as fp:userinfo = pickle.load(fp)return userinfoelse:return {}
print(os.getcwd())
#银行卡的类
class Card():def __init__(self,cid,pwd):self.cid= cid    			  # 卡号self.pwd = pwd          # 密码self.money = 0          # 余额self.is_lock = False    # 是否锁定
# 管理的类
class Admin():def __init__(self,admin='1',password='1'):self.admin = adminself.password = password##  显示欢迎页面def welcome(self):print("*"*30)print(" "*6+"欢迎使用锐士银行")print("*"*30)##  登录界面def login(self):admin = input("请输入管理员账号:")password = input("请输入管理员密码:")if  admin == '1' and password == '1':return Truereturn False##  操作菜单def menu(self):print("*" * 30)print("开户[1] 销户[2] 查询[3] 存款[4]")print("取款[5] 转账[6] 改密[7] 锁定[8]")print("解锁[9] 退出[0] 显示所有用户[10]")print("*" * 30)
#bank操作的类
from user import User
from  admin import Admin
from atm import Atm
if __name__ == "__main__":##  创建管理员对象admin = Admin()count = 0while True:#展示欢迎页面admin.welcome()# 展示登录页面ret = admin.login()if ret:print('登陆成功')userinfo = User.load_user()#  创建atm对象atm = Atm(userinfo)#定义变量(为了彻底退出while循环)is_quit = Falsewhile True:# 显示操作菜单admin.menu()num = int(input('请输入你的操作:'))if num == 0:print('彻底退出')is_quit = Truebreakelif  num == 1:atm.new_user()elif  num ==2:atm.del_user()elif  num ==3:atm.query_money()elif  num ==4:atm.save_money()elif  num ==5:atm.get_money()elif  num ==6:atm.pass_money()elif  num ==7:atm.change_pwd()elif  num ==8:atm.lock_user()elif  num ==9:atm.unlock_user()elif  num ==10:atm.show_user()if is_quit:breakelse:print('账号或者密码错误')count += 1if  count >2:print('密码错误达到上限,禁止登陆')break
ATM操作的类
from  user import User
from  card import  Card
from 随机生成卡号和md5加密 import Help
class Atm():def __init__(self,userinfo = {}):self.userinfo = userinfodef new_user(self):name = input("请输入用户名:")uid = input("请输入身份证:")pwd = input("请输入密码:")#  可以对密码加密(让密码更安全 需要用到加密模块 我会放在最后给出源代码  可以选择是否加密)# pwd = Help.generate_password(pwd)# 生成卡号cid  = Help.generate_cid()card = Card(cid,pwd)user = User(name,uid,card)#将用户信息添加到字典里self.userinfo[cid] = user#保存所有用户信息User.save_user(self.userinfo)print("开户成功")def del_user(self):cid = input("请输入你的卡号:")user = self.userinfo.get(cid)if user:if user.card.is_lock:print('该卡被锁定,请先解锁')returncount = 0while count < 2:pwd = input("请输入你的密码:")if pwd == user.card.pwd:  #if Help.check_password(pwd,user.card.pwd):del self.userinfo[cid]User.save_user(self.userinfo)print('销户成功')breakelse:count+=1print("密码错误")else:user.card.is_lock = TrueUser.save_user(self.userinfo)print("密码错误超过上限,改卡被冻结")else:print("该卡号不存在")def query_money(self):cid = input("请输入你的卡号:")user = self.userinfo.get(cid)if  user:if user.card.is_lock:print("改卡已锁定,请先解锁")print("您的余额:¥{}".format(user.card.money))else:print("该卡号不存在")def save_money(self):cid = input("请输入你的卡号:")user = self.userinfo.get(cid)if user:if user.card.is_lock:print("请解锁")returncount = 0while count < 3:pwd = input("请输入密码:")if pwd == user.card.pwd :money = int(input("请输入金额:"))user.card.money += moneyUser.save_user(self.userinfo)print("存款成功")breakelse:count += 1print("密码错误")else:user.card.is_lock = TrueUser.save_user(self.userinfo)print("密码错误超过上限,已冻结")else:print("该卡号不存在")def  get_money(self):cid = input("请输入您的卡号:")user = self.userinfo.get(cid)if user:if user.card.is_lock:print("改卡被冻结,请解锁")returncount = 0while count < 3:pwd =input("请输入你的密码")if pwd == user.card.pwd:money = int(input("请输入你要取得金额"))if  money < user.card.money :user.card.money -= moneyUser.save_user(self.userinfo)print("取款成功,余额:{}".format(user.card.money))breakelse:print("余额不足,请充值")else:count+=1print("密码错误")else:user.card.is_lock = TrueUser.save_user(self.userinfo)print("密码错误炒作上限,改卡被冻结")else:print("该卡号不存在或者输入错误")def  pass_money(self):cid = input("请输入您的卡号:")user = self.userinfo.get(cid)if user:if user.card.is_lock:print("改卡被冻结,请解锁")returncount = 0while count < 3:pwd =input("请输入你的密码")if pwd == user.card.pwd:dt_cid = input("请输入转账账号:")dt_user = self.userinfo.get(dt_cid)if dt_cid:money = int(input("请输入转账金额:"))if money < user.card.money:user.card.money -= moneydt_user.card.money += moneyUser.save_user(self.userinfo)print("转账成功")breakelse:print("余额不足")else:print("收款人卡号错误")else:count+=1print("密码错误")else:user.card.is_lock = TrueUser.save_user(self.userinfo)print("密码错误炒作上限,改卡被冻结")else:print("该卡号不存在或者输入错误")def  change_pwd(self):cid = input("请输入您的卡号:")user = self.userinfo.get(cid)if user:if user.card.is_lock:print("改卡被冻结,请解锁")returncount = 0while count < 3:pwd =input("请输入你的密码")if pwd == user.card.pwd:new_pwd = input("请输入新密码:")user.card.pwd = new_pwdUser.save_user(self.userinfo)print("修改成功")breakelse:count+=1print("密码错误")else:user.card.is_lock = TrueUser.save_user(self.userinfo)print("密码错误炒作上限,改卡被冻结")else:print("该卡号不存在或者输入错误")def  lock_user(self):cid = input("请输入您的卡号:")user = self.userinfo.get(cid)if user:if user.card.is_lock:print("改卡被冻结,请解锁")returncount = 0while count < 3:pwd = input("请输入你的密码")if pwd == user.card.pwd:user.card.is_lock = TrueUser.save_user(self.userinfo)print("冻结成功")breakelse:count += 1print("密码错误")else:user.card.is_lock = TrueUser.save_user(self.userinfo)print("密码错误炒作上限,改卡被冻结")else:print("该卡号不存在或者输入错误")def  unlock_user(self):cid = input("请输入您的卡号:")user = self.userinfo.get(cid)if user:if user.card.is_lock:print("改卡被冻结,请解锁")returncount = 0while count < 3:pwd = input("请输入你的密码")if pwd == user.card.pwd:user.card.is_lock = FalseUser.save_user(self.userinfo)print("解冻成功")breakelse:count += 1print("密码错误")else:user.card.is_lock = TrueUser.save_user(self.userinfo)print("密码错误炒作上限,改卡被冻结")else:print("该卡号不存在或者输入错误")def show_user(self):for user in self.userinfo:print(self.userinfo[user])

上面我提到的密码加密情况可以根据自得需要来决定:如果不需要加密直接在后面的判断密码代码里直接判断 : if pwd == user.card.pwd:。如果需要加密,在后面判断密码的代码需要改变判断:if Help.check_password(pwd,user.card.pwd):

#随机的银行卡号 和  md5加密 和 解密
from random import randint
import hashlib
class Help():@staticmethod#生成随机银行卡号def generate_cid(length=8):cid =''for i in range(length):cid += str(randint(0,9))return cid#  生成md5加密后的内容@staticmethoddef generate_password(password):# 创建一个md5对象m = hashlib.md5()#设置加密原始内容m.update(password.encode('utf-8'))#  返回加密后的字符串return m.hexdigest()#  校验使用md5加密的密码@staticmethoddef  check_password(pwd,pwd_hash):m = hashlib.md5()m.update(pwd.encode('utf-8'))return m.hexdigest == pwd_hashif __name__ == "__main__":print(Help.generate_password('123456'))


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部