项目要求
该软件能够记录家庭的收入、支出,并能够打印收支明细表
项目采用分级菜单方式。主菜单如下:
------------------家庭收支记账软件 ------------------
1.收支明细
2.登记收入
3.登记支出
4.退出
请选择(1-4)
家庭初始资金为10000元
查询菜单1时,需要显示所有的收入、支出明细列表
登记完收入(菜单2)、支出(菜单3)以后,需要在初始资金的基础上增加或者扣除
本小白思路
1.首先做这道题时看到要求本小白是没有任何思路的,之前学的基础知识没有办法在脑海里运用起来
2.看到其他博主写的内容开始慢慢理解怎样写出来
3.利用到基础语法,方法,数组,utility工具包
4.基础语法,方法和数组是之前学到的内容,所以困难点在于utility工具包内容以及运用方面的理解
5.
总结
1.需要先了解一下utility工具包的内容,方便后续引用
2.了解一下编写代码的大致流程然后边引用工具包边思考编写内容
3.初始化的内容,一开始最好就思考全面,编写出来
代码展示
先来展示一下utility工具包的内容
package project;
import project.utility;
import java.util.Scanner;
/**
Utility工具类:
将不同的功能封装为方法,就是可以直接通过调用方法使用它的功能,而无需考虑具体的功能实现细节。
*/
public class utility {
private static Scanner scanner = new Scanner(System.in);
/**
用于界面菜单的选择。该方法读取键盘,如果用户键入’1’-’4’中的任意字符,则方法返回。返回值为用户键入字符。
*/
public static char readMenuSelection() {
char c;
for (; ; ) {
String str = readKeyBoard(1);
c = str.charAt(0);
if (c != '1' && c != '2' && c != '3' && c != '4') {
System.out.print("选择错误,请重新输入:");
} else break;
}
return c;
}
/**
用于收入和支出金额的输入。该方法从键盘读取一个不超过4位长度的整数,并将其作为方法的返回值。
*/
public static int readNumber() {
int n;
for (; ; ) {
String str = readKeyBoard(4);
try {
n = Integer.parseInt(str);
break;
} catch (NumberFormatException e) {
System.out.print("数字输入错误,请重新输入:");
}
}
return n;
}
/**
用于收入和支出说明的输入。该方法从键盘读取一个不超过8位长度的字符串,并将其作为方法的返回值。
*/
public static String readString() {
String str = readKeyBoard(8);
return str;
}
/**
用于确认选择的输入。该方法从键盘读取‘Y’或’N’,并将其作为方法的返回值。
*/
public static char readConfirmSelection() {
char c;
for (; ; ) {
String str = readKeyBoard(1).toUpperCase();
c = str.charAt(0);
if (c == 'Y' || c == 'N') {
break;
} else {
System.out.print("选择错误,请重新输入:");
}
}
return c;
}
private static String readKeyBoard(int limit) {
String line = "";
while (scanner.hasNext()) {
line = scanner.nextLine();
if (line.length() < 1 || line.length() > limit) {
System.out.print("输入长度(不大于" + limit + ")错误,请重新输入:");
continue;
}
break;
}
return line;
}
}
然后我们来看一下,整个程序的编写(这里小白是按照其他博主的思绪写的所以程序内容也相同,但是修改了一下,原内容有点bug)
大致理清一下思路:
1.编写目录(目录这里都是直接输出的)
2.编写收支明细(主要就是安排一下“收支”、“账户总金额”、“收支金额”、“说明”,这些标头的位置)
3.开始写登记收入的方法(这里就开始运用到utility工具包了)
4.写登记支出的方法(这里的流程和收入的几乎相同就是修改一下±号以及变量名称之类的内容即可)
5.调用方法,菜单4退出界面在main方法里直接写程序
6.需要注意一下就是登记收入和支出的菜单返回值需要写为int返回数值money,同样需要呈现出一个明细表的界面,我们的a++也需要写在调用方法那里
package project;
/*
家庭收支记录
*/
import project.utility;
import java.util.Scanner;
public class income {
static int money = 10000;
public static void main(String[] args) {
int a = 0;
String[][] arr = new String[20][4];
while(true) {
//直接调用菜单展现选项
menu();
//然后输入选项选择(但是为什么用char而且还要调用utility呢)
char b = utility.readMenuSelection();
switch (b) {
case '1':
case1(arr);
break;
case '2':
money = case2(arr, a, money);
a++;
break;
case '3':
money = case3(arr, a, money);
a++;
break;
case '4':
System.out.println("确认是否退出(Y/N)");
char s = utility.readConfirmSelection();
if(s == 'y') {
return;
} else {
break;
}
}
}
}
//标题
public static void menu() {
System.out.println("--------------------家庭收支记账软件--------------------");
System.out.println();
System.out.println(" 1.收支明细");
System.out.println(" 2.登记收入");
System.out.println(" 3.登记支出");
System.out.println(" 4.退出");
System.out.println();
System.out.println("请选择(1-4)");
}
//目录1 收支明细
public static void case1(String[][] arr) {
System.out.println("--------------------收支明细---------------------");
System.out.println("收支" + " " + "账户总金额" + " " + "收支金额" + " " + "说明");
for(int i = 0; i<arr.length; i++) {
if(arr[i][0] != null) {
System.out.println(arr[i][0] + " " + arr[i][1] + " " + arr[i][2] + " " + arr[i][3]);
}
}
System.out.println("--------------------");
}
//目录2 登记收入
public static int case2(String[][] arr,int a, int money) {
//从键盘读取输入的金额(int)
System.out.println("请输入本次收入金额");
int income = utility.readNumber();
//从键盘读取输入的原因(String)
System.out.println("请输入本次收入原因");
String why = utility.readString();
//按照要求存储数据(数组)
arr[a][0] = "收入";
money += income;
arr[a][1] = money + " ";
arr[a][2] = "+" + income;
arr[a][3] = " " + why;
a++;
//添加成功
System.out.println("添加成功");
return money;
}
//目录3 登记支出
public static int case3(String[][] arr, int a , int money) {
//从键盘读取支出的金额(int)
System.out.println("请输入本次支出的金额");
int spend = utility.readNumber();
//从键盘读取支出的原因(String)
System.out.println("请输入本次支出的原因");
String why2 = utility.readString();
//按照要求存储数据(数组)
arr[a][0] = "支出";
money -= spend;
arr[a][1] = money + " ";
arr[a][2] = "-" + spend;
arr[a][3] = " " + why2;
//添加成功
System.out.println("添加成功");
return money;
}
}