【Lua】题目小练10

发布于:2025-08-14 ⋅ 阅读:(21) ⋅ 点赞:(0)

题目要求

实现一个 BankAccount 类和一个 SavingsAccount 类:

BankAccount 类

  1. 私有方法:validateAmount(amount)

    • 检查金额是否为正数(返回布尔值)

    • 不能被外部和子类直接访问

  2. 公有方法:

    • deposit(amount):存款

      • 调用 validateAmount 验证金额

      • 有效则增加余额并打印成功信息

      • 无效则打印错误信息

    • withdraw(amount):取款

      • 验证金额并检查余额是否足够

      • 有效则减少余额并打印成功信息

      • 无效则打印错误信息

  3. 属性:

    • balance(余额):初始化为0,外部不能直接修改

SavingsAccount 类(继承自 BankAccount)

  1. 重写 withdraw 方法:

    • 在调用父类的 withdraw 前检查:

      • 取款后余额是否 >= 100(储蓄账户最低余额要求)

      • 如果低于100则打印错误信息

      • 否则调用父类的 withdraw

--BankAccount.lua--
local BankAccount = {}
BankAccount.__index = BankAccount

local function validateAmount(amount)
    return type(amount) == "number" and amount > 0 and true or false
end

function BankAccount:new()
    local obj = {
        balance = 0
    }
    setmetatable(obj, self)
    self.__index = self
    return obj
end

function BankAccount:deposit(amount)
    if validateAmount(amount) then
        self.balance = self.balance + amount
        print("成功存入:"..amount..",当前余额:"..self.balance)
    else
        print("金额有误,请确认金额数大于0")
    end
end

function BankAccount:withdraw(amount)
    if validateAmount(amount) then
        if self.balance >= amount then
            self.balance = self.balance - amount
            print("成功取款:"..amount..",当前余额为:"..self.balance)
        else
            print("余额不足")
        end
    else
        print("金额有误,请确认金额数大于0")
    end
end

return BankAccount
--SavingsAccount.lua--

local BankAccount = require("BankAccount")

local SavingsAccount = {}
SavingsAccount.__index = SavingsAccount
setmetatable(SavingsAccount, {__index = BankAccount})

function SavingsAccount:new()
    local obj = BankAccount:new()
    setmetatable(obj, self)
    self.__index = self
    return obj
end

function SavingsAccount:withdraw(amount)
    if self.balance - amount >= 100 then
        BankAccount:withdraw(amount)
    else
        print("取款失败,取款后的余额不得小于100")
    end 
end

-- 测试 BankAccount
local ba = BankAccount:new()
ba:deposit(200)   -- 存款成功,余额200
ba:withdraw(50)   -- 取款成功,余额150
ba:withdraw(200)  -- 取款失败,余额不足

-- 测试 SavingsAccount
local sa = SavingsAccount:new()
sa:deposit(500)   -- 存款成功,余额500
sa:withdraw(450)  -- 取款失败:储蓄账户需保留至少100元余额
sa:withdraw(400)  -- 取款成功,余额100
sa:withdraw(1)    -- 取款失败:储蓄账户需保留至少100元余额

-- 测试直接访问私有方法(应该报错)
ba.validateAmount(100)  -- 报错:attempt to call method 'validateAmount' (a nil value)

网站公告

今日签到

点亮在社区的每一天
去签到