ATM机小程序

程序目录结构1:

 

 package目录:

 

 程序入口文件main.py

from package.view import View
from package.operation import Operation

class Main():
    @staticmethod
    def run():
        if View.login():
            obj=Operation()
            while True:
                choice = input("【请选择需要办理的业务】:")
                if choice == "1":
                    obj.register()
                elif choice == "2":
                    obj.query()
                elif choice == "3":
                    obj.save_money()
                elif choice == "4":
                    obj.get_money()
                elif choice == "5":
                    obj.trans_money()
                elif choice == "6":
                    obj.change_pwd()
                elif choice == "7":
                    obj.lock()
                elif choice == "8":
                    obj.unlock()
                elif choice == "9":
                    obj.new_card()
                elif choice == "0":
                    obj.save()
                    break
                else:
                    print("【您输入的业务指令有误,请重新选择】:")
                    
if __name__ == "__main__":
    Main.run()

程序界面文件: view.py

import time
class View():
    def login():
        name = input("【请输入管理员账户】:")
        pwd = input("【请输入管理员密码】:")
        if name == "admin" and pwd == "888":
            welcomeview()
            time.sleep(0.1)
            operationview()
            return True
        else:
            print("【管理员账号或密码不正确】")
            
def welcomeview():
    print("+"*40)
    print("+                                       +")
    print("+                                       +")
    print("+        Welcome To AI Bank               +")
    print("+                                       +")
    print("+                                       +")
    print("+"*40)
    
def operationview():
    print("+"*40)
    print("+        (1)开户          (2)查询           +")
    print("+        (3)存钱          (4)取钱           +")
    print("+        (5)转账          (6)改密           +")
    print("+        (7)锁卡          (8)解卡           +")
    print("+        (9)补卡          (0)退出           +")
    print("+"*40)

卡类card.py

class Card():
    def __init__(self,cardid,password,money):
        self.cardid = cardid
        self.password = password
        self.money = money
        self.islock = False    

身份信息类person.py

class Person():
    def __init__(self,name,userid,phone,card):
        self.name = name
        self.userid = userid
        self.phone = phone
        self.card = card
        

各种功能类: operation.py

