学了面向对象后,自己又写了个ATM取款系统,每个人的思路都不一样,仅供参考!
下面是建的几个包
userp是用户类,adminp是管理员及界面类,cardp是银行卡类,main是主函数,operation是ATM类,放着各种操作,同级包之间用相对导包的方式导入,使得代码更安全,然后在上一级使用run接口直接调用main类,使得用户看不到内层的具体逻辑!
废话不多说,直接上代码。
userp类
class User():
def __init__(self,name,userid,phone,card):
self.name = name
self.userid = userid
self.phone = phone
self.card = card
adminp类
import time
class View():
admin = 'admin666'
password = 'wozuishuai'
def print_view01(self):
print('*'*29)
print('{}欢迎光临我最帅银行系统{}'.format('-'*5,'-'*5))
print('*'*29)
def print_view02(self):
print('-'*31)
print('{}{}1.注册 2.查询{}{}'.format('|','-'*8,'-'*8,'|'))
print('{}{}3.存钱 4.取钱{}{}'.format('|','-'*8,'-'*8,'|'))
print('{}{}5.转账 6.改密{}{}'.format('|','-'*8,'-'*8,'|'))
print('{}{}7.锁卡 8.解卡{}{}'.format('|','-'*8,'-'*8,'|'))
print('{}{}9.补卡 0.退出{}{}'.format('|','-'*8,'-'*8,'|'))
print('-'*31)
def adminLogin(self):
adminInput = input('请输入人管理员账户:')
if adminInput != self.admin:
print('管理员账户输入错误...')
return False
passwordInput = input('请输入管理员密码:')
if passwordInput != self.password:
print('密码输入错误...')
return False
else:
print('登陆成功!页面加载中...')
time.sleep(1.5)
return True
cardp类
class Card():
def __init__(self,cardid,cardpassword,money):
self.cardid = cardid
self.cardpassword = cardpassword
self.money = money
self.cardLock = False
operation类,自己没有对密码,手机号和身份证进行位数进行判断,想加的小伙伴可自行根据逻辑添加,也可采用我上一篇图书馆里面的密码判断,就是麻烦了点…
from .cardp import Card
from .userp import User
import time,random
class ATM():
def __init__(self,alluser,lockuser):
self.alluser = alluser
self.lockuser = lockuser
# --- 判断密码输入是否正确 ----
def check_pwd(self):
cardidInput = input('请输入您的卡号:')
if cardidInput in self.alluser: # 如果卡号在用户字典中
user = self.alluser[cardidInput]
for i in range(3):
cardpassword01 = input('请输入您的密码:')
print('信息验证中...')
time.sleep(1)
if user.card.cardpassword == cardpassword01:
return user
print('密码输错三次,此卡锁定中...')
time.sleep(1.5)
del self.alluser[cardidInput] # 从用户字典中删除该用户
self.lockuser[cardidInput] = user # 将该用户添加到已锁定用户字典中
print('此卡已锁定,请前往解卡系统解冻...')
return False
else:
print('此卡号不存在,操作失败...')
return False
# ---- 开户注册 -----
def register(self):
name = input('请输入您的姓名:')
userid = input('请输入您的身份证号(18位):')
phone = input('请输入您的手机号(11位):')
money = int(input('请输入您要预存的金额:'))
if money < 0:
print('输入金额有误,开户失败。')
return False
cardpassword = input('请输入您的密码:')
# --- 验证两次密码是否相同 ---
rpassword = input('请再次输入您的密码:')
if cardpassword != rpassword:
print('您两次输入的密码不一致,开户失败!')
return False
else:
cardid = self.creatCard() # 生成随机卡号
card = Card(cardid,cardpassword,money) # 创建卡实例对象
user = User(name,userid,phone,card) # 创建用户实例对象
# ---- 存入到字典中 ---
self.alluser[card.cardid] = user
print('开户成功,请牢记开户账号:{},开户密码:{}.'.format(cardid,cardpassword))
print(self.alluser.keys())
return True
# --- 随机生成六位数卡号 ----
def creatCard(self):
while 1:
str = ''
for i in range(6):
ch = chr(random.randrange(ord('0'),ord('9')+1))
str += ch
if not self.alluser.get(str):
return str
# ----- 查询 ------
def query(self):
user = self.check_pwd()
if user:
print('账户余额查询中,请稍后...')
time.sleep(1)
print('您的余额为:{}元.'.format(user.card.money))
return True
# ----- 存钱 -----
def save_money(self):
user = self.check_pwd()
if user:
savemoney = int(input('请输入需要存的金额:'))
if savemoney < 0:
print('金额输入错误,存款失败!')
return False
else:
print('存款中,请稍后...')
time.sleep(1.5)
user.card.money += savemoney
print('存款成功,您的余额为{}元.'.format(user.card.money))
return True
# ----- 取钱 ------
def get_money(self):
user = self.check_pwd()
if user:
getmoney = int(input('请输入取款金额:'))
print('取款中,请稍后...')
time.sleep(1.5)
if 0 <= getmoney <= user.card.money:
user.card.money -= getmoney
print('取款成功!')
print('您的余额为{}元.'.format(user.card.money))
else:
print('金额输入错误,取款失败!')
return False
# ----- 转账 ------
def trans_noney(self):
user = self.check_pwd()
if user:
transcardidInput = input('请输入收款人卡号:')
print('收款人卡号验证中,请稍后...')
time.sleep(1)
if transcardidInput in self.alluser:
user01 = self.alluser[transcardidInput]
transmoney = int(input('请输入转账金额:'))
print('转账中,请稍后...')
time.sleep(1.5)
if transmoney > user.card.money:
print('余额不足,转账失败!')
return False
else:
user.card.money -= transmoney
user01.card.money += transmoney
print('转账成功,请及时通知收款人确认!')
print('您的余额为{}元.'.format(user.card.money))
return True
else:
print('收款人卡号不存在,转账失败!')
return False
# ----- 改密 ------
def change_pwd(self):
user = self.check_pwd()
if user:
newpassword01 = input('请输入新密码:')
newpassword02 = input('请再次输入密码:')
print('密码修改中...')
time.sleep(1)
if newpassword01 == newpassword02:
user.card.cardpassword = newpassword01
print('密码修改成功,请记好您的密码:{}!'.format(newpassword01))
return True
else:
print('您两次输入的密码不一致,修改密码失败!')
return False
# ------ 锁卡 -----
def lock(self):
cardid01 = input('请输入您的卡号')
if cardid01 in self.alluser:
user = self.alluser[cardid01]
userid01 = input('请输入您的身份证号:')
print('信息验证中...')
time.sleep(1)
if userid01 == user.userid:
print('此卡锁定中...')
del self.alluser[user.card.cardid]
self.lockuser[user.card.cardid] = user
time.sleep(1.5)
print('此卡已锁定,如需解冻请前往解冻系统解冻!')
return True
else:
print('您的身份证号输入错误,锁卡失败!')
return False
else:
print('此卡不存在或已被锁卡,锁卡失败!')
return False
# ------ 解卡 ------
def unlock(self):
cardid01 = input('请输入您的卡号:')
if cardid01 in self.lockuser:
user = self.lockuser[cardid01]
userid01 = input('请输入您的身份证号:')
print('信息验证中...')
time.sleep(1)
if userid01 == user.userid:
print('此卡解冻中...')
del self.lockuser[cardid01]
self.alluser[cardid01] = user
time.sleep(1.5)
print('此卡解冻成功,请文明使用银行卡!')
return True
else:
print('您输入的身份证号有误,解卡失败!')
return False
else:
print('此卡未被冻结,解卡失败!')
return False
# ------ 补卡 -----
def new_card(self):
cardid01 = input('请输入您的卡号')
if cardid01 in self.alluser:
user = self.alluser[cardid01]
userid01 = input('请输入您的身份证号:')
print('信息验证中...')
time.sleep(1)
if userid01 == user.userid:
print('卡号生成中...')
time.sleep(1.5)
res = self.creatCard() # 重新生成卡号
user.card.cardpassword = '123456' # 初始化密码123456
self.alluser[res] = user # 用原来的user对象重新生成字典
del self.alluser[cardid01] # 将原来的词典删掉用于覆盖
print('补卡成功,您的新卡号为{},初始密码为{}.'.format(res,'123456'))
return True
else:
print('您的身份证号输入错误,补卡失败!')
return False
else:
print('此卡号不存在,无需补办,如需是要用本系统服务,请前往注册系统注册!')
return False
# ------ 退出 ------
def save(self):
print('欢迎下次使用本系统!')
print('退出登陆中...')
time.sleep(1.5)
main类
from .adminp import View
from .operation import ATM
class Main():
def run(self):
view = View() # 创建view实例对象
view.print_view01() # 打印主界面
while True:
if view.adminLogin(): # 管理员登陆
break
alluser = {} # 创建正常用户字典
lockuser = {} # 创建被锁卡用户字典
atm = ATM(alluser,lockuser) # 创建ATM对象
while 1:
view.print_view02() # 打印各种操作界面
choice = input('请选择您的操作:')
if choice == '1':
atm.register() # 注册
continue
elif choice == '2':
atm.query() # 查询余额
continue
elif choice == '3':
atm.save_money() # 存钱
continue
elif choice == '4':
atm.get_money() # 取钱
continue
elif choice == '5':
atm.trans_noney() # 转账
continue
elif choice == '6':
atm.change_pwd() # 改密
continue
elif choice == '7':
atm.lock() # 锁卡
continue
elif choice == '8':
atm.unlock() # 解卡
continue
elif choice == '9':
atm.new_card() # 补卡
continue
elif choice == '0':
atm.save() # 退出
break
else:
print('指令输入错误,请重新输入!')
continue
run函数调用
from opera.main import Main
m = Main()
if __name__ == '__main__':
m.run()