当前位置: 首页 > news >正文

【Lua】题目小练10

题目要求

实现一个 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 = BankAccountlocal function validateAmount(amount)return type(amount) == "number" and amount > 0 and true or false
endfunction BankAccount:new()local obj = {balance = 0}setmetatable(obj, self)self.__index = selfreturn obj
endfunction BankAccount:deposit(amount)if validateAmount(amount) thenself.balance = self.balance + amountprint("成功存入:"..amount..",当前余额:"..self.balance)elseprint("金额有误,请确认金额数大于0")end
endfunction BankAccount:withdraw(amount)if validateAmount(amount) thenif self.balance >= amount thenself.balance = self.balance - amountprint("成功取款:"..amount..",当前余额为:"..self.balance)elseprint("余额不足")endelseprint("金额有误,请确认金额数大于0")end
endreturn 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 = selfreturn obj
endfunction SavingsAccount:withdraw(amount)if self.balance - amount >= 100 thenBankAccount:withdraw(amount)elseprint("取款失败,取款后的余额不得小于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)
http://www.lryc.cn/news/617646.html

相关文章:

  • explicit的作用是什么
  • GaussDB安全配置全景指南:构建企业级数据库防护体系
  • Mybatis学习之逆向工程(十)
  • Java项目基本流程(三)
  • SSM+Dubbo+Zookeeper框架和springcloud框架,写业务的时候主要区别在哪?
  • K8S学习----应用部署架构:传统、虚拟化与容器的演进与对比
  • Jenkins 搭建鸿蒙打包
  • 基于 ZooKeeper 的分布式锁实现原理是什么?
  • 车载软件架构 --- 车辆量产后怎么刷写Flash Bootloader
  • 品质检验·稽核管理·客诉管理一站式数字化平台——全星质量管理 QMS 软件系统
  • 打烊频率?阶段说了算
  • 【AI论文】R-Zero:从零数据起步的自进化推理大语言模型
  • 从源码看 Coze:Agent 的三大支柱是如何构建的?
  • AI测试平台实战:深入解析自动化评分和多模型对比评测
  • [CSP-J 2021] 小熊的果篮
  • 记录一些sonic自动化运行中的问题
  • “一车一码一池一充”:GB 17761-2024新国标下电动自行车的安全革命
  • 【C++竞赛】核桃CSP-J模拟赛题解
  • DreaMoving:基于扩散模型的可控视频生成框架
  • Android Coil3视频封面抽取封面帧存Disk缓存,Kotlin
  • 嵌入式学习的第四十八天-中断+OCP原则
  • 美股期权历史市场数据波动率分析教程
  • 软件测评中HTTP 安全头的配置与测试规范
  • U-Boot常用命令完全指南
  • 【浮点数存储】double类型注意点
  • nginx 设置二级目录-实战
  • 【LLM】OpenAI开源GPT级模型,120B及20B参数GPT-OSS
  • SQL中BETWEEN与IN的差异详解
  • 读《精益数据分析》:媒体内容平台全链路梳理
  • 【数据分析】调控网络分析:调节因子在肿瘤样本中的表达相关性与生存效应分析