使用java写一个具有每日记账功能的简易日历代码主要功能: 1、显示当月日历,当前日期、当前时间: 2、可查询任意月以及任意年的日历; 3、正常运行和退出程序。 4、每日具有记账功能,需要至少包含 1) 记账id:2) 记账类型;2) 支出费用:3) 关键字(关键字写为一行,关键字数量不限,使用分号分割<需查阅使 5、能够通过关键字查询某一种类型的记账记录。 6、对当月记账类型的汇总;对特定关键字的记账汇总。
时间: 2024-02-25 19:57:40 浏览: 29
以下是一个简单的Java日历代码,包含了每日记账功能:
```java
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Scanner;
public class Calendar {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int year, month;
while (true) {
// 输入年份和月份
System.out.println("请输入年份:");
year = scanner.nextInt();
System.out.println("请输入月份:");
month = scanner.nextInt();
if (year < 1900 || year > 9999 || month < 1 || month > 12) {
System.out.println("输入的年份或月份不正确,请重新输入!");
} else {
break;
}
}
LocalDate date = LocalDate.of(year, month, 1);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月");
System.out.println(date.format(formatter));
System.out.println("日\t一\t二\t三\t四\t五\t六");
int startDayOfWeek = date.getDayOfWeek().getValue() % 7;
for (int i = 0; i < startDayOfWeek; i++) {
System.out.print("\t");
}
int maxDayOfMonth = date.lengthOfMonth();
ArrayList<Expense> expenses = new ArrayList<>();
for (int i = 1; i <= maxDayOfMonth; i++) {
LocalDate d = LocalDate.of(year, month, i);
int dayOfWeek = d.getDayOfWeek().getValue() % 7;
System.out.print(i + "\t");
if (dayOfWeek == 6) {
System.out.println();
}
// 每日记账功能
System.out.print("请输入今天是否有记账记录?(Y/N):");
String answer = scanner.next();
if (answer.equalsIgnoreCase("Y")) {
System.out.println("请输入记账id:");
int id = scanner.nextInt();
System.out.println("请输入记账类型:");
String type = scanner.next();
System.out.println("请输入支出费用:");
double cost = scanner.nextDouble();
System.out.println("请输入关键字(使用分号分割):");
String[] keywords = scanner.next().split(";");
expenses.add(new Expense(id, type, cost, keywords, d));
}
}
System.out.println();
// 查询任意月以及任意年的日历
while (true) {
System.out.println("请输入要查询的日期(格式:yyyy-MM)或输入q退出:");
String input = scanner.next();
if (input.equalsIgnoreCase("q")) {
break;
}
try {
LocalDate queryDate = LocalDate.parse(input + "-01", formatter);
System.out.println(queryDate.format(formatter));
System.out.println("日\t一\t二\t三\t四\t五\t六");
int queryStartDayOfWeek = queryDate.getDayOfWeek().getValue() % 7;
for (int i = 0; i < queryStartDayOfWeek; i++) {
System.out.print("\t");
}
int queryMaxDayOfMonth = queryDate.lengthOfMonth();
for (int i = 1; i <= queryMaxDayOfMonth; i++) {
LocalDate d = LocalDate.of(queryDate.getYear(), queryDate.getMonth(), i);
int dayOfWeek = d.getDayOfWeek().getValue() % 7;
System.out.print(i + "\t");
if (dayOfWeek == 6) {
System.out.println();
}
}
System.out.println();
} catch (Exception e) {
System.out.println("输入的日期格式不正确,请重新输入!");
}
}
System.out.println();
// 对当月记账类型的汇总
System.out.println("当月记账类型汇总:");
System.out.println("类型\t支出费用");
for (Expense expense : expenses) {
if (expense.getDate().getMonthValue() == month) {
String type = expense.getType();
double cost = expense.getCost();
System.out.println(type + "\t" + cost);
}
}
System.out.println();
// 对特定关键字的记账汇总
System.out.println("请输入要查询的关键字:");
String keyword = scanner.next();
System.out.println("关键字为\"" + keyword + "\"的记账汇总:");
System.out.println("日期\t类型\t支出费用");
for (Expense expense : expenses) {
if (expense.containsKeyword(keyword)) {
LocalDate d = expense.getDate();
String type = expense.getType();
double cost = expense.getCost();
System.out.println(d + "\t" + type + "\t" + cost);
}
}
}
}
class Expense {
private int id;
private String type;
private double cost;
private String[] keywords;
private LocalDate date;
public Expense(int id, String type, double cost, String[] keywords, LocalDate date) {
this.id = id;
this.type = type;
this.cost = cost;
this.keywords = keywords;
this.date = date;
}
public boolean containsKeyword(String keyword) {
for (String k : keywords) {
if (k.equalsIgnoreCase(keyword)) {
return true;
}
}
return false;
}
public String getType() {
return type;
}
public double getCost() {
return cost;
}
public LocalDate getDate() {
return date;
}
}
```
这个程序使用了Java 8中的LocalDate类和DateTimeFormatter类来处理日期和时间。程序中使用了一个Expense类来表示每一笔记账记录,其中包含了id、类型、支出费用、关键字和日期等信息。在程序中,我们通过一个ArrayList来保存所有的记账记录。程序中还提供了查询任意月以及任意年的日历功能,以及对当月记账类型和特定关键字的记账汇总功能。