Python基础阶段-项目实战之-ATM(十项)功能
2019-04-30 21:46
411 查看
版权声明:本文为博主原创文章,转载请附上博文链接! https://blog.csdn.net/spring_rain_csdn/article/details/89715960
项目简介:
- 主要考察面向对象的使用
- 囊括了初级阶段用到的知识,考察比较全面
- 基本没有难点
main(运行界面)
[code]from package.view import View from package.operation import Operation import time class Main(): def run(): View.login() obj=Operation() while True: choise=input('请输入要选择的选项:').strip() if choise == '1': #注册 obj.register() elif choise == '2': #查询 obj.query() elif choise == '3': #存钱 obj.save_money() elif choise == '4': #取钱 obj.get_money() elif choise == '5': #转账 obj.trans_money() elif choise == '6': #改密 obj.change_pwd() elif choise == '7': #锁卡 obj.lock() elif choise == '8': #解卡 obj.ublock() elif choise == '9': #补卡 obj.new_card() elif choise == '0': #退出 obj.save() exit() else: View.menu() Main.run()
view(视图界面):
[code]# view 视图界面 # 登陆(管理员账号登陆),欢迎界面,操作界面 import time class View(): def login(): while True: admin_name = input('请输入管理员账号:').strip() if ' ' in admin_name: print('用户名非法!') continue else: admin_pwd = input('请输入管理员密码:').strip() if admin_name== 'admin' and admin_pwd == '123': print('**************************************************') print('* *') print('* Welcome To XXN Bank *') print('* *') print('**************************************************') time.sleep(1) View.menu() return else: print('输入的账号或密码错误!') def menu(): print('**************************************************') print('* (1)注册 (2)查询 *') print('* (3)存钱 (4)取钱 *') print('* (5)转账 (6)改密 *') print('* (7)锁卡 (8)解卡 *') print('* (9)补卡 (0)退出 *') print('* 其他返回主菜单 *') print('**************************************************')
operation(操作界面,功能实现页):
[code]#operation类(具体的操作功能实现) # 把我们需要的十个功能都放在这个类里 from .card import Card from .person import Person from .view import View import os,pickle,random,time class Operation(): #初始化加载用户信息 def __init__(self): self.load_user() self.load_user_id() #读取用户信息 卡号:用户 def load_user(self): if os.path.exists('user.txt'): with open('user.txt','rb') as f: self.user_dict=pickle.load(f) else: self.user_dict={} #读身份id卡信息 身份证:卡号 def load_user_id(self): if os.path.exists('userid.txt'): with open('userid.txt','rb') as f: self.user_id_dict=pickle.load(f) else: self.user_id_dict={} # 获取银行卡号 def get_card_id(self): while True: id_card = str(random.randint(100000, 999999)) if id_card not in self.user_dict: return id_card # 获取密码 def get_pwd(self): while True: pwd1 = input('请输入密码:').strip() pwd2 = input('请确认密码:').strip() if pwd1 == pwd2 and pwd2!='': return pwd2 else: print('您的输入不合法!,请查证!') # 获取身份证id def userid(self): while True: print('尊敬的用户:') time.sleep(1) print('\t您好,为了提升服务效率,ATM机仅支持一人一卡! 感谢您的理解!') print('如需办理多卡,请咨询银行前台,谢谢您的支持!😙') userid = input('请输入您的身份证号(6位):').strip() if len(userid) < 6 or len(userid) > 6: print('输入位数不对哟!温馨提示:需要6位哟~') continue elif userid[-1] == 'X' and userid.count('X')==1: return userid elif len(userid) == 6 and userid.isdigit() == True: return userid else: print('您输入的有误,请查证后再次输入!') print('温馨提醒:如末位是X,请大写X!') continue # 获取手机号 def phone(self): print('********温馨提示:输入界面按1回车返回主目录********') while True: phone = input('输入您的手机号(5位纯数字):').strip() if len(phone) < 5 or len(phone) > 5: print('位数不对!需要5位') continue elif phone.isdigit() == False: print('必须为5位纯数字') continue else: return phone # 注册 def register(self): while True: print('*********************注册账号*********************') time.sleep(0.2) print('**************支持中/英文,不支持空格**************') name=input('请输入注册用户名:').strip() if ' 'in name or name.isspace(): print('温馨提示:用户名不合法!请查证后再次输入!') continue else: user_id=self.userid() phone=self.phone() pwd=self.get_pwd() money=10 card_id=self.get_card_id() card = Card(card_id,pwd,money) person = Person(name,user_id,phone,card) self.user_dict[card_id]=person self.user_id_dict[user_id] = card_id print('尊敬的:{},您已开户成功,卡号为:{},余额为{:,}元'.format(name,card_id,money)) return # 查询 def query(self): print('*********************开始查询*********************') time.sleep(0.2) #返回卡对象 ex_card = self.get_card_info() if ex_card: if ex_card.islock: print('您的卡状态: 冻结!') else: if self.check_pwd(ex_card): print('余额为:{:,}'.format(ex_card.money)) #检测密码 def check_pwd(self,card): count = 3 while count>0: pwd = input('请输入您的密码:').strip() if pwd == card.password: return True else: count -= 1 print('密码错误,你还有{}次机会'.format(count)) print('您的卡状态调整为: 冻结!') card.islock=True #卡是否存在 def get_card_info(self): count = 2 while True: input1 = input('请输入卡号: ') if input1 in self.user_dict: user = self.user_dict[input1] card = user.card return card else: count -= 1 print('您输入的卡号不存在! 还有{}次机会'.format(count)) if count==0: break def save_money(self): #存钱 print('*********************存钱操作*********************') time.sleep(0.2) card=self.get_card_info() if card: if card.islock: print('您的卡状态: 冻结!') elif card.islock==False: print('用户名为:',self.user_dict[card.cardid].name) caozuo=input('按1存款,其他返回上一层:') if caozuo=='1': cun_cash=input('输入要存款的金额:').strip() if cun_cash.isdigit(): card.money += int(cun_cash) print('存入成功,您的账户余额为:{:,}元'.format(card.money)) else: print('输入不合法!') # 取钱 def get_money(self): print('*********************取出现金*********************') time.sleep(0.2) card = self.get_card_info() if card: if card.islock==True: print('您的卡状态: 冻结! 请解锁后使用!') else: if self.check_pwd(card): print('用户名为:', self.user_dict[card.cardid].name) qu_cash = input('输入要取款的金额:').strip() if qu_cash.isdigit()==True and card.money - int(qu_cash)>=0 : card.money -= int(qu_cash) print('取出{}成功,您的账户余额为:{:,}元'.format(qu_cash,card.money)) else: print('输入不合法!或可取余额不足!') else: return # 转账 def trans_money(self): print('*********************进行转账*********************') time.sleep(0.2) print('**************确认对方身份,谨防上当受骗*************') card = self.get_card_info() if card: if card.islock: print('您的卡状态: 冻结! 请解锁后使用!') else: if self.check_pwd(card): print('当前转出账户为:', self.user_dict[card.cardid].name, '请在下方输入收账卡号(☄⊙ω⊙)☄') # 验证对方账号 card1 = self.get_card_info() if card1.islock: print('对方的卡状态: 冻结!') elif card == card1: print('喜提彩蛋,非法操作!') elif card1.islock==False: print('请核验:对方卡号为 {},注册名 *{}'.format(card1.cardid,self.user_dict[card1.cardid].name[-2:])) trans_cash = input('请输入要转账的金额:').strip() if trans_cash.isdigit() == True and card.money - int(trans_cash) >= 0: #自己钱减少 card.money -= int(trans_cash) #对方钱增加 card1.money += int(trans_cash) print('转出{:,}元成功,您的账户余额为:{:,}元'.format(int(trans_cash), card.money)) else: print('输入不合法!或可取余额不足!') #判断新密码是否相等合法 def check_change_pwd(self,card): while True: pwd1 = input('请输入修改密码:').strip() pwd2 = input('请确认修改密码:').strip() if pwd1 == pwd2 and pwd1 != '': card.password = pwd2 print('修改成功,牢记您的密码,请勿交给他人!') return pwd2 else: print('您的输入不合法!请查证后再次输入!') # 改密 def change_pwd(self): print('*********************改密操作*********************') time.sleep(0.2) #卡存在 card = self.get_card_info() if card: choice = input('1.原密码改密 2.身份证改密') if choice=='1': if self.check_pwd(card): self.check_change_pwd(card) elif choice=='2': res = self.userid() #根据卡号找身份证号 if res == self.user_dict[card.cardid].userid: self.check_change_pwd(card) else: print('你是假的吧!') else: print('输入不合法!') def lock(self): #锁卡 print('*********************紧急锁卡*********************') time.sleep(0.1) card1 = self.get_card_info() if card1: if card1.islock==False: print('您的卡状态: 未冻结') choice=input('1) 使用密码冻结 2) 使用身份证冻结') if choice == '1': if self.check_pwd(card1): card1.islock=True print('您的卡冻结成功!') return elif choice == '2': res = self.userid() # 根据卡号找身份证号 if res == self.user_dict[card1.cardid].userid: card1.islock = True print('您的卡冻结成功!') return else: print('你是假的吧!') elif card1.islock==True: print('您的卡状态: 冻结') return def ublock(self): #解卡 print('*********************解卡操作*********************') time.sleep(0.2) card2 = self.get_card_info() if card2: if card2.islock==False: print('您的卡状态: 未冻结') elif card2.islock==True: print('您的卡状态: 冻结') choice = input('1) 使用密码解冻 2) 使用身份证解冻') if choice == '1': if self.check_pwd(card2): card2.islock = False print('您的卡解冻成功!') return elif choice == '2': res = self.userid() # 根据卡号找身份证号 if res == self.user_dict[card2.cardid].userid: card2.islock = False print('您的卡解冻成功!') return else: print('你是假的吧!') def new_card(self): #补卡 print('*********************操作补卡*********************') time.sleep(0.2) user_id = self.userid() #调用userid检查输入身份证号是否合法 if user_id in self.user_id_dict: #根据输入的身份证号去user_id_dict字典里找: old_card = self.user_id_dict[user_id] #根据id键,获取卡号值. person1 = self.user_dict[old_card] #通过银行卡行获取用户对象 self.user_id_dict.pop(user_id) # 使用pop函数删除字典中的身份证号键及对应卡号值 self.user_di 130a7 ct.pop(old_card) new_idcard = self.get_card_id() # 使用get_card_id获取新卡号 self.user_id_dict[user_id] = new_idcard # 并把新卡号和原用户对象赋给字典更新: self.user_dict[new_idcard]=person1 print('您的新卡号为:{}'.format(new_idcard)) else: print('没有找到,是不是来错银行了~') def save(self): #保存 print('*********************保存退出*********************') time.sleep(0.2) with open('user.txt','wb')as f: pickle.dump(self.user_dict,f) with open('userid.txt','wb')as f: pickle.dump(self.user_id_dict,f) print('*************感谢您的使用,请收好您的卡片************')
person(定义一个人类):
[code]# 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
card(定义一个卡类):
[code]# 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
此代码仅供学习与交流,请勿用于商业用途。
相关文章推荐
- Python爬虫开发与项目实战 2:Web前端基础
- Python基础-项目实战-day10 用户注册与登陆
- Python基础入门-函数实战登录功能
- 零基础新手的Python入门实战宝典(四) —— 如何实现一个想要的功能?(方法或函数)
- python3完全零基础入门项目实战(完整)
- 2019最新尚硅谷Python项目+AI课程+核心基础项目实战
- 2019最新零基础21天搞定Python分布式爬虫(分布式网络爬虫入门进阶项目实战)
- Python基础-项目实战-Day 12 - 编写日志列表页
- Python 3 视频 高级运维 Django 基础进阶高级 项目实战全新教程
- Python 基础-项目实战-day 13 Android客户端开发(项目完结)
- python基础项目实战:基于yagmail库实现三行代码发送邮件
- 最新清华学霸尹成Python基础+爬虫项目实战(完整)
- 【实战\聚焦Python分布式爬虫必学框架Scrapy 打造搜索引擎项目笔记】第3章 爬虫基础知识回顾
- 10年开发工程师带你Python从零基础到项目实战
- Python基础-项目实战-day8新增API
- 2019最新传智黑马Python人工智能项目实战(基础+就业+面试)
- Python基础 字典类型实战项目
- Python爬虫开发与项目实战——基础爬虫分析
- 老男孩Python培训第八期 (基础WEB运维项目实战)
- 基础爬虫框架及运行(选自范传辉Python爬虫开发与项目实战)