Python基础阶段-项目实战之-ATM(十项)功能

该项目是一个Python基础阶段的实战,通过面向对象编程实现ATM机的十项功能,涵盖初级阶段的面向对象知识,包括主界面、视图界面、操作界面以及人和卡的类定义。代码简单易懂,适合学习交流。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

项目简介:

  • 主要考察面向对象的使用
  • 囊括了初级阶段用到的知识,考察比较全面
  • 基本没有难点

 

main(运行界面)

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(视图界面):

# 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(操作界面,功能实现页):

#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_dict.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(定义一个人类):

# 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(定义一个卡类):

# 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

 

此代码仅供学习与交流,请勿用于商业用途。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值