取钱:卡是否存在,是否冻结,取钱金额是否正确
转账:把一个卡里的钱转到其他卡内 (卡是否存在,是否冻结,对方账户是否存在,转账的金额是否正确)
改密:(1)原密码改密 (2)身份证改密
解卡:判断卡号和身份证是否正确在选择解卡
补卡:将旧用户的所有信息和新卡绑定(包括名字,余额等所有卡信息和用户信息,数据重新绑定)
# 类型要判断
姓名不能为空,
密码6位包含字母数字大小写,
身份证号用正则匹配且不能为空,一个身份证号只能注册一次不能重复.
不能给自己转账
from ATM.package.view import View
from ATM.package.operation import Operation
class Main():
@staticmethod
def run():
if View.login():
obj= Operation()
while True:
name=input("请输入您要办理的序号")
if name=="1":
obj.register()
elif name=="2":
obj.query()
elif name=="3":
obj.save_money()
elif name=="4":
obj.Withd_money()
elif name=="5":
obj.Transfer_counts()
elif name=="6":
obj.Modify_density()
elif name=="7":
obj.lock()
elif name=="8":
obj.unlock()
elif name=="9":
obj.new_card()
elif name=="0":
obj.save()
break
if __name__ == '__main__':
Main.run()
# ###建立卡类
# card卡类:
# 卡号,密码,余额,锁定状态
# cardid , password , money , islock
class Card():
def __init__(self,cardid,password,money):
self.cardid=cardid
self.password =password
self.money=money
self.islock=False
###建立用户类person
# person 用户类:
# 用户名 身份证号 手机号 卡
# name userid phone card
class Person():
def __init__(self,name,userid,phone,card):
self.name=name
self.userid=userid
self.phone=phone
self.card=card
### view 视图类
# 登录, 打印欢迎界面 , 打印操作界面
import time
class View():
def login():
user=input('请输入登录账号:')
pwd=input("请输入用名密码")
if user=="admin" and pwd =="111":
# 打印欢迎页面
View.longin_view()
#设置延迟一秒
time.sleep(1)
# 打印操作页面
View.operation_view()
return True
else:
print("抱歉,你的账户或密码不正确")
def longin_view():
print("%s" % ('=' * 50))
print()
print('%25s' % ('欢迎来到界面'))
print()
print("%s" % ("=" * 50))
def operation_view():
print("%s" % ('=' * 50))
print("%20s %-40s" % ('开户:(1)','查询:(2)'))
print("%20s %-40s" % ( '存钱:(3)','取钱:(4)'))
print("%20s %-40s" % ( '转账:(5)','改密:(6)'))
print("%20s %-40s" % ( '锁卡:(7)','解卡:(8)'))
print("%20s %-40s" % ('补卡:(9)','退出:(0)'))
print("%s" % ('=' * 50))
if __name__ == '__main__':
View.login()
### operation 操作类
# 把十个功能都在operation里面完成实现
import pickle
import os
import random
from .person import Person
from.card import Card
import re
class Operation():
# 当进入到系统的时,优先把数据库中的数据拿出来
def __init__(self):
self.load_user()
self.load_userid()
# {卡号:用户}
print(self.user_dict)
# (身份证号:卡号)
print(self.user_id_dict)
# 加载{卡号:用户} 字典数据
def load_user(self):
if os.path.exists("user.txt"):
with open("user.txt","rb") as fp:
self.user_dict = pickle.load(fp)
else:
self.user_dict = {}
# 加载{身份证号:卡号} 字典数据
def load_userid(self):
if os.path.exists("userid.txt"):
with open("userid.txt","rb") as fp:
self.user_id_dict = pickle.load(fp)
else:
self.user_id_dict = {}
# 当点击退出时,把数据重新更新到数据库
def save(self):
with open("user.txt", "wb") as fp:
pickle.dump(self.user_dict,fp)
with open("userid.txt","wb") as fp:
pickle.dump(self.user_id_dict,fp)
# 开户注册
def register(self):
while True:
name = input("请输入您的姓名:")
if name=='':
print("账号不能为空请从新输入")
else:
break
while True:
phone = input("请输入您的身份证号码(18位):")
obj = re.search("[1-9][\d+]{16}.", phone)
if obj == None:
print("输入身份证号码有误():")
else:
userid = obj.group()
break
while True:
phone = input("请输入您的手机号(11位):")
obj = re.search("^1[\d+]{10}", phone)
if obj == None:
print("请输入以1开头11位手机号")
else:
phone=obj.group()
break
# userid = input("请输入您的身份证号:")
# phone = input("请输入您的手机号码:")
if name == userid == phone == "":
print('您输入的信息有误请从新输入')
else:
# 获取密码
password =self.get_pwd()
# 获取卡号
cardid =self.get_cardid()
money =10
# 创建一张卡
card =Card(cardid,password,money)
# 创建一个用户
user =Person(name,userid,phone,card)
# 更新字典
self.user_dict[cardid]=user
self.user_id_dict[userid]=cardid
print("恭喜%s开卡成功,您的卡号为:%s,卡内余额%s元"%(name,cardid,money))
# 获取密码
def get_pwd(self):
while True:
pwd1 = input("请输入密码:").strip()
pwd2 = input("请再次输入密码:").strip()
if pwd1 ==pwd2 and pwd1!="":
return pwd1
else:
print('您输入两次密码不一致,请从新输入:')
# 获取卡号
def get_cardid(self):
while True:
cardid =str(random.randrange(100000,1000000))
# 如果当前不在字典中,证明卡号可用
if cardid not in self.user_dict:
return cardid
# 查询(得有卡信息才能查询)
def query(self):
card =self.get_card_info()
if not card:
print("抱歉,输入卡号不存在")
else:
if card.islock:
print("抱歉,您的卡被锁住了")
else:
# 卡没有被锁住的情况下,让用户输入密码
if self.check_pwd(card):
print('您卡内余额是%s元'%(card.money))
#卡的信息
def get_card_info(self):
cardid =input("请输入您的卡号信息:")
if cardid not in self.user_dict:
return False
else:
user =self.user_dict[cardid]
card =user.card
return card
#检测密码(输入三次后锁卡)
def check_pwd(self,card):
count =1
while count<4:
pwd = input("请输入您的密码:").strip()
if pwd == card.password:
return True
else:
# 剩余次数 =总次数 - 已经有的次数
print('密码错误,还剩余%s次机会'%(3-count))
if count==3:
card.islock=True
print('抱歉,您输入密码次数已超过三次,卡已锁住')
count+=1
# 存钱业务
def save_money(self):
card=self.get_card_info()
if not card:
print('抱歉,您的卡不存在')
else:
if card.islock:
print('抱歉,卡已锁住,请先解锁')
else:
user = self.user_dict[card.cardid]
print("您这张卡的用名名是:%s"%(user.name))
key_sure=input("确认存款请按 1 ,任意键返回上一层")
if key_sure =="1":
str_money=input("请输入您要存款金额").strip()
if str_money.isdecimal():
money=int(str_money)
card.money+=money
print("成功存入金额%s"%(money))
else:
print('您输入的金额有误')
# 取款业务
def Withd_money(self):
card=self.get_card_info()
if not card:
print('抱歉,您的卡不存在')
else:
if card.islock:
print("抱歉,卡已锁住,请先解锁")
else:
pwd=self.check_pwd(card)
wd_money=input("请输入取款金额:")
if wd_money.isdecimal():
money=int(wd_money)
if money>card.money:
print('您的余额不足,请从新输入:')
else:
card.money-=money
print("您已成功取款%s元,卡内余额%s元"%(money,card.money))
# 转账业务
def Transfer_counts(self):
card=self.get_card_info()
if not card:
print('抱歉,您的卡不存在')
else:
if card.islock:
print('抱歉,卡已锁住,请先解锁')
else:
self.check_pwd(card)
Other_party=input('请输入对方卡号:')
if Other_party == card.cardid:
print("抱歉,账号不能为空或给自己转账")
return False
if Other_party not in self.user_dict:
print("抱歉,账号不能为空或给自己转账")
return False
else:
user = self.user_dict[Other_party]
Other_party= user.card
count=input("您将给%s进行转账,确认请按 1 返回按任意键"%(user.name))
if count=="1":
Other_count = input("请输入转账金额:")
Other_count=int(Other_count)
if card.money<Other_count:
print("抱歉,您的余额不足")
else:
# 原账号减掉的剩余的钱
card.money-=Other_count
# 对方账号
Other_party.money+=Other_count
print("您已经成功向%s转账%s元"%(user.name,Other_count))
else:
return False
# 改密
def Modify_density(self):
card=self.get_card_info()
if not card:
print('抱歉,你的卡不存在')
else:
if card.islock:
print('抱歉,卡已锁住,请先解锁后才能更改密码')
else:
Modify_count=input("请选择改密方式: (1) 原密修改 (2) 身份证信息验证")
if Modify_count=="1":
self.check_pwd(card)
card.password=self.get_pwd2()
print("=======改密成功=======")
elif Modify_count =="2":
while True:
Modify_userid=input("请输入您的身份证号码:")
# user=self.userid_dict[card.cardid]
user=self.user_dict[card.cardid]
if Modify_userid ==user.userid:
self.check_pwd(card)
card.password = self.get_pwd2()
print("=======改密成功=======")
break
else:
print("您输入身份证号码有误请从新输入")
# 设置更改新密码 self.userid_dict[userid]
def get_pwd2(self):
while True:
pwd1 = input("请输入新密码:").strip()
pwd2 = input("请再次输新密码:").strip()
if pwd1 ==pwd2 and pwd1!='':
return pwd1
else:
print('您输入两次密码不一致,请从新输入:')
# 锁卡业务
def lock(self):
card =self.get_card_info()
if not card:
print('抱歉.卡不存在')
else:
num =input('1:使用密码冻结 2:使用身份证号冻结')
if num =="1":
if self.check_pwd(card):
card.islock=True
print('=======锁卡成功=======')
elif num =="2":
userid =input('请输入您身份证号码:').strip()
user =self.user_dict[card.cardid]
if userid == user.userid:
card.islock =True
print('=======锁卡成功=======')
else:
print('=======锁卡失败=======')
# 解卡
def unlock(self):
card =self.get_card_info()
if not card:
print("抱歉,卡不存在")
else:
userid=input('请输入您的身份证号')
user =self.user_dict[card.cardid]
if userid == user.userid:
card.islock=False
print("=======解卡成功=======")
else:
print("=======解卡失败=======")
# 补卡
def new_card(self):
card =self.get_card_info()
if not card:
print('抱歉,卡不存在')
else:
if card.islock:
print('抱歉,卡已锁住,请先解锁后才能更补卡')
else:
userid=input("请输入身份证号:")
user=self.user_dict[card.cardid]
if userid==user.userid and userid!="":
# print(card.cardid)
del self.user_dict[card.cardid]
card.cardid=self.get_cardid()
self.user_dict[card.cardid] = user
self.user_id_dict[userid] = card.cardid
print('补卡成功,补卡号为:%s,当前余额为%s元'%(card.cardid,card.money))