# ### operation 操作类
import re
import pickle
import os
import random
import time
from .card import Card
from .person import Person
class Operation():
    def __init__(self):
        self.load_user()
        self.load_userid()
    
    def load_user(self):
        if os.path.exists("user.txt"):
            with open("user.txt",mode="rb") as fp:
                self.user_dict = pickle.load(fp)
        else:
            self.user_dict = {}
        print(self.user_dict)
    
    
    def load_userid(self):
        if os.path.exists("userid.txt"):
            with open("userid.txt",mode="rb") as fp:
                self.userid_dict = pickle.load(fp)
        else:
            self.userid_dict = {}
        print(self.userid_dict)
        
        
    def save(self):
        with open("user.txt",mode="wb") as fp:
            pickle.dump(self.user_dict,fp)
        with open("userid.txt",mode="wb") as fp:
            pickle.dump(self.userid_dict,fp)
            
    def register(self):
        name = self.get_name()
        userid=self.get_userid()
        phone=self.get_phone()
        password = self.get_cwd()
        cardid = self.get_cardid()
        money=10
        card=Card(cardid,password,money)
        user=Person(name,userid,phone,card)
        self.user_dict[cardid]=user
        self.userid_dict[userid]=cardid
        
        print("【恭喜{}开卡成功,您的卡号为{},卡内余额{}元】".format(name,cardid,money))
    
    def get_name(self):
        while True:
            name = input("【请输入你的姓名(不能为空)】:")
            res = re.findall("^\S+$",name)
            if res == []:
                print("【您输入的姓名格式不对】")
            else:
                return name

    def get_userid(self):
        while True:
            userid=input("【请输入您的身份证号】:")
            res = re.findall('^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$',userid)
            if res == []:
                print("【您输入的身份证号码格式不对】")
            else:
                if userid not in self.userid_dict:
                    return userid
                else:
                    print("【您的身份证号码已有关联卡】")
                
    def get_phone(self):
        while True:
            phone = input("【请输入您的手机号】:")
            res = re.findall("^1[3-9]\d{9}$",phone)
            if res == []:
                print("【您输入的手机号格式不对】")
            else:
                return phone
 
    def get_cwd(self):
        while True:
            pwd1 = input("【请输入您的密码(长度6位,不能含有空格)】:")
            res = re.findall("^\S{6}$",pwd1)
            if res != []:
                pwd2 = input("【请确认您的密码】")
                if pwd1 == pwd2:
                    return pwd1
            else:
                print("【两次密码不一致,请重新输入】")
        else:
                print("【你输入的密码不满足要求】")
    def get_newcwd(self):
        res = True
        while res:
            pwd1 = input("【请输入您的新密码(长度6位不能为空),按q退出改密模式】")

            if pwd1.upper() == "Q":
                res = False
                break
            else:
                pwd2 = input("【请确认您的新密码】")
                if pwd1 == pwd2:
                    #return 直接终止当前函数,后面的代码不执行
                    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.getcard_info()
        if  not card:
            print("对不起,你的卡不存在")
        else:
            if card.islock:
                print("对不起您的卡被锁了")
            else:
                if self.check_pwd(card):
                    print("【你的卡余额是{}元】".format(card.money))
                    

    def getcard_info(self):
        cardid = input("【请输入你的卡号】:")
        if cardid not in self.user_dict:
            return False
        else:
            user = self.user_dict[cardid]
            return user.card
    def getaccount_info(self):
        cardid = input("【请输入你要转账的对方卡号】")
        if cardid not in self.user_dict:
            return False
        else:
            user = self.user_dict[cardid]
            return user.card
    def check_pwd(self,card):
        count = 1
        while count < 4:
            pwd = input("【请输入密码】:")
            if pwd == card.password:
                return True
            else:
                print("【密码错误,您还剩余%d次机会】" % (3-count))
                if count == 3:
                    card.islock = True
                    print("【抱歉,因为密码错了三次,你的卡被锁了】")
                    
            count += 1
    def check_id(self,card):
        userid = input("【请输入您的身份证号码】:")
        if userid == self.user_dict[card.cardid].userid:
            return True
        else:
            print("【身份证号不正确】")
        
    def save_money(self):
        card = self.getcard_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("【请输入您的存款金额】:")
                    if str_money.isdecimal():
                        money = int(str_money)
                        #充值
                        card.money += money
                        print("【成功存入%s元】" % (money))
                    else:
                        print("【你输入的金额有误】") 
    def lock(self):
        card = self.getcard_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("【请输入您的身份证号】:")
                user = self.user_dict[card.cardid]
                if userid == user.userid:
                    card.islock = True
                    print("+-------------- 锁卡成功 --------------+")
            else:
                print("+--------------- 锁卡失败 ----------------+")
                
    def unlock(self):
        card = self.getcard_info()
        if not card:
            print("抱歉,您的卡不存在")
        else:
            if self.check_id(card):
                key_sure = input("确认解卡请按1,按任意键返回上一层!")
                if key_sure == "1":
                    card.islock = False
                    print("+----------------- 解卡成功 ---------------+")
                else:
                    print("+---------------- 解卡失败 ----------------+")
            else:
                print("+------------------- 解卡失败 -------------------+")
  
    def get_money(self):
        card = self.getcard_info()
        if not card:
            print("抱歉您的卡不存在")
        else:
           
            if card.islock:
                print("对不起,您的卡被锁住了")
            else:
                if self.check_pwd(card):
                
                    user = self.user_dict[card.cardid]
                    print("您的卡用户名:%s" % (user.name))
                    key_sure = input("【确认取钱请按1,按任意键返回上一层!】")
                    if key_sure == "1":
                        str_money = input("【请输入您的取款金额】:")
                        if str_money.isdecimal():
                            money = int(str_money)
                            if money <= card.money:
                          
                                card.money -= money
                                print("【成功取出%s元,余额%s元】" % (money,card.money))
                            else:
                                print("【卡余额不足】")   
                        else:
                            print("【你输入的金额有误】") 
                        

    def trans_money(self):
        card = self.getcard_info()
        if not card:
            print("【抱歉您的卡不存在】")
        else:
            if card.islock:
                print("【对不起,您的卡被锁住了】")
            else:
                if self.check_pwd(card):
                    account = self.getaccount_info()
                    if not card:
                        print("【抱歉转账账户不存在或者格式有误】")
                    else:
                        if account.islock:
                            print("【对不起,对方账户被锁住了】")
                        elif account.cardid == card.cardid:
                            print("【对不起,不可以自己给自己转账】")
                        else:
                            user = self.user_dict[card.cardid]
                            print("【您的卡用户名:%s】" % (user.name))
                            key_sure = input("【确认转账请按1,按任意键返回主菜单!】")
                            if key_sure == "1":
                                str_money = input("【请输入您的转账金额】:")
                                if str_money.isdecimal():
                                    money = int(str_money)
                                    if money <= card.money:
                                       
                                        card.money -= money
                                        account.money += money
                                        print("【成功转账%s元,余额%s元】" % (money,card.money))
                                    else:
                                        print("【卡余额不足】")   
                                else:
                                    print("【你输入的金额有误】")    
    #(6)改密
    def change_pwd(self):
        card = self.getcard_info()
        if not card:
            print("【抱歉,您的卡不存在】")
        else:
            num = input("【1.使用原密码改密  2.使用身份证改密】")
            if num == "1":
                if self.check_pwd(card):
                    card.password = self.get_newcwd()
                    print("+------------- 密码修改成功! --------------+")
            elif num == "2":
                userid =  input("请输入您的身份证号:")
                user = self.user_dict[card.cardid]
                if userid == user.userid:
                    card.password = self.get_newcwd()
                    print("+-------------- 改密成功 ----------------+")
                else:
                    print("+--------------- 身份证不匹配,改密失败 --------------+")
            else:
                print("+-------------- 输入数字不对,改密失败 -------------+")

    #(9)补卡
    def new_card(self):
        card = self.getcard_info()
        if not card:
            print("【抱歉,您的卡不存在】")
        else:
            if self.check_pwd(card) and self.check_id(card):
                
                cardid_new = self.get_cardid()
                time.sleep(1)
                print("【已冻结原卡并获取新卡,接下来请为新卡设置密码】")
               
                password_new = self.get_cwd()
              
                money_new=card.money
               
                card_new = Card(cardid_new,password_new,money_new)
               
                user = self.user_dict[card.cardid]
                user.card = card_new
            
                self.user_dict[cardid_new] = user
              
                self.userid_dict[user.userid]=cardid_new
                card_new.islock = False
             
                self.user_dict.pop(card.cardid)
                print("【恭喜{}补卡成功,您的新卡号为{},卡内余额{}元】".format(user.name,cardid_new,money_new))
            else:
                print("【补卡失败】") 

 

posted @ 2022-01-19 17:15  urls  阅读(48)  评论(0编辑  收藏  举报