我们可以做一个简易银行账户类,支持存款、取款、查看交易记录等。

示例:BankAccount 类
java
复制
编辑
public class BankAccount {
private String accountNumber; // 账号
private String ownerName; // 开户人姓名
private double balance; // 余额
private String[] transactions; // 交易记录
private int transactionCount; // 已记录交易数量

// 构造方法
public BankAccount(String accountNumber, String ownerName, double initialBalance, int maxTransactions) {this.accountNumber = accountNumber;this.ownerName = ownerName;this.balance = initialBalance;this.transactions = new String[maxTransactions];this.transactionCount = 0;addTransaction("开户,初始余额: " + initialBalance);
}// 获取余额
public double getBalance() {return balance;
}// 存款
public void deposit(double amount) {if (amount > 0) {balance += amount;addTransaction("存款: +" + amount);} else {System.out.println("存款金额必须大于 0");}
}// 取款
public void withdraw(double amount) {if (amount > 0 && amount <= balance) {balance -= amount;addTransaction("取款: -" + amount);} else {System.out.println("取款失败,金额无效或余额不足");}
}// 添加交易记录
private void addTransaction(String record) {if (transactionCount < transactions.length) {transactions[transactionCount] = record;transactionCount++;} else {System.out.println("交易记录已满,无法记录更多交易");}
}// 打印交易记录
public void printTransactions() {System.out.println("账户 [" + accountNumber + "] 的交易记录:");for (int i = 0; i < transactionCount; i++) {System.out.println((i + 1) + ". " + transactions[i]);}
}

}
使用示例
java
复制
编辑
public class Main {
public static void main(String[] args) {
BankAccount account = new BankAccount(“1001”, “Alice”, 1000.0, 10);

    account.deposit(500.0);account.withdraw(300.0);account.withdraw(1500.0); // 测试余额不足System.out.println("当前余额: " + account.getBalance());account.printTransactions();
}

}
你可以用它练习的业务场景
多账户管理

创建多个 BankAccount 对象,存款、取款,最后统计所有账户总余额。

账户转账功能

编写一个方法 transfer(BankAccount target, double amount) 实现账户之间转账。

交易明细查询

根据交易记录查找某一天的交易(可以用字符串包含日期判断)。

存取款限额系统

限制每天的存款或取款次数,测试业务规则。

您说:
麻烦帮我实现一个账户转账功能

ChatGPT 说:
好的 👍
我们就在刚才的 BankAccount 类里加一个 transfer() 方法,实现账户之间的转账功能,并且让交易记录两边都能保存。

更新版 BankAccount 类(带转账功能)
java
复制
编辑
public class BankAccount {
private String accountNumber; // 账号
private String ownerName; // 开户人姓名
private double balance; // 余额
private String[] transactions; // 交易记录
private int transactionCount; // 已记录交易数量

// 构造方法
public BankAccount(String accountNumber, String ownerName, double initialBalance, int maxTransactions) {this.accountNumber = accountNumber;this.ownerName = ownerName;this.balance = initialBalance;this.transactions = new String[maxTransactions];this.transactionCount = 0;addTransaction("开户,初始余额: " + initialBalance);
}// 获取余额
public double getBalance() {return balance;
}// 存款
public void deposit(double amount) {if (amount > 0) {balance += amount;addTransaction("存款: +" + amount);} else {System.out.println("存款金额必须大于 0");}
}// 取款
public void withdraw(double amount) {if (amount > 0 && amount <= balance) {balance -= amount;addTransaction("取款: -" + amount);} else {System.out.println("取款失败,金额无效或余额不足");}
}// 转账
public void transfer(BankAccount target, double amount) {if (target == null) {System.out.println("转账失败:目标账户不存在");return;}if (amount <= 0) {System.out.println("转账金额必须大于 0");return;}if (amount > this.balance) {System.out.println("转账失败:余额不足");return;}// 扣款this.balance -= amount;addTransaction("向账户[" + target.accountNumber + "] 转账: -" + amount);// 对方账户增加余额target.balance += amount;target.addTransaction("来自账户[" + this.accountNumber + "] 的转账: +" + amount);System.out.println("转账成功:" + this.accountNumber + " → " + target.accountNumber + " 金额: " + amount);
}// 添加交易记录
private void addTransaction(String record) {if (transactionCount < transactions.length) {transactions[transactionCount] = record;transactionCount++;} else {System.out.println("交易记录已满,无法记录更多交易");}
}// 打印交易记录
public void printTransactions() {System.out.println("账户 [" + accountNumber + "] 的交易记录:");for (int i = 0; i < transactionCount; i++) {System.out.println((i + 1) + ". " + transactions[i]);}
}

}
测试代码
java
复制
编辑
public class Main {
public static void main(String[] args) {
BankAccount acc1 = new BankAccount(“1001”, “Alice”, 1000.0, 10);
BankAccount acc2 = new BankAccount(“1002”, “Bob”, 500.0, 10);

    acc1.transfer(acc2, 300.0); // 成功acc1.transfer(acc2, 2000.0); // 余额不足acc1.transfer(acc2, -50); // 金额非法System.out.println("\n---账户余额---");System.out.println(acc1.getBalance());System.out.println(acc2.getBalance());System.out.println("\n---交易记录---");acc1.printTransactions();acc2.printTransactions();
}

}
运行示例输出
markdown
复制
编辑
转账成功:1001 → 1002 金额: 300.0
转账失败:余额不足
转账金额必须大于 0

