Lec2 Practice银行系统

例子:账户对象

1、初始化账户类。添加姓名、余额属性
2、定义一个函数打印对象的所有属性。
3、余额不能从外部访问
4、为账户添加两个方法,分别是存钱save和取钱withdraw。再添加一个属性record,记录账户的交易记录,要求记录[交易日期,方式(create, save, withdraw),金额]。添加一个方法print_rec打印交易记录。
5、实现账户转账
6、添加对类实例的计数和列表
7、使用类方法打印所有账户信息

from datetime import datetime
class Account():
    '''银行账户'''
    acct = "Bank Account" #账户类型
    count = 0
    acctlist = []
    def __init__(self,name,balance):
        '''以账户名称、账户创立时的金额为信息创立账户'''
        self.name = name
        self.__balance = balance
        daytime = datetime.now().strftime("%Y-%m-%d %H:%M") #当前时间
        self.record = [[daytime,'creat',self.__balance]] #账户创立时的日期,姓名,金额
        Account.count += 1
        Account.acctlist.append(name)
        
    def printall(self):
        '''打印个人账户信息'''
        print('Account name:',self.name,',Account balance:',self.__balance)

    def set_dep(self,balance):
        '''修改账户金额'''
        if isinstance(balance,int) == True or \
        isinstance(balance,float) == True: #非整数和浮点数输入无效
            self.__balance = balance
        else:print('Warning:balance should be numeric')
        
    def save(self,income):
        '''存款'''
        self.__balance += income
        daytime = datetime.now().strftime("%Y-%m-%d %H:%M")
        self.record.append([daytime,'save',income])
    
    def withdraw(self,payout):
        '''取款'''        
        self.__balance -= payout
        daytime = datetime.now().strftime("%Y-%m-%d %H:%M")
        self.record.append([daytime,'withdraw',payout])
        
    def print_rec(self):
        '''打印账户交易记录'''
        for i in self.record:
            print(i)
    
    def transfer_in(self,amt):
        '''转入账户金额'''
        self.__balance += amt

    def transfer_to(self,toname,amt):
        '''转账给他人'''
        eval(f'{toname}.transfer_in(amt)')
        self.__balance -= amt
        
    @classmethod
    def print_acctlist(cls):
        '''打印所有账户列表'''
        print(f'{cls.count} accounts in total:{cls.acctlist}')

例子:

lzs = Account('lzs',1000)
lzs.save(500)
lzs.withdraw(300)
lzs.print_rec()

结果:

['2020-03-31 17:24', 'creat', 1000]
['2020-03-31 17:24', 'save', 500]
['2020-03-31 17:24', 'withdraw', 300]

定义一个子类借记账户,要求借机账户可以存入和取现但不能透支

class DebitAcct(Account):
    '''借记账户,账户不可以透支'''
    def withdraw(self,payout):
        '''取款,取款金额大于余额时,交易失败'''
        if payout > self._Account__balance: 
        #调用其他类的隐私参数时,应该加上下划线前缀和类名
            print('Warning:Operation failed with insufficient balance')
        else:self._Account__balance -= payout
        daytime = datetime.now().strftime("%Y-%m-%d %H:%M")
        self.record.append([daytime,'withdraw',payout])

例子:

bobo = DebitAcct('bobo',100)
bobo.withdraw(50)
bobo.print_rec()
DebitAcct.print_acctlist()

结果:

['2020-03-31 17:24', 'creat', 100]
['2020-03-31 17:24', 'withdraw', 50]
2 accounts in total:['lzs', 'bobo']

定义一个子类信用账户,要求信用账户可以存入和取现并允许透支,但有额度限制

class CreditAcct(Account):
    '''信用账户可以存入和取现并允许透支,但有额度限制'''
    count = 0
    acctlist = []
    def __init__(self,name,balance,limit):
        self.name = name
        self.__balance = balance
        self.limit = limit
        daytime = datetime.now().strftime("%Y-%m-%d %H:%M") #当前时间
        self.record = [[daytime,'creat',self.__balance]] #账户创立时的日期,姓名,金额
        CreditAcct.count += 1
        CreditAcct.acctlist.append(name)
    
    def withdraw(self,payout):
        '''取款''' 
        if self.__balance - payout < - self.limit:
            print('Warning:Insufficient credit limit,withdraw failed')
        else:
            self.__balance -= payout
            print(f'Successfully withdraw ${payout}')
        daytime = datetime.now().strftime("%Y-%m-%d %H:%M")
        self.record.append([daytime,'withdraw',payout])
    def set_limit(self,limit):
        self.limit = limit
        
    @classmethod
    def print_acctlist(cls):
        '''打印所有账户列表'''
        print(f'{cls.count} accounts in total:{cls.acctlist}')

例子:

xiaobo = CreditAcct('xiaobo',100,1000)
xiaobo.withdraw(500)
xiaobo.print_rec()
CreditAcct.print_acctlist()

结果:

Successfully withdraw $500
['2020-03-31 17:39', 'creat', 100]
['2020-03-31 17:39', 'withdraw', 500]
1 accounts in total:['xiaobo']
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值