1:菜单类
该类主要作用是对功能菜单的实现
import java.util.Scanner;
public class Menu {
money money = new money();
Scanner scanner = new Scanner(System.in);
//提示菜单
public void prompt() {
System.out.println("============零钱通菜单============");
System.out.println("1:零钱通明细");
System.out.println("2:收益入账");
System.out.println("3:消费");
System.out.println("4:退出");
System.out.println("============输入1~4选择===========");
}
//用户功能选择判定
public void selectMenu() {
String option = scanner.next().trim();
label:
while (true) {
switch (option) {
case "1":
money.detailsPrint();
detailedMenu();
selectDetailedMenu();
this.prompt();
option = scanner.next().trim();
break;
case "2":
System.out.println("请输入收益金额!");
money.earnings(scanner.nextDouble());
returnMenu();
option = scanner.next().trim();
break;
case "3":
System.out.println("请输入消费商家!");
String business = scanner.next().trim();
System.out.println("请输入消费金额!");
double cons = scanner.nextDouble();
money.consume(business, cons);
returnMenu();
option = scanner.next().trim();
break;
case "4":
System.out.println("已退出!");
break label;
default:
System.out.println("输入错误!请重新输入");
option = scanner.next().trim();
break;
}
}
}
//返回主菜单
public void returnMenu() {
System.out.println("输入0返回主菜单!");
String r = scanner.next().trim();
while (true) {
if (r.equals("0")) {
this.prompt();
break;
} else {
System.out.println("输入错误,请重新输入!");
r = scanner.next().trim();
}
}
}
//返回账单明细筛选菜单
public void returnDetailMenu() {
System.out.println("输入0返回账单明细筛选菜单!");
String r = scanner.next().trim();
while (true) {
if (r.equals("0")) {
this.detailedMenu();
break;
} else {
System.out.println("输入错误,请重新输入!");
r = scanner.next().trim();
}
}
}
public void detailedMenu() {
System.out.println("============账单明细筛选============");
System.out.println("1:只看收益");
System.out.println("2:只看支出");
System.out.println("0:返回主菜单");
System.out.println("============输入0-2选择============");
}
//用户账单筛选功能选择判定
public void selectDetailedMenu(){
String key = scanner.next().trim();
do {
switch (key) {
case "1":
money.earningsRecords();
returnDetailMenu();
key = scanner.next().trim();
break;
case "2":
money.paymentHistory();
returnDetailMenu();
key = scanner.next().trim();
break;
case "0":
break; // 如果用户输入 "0",则退出循环
default:
System.out.println("输入错误!请重新输入");
detailedMenu();
key = scanner.next().trim();
break;
}
} while (!"0".equals(key)); // 当用户输入 "0" 时,终止循环
}
}
2:money类
该类实现对用户余额的操作,账单的保存,查找,与输出
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
class money {
private final String[] addOrSub = new String[1000];//记录增减操作
private final String[] amount = new String[1000];//记录增减金额
private final String[] dateDetail = new String[1000];//记录金额变动时间
private final String[] balance = new String[1000];//记录对应余额
private double Money = 54321;
private int flag = 1;
//收益
public void earnings(double Earn) {
if (Earn <= 0) {
System.out.println("输入金额错误!");
} else {
this.Money += Earn;
System.out.println("+" + Earn + "元 " + " 余额" + this.Money + "元!");
details("收益入账", "+" + Earn + "元 ", date(), " 余额" + this.Money + "元!");
}
}
//消费
public void consume(String Business, double Cons) {
if (this.Money < Cons) {
System.out.println("余额不足!支付失败!!!");
} else if (Cons <= 0) {
System.out.println("输入金额错误!");
} else {
if (largeReminders(Cons)) {
this.Money -= Cons;
System.out.println("-" + Cons + "元 " + " 余额:" + this.Money + "元!");
details(Business, "-" + Cons + "元 ", date(), " 余额" + this.Money + "元!");
} else {
System.out.println("已取消支付!");
}
}
}
//获取消费时间
public String date() {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date(System.currentTimeMillis());
return simpleDateFormat.format(date);
}
//保存消费记录
public void details(String AddOrSub, String Amount, String Date, String Detail) {
addOrSub[flag - 1] = AddOrSub;//记录增减操作
amount[flag - 1] = Amount;//记录增减金额
dateDetail[flag - 1] = Date;//记录金额变动时间
balance[flag - 1] = Detail;//记录对应余额
this.flag += 1;
}
//输出消费记录
public void detailsPrint() {
System.out.println("============零钱通明细============");
if (flag == 1) {
System.out.println("暂无明细");
System.out.println("当前余额为:" + this.Money);
} else {
for (int i = flag - 2; i >= 0; i--) {
System.out.println(addOrSub[i] + "\t" + amount[i] + "\t" + dateDetail[i] + "\t" + balance[i] + "\t");
}
}
System.out.println("\n\n");
}
//大额消费判定
public boolean largeReminders(double LargeMoney) {
Scanner scanner = new Scanner(System.in);
if (LargeMoney >= 1000) {
System.out.println("大额交易,请输入 y/n 进行二次确认!");
String judgment = scanner.next().trim();
while (true) {
if (judgment.equals("y") || judgment.equals("Y")) {
return true;
} else if (judgment.equals("n") || judgment.equals("N")) {
return false;
} else {
System.out.println("输入错误,请重新输入!");
judgment = scanner.next().trim();
}
}
}
return true;
}
//查询收益
public void earningsRecords() {
int temp = 0;
System.out.println("=============入账明细============");
for (int i = 0; i < flag - 1; i++) {
if (addOrSub[i].equals("收益入账")) {
temp = 1;
System.out.println(dateDetail[i] + "\t" + addOrSub[i] + "\t" + amount[i] + "\t" + balance[i] + "\t");
}
}
if (temp == 0) {
System.out.println("暂无收益!");
}
System.out.println("\n\n");
}
//查询支出
public void paymentHistory() {
int temp = 0;
System.out.println("==============支出明细=============");
for (int i = 0; i < flag - 1; i++) {
if (!addOrSub[i].equals("收益入账") && addOrSub[i] != null) {
temp = 1;
System.out.println(dateDetail[i] + "\t" + addOrSub[i] + "\t" + amount[i] + "\t" + balance[i] + "\t");
}
}
if (temp == 0) {
System.out.println("暂无支出!");
}
System.out.println("\n\n");
}
}
3:main
public class Main {
public static void main(String[] args) {
Menu menu = new Menu();
menu.prompt();
menu.selectMenu();
}
}