# -*- conding:utf-8 -*-
'''
    类:
  创建一个银行类
属性:
  一个属于银行的类属性
  用来存储所有银行的开户信息,包含卡号、密码、用户名、余额
(外界不能随意访问和修改。开户时要进行卡号验证,查看卡号是否已经存在)
每个对象拥有
  卡号,密码,用户名,余额
  (外界不能随意访问和修改。)
方法:银行类拥有
         查看本银行的开户总数
          查看所有用户的个人信息(包含卡号,密码,用户名,余额)
每个对象拥有
实例化对象的时候传入相关参数
初始化对象及类属性
取钱(需要卡号和密码验证)
  通过验证卡号和密码对个人的余额进行操作,如果取钱的金额大于余额,则返回余额不足
存钱(需要卡号和密码验证)
     通过验证卡号和密码对个人的余额进行操作,返回成功
  查看个人相信信息(需要卡号和密码验证)
   返回个人的卡号、用户名、余额信息

'''
class Bank:
    #创建一个类属性,
    __Users = { } #字典 用来存储所有银行的开会信息,包含卡号、密码、用户名、余额
    def __init__(self,carId,userName,pwd,balance):
        if carId not in Bank.__Users:
            Bank.__Users[carId]={'userName':userName,'pwd':pwd,'balance':balance}
            self.__userName = userName
            self.__pwd = pwd
            self.__balance = balance
    # 查看本银行的开户总数
    @classmethod   #类方法
    def nums(cls):
        num = len(cls.__Users)
        print('银行的开户总数: %d'%num)
    #查看所有用户的个人信息(包含卡号,密码,用户名,余额)
    @classmethod
    def get_user(cls):
        for key,val in cls.__Users.items():
            print('卡号: %s \n用户名: %s \n密码: %s \n余额: %d \n'%(key,val['userName'],val['pwd'],val['balance']))
    #验证方法
    @staticmethod
    def check_user(carId,pwd):
        if( (carId  in Bank.__Users) and (pwd == Bank.__Users[carId]['pwd']) ):
            return True
        else:
            return False
    #验证金额
    @staticmethod
    def check_money(money):
        if isinstance(money,int):
            return  True
        else:
            return  False
    #取钱(需要卡号和密码验证)
    def q_money(self,carId,pwd,money):
        if Bank.check_user(carId,pwd):
            if Bank.check_money(money):
                if Bank.__Users[carId]['balance']>=money:
                    Bank.__Users[carId]['balance'] -= money
                    print('当前卡号%s,当前取款金额%d,当前余额%d'%(carId,money,Bank.__Users[carId]['balance']))
                else:
                    print('金额不足')
            else:
                print('您输入的金额有误!')
        else:
            print('卡号或密码错误!')
    #存钱
    def c_money(self,carId,pwd,money):
        if Bank.check_user(carId,pwd):
            if Bank.check_money(money):
                    Bank.__Users[carId]['balance'] += money
                    print('当前卡号%s,当前存款金额%d,当前余额%d'%(carId,money,Bank.__Users[carId]['balance']))
            else:
                print('您输入的金额有误!')
        else:
            print('卡号或密码错误!')
    #查看个人详细信息(需要卡号和密码验证)
    def getInfor(self,carId,pwd):
        if Bank.check_user(carId,pwd):

             print('当前卡号%s,当前存款金额%d,当前余额%d'%(carId,money,Bank.__Users[carId]['balance']))
        else:
            print('卡号或密码错误!')

xuyg = Bank('0000','xuyg','123',100)
xuyg.nums()
xuyg.get_user()
xuyg.q_money('0000','123',50)
xuyg.c_money('0000','123',500)