答案:该Java记账程序通过Record类封装收支记录,AccountBook类管理记录的增删查统与文件持久化,Main类提供命令行交互界面,实现数据自动加载保存。

实现一个简单的个人记账小程序,可以通过面向对象的方式组织代码,结合文件读写来持久化数据。下面是一个基于控制台的Java记账程序的基本实现思路和代码结构。
1. 定义记账条目类(Record)
每一条记账信息可以封装成一个对象,包含日期、金额、类型(收入/支出)、备注等字段。
public class Record { private String date; // 记账日期 private double amount; // 金额 private String type; // 类型:收入 或 支出 private String remark; // 备注 <pre class='brush:java;toolbar:false;'>public Record(String date, double amount, String type, String remark) { this.date = date; this.amount = amount; this.type = type; this.remark = remark; } // Getter 和 Setter 方法 public String getDate() { return date; } public double getAmount() { return amount; } public String getType() { return type; } public String getRemark() { return remark; } @Override public String toString() { return date + " | " + amount + " | " + type + " | " + remark; }
}
2. 实现记账管理类(AccountBook)
这个类负责添加记录、查询记录、统计收支、保存和加载数据。
立即学习“Java免费学习笔记(深入)”;
import java.io.*; import java.util.ArrayList; import java.util.List; <p>public class AccountBook { private List<Record> records; private static final String FILE_NAME = "account.txt";</p><pre class='brush:java;toolbar:false;'>public AccountBook() { records = new ArrayList<>(); loadFromFile(); // 启动时加载已有数据 } // 添加一条记录 public void addRecord(Record record) { records.add(record); saveToFile(); // 每次添加后保存 } // 查看所有记录 public void listAllRecords() { if (records.isEmpty()) { System.out.println("暂无记账记录。"); return; } for (Record r : records) { System.out.println(r); } } // 统计总收入 public double getTotalIncome() { return records.stream() .filter(r -> r.getType().equals("收入")) .mapToDouble(Record::getAmount) .sum(); } // 统计总支出 public double getTotalExpense() { return records.stream() .filter(r -> r.getType().equals("支出")) .mapToDouble(Record::getAmount) .sum(); } // 保存到文件 private void saveToFile() { try (PrintWriter writer = new PrintWriter(new FileWriter(FILE_NAME))) { for (Record r : records) { writer.println(r.getDate() + "," + r.getAmount() + "," + r.getType() + "," + r.getRemark()); } } catch (IOException e) { System.out.println("保存文件失败:" + e.getMessage()); } } // 从文件加载数据 private void loadFromFile() { File file = new File(FILE_NAME); if (!file.exists()) return; try (BufferedReader reader = new BufferedReader(new FileReader(file))) { String line; while ((line = reader.readLine()) != null) { String[] parts = line.split(","); if (parts.length == 4) { String date = parts[0]; double amount = Double.parseDouble(parts[1]); String type = parts[2]; String remark = parts[3]; records.add(new Record(date, amount, type, remark)); } } } catch (IOException | NumberFormatException e) { System.out.println("加载数据失败:" + e.getMessage()); } }
}
3. 主程序入口(Main)
提供简单的命令行菜单,供用户操作。
import java.util.Scanner; <p>public class Main { public static void main(String[] args) { AccountBook book = new AccountBook(); Scanner scanner = new Scanner(System.in);</p><pre class='brush:java;toolbar:false;'> while (true) { System.out.println("n=== 个人记账系统 ==="); System.out.println("1. 添加记录"); System.out.println("2. 查看所有记录"); System.out.println("3. 查看统计信息"); System.out.println("4. 退出"); System.out.print("请选择操作:"); int choice = scanner.nextInt(); scanner.nextLine(); // 消费换行符 switch (choice) { case 1: System.out.print("日期(如2025-04-05):"); String date = scanner.nextLine(); System.out.print("金额:"); double amount = scanner.nextDouble(); scanner.nextLine(); System.out.print("类型(收入/支出):"); String type = scanner.nextLine(); System.out.print("备注:"); String remark = scanner.nextLine(); book.addRecord(new Record(date, amount, type, remark)); System.out.println("记录已添加!"); break; case 2: book.listAllRecords(); break; case 3: System.out.println("总收入:" + book.getTotalIncome()); System.out.println("总支出:" + book.getTotalExpense()); System.out.println("结余:" + (book.getTotalIncome() - book.getTotalExpense())); break; case 4: System.out.println("再见!"); return; default: System.out.println("无效选择,请重试。"); } } }
}
4. 运行说明与扩展建议
这个程序运行后会在当前目录生成 account.txt 文件存储数据。每次启动会自动加载历史记录。
可扩展方向:
基本上就这些。不复杂但容易忽略细节,比如异常处理和文件编码问题。初学者可以从这个结构入手,逐步优化功能。


