JAVA 小项目 金额案例

  刚开始接触Java的时候,只要学会面向对象后,就可以开始练习写一些小的项目,例如:

金额案例中,我们转账的时候(银行卡、支付宝、微信等等),输入金额之后小数点后面只能输入到2位,而在程序内部,实际上是把输入的元,转成了分去操作了,当我们转成功之后,会再把分变成元来展示给用户们,请设计程序,完成所描述的需求。直接将元转成分,再将分转成元(至于软件内部怎么操作分的,我们无需关心)

简而言之,就是写一个简易的银行交易系统,存款,取款,转账,查询余额。

首先就是要写出大体框架:

 现在就是定义交易类(Transaction),和一个银行账户类(BankAccount):

// 交易类
public class Transaction {
    private LocalDateTime time; // 交易时间
    private String type; // 交易类型
    private BigDecimal amount; // 交易金额
    private BigDecimal balance; // 交易后余额


    public Transaction() {
    }

    public Transaction(String type, BigDecimal amount, BigDecimal balance) {
        this.time = LocalDateTime.now();
        setType(type);
        setAmount(amount);
        setBalance(balance);
    }

    public LocalDateTime getTime() {
        return time;
    }

    public void setTime(LocalDateTime time) {
        this.time = time;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public BigDecimal getAmount() {
        return amount;
    }

    public void setAmount(BigDecimal amount) {
        this.amount = amount;
    }

    public BigDecimal getBalance() {
        return balance;
    }

    public void setBalance(BigDecimal balance) {
        this.balance = balance;
    }
// 银行账户类
public class BankAccount {
    private String accountNumber; // 银行账号
    private String accountName; // 银行账户名称
    private BigDecimal balance; // 账户余额
    private ArrayList<Transaction> transactionHistory; // 交易历史记录

    public BankAccount() {
    }


    public BankAccount(String accountNumber, String accountName, BigDecimal balance) {
        setAccountNumber(accountNumber);
        setAccountName(accountName);
        setBalance(balance);
        this.transactionHistory = new ArrayList<>();
    }


    public String getAccountNumber() {
        return accountNumber;
    }

    public void setAccountNumber(String accountNumber) {
        this.accountNumber = accountNumber;
    }

    public String getAccountName() {
        return accountName;
    }

    public void setAccountName(String accountName) {
        this.accountName = accountName;
    }

    public BigDecimal getBalance() {
        return balance;
    }

    public void setBalance(BigDecimal balance) {
        this.balance = balance;
    }

    public ArrayList<Transaction> getTransactionHistory() {
        return transactionHistory;
    }

    public void setTransactionHistory(ArrayList<Transaction> transactionHistory) {
        this.transactionHistory = transactionHistory;
    }

接下来就是写存款,取款,转账和交易记录了。这些内容属于银行账户类,所以可以直接把一些内容放入银行账户类:

 // 存款
    public  void deposit(BigDecimal amount) {
        balance = balance.add(amount);
        transactionHistory.add(new Transaction("存款", amount, balance));
        System.out.println("存款成功,当前余额为:" + balance);
    }

    // 取款
    public  void withdraw(BigDecimal amount) {
        if (amount.compareTo(balance) == 1) {
            System.out.println("余额不足,取款失败");
        } else {
            balance = balance.subtract(amount);
            transactionHistory.add(new Transaction("取款", amount, balance));
            System.out.println("取款成功,当前余额为:" + balance);
        }
    }

    // 查询余额
    public  void queryBalance() {
        System.out.println("当前余额为:" + balance);
    }


    // 转账
    public void transfer(BankAccount targetAccount, BigDecimal amount) {
        if (amount.compareTo(balance) == 1) {
            System.out.println("余额不足,转账失败");
        } else {
            balance = balance.subtract(amount);
            targetAccount.deposit(amount);
            transactionHistory.add(new Transaction("转账", amount, balance));
            System.out.println("转账成功,当前余额为:" + balance);
        }
    }


    // 查询交易记录
    public  void printTransactionHistory() {
        if (transactionHistory.isEmpty()) {
            System.out.println("暂无交易记录");
        } else {
            System.out.println("+---------------------+----------+---------------------+---------------------+");
            System.out.println("|        时间          |   类型   |        金额          |        余额         |");
            System.out.println("+---------------------+----------+---------------------+---------------------+");

            for (Transaction transaction : transactionHistory) {
                LocalDateTime time = transaction.getTime();
                String formattedTime = time.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
                String type = transaction.getType();
                BigDecimal amount = transaction.getAmount();
                BigDecimal balance = transaction.getBalance();

                System.out.printf("| %s | %8s | %18s | %18s |\n", formattedTime, type, amount, balance);

            }

            System.out.println("+---------------------+----------+---------------------+---------------------+");
        }
    }




}

最后再写一个测试类,调用方法:

public class TestBankAccount {

    public static void main(String[] args) {
        // 创建一个账户对象,并初始化
        BankAccount bankAccount=new BankAccount("6228895599","中国工商银行",new BigDecimal("1000"));
        // 查询余额
        bankAccount.queryBalance();
        // 存款
        bankAccount.deposit(new BigDecimal("1000"));
        // 取款
        bankAccount.withdraw(new BigDecimal("200"));
        // 打印交易记录
        bankAccount.printTransactionHistory();


        // 创建一个账户对象,并初始化
        BankAccount bankAccount2=new BankAccount("622295588","上海浦发银行",new BigDecimal("100"));
        // bankAccount账户 给 bankAccount2转账 200
        bankAccount.transfer(bankAccount2,new BigDecimal("200"));
        // 打印交易记录
        bankAccount2.printTransactionHistory();

    }


}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值