—账户余额—
700.0
800.0

—交易记录—
账户 [1001] 的交易记录:

  1. 开户,初始余额: 1000.0
  2. 向账户[1002] 转账: -300.0
    账户 [1002] 的交易记录:
  3. 开户,初始余额: 500.0
  4. 来自账户[1001] 的转账: +300.0
    我这里还可以帮你加一个转账限额功能,比如每天最多转 3 次、每次不超过 1000 元,这样更接近真实银行业务逻辑。

你要我帮你加这个限制版本吗?这样就能练习更多业务规则的判断。

您说:
帮我加这个限制版本吧

ChatGPT 说:
好,那我们就在 BankAccount 里加上每天最多转 3 次,每次不超过 1000 元的转账限制,
这里我用简单的计数器来模拟每天的限制,不涉及真实日期(方便初学者练习)。

更新版 BankAccount(带转账次数 & 金额限制)
java
复制
编辑
public class BankAccount {
private String accountNumber; // 账号
private String ownerName; // 开户人姓名
private double balance; // 余额
private String[] transactions; // 交易记录
private int transactionCount; // 已记录交易数量

// 转账限制
private int transferCountToday; // 今日已转账次数
private static final int MAX_TRANSFER_PER_DAY = 3; // 每天最多转 3 次
private static final double MAX_TRANSFER_AMOUNT = 1000.0; // 每次最多 1000 元public BankAccount(String accountNumber, String ownerName, double initialBalance, int maxTransactions) {this.accountNumber = accountNumber;this.ownerName = ownerName;this.balance = initialBalance;this.transactions = new String[maxTransactions];this.transactionCount = 0;this.transferCountToday = 0;addTransaction("开户,初始余额: " + initialBalance);
}public double getBalance() {return balance;
}public void deposit(double amount) {if (amount > 0) {balance += amount;addTransaction("存款: +" + amount);} else {System.out.println("存款金额必须大于 0");}
}public void withdraw(double amount) {if (amount > 0 && amount <= balance) {balance -= amount;addTransaction("取款: -" + amount);} else {System.out.println("取款失败,金额无效或余额不足");}
}// 转账方法(带限制)
public void transfer(BankAccount target, double amount) {if (target == null) {System.out.println("转账失败:目标账户不存在");return;}if (amount <= 0) {System.out.println("转账金额必须大于 0");return;}if (amount > this.balance) {System.out.println("转账失败:余额不足");return;}if (amount > MAX_TRANSFER_AMOUNT) {System.out.println("转账失败:单笔转账金额不能超过 " + MAX_TRANSFER_AMOUNT + " 元");return;}if (transferCountToday >= MAX_TRANSFER_PER_DAY) {System.out.println("转账失败:今天的转账次数已达上限(" + MAX_TRANSFER_PER_DAY + " 次)");return;}// 执行转账this.balance -= amount;target.balance += amount;transferCountToday++;addTransaction("向账户[" + target.accountNumber + "] 转账: -" + amount);target.addTransaction("来自账户[" + this.accountNumber + "] 的转账: +" + amount);System.out.println("转账成功:" + this.accountNumber + " → " + target.accountNumber + " 金额: " + amount);
}private void addTransaction(String record) {if (transactionCount < transactions.length) {transactions[transactionCount] = record;transactionCount++;} else {System.out.println("交易记录已满,无法记录更多交易");}
}public void printTransactions() {System.out.println("账户 [" + accountNumber + "] 的交易记录:");for (int i = 0; i < transactionCount; i++) {System.out.println((i + 1) + ". " + transactions[i]);}
}// 模拟新的一天(重置计数)
public void resetDailyTransferLimit() {transferCountToday = 0;System.out.println("已重置今日转账次数");
}

}
测试代码
java
复制
编辑
public class Main {
public static void main(String[] args) {
BankAccount acc1 = new BankAccount(“1001”, “Alice”, 5000.0, 20);
BankAccount acc2 = new BankAccount(“1002”, “Bob”, 2000.0, 20);

    acc1.transfer(acc2, 500);  // 成功acc1.transfer(acc2, 200);  // 成功acc1.transfer(acc2, 1500); // 超过单笔限额acc1.transfer(acc2, 300);  // 成功acc1.transfer(acc2, 100);  // 超过每日限额System.out.println("\n---账户余额---");System.out.println("Alice: " + acc1.getBalance());System.out.println("Bob: " + acc2.getBalance());System.out.println("\n---交易记录---");acc1.printTransactions();acc2.printTransactions();// 模拟第二天acc1.resetDailyTransferLimit();acc1.transfer(acc2, 800); // 新的一天又可以转了
}

}
运行示例输出
yaml
复制
编辑
转账成功:1001 → 1002 金额: 500.0
转账成功:1001 → 1002 金额: 200.0
转账失败:单笔转账金额不能超过 1000.0 元
转账成功:1001 → 1002 金额: 300.0
转账失败:今天的转账次数已达上限(3 次)

