Python练习:银行ATM系统

创建管理员类:

class Admin:
    def __init__(self,name,passwd):
        self.name = name
        self.passwd = passwd

    def login(self):
        for i in range(3):
            name = input('输入管理员账号:')
            passwd = input('输入管理员密码:')
            if name == self.name and passwd == self.passwd :
                print('登陆成功!')
                return True
            else:
                print('登录失败!')

创建用户类:

import pickle
import os
class User:
    def __init__(self,name,id,tel,card):
        self.name = name
        self.id = id
        self.tel = tel
        self.card = card
    @staticmethod
    def xieru(x):
        path =os.path.join(os.getcwd(),'a.db')
        f = open(path,'wb')
        pickle.dump(x,f)
        f.close()
    @staticmethod
    def duqu():
        path = os.path.join(os.getcwd(),'a.db')
        f = open(path,'rb')
        a = pickle.load(f)
        f.close()
        return a

银行卡类:

class Card:
    def __init__(self,num,money,pwd):
        self.num = num
        self.money = money
        self.pwd = pwd
        self.clock = False

ATM类和主程序:

from user import User
from card import Card
from admin import Admin
import random

class Atm:
    def __init__(self):
        self.user_dict = {}

    def welcome(self):
        print('*' * 30)
        print('*' + " " * 6 + '开户(1)' + '  ' + '查询(2)' + ' ' * 6 + '*')
        print("*" + " " * 6 + '取款(3)' + '  ' + '存款(4)' + ' ' * 6 + '*')
        print("*" + " " * 6 + '转账(5)' + '  ' + '改密(6)' + ' ' * 6 + '*')
        print("*" + " " * 6 + '锁定(7)' + '  ' + '解锁(8)' + ' ' * 6 + '*')
        print("*" + " " * 6 + '销户(9)' + '  ' + '退出(0)' + ' ' * 6 + '*')
        print('*' * 30)
    def mkcard(self):
        cardid = ''
        for i in range(6):
            a = str(random.randint(0,9))
            cardid += a
        return cardid

