在某个社交平台上刷到了,大学生的一个小练习,关于编写一个小的银行案例,下面具体分享一下代码,希望大佬多来指正,我们互相学习。
基本要求:类设计:Account类: 包含账户ID、余额、账户类型等属性,以及存款、取款、转账方法。Customer类:包含客户信息,如姓名、ID和其Account列表。Bank类: 管理所有Customer,包括添加客户、开设账户、关闭账户、处理交易等。
功能实现:
实现多种账户类型(如储蓄账户、支票账户),它们继承自Account类,但具有不同的服务费(存款和取款都会收取服务费)实现基础的交易处理功能,如转账、存款、取款。
实现交易历史记录功能,记录客户的所有交易。
实现简单的利息计算功能,定期更新账户余额。
添加数据持久化功能,如将客户和账户信息保存到文件。
数据存储:
使用集合类(如ArrayList)存储系统中的客户和账户信息
异常处理:
添加适当的异常处理,例如在处理交易时检查余额不足或输入错误。测试类:
创建一个测试类,演示银行系统的各种功能。
首先看一下目录结构
Account.java
package com.account;
/**
* @program: BnakDemo
* @description:
* @author: Casey Hu
* @create: 2023-11-26 13:58
**/
public class Account {
//账户ID
String accountId = null;
//账户余额(单位 元 )
Double accountBalance = 0.00;
//账户类型属性
String accountType = null;
//账户状态 true是打开,false是关闭
boolean accountStatu = false;
public Account(String accountId,String accountType) {
this.accountId=accountId;
this.accountType=accountType;
this.accountStatu=true;
}
//存款
public Double deposit(Double money){
if(money>0){
accountBalance=accountBalance+money;
}
return accountBalance;
}
//取款
public Double withdraw(Double money){
if(money>0){
if(money<accountBalance){
accountBalance=accountBalance-money;
}else {
new Exception("取款金额不得超过当前账户余额!");
}
}
return accountBalance;
}
//转账
public void transfer(Account account, Double money){
Double balance = account.getAccountBalance();
if(money>0){
if(money<accountBalance){
balance=balance +money;
accountBalance=accountBalance-money;
}else {
new Exception("转账金额不得超过当前账户余额!");
}
}
account.setAccountBalance(balance);
System.out.println("向账户"+account.getAccountId()+"转账"+money+" 成功!");
}
public String getAccountId() {
return accountId;
}
public void setAccountId(String accountId) {
this.accountId = accountId;
}
public Double getAccountBalance() {
return accountBalance;
}
public void setAccountBalance(Double accountBalance) {
this.accountBalance = accountBalance;
}
public String getAccountType() {
return accountType;
}
public void setAccountType(String accountType) {
this.accountType = accountType;
}
public void settlementInterest() {
}
}
saveAccount.java
package com.account;
/**
* @program: BnakDemo
* @description: 储蓄账户
* @author: Casey Hu
* @create: 2023-11-26 14:17
**/
public class saveAccount extends Account {
Double commission=0.001;
public saveAccount(String saveAccountId) {
super(saveAccountId, "save");
}
//重写存款方法
@Override
public Double deposit(Double money){
if(money>0){
money=money-money*commission; //扣除手续费
}else {
money=0.00; //金额异常 不进行操作
}
return super.deposit(money);
}
//重写取款方法
@Override
public Double withdraw(Double money) {
if(money>0&&accountBalance>0){
if (accountBalance-(money*commission)>0) {
money=money+money*commission; //扣除手续费
}else {
money=0.00; //金额异常 不进行操作
}
}else {
money=0.00; //金额异常 不进行操作
}
return super.withdraw(money);
}
//重写转账方法
@Override
public void transfer(Account account, Double money) {
super.transfer(account, money);
}
//结算利息 按年利率算的
public void settlementInterest(){
accountBalance=accountBalance+accountBalance*0.011;
}
}
checkAccount.java
package com.account;
/**
* @program: BnakDemo
* @description: 支票账户
* @author: Casey Hu
* @create: 2023-11-26 14:37
**/
public class checkAccount extends Account{
Double commission=0.002;
public checkAccount(String accountId) {
super(accountId, "check");
}
//重写存款方法
@Override
public Double deposit(Double money){
if(money>0){
money=money-money*commission; //扣除手续费
}else {
money=0.00; //金额异常 不进行操作
}
return super.deposit(money);
}
//重写取款方法
@Override
public Double withdraw(Double money) {
if(money>0&&accountBalance>0){
if (accountBalance-(money*commission)>0) {
money=money+money*commission; //扣除手续费
}else {
money=0.00; //金额异常 不进行操作
}
}else {
money=0.00; //金额异常 不进行操作
}
return super.withdraw(money);
}
//重写转账方法
@Override
public void transfer(Account account, Double money) {
super.transfer(account, money);
}
//结算利息 按年利率算的
public void settlementInterest(){
accountBalance=accountBalance+accountBalance*0.021;
}
}
Customer.java
package com.customer;
import com.account.Account;
import java.util.ArrayList;
import java.util.List;
/**
* @program: BnakDemo
* @description: 客户
* @author: Casey Hu
* @create: 2023-11-26 14:39
**/
public class Customer {
//客户ID
private String customerId;
//客户姓名
private String customerName;
//账户列表
private List<Account> accountList=new ArrayList<>();
//交易历史
private List<String> tranHistory=new ArrayList<>();
public String getCustomerId() {
return customerId;
}
public void setCustomerId(String customerId) {
this.customerId = customerId;
}
public String getCustomerName() {
return customerName;
}
public void setCustomerName(String customerName) {
this.customerName = customerName;
}
public List<Account> getAccountList() {
return accountList;
}
public void setAccountList(List<Account> accountList) {
this.accountList = accountList;
}
public List<String> getTranHistory() {
return tranHistory;
}
public void setTranHistory(List<String> tranHistory) {
this.tranHistory = tranHistory;
}
}
Bank.java
package com.bank;
import com.account.checkAccount;
import com.account.saveAccount;
import com.customer.Customer;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Random;
/**
* @program: BnakDemo
* @description: 银行
* @author: Casey Hu
* @create: 2023-11-26 15:01
**/
public class Bank {
private List<Customer> customer;
public void addCustomer(Customer customer){
this.customer.add(customer);
}
public void addAccount(Customer customer, String accountType){
String accountId=getAccountId();
if("check".equals(accountType)){
customer.getAccountList().add(new checkAccount(accountId)); //如果开账户为 支票
}else{
customer.getAccountList().add(new saveAccount(accountId));
}
}
public String getAccountId(){
Random random = new Random();
String number = "";
for (int i = 0; i < 10; i++) {
number += random.nextInt(10);
}
return number;
}
//数据持久化功能
public void makeNoRealFile(Customer customer) {
try {
Date date = new Date(); // 获取当前日期
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd"); // 定义日期格式
String formattedDate = formatter.format(date); // 将日期格式化为指定格式
String filename = "bank_" +formattedDate+ ".txt";
String filePath = "E:\\BnakDemo\\BnakDemo\\src\\main\\resources\\" + filename; // 资源文件路径
StringBuffer result= new StringBuffer();
result.append(customer.getCustomerName()+"^");
for (int i=0;i<customer.getAccountList().size();i++){
result.append(customer.getAccountList().get(i).getAccountId()+"|");
result.append(customer.getAccountList().get(i).getAccountType()+"|");
result.append(customer.getAccountList().get(i).getAccountBalance()+"|");
}
result.append(customer.getCustomerId()+"^");
for (int j=0;j<customer.getTranHistory().size();j++){
result.append(customer.getTranHistory().get(j)+"|");
}
File file = new File(filePath);
file.createNewFile();
OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");
BufferedWriter bw = new BufferedWriter(write);
bw.write(result.toString());
bw.close();
System.out.println("文件内容:"+result);
System.out.println("文件保存成功!");
}catch (Exception e){
e.printStackTrace();
}
}
}
BankTest.java
import com.account.Account;
import com.bank.Bank;
import com.customer.Customer;
import java.util.ArrayList;
import java.util.List;
/**
* @program: BnakDemo
* @description:
* @author: Casey Hu
* @create: 2023-11-26 16:27
**/
public class BankTest {
public static void main(String[] args) {
List<String> tranHistory=new ArrayList<>();
//第一步先 创建一个客户对象
Customer customer = new Customer();
customer.setCustomerId("110101198001010053"); //给客户id
customer.setCustomerName("Casey Hu");
//第二步 创建一个银行对象
Bank bank=new Bank();
bank.addAccount(customer,"save");//这个用户创建了一个储蓄账户
Account account1 = customer.getAccountList().get(0);
//第二步 开始存钱
account1.deposit(10000.00); //存入1万元
System.out.println(account1.getAccountBalance());
tranHistory.add("存入10000.00");
//第三步 开始取钱
account1.withdraw(5000.00);//取出5千元
System.out.println(account1.getAccountBalance());//还剩多少钱
tranHistory.add("取出5000.00");
//第四步 转账
bank.addAccount(customer,"check");//这个用户创建了一个储蓄账户
Account account2 = customer.getAccountList().get(1);
account1.transfer(account2,3000.00);
System.out.println("账户"+account1.getAccountId()+"余额:"+account1.getAccountBalance());
System.out.println("账户"+account2.getAccountId()+"余额:"+account2.getAccountBalance());
tranHistory.add("账户"+account1.getAccountId()+"向账户"+account2.getAccountId()+"转账3000.00");
//第五步 结算利息
account1.settlementInterest();
account2.settlementInterest();
System.out.println("账户"+account1.getAccountId()+"余额:"+account1.getAccountBalance());
System.out.println("账户"+account2.getAccountId()+"余额:"+account2.getAccountBalance());
tranHistory.add("账户"+account1.getAccountId()+"结算利息");
tranHistory.add("账户"+account2.getAccountId()+"结算利息");
customer.setTranHistory(tranHistory);
//数据持久化
bank.makeNoRealFile(customer);
}
}
要源码的私信我,或者加我微信,打包发你。其实以上复制下来就是源码了