编写java程序,每日具有记账功能,需要至少包含1)记账id;2)记账类型;2)支出费用;3)关键字(关键字写为一行,关键字数量不限,使用分号分割<需查阅使用>) 能够通过关键字查询某一种类型的记账记录。 对当月记账类型的汇总;对特定关键字的记账汇总。
时间: 2023-12-10 09:41:54 浏览: 49
以下是一个简单的Java程序,实现了每日记账的功能:
```java
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class DailyAccounting {
static int idCounter = 1;
static ArrayList<AccountRecord> accountList = new ArrayList<>();
static HashMap<String, Double> typeSumMap = new HashMap<>();
static HashMap<String, Double> keywordSumMap = new HashMap<>();
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("请输入记账类型(输入 q 退出):");
String type = scanner.next();
if (type.equals("q")) {
break;
}
System.out.println("请输入支出费用:");
double cost = scanner.nextDouble();
System.out.println("请输入关键字(用分号分割):");
String keywords = scanner.next();
AccountRecord record = new AccountRecord(idCounter, type, cost, keywords);
accountList.add(record);
updateTypeSumMap(type, cost);
updateKeywordSumMap(keywords, cost);
System.out.println("记账成功!");
idCounter++;
}
System.out.println("请输入要查询的记账类型(输入 all 查询全部):");
String queryType = scanner.next();
if (queryType.equals("all")) {
printAccountList(accountList);
} else {
ArrayList<AccountRecord> queryResult = queryAccountByType(queryType);
printAccountList(queryResult);
System.out.println("本月 " + queryType + " 类型支出总额为:" + typeSumMap.get(queryType));
}
System.out.println("请输入要查询的关键字:");
String keyword = scanner.next();
System.out.println("关键字 " + keyword + " 的记账汇总为:" + keywordSumMap.get(keyword));
}
static void updateTypeSumMap(String type, double cost) {
if (typeSumMap.containsKey(type)) {
double sum = typeSumMap.get(type);
typeSumMap.put(type, sum + cost);
} else {
typeSumMap.put(type, cost);
}
}
static void updateKeywordSumMap(String keywords, double cost) {
String[] keywordArr = keywords.split(";");
for (String keyword : keywordArr) {
if (keywordSumMap.containsKey(keyword)) {
double sum = keywordSumMap.get(keyword);
keywordSumMap.put(keyword, sum + cost);
} else {
keywordSumMap.put(keyword, cost);
}
}
}
static ArrayList<AccountRecord> queryAccountByType(String type) {
ArrayList<AccountRecord> result = new ArrayList<>();
for (AccountRecord record : accountList) {
if (record.type.equals(type)) {
result.add(record);
}
}
return result;
}
static void printAccountList(ArrayList<AccountRecord> list) {
System.out.println("记账id\t记账类型\t支出费用\t关键字");
for (AccountRecord record : list) {
System.out.println(record.id + "\t" + record.type + "\t" + record.cost + "\t" + record.keywords);
}
}
}
class AccountRecord {
int id;
String type;
double cost;
String keywords;
public AccountRecord(int id, String type, double cost, String keywords) {
this.id = id;
this.type = type;
this.cost = cost;
this.keywords = keywords;
}
}
```
这个程序使用了一个 `AccountRecord` 类来表示每一条记账记录,其中包含了记账id、记账类型、支出费用和关键字。程序运行时,用户可以不断地输入记账信息,每输入一条记录就会将其存储到 `accountList` 中,并更新 `typeSumMap` 和 `keywordSumMap` 两个哈希表,用来记录不同类型和不同关键字的支出总额。
然后用户可以通过输入记账类型或关键字来查询相应的记账记录和支出总额。程序会根据用户的输入,从 `accountList` 中筛选出符合条件的记录,并输出到控制台上。
需要注意的是,这个程序并没有实现对日期的处理,因此所有的记账记录都是在同一天内的。如果需要实现每月汇总功能,还需要对日期进行处理。