if __name__ == '__main__':

    atm = Atm()
    admin = Admin('admin','123456')


    if admin.login():
        try:
            atm.user_dict = User.duqu()
        except Exception as e:
            print(' ')
        while True:
            atm.welcome()
            print(atm.user_dict)
            choice = int(input('请输入想要执行的操作:'))
            if choice == 1:
                name = input('输入姓名:')
                cid = input('身份证号:')
                tel = input('手机号:')
                pwd1 = input('输入密码:')
                pwd2 = input('再次确认密码:')
                if pwd1 == pwd2 :
                    num = atm.mkcard()
                    money = int(input('请输入开户金额(>=10$):'))
                    if money < 10 :
                        print('金额太少,开户失败')
                        continue
                    card = Card(num,money,pwd2)
                    user = User(name,cid,tel,card)
                    atm.user_dict[num] = user
                    # User.xieru(fdy.user_dict)
                    print('开户成功,您的卡号为:%s 卡上余额%.2f:'%(num,money))
                else:
                    print('密码不一致,开户失败')


            elif choice == 2:
                num = input('请输入卡号:')
                if num in atm.user_dict:
                    user = atm.user_dict.get(num)
                    if user.card.clock == False:
                        for i in range(3):
                            pwd = input('请输入密码:')
                            if pwd == user.card.pwd:
                                print('卡号:%s 姓名:%s 手机号:%s 余额:%.2f¥'%
                                      (num,user.name,user.tel,user.card.money))
                                break
                            else:
                                print('密码错误!')
                        else:
                            print('密码错误三次,卡已被锁!')
                            user.card.clock = True

                            # '''此处切记要将字典信息再保存一遍'''
                            # User.xieru(fdy.user_dict)
                    else:
                        print('此卡已锁,请先解锁!')
                else:
                    print('卡号不存在!')
            elif choice == 3:
                num = input('请输入卡号:')
                if num in atm.user_dict:
                    user = atm.user_dict.get(num)
                    if user.card.clock == False:
                        for i in range(3):
                            pwd = input('请输入密码:')
                            if pwd == user.card.pwd:
                                qumoney = int(input('请输入取款金额:'))
                                if qumoney <= user.card.money:
                                    user.card.money-=qumoney
                                    # User.xieru(fdy.user_dict)
                                    print('取款成功!卡上余额:%.2f¥'%(user.card.money))
                                    break
                                else:
                                    print('余额不足!')
                                    break
                            else:
                                print('密码错误!')
                        else:
                            print('密码错误三次,卡已被锁!')
                            user.card.clock = True
                            # User.xieru(fdy.user_dict)
                    else:
                        print('此卡已锁,请先解锁!')
                else:
                    print('卡号不存在!')
            elif choice == 4:
                num = input('请输入卡号:')
                if num in atm.user_dict:
                    user = atm.user_dict.get(num)
                    if user.card.clock == False:
                        for i in range(3):
                            pwd = input('请输入密码:')
                            if pwd == user.card.pwd:
                                qumoney = float(input('请输入存款金额:'))
                                user.card.money += qumoney
                                # User.xieru(fdy.user_dict)
                                print('存款成功!卡上余额:%.2f¥'%(user.card.money))
                                break
                            else:
                                print('密码错误!')
                        else:
                            print('密码错误三次,卡已被锁!')
                            user.card.clock = True
                            # User.xieru(fdy.user_dict)
                    else:
                        print('此卡已锁,请先解锁!')
                else:
                    print('卡号不存在!')
            elif choice == 5:
                num = input('请输入卡号:')
                if num in atm.user_dict:
                    user = atm.user_dict.get(num)
                    if user.card.clock == False:
                        for i in range(3):
                            pwd = input('请输入密码:')
                            if pwd == user.card.pwd:
                                qumoney = float(input('请输入转账金额:'))
                                num1 = input('请输入对方卡号:')
                                if num1 in atm.user_dict:
                                    user1 = atm.user_dict.get(num1)
                                    if qumoney <= user.card.money:
                                        print('y:确认转账 n:取消转账')
                                        answer = input('')
                                        if answer == 'y':
                                            user.card.money-=qumoney
                                            user1.card.money+=qumoney
                                            # User.xieru(fdy.user_dict)
                                            print('转账成功!卡上余额:%.2f¥'%(user.card.money))
                                            break
                                        elif answer == 'n':
                                            print('已取消转账!')
                                            break
                                    else:
                                        print('金额不足!')
                                        break
                                else:
                                    print('对方卡号不存在!')
                                    break
                            else:
                                print('密码错误!')
                        else:
                            print('密码错误三次,卡已被锁!')
                            user.card.clock = True
                            # User.xieru(fdy.user_dict)
                    else:
                        print('此卡已锁,请先解锁!')
                else:
                    print('卡号不存在!')
            elif choice == 6:
                num = input('请输入卡号:')
                if num in atm.user_dict:
                    user = atm.user_dict.get(num)
                    if user.card.clock == False:
                        for i in range(3):
                            pwd = input('请输入密码:')
                            if pwd == user.card.pwd:
                                pwd1 = input('请输入新的密码:')
                                pwd2 = input('请再次输入新的密码:')
                                if pwd1 == pwd2 :
                                    user.card.pwd = pwd2
                                    # User.xieru(fdy.user_dict)
                                    print('密码修改成功!')
                                    break
                            else:
                                print('密码错误!')

                        else:
                            print('密码错误三次,卡已被锁!')
                            user.card.clock = True
                            # User.xieru(fdy.user_dict)
                    else:
                        print('此卡已锁,请先解锁!')
                else:
                    print('卡号不存在!')
            elif choice == 7:
                num = input('请输入卡号:')
                if num in atm.user_dict:
                    user = atm.user_dict.get(num)
                    pwd = input('请输入密码:')
                    if pwd == user.card.pwd:
                        user.card.clock = True
                        # User.xieru(fdy.user_dict)
                        print('卡已锁!')
                    else:
                        print('密码错误!')
                else:
                    print('卡号无效!')
            elif choice == 8:
                num = input('请输入卡号:')
                if num in atm.user_dict:
                    user = atm.user_dict.get(num)
                    pwd = input('请输入密码:')
                    if pwd == user.card.pwd:
                        user.card.clock = False
                        # User.xieru(fdy.user_dict)
                        print('卡已解锁!')
                    else:
                        print('密码错误!')
                else:
                    print('卡号无效!')
            elif choice == 9:
                num = input('请输入卡号:')
                if num in atm.user_dict:
                    user = atm.user_dict.get(num)
                    if user.card.clock == False:
                        for i in range(3):
                            pwd = input('请输入密码:')
                            if pwd == user.card.pwd:
                                print('确定要销户吗?')
                                answer = input('y/n:')
                                if answer == 'y':
                                    atm.user_dict.pop(num)
                                    print('销户成功!')
                                    User.xieru(atm.user_dict)
                                    break
                                else:
                                    print('已取消操作!')
                                    break
                            else:
                                print('密码错误!')
                        else:
                            print('密码错误三次,卡已被锁!')
                            user.card.clock = True
                            # User.xieru(fdy.user_dict)
                    else:
                        print('此卡已锁,请先解锁!')
                else:
                    print('卡号不存在!')
            elif choice == 0:
            	#程序正常退出保存数据(非正常退出则无法保存)
                User.xieru(atm.user_dict)
                break

运行效果展示:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_33722246/article/details/83268067