—账户余额—
Alice: 4000.0
Bob: 3000.0

—交易记录—
账户 [1001] 的交易记录:

  1. 开户,初始余额: 5000.0
  2. 向账户[1002] 转账: -500.0
  3. 向账户[1002] 转账: -200.0
  4. 向账户[1002] 转账: -300.0
    账户 [1002] 的交易记录:
  5. 开户,初始余额: 2000.0
  6. 来自账户[1001] 的转账: +500.0
  7. 来自账户[1001] 的转账: +200.0
  8. 来自账户[1001] 的转账: +300.0
    已重置今日转账次数
    转账成功:1001 → 1002 金额: 800.0
    这样你就能练习:

成员变量与静态常量的结合使用

方法参数对象的交互(transfer() 里两个账户对象互相修改)

状态限制与业务规则(转账次数、金额限制)

模拟一天重置操作(resetDailyTransferLimit())

如果你想,我还可以帮你把这个转账限制改成真正基于日期判断,这样就不需要手动调用 resetDailyTransferLimit() 了,更贴近真实银行逻辑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/918156.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/918156.shtml
英文地址,请注明出处:http://en.pswp.cn/news/918156.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python数据双效处理:同步转换与换算的高级技术与工程实践

引言&#xff1a;转换与换算在现代数据处理中的核心价值在大数据与实时处理需求激增的时代&#xff0c;高效的数据处理方案成为核心竞争力。根据2025年Python数据工程调查报告&#xff1a;75%的数据处理任务需要同时执行转换和换算操作优化良好的双效处理可提升3-8倍性能关键应…

Go语言实战案例:文件上传服务

