小项目----银行业务操作(管理员的操作)
要求实现十个功能 编号:0~9
类名: person
属性: name
userid
phone
card
类名: card
属性: cardid
password
money
类名: view
方法: login view
方法: oparation view
类名:oparation
开户(1) 查询(2)
存钱(3) 取钱(4)
转账(5) 改密(6)
锁卡(7) 解卡(8)
补卡(9) 退出(0)
#view.py
class View:
def login(self):
i = 1
while i <= 3:
name = input("请输入管理员账号:")
pwd = input("请输入管理员密码:")
if name == "admin" and pwd == "admin":
print("欢迎管理员登录")
i = 4
return True
else :
print("账号或密码输入不正确!,还有%s次机会" % (3 - i))
i += 1
def login_view(self):
print("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$")
print("$ $")
print("$ $")
print("$ Welcome To MHG Bank $")
print("$ $")
print("$ $")
print("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$")
def oparation_view(self):
print("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$")
print("$ 开户(1) 查询(2) $")
print("$ 存钱(3) 取钱(4) $")
print("$ 转账(5) 改密(6) $")
print("$ 锁卡(7) 解卡(8) $")
print("$ 补卡(9) 退出(0) $")
print("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$")
if __name__ == '__main__':
v = View()
v.login()
#person.py
class Person:
def __init__(self,name,userid,phone,cardid):
self.name = name
self.userid = userid
self.phone = phone
self.cardid = cardid
#card.py
class Card:
def __init__(self,cardid,password,money):
self.cardid = cardid
self.password = password
self.money = money
self.islock = True
#main.py
from day12.bank.view import View #路径
from day12.bank.operation import Operation
import time
v = View()
def main():
while not v.login():
print("账号冻结!等5秒后再操作!")
time.sleep(5)
v.login_view()
v.oparation_view()
o = Operation()
while True:
choice = input("请选择需要的服务项目:")
if choice == "1": # 开户
o.register()
elif choice == "2": # 查询
o.query()
elif choice == "3": # 存钱
o.save_money()
elif choice == "4": # 取钱
o.get_money()
elif choice == "5": # 转账
o.trans_money()
elif choice == "6": # 改密
o.change_password()
elif choice == "7": # 锁卡
o.lock()
elif choice == "8": # 解锁
o.unlock()
elif choice == "9": # 补卡
o.mend_card()
elif choice == "0": # 退出
o.exit_Bank()
print("欢迎下次光临!")
break
if __name__ == '__main__':
main()
#operation.py
from day12.bank.person import Person #路径
from day12.bank.card import Card
import pickle
import os
import random
class Operation:
def __init__(self):
self.users()
self.cards()
print(self.user_dict)
print(self.card_dict)
# 用户信息
def users(self):
if os.path.exists("user.txt"):
with open("user.txt","rb") as f:
self.user_dict = pickle.load(f)
else:
self.user_dict = {}
# 卡的信息
def cards(self):
if os.path.exists("card.txt"):
with open("card.txt", "rb") as f:
self.card_dict = pickle.load(f)
else:
self.card_dict = {}
# 设置密码
def get_password(self):
while True:
password = input("请输入您的六位数字密码:")
if password.isdigit() and len(password) == 6:
rpassword = input("请确认您的六位数字密码:")
if password == rpassword:
return password
else:
print("您输入的两次密码不一致,请重新输入!")
else:
print("密码格式错误,请重新输入!")
# 设置手机号
def get_phone(self):
while True:
phone = input("请输入您的十一位手机号:")
if phone.isdigit() and len(phone) == 11 and phone.startswith("1"):
return phone
else:
print("请输入正确手机号!")
# 设置身份证号
def get_userid(self):
while True:
userid = input("请输入您的十八位身份证号:")
if userid.isdigit() and len(userid) == 18 and not userid.startswith("0"):
return userid
else:
print("请输入正确身份证号")
# 设置初始存款
def get_initial_money(self):
while True:
money = input("请输入初始存款金额:")
if money.isdigit() :
return money
else:
print("请输入正确存款金额!")
# 生成六位卡号
def get_cardid(self):
while True:
# 随机生成一个卡号
cardid = random.randint(100000,999999)
if cardid not in self.user_dict:
return cardid
# 获取卡信息
def get_card_info(self):
# 用户先输入卡号
while True :
try:
cardid = int(input("请输入您的六位数字卡号:"))
break
except Exception:
print("请输入您的“六位数字”卡号!")
# 判断卡号是否存在
if cardid not in self.user_dict:
return False
else:
# 通过卡号找到用户 存储的格式为:self.user_dict[cardid] = user
user = self.user_dict[cardid]
# 然后通过用户找到卡
card = self.card_dict[user.userid]
# 返回用户的卡
return card
# 检测密码
def check_password(self,card):
i = 1
while i < 4:
# 让用户输入卡密码
while True:
try:
password = int(input("请输入你的密码:"))
break
except Exception:
print("请输入您的“六位数字”密码!")
# 如果用户输入的密码和卡的密码一致
if card.password == str(password):
return True
else:
print("账号或密码输入不正确!,还有%s次机会" % (3 - i))
i += 1
if i == 4:
card.islock = True
print("密码输入三次失败,卡已经被锁定!")
# 锁卡
def lock(self):
card = self.get_card_info()
if card:
if card.islock:
user = self.user_dict[card.cardid]
print("解锁需要核对您的身份信息!")
print("@".join(user.userid))
while True:
userid = input("请输入您的身份证号:")
if user.userid == userid:
lock = input("确认锁卡请按 1:")
if lock == "1":
card.islock = False
print("锁卡成功!")
break
else:
print("卡已被锁定!")
else:
print("卡号错误!")
# 解锁
def unlock(self):
card = self.get_card_info()
if not card:
print("卡号错误!")
else:
if card.islock:
print("卡未锁定!")
else:
if self.check_password(card):
card.islock = True
print("解卡成功!")
else:
user = self.user_dict[card.cardid]
print("解锁需要核对您的身份信息!")
print("@".join(user.userid))
while True:
userid = input("请输入您的身份证号:")
if user.userid == userid:
print("请输入新的密码!")
password = self.get_password()
card.password = str(password)
card.islock = True
print("解卡成功!")
break
else:
print("身份证号码不正确,请重新输入!")
# 开卡功能
def register(self):
name = input("请输入您的姓名:")
password = self.get_password()
phone = self.get_phone()
userid = self.get_userid()
cardid = self.get_cardid()
money = self.get_initial_money()
card = Card(cardid,password,money)
self.card_dict[userid] = card
user = Person(name,userid,phone,cardid)
self.user_dict[cardid] = user
print("恭喜%s开卡成功,卡号%s,卡内余额%s元"%(user.name,cardid,card.money))
self.exit_Bank()
# 余额查询
def query(self):
card = self.get_card_info()
if card:
if card.islock:
lock = self.check_password(card)
if lock:
print("卡内余额为%s元"%(card.money))
else:
pass
else:
print("您的卡被锁定了!")
else:
print("卡号错误!")
# 改密
def change_password(self):
card = self.get_card_info()
if card:
if card.islock:
if self.check_password(card):
while True:
while True:
try:
password = int(input("请输入六位数字新密码:"))
break
except Exception:
print("请输入您的“六位数字”密码!")
while True:
try:
rpassword = int(input("请确认六位数字新密码:"))
break
except Exception:
print("请确认您的“六位数字”密码!")
if password == rpassword:
card.password = str(password)
print("修改成功!")
break
else:
print("两次密码不一致!")
else:
print("您的卡已经被锁定,请先解卡!")
else:
print("卡号错误!")
# 存钱
def save_money(self):
card = self.get_card_info()
if card:
if card.islock:
money = int(input("请输入存款金额:"))
if money < 0:
print("输入的金额不正确!")
else:
initial_money = int(card.money)
initial_money += money
card.money = str(initial_money)
print("卡内余额为%s元" % (card.money))
else:
print("您的卡已被锁定,请先解卡")
else:
print("卡号错误!")
# 取钱
def get_money(self):
card = self.get_card_info()
if card:
if card.islock:
if self.check_password(card):
money = int(input("请输入取款金额:"))
if money < int(card.money) and money > 0:
initial_money = int(card.money)
initial_money -= money
card.money = str(initial_money)
print("卡内余额为%s元" % (card.money))
else:
print("输入的金额有误,请重新输入!")
else:
pass
else:
print("您的卡已被锁定,请先解卡")
else:
print("卡号错误!")
# 转账
def trans_money(self):
card = self.get_card_info()
user = self.user_dict[card.cardid]
if card:
if card.islock:
if self.check_password(card):
# 输入收款方的账号
otherid = int(input("请输入对方账号:"))
if otherid not in self.user_dict:
print("卡号不存在!")
else:
# 通过收款方的账号找到收款人
other_user = self.user_dict[otherid]
# 通过收款人找到卡
other_card = self.card_dict[other_user.userid]
if not other_card.islock:
print("对方卡已经被锁定,请先解卡!")
else:
money = int(input("请输入转账金额:"))
if money > 0 and money <= int(card.money):
initial_money = int(card.money)
initial_money -= money
card.money = str(initial_money)
other_initial_money = int(other_card.money)
other_initial_money += money
other_card.money = str(other_initial_money)
print("%s向%s成功转账%s元"%(user.name,other_user.name,money))
else:
print("转账金额不正确!")
else:
print("您的卡已经被锁定,请先解卡!")
else:
print("卡号错误!")
# 补卡
def mend_card(self):
userid = input("请输入身份证号:")
if userid in self.card_dict:
card = self.card_dict[userid]
# 生成一个新的卡号
new_cardid = self.get_cardid()
# 修改老用户对应的卡号
self.user_dict[new_cardid] = self.user_dict.pop(card.cardid)
# 修改卡号
card.cardid = new_cardid
print("新卡已开出,请输入新卡密码!")
new_password = self.get_password()
card.password = new_password
# 通过新卡号找到新用户
new_user = self.user_dict[new_cardid]
new_user.cardid = new_cardid
print("尊敬的用户%s,新卡号为%s,手机号:%s,身份证号:%s,卡内余额:%s"%(new_user.name,card.cardid,new_user.phone,new_user.userid,card.money))
else:
print("身份证号不存在!")
# 退出保存
def exit_Bank(self):
with open("user.txt","wb") as f:
pickle.dump(self.user_dict,f)
with open("card.txt","wb") as f:
pickle.dump(self.card_dict,f)
if __name__ == '__main__':
o = Operation()
# o.register()
# o.exit_Bank()
# o.save_money()
# o.query()
# o.get_money()
# o.change_password()
# o.mend_card()
# o.trans_money()
# o.lock()