用java写一个记账本,使用文件存储每天的日常收支和开销。 请设计合理的数据结构,完成记账本的查看、添加数据的功能。
时间: 2023-11-27 21:51:14 浏览: 28
好的,我可以为您提供一个简单的记账本程序的实现思路。
首先,我们可以定义一个Record类来表示每一个记录,包括日期、收入、支出、备注等信息,如下所示:
```java
public class Record {
private String date;
private double income;
private double expense;
private String comment;
public Record(String date, double income, double expense, String comment) {
this.date = date;
this.income = income;
this.expense = expense;
this.comment = comment;
}
// getter and setter methods
}
```
然后,我们可以定义一个AccountBook类来管理所有的记录,包括添加记录、查看当日记录、查看所有记录等功能。在AccountBook类中,我们可以使用Map<String, List<Record>>来存储所有的记录,其中键为日期,值为该日期下所有的记录列表。
```java
public class AccountBook {
private Map<String, List<Record>> records;
public AccountBook() {
records = new HashMap<>();
}
public void addRecord(Record record) {
String date = record.getDate();
List<Record> recordList = records.getOrDefault(date, new ArrayList<>());
recordList.add(record);
records.put(date, recordList);
}
public List<Record> getRecordsByDate(String date) {
return records.getOrDefault(date, new ArrayList<>());
}
public List<Record> getAllRecords() {
List<Record> allRecords = new ArrayList<>();
for (List<Record> recordList : records.values()) {
allRecords.addAll(recordList);
}
return allRecords;
}
}
```
最后,我们可以使用文件来存储所有的记录。在程序启动时,我们可以读取文件中的记录并加载到AccountBook中;在程序退出时,我们可以将AccountBook中的记录保存到文件中。
下面是一个简单的实现示例:
```java
public class Main {
private static final String FILE_NAME = "account_book.txt";
public static void main(String[] args) {
AccountBook accountBook = loadFromFile(FILE_NAME);
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("请选择操作:");
System.out.println("1. 添加记录");
System.out.println("2. 查看当日记录");
System.out.println("3. 查看所有记录");
System.out.println("4. 退出程序");
int choice = scanner.nextInt();
scanner.nextLine();
switch (choice) {
case 1:
System.out.println("请输入日期(格式为yyyy-MM-dd):");
String date = scanner.nextLine();
System.out.println("请输入收入金额:");
double income = scanner.nextDouble();
System.out.println("请输入支出金额:");
double expense = scanner.nextDouble();
System.out.println("请输入备注:");
scanner.nextLine();
String comment = scanner.nextLine();
Record record = new Record(date, income, expense, comment);
accountBook.addRecord(record);
System.out.println("已添加记录:" + record);
break;
case 2:
System.out.println("请输入日期(格式为yyyy-MM-dd):");
date = scanner.nextLine();
List<Record> recordList = accountBook.getRecordsByDate(date);
if (recordList.isEmpty()) {
System.out.println("该日期没有记录!");
} else {
System.out.println("日期为" + date + "的记录如下:");
for (Record r : recordList) {
System.out.println(r);
}
}
break;
case 3:
List<Record> allRecords = accountBook.getAllRecords();
if (allRecords.isEmpty()) {
System.out.println("还没有记录!");
} else {
System.out.println("所有记录如下:");
for (Record r : allRecords) {
System.out.println(r);
}
}
break;
case 4:
saveToFile(FILE_NAME, accountBook);
System.out.println("程序已退出!");
return;
default:
System.out.println("无效的操作!");
}
}
}
private static AccountBook loadFromFile(String fileName) {
AccountBook accountBook = new AccountBook();
try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {
String line;
while ((line = reader.readLine()) != null) {
String[] fields = line.split(",");
String date = fields[0];
double income = Double.parseDouble(fields[1]);
double expense = Double.parseDouble(fields[2]);
String comment = fields[3];
Record record = new Record(date, income, expense, comment);
accountBook.addRecord(record);
}
} catch (IOException e) {
System.out.println("读取文件失败:" + e.getMessage());
}
return accountBook;
}
private static void saveToFile(String fileName, AccountBook accountBook) {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(fileName))) {
List<Record> allRecords = accountBook.getAllRecords();
for (Record record : allRecords) {
writer.write(String.format("%s,%.2f,%.2f,%s\n", record.getDate(), record.getIncome(),
record.getExpense(), record.getComment()));
}
} catch (IOException e) {
System.out.println("保存文件失败:" + e.getMessage());
}
}
}
```