在 Web 开发中&#xff0c;文件上传 是常见需求&#xff0c;例如头像上传、文档存储、图片分享等功能。Go 语言的标准库 net/http 已经内置了对 multipart/form-data 类型的支持&#xff0c;能让我们轻松构建一个文件上传服务。本文将带你实现一个可运行的文件上传接口&#xf…

【Lua】常用的库

os库&#xff1a;os.time() -- 输出当前时间的时间戳 os.time({year 2014, month 8, day 14}) -- 获取指定时间的时间戳local nowTime os.date("*t") -- 以表的形式获取当前的时间信息for k,v in pairs(nowTime) doprint(k,v) end--以上for循环示例输出 {year 2…

Mac上安装和配置MySQL(使用Homebrew安装MySQL 8.0)

在Mac上安装MySQL是一个简单高效的过程&#xff0c;尤其是通过Homebrew这一强大的包管理工具。本文将详细介绍如何在macOS 15.6系统中使用Homebrew安装MySQL 8.0版本&#xff0c;并完成基本配置&#xff0c;帮助您快速启动并安全使用MySQL。1. 安装Homebrew&#xff08;若未安装…

【Datawhale AI夏令营】从Baseline到SOTA:深度剖析金融问答RAG管道优化之路

从Baseline到SOTA&#xff1a;深度剖析金融问答RAG管道优化之路 引言 检索增强生成&#xff08;Retrieval-Augmented Generation, RAG&#xff09;已成为构建知识密集型AI应用的事实标准 1。然而&#xff0c;从一个简单的“hello world”级别的RAG&#xff0c;进化到一个能在竞…

AI鉴伪技术:守护数字时代的真实性防线

文章目录一、引言&#xff1a;AI伪造技术的“数字病毒”与鉴伪技术的“免疫疫苗”二、合合信息三大AI鉴伪技术解析2.1 人脸视频鉴伪技术&#xff1a;毫秒级击穿“数字假面”2.1.1 技术突破&#xff1a;从“像素级标记”到“多模态交叉验证”2.2 AIGC图像鉴别技术&#xff1a;让…

论文reading学习记录7 - daily - ViP3D

文章目录前言一、题目和摘要二、引言三、相关工作四、方法五、训练前言 开冲&#xff0c;清华大学的&#xff0c;带HDmap的端论文&#xff0c;用的Query&#xff0c;和UniAD一样。 一、题目和摘要 ViP3D: End-to-end Visual Trajectory Prediction via 3D Agent Queries ViP3…

Java学习第一百零九部分——Jenkins(一)

目录 一、前言简介 二、核心价值与优势 三、关键概念 四、下载安装与配置 五、总结归纳概述 一、前言简介 Jenkins 是一个开源的、基于 Java 的自动化服务器。它的核心使命是实现持续集成和持续交付。简单来说&#xff0c;Jenkins 是一个强大的工具&#xff0c;用于自动化…

微算法科技(NASDAQ:MLGO)使用循环QSC和QKD的量子区块链架构,提高交易安全性和透明度

随着量子计算技术的快速发展&#xff0c;传统区块链所依赖的加密算法面临着被破解的潜在风险。量子计算的强大计算能力可能会在未来打破现有加密体系的安全性&#xff0c;从而对区块链中的交易数据造成威胁。为了应对这一挑战&#xff0c;将量子技术与区块链相结合成为了必然的…

MyBatis SQL映射与动态SQL:构建灵活高效的数据访问层 MyBatis SQL映射与动态SQL:构建灵活高效的数据访问层

&#x1f504; MyBatis SQL映射与动态SQL&#xff1a;构建灵活高效的数据访问层 &#x1f680; 引言&#xff1a;动态SQL是MyBatis框架的核心优势之一&#xff0c;它让我们能够根据不同条件动态构建SQL语句&#xff0c;避免了传统JDBC中大量的字符串拼接。本文将深入解析MyBati…

v-model双向绑定指令

