一、要求
程序需求说明:能够记录家庭的收入、支出,并能够打印收支明细表
项目采用分级菜单方式。主菜单如下:(用户键盘键入选择)
说明:1. 假设家庭起始的生活基本金为10000元;
2. 每次登记收入(菜单2)后,收入的金额应累加到基本金上,并记录本次收入明细,以便后续的查询;
3. 每次登记支出(菜单3)后,支出的金额应从基本金中扣除,并记录本次支出明细,以便后续的查询;
4. 查询收支明细(菜单1)时,将显示所有的收入、支出名细列表;
5. 能顺利进入每个功能里面;
6. 选择(菜单1)时,能清楚显示所有收入、支出及其原因;
7. 引入工具类,实现一些错误输入判断,使项目代码更完善。
2、实现
1.导包
//可以先导入程序包,也可以先编译程序后按Alt+Enter直接导入
import java.util.Scanner;
import java.util.regex.Pattern;
2.定义通用变量
//这里定义的静态对象,可以用于每一个方法中
private static Scanner sc = new Scanner(System.in);
//定义初始的账户余额
private static double sumMoney = 10000;
//定义数组的条数
private static int count = 0;
3.主函数
//其中定义数组,同时将界面显示出来
//用switch实现用户选择
public static void main(String[] args) {
//定义数组
String[][] arr = new String[10][4];
//定义一个boolean值,保持初始页面
boolean flag = true;
while (flag) {
arr = expandArr(arr);
System.out.println("----------家庭收支记账软件----------");
System.out.println(" 1 收支明细 ");
System.out.println(" 2 登记收入 ");
System.out.println(" 3 登记支出 ");
System.out.println(" 4 退 出 ");
System.out.print(" 请选择(1-4):");
String num = sc.next();
char read = readNum(num);
switch (read) {
case '1':
//调用查看信息的方法
reeInformation(arr);
break;
case '2':
//调用添加收入记录的方法
addRecord(arr);
break;
case '3':
//调用添加支出记录的方法
addExpense(arr);
break;
case '4':
//调用选择退出的方法
if (quitSystem()){
flag = false;
}
else break;
default:
System.out.println("输入错误!");
}
}
}
4.判断用户输入字符是否符合要求 (使用死循环,符合要求输出)
//设置死循环,判断输入的值是否符合条件
// 返回值类型为char
// 用户输入类型为String
public static char readNum(String num) {
char c;
//设置死循环,满足条件后退出,直到获取到正确操作数字符
while (true) {
//获取参数字符串的第一个字符
c = num.charAt(0);
//判断是否对应给定的操作数字符
if (c != '1' && c != '2' && c != '3' && c != '4') {
System.out.print("输入数字错误,请按提示正确输入:");
num = sc.next();
} else break;
}
//返回给定的正确操作数字符
return c;
}
5.判断输入内容是否符合要求 (是否为全数字、是否为全汉字,使用特定转换语句实现 )
//判断字符
public static int printInt(String num2){
//调用判断字符串是否全为数字的方法的返回值进行判断
if(isNumber(num2)){
//将获取到的数字字符串转为int类型的数字
int y = Integer.parseInt(num2);
return y;
}else{
//写一个死循环,直到用户输入全为数字字符串时才停止
while(true){
System.out.print("你输入的值无意义! 请你重新输入: ");
String num = sc.next();
if(isNumber(num)){
int y1 = Integer.parseInt(num);
return y1;
}
}
}
}
//判断字符是否全为数字
public static boolean isNumber(String str) {
//使用正则表达式进行判断是否全为数字
Pattern pattern = Pattern.compile("[0-9]*");
return pattern.matcher(str).matches();
}
//判断字符串是否全为汉字,是则返回,否则从新输入字符串
public static String printString(String x){
if(isChinese(x)){
return x;
}else<