文章目录前言v-model.lazy 延迟同步v-model.trim 去掉空格前言 v-model指令是Vue.js中实现双向数据绑定的一种重要机制。它可以将表单控件的值与Vue.js实例中的数据进行双向绑定&#xff0c;即当表单控件的值发生变化时&#xff0c;Vue.js实例中的数据也会随之更新&#xff0c…

电脑IP地址是“169.254.x.x”而无法上网的原因

一、核心原因&#xff1a;自动私有 IP 地址&#xff08;APIPA&#xff09;的启用APIPA 机制&#xff1a;这是 Windows 等操作系统内置的一种 “备用方案”。当电脑设置为 “自动获取 IP 地址”&#xff08;通过 DHCP 协议&#xff09;&#xff0c;但无法从路由器、光猫等网络设…

单片机存储区域详解

目录 单片机内存区域划分 boot引脚启动介绍 1. boot引脚的三大启动区域介绍 1.用户闪存(User Flash) - 最常用模式 2. 系统存储区(System Memory) - 出厂预置Bootloader区 3. 内置SRAM启动(RAM Boot) - 特殊调试模式 2.用户闪存(User Flash)内存管理详解 一、用户闪存中…

Go语言实战案例:简易JSON数据返回

在现代 Web 应用中&#xff0c;JSON 已成为前后端通信的主流数据格式。Go 语言标准库内置对 JSON 的良好支持&#xff0c;只需少量代码就能返回结构化的 JSON 响应。本篇案例将手把手带你完成一个「返回 JSON 数据的 HTTP 接口」&#xff0c;帮助你理解如何用 Go 语言实现后端服…

扣子Coze中的触发器实现流程自动化-实现每日新闻卡片式推送

基础知识 什么是触发器/能做什么 Triggers 智能体设置触发器&#xff08;Triggers&#xff09;&#xff0c;使智能体在特定时间或接收到特定事件时自动执行任务。为什么需要触发器&#xff1f;实操步骤 第1步&#xff1a;打开一个智能体编辑页第2步&#xff1a;技能 - 触发器 -…

GitCode 7月:小程序积分商城更名成长中心、「探索智能仓颉!Cangjie Magic 体验有奖征文活动」圆满收官、深度对话栏目持续热播

运营情况总结 &#x1f389; 截至7月底&#xff0c;GitCode 这个热闹的开发者社区&#xff0c;已经聚集了 656 万位开发者小伙伴啦&#xff01; &#x1f4bb; 产品&#xff1a;小程序积分商城更名为成长中心啦&#xff0c;更多功能将陆续上线。 &#x1f31f; G-Star&#xff…

机器学习之支持向量机(原理)

目录 摘要 一、概述 二、SVM算法定义 1.超平⾯最⼤间隔介绍 2.硬间隔和软间隔 1.硬间隔分类 2. 软间隔分类 三、SVM算法原理 1 定义输⼊数据 2 线性可分⽀持向量机 3 SVM的计算过程与算法步骤 四、核函数 五、SVM算法api介绍 1. 核心参数说明 2. 主要方法 3. 重…

【Unity3D实例-功能-跳跃】角色跳跃

今天&#xff0c;我们来聊聊 Unity 里最常打交道的动作之一——角色跳跃。无论是横版闯关还是 3D 跑酷&#xff0c;跳跃都是让角色“活”起来的核心操作。在 Unity 里&#xff0c;几行脚本就能让角色一蹬而起、稳稳落地。下面&#xff0c;就让我们一起把这个“弹跳感”亲手做出…

react+echarts实现变化趋势缩略图

如上图&#xff0c;实现一个缩略图。 import React, { useState, useEffect } from react; const ParentCom () > {const [data, setData] useState({});useEffect(() > {// 这里可以做一些接口请求等操作setData({isSheng: false, value: 11.24, percentage: 2.3%, da…

C语言宏相关操作

宏 宏名称通常都是由大写英文字母构成的宏名称里不可以包含空格用宏给数字起名字的时候不可以使用赋值运算符&#xff0c;不要自增自减可以在编写程序的时候直接使用宏名称替代数字&#xff0c;编译器在编译的时候会把程序里的宏替换成它所代表的数字 1. 为什么要使用宏&#x…