项目要求:
/*1.假设家庭起始的生活基本金为10000元
2.每次登记收入(菜单2)后,收入的金额应累加到基本金上,并记录本次收入明细,以便后续的查询
3.每次登记支出(菜单3)后,支出的金额应从基本金中扣除,并记录本次支出明细,以便后续的查询。
4.查询收支明细( 菜单1)时,将显示所有的收入、支出名细列表 */
我的构思过程:
先展示家庭收支记账软件的功能及菜单序号,引入Scanner类
因为涉及跳转对应菜单,这里选择流程控制语句中的switch语句
在每一个操作对应序号下进行相应操作,输出对应内容,
出现的问题:
初版的代码一次运行只能执行一个操作,但是我们需要一次运行执行所有操作,
改进初版代码,加入一个外部死循环,在一个控制台里实现所有命令:
将全局变量放到循环外,“死循环”:单一程序在某一环节由于未满足脱离循环的条件而出现的持续进行循环操作的现象。
import java.util.Objects;
import java.util.Scanner;
/*1.假设家庭起始的生活基本金为10000元
2.每次登记收入(菜单2)后,收入的金额应累加到基本金上,并记录本次收入明细,以便后续的查询
3.每次登记支出(菜单3)后,支出的金额应从基本金中扣除,并记录本次支出明细,以便后续的查询。
4.查询收支明细( 菜单1)时,将显示所有的收入、支出名细列表 */
public class FamilyLedger_2 {
public static void main(String[] args) {
// 因为使用分级目录,所以会在控制台输入想进入的步骤,导入Scanner
Scanner sc = new Scanner(System.in);
int choice = 0; //菜单选项
int start = 10000; //初始资金
int income = 0; //收入金额
String source = ""; //收入来源
int expenditure = 0; //支出金额
String reason = ""; //支出原因
int temp = start; //定义一个临时变量暂存变化后的资金
int sum = temp; //每次计算后的结果
while (true) { //大的循环体,用死循环实现
System.out.println("----------------家庭收支记账软件-----------------");
System.out.println("\t\t\t\t1 收支明细");
System.out.println("\t\t\t\t2 登记收入");
System.out.println("\t\t\t\t3 登记指出");
System.out.println("\t\t\t\t4 退 出");
System.out.println("请选择(1-4):");
choice = sc.nextInt();
// 限定范围
if (choice < 1 || choice > 4) {
System.out.println("您输入的内容有误!");
}
//因为除了一开始初始资金固定,后面都会有动态变化
//初始账单
if (choice == 1) {
Scanner a = new Scanner(System.in);
System.out.println("请输入初始金额:");
start = a.nextInt();
}
//收入账单
if (choice == 2) {
Scanner a = new Scanner(System.in);
System.out.println("请输入收入金额:");
income = a.nextInt();
System.out.println("请输入收入来源:");
source = a.next();
}
//支出账单
if (choice == 3) {
Scanner b = new Scanner(System.in);
System.out.println("请输入支出金额:");
expenditure = b.nextInt();
System.out.println("请输入支出原因:");
reason = b.next();
}
//因为涉及跳转对应菜单,这里选择流程控制语句中的switch语句
switch (choice) {
case 1:
System.out.println("----------------您的收支明细----------------");
System.out.println("\t\t\t\t初始资金" + start + "元");
break;
case 2:
System.out.println("收支\t" + "账户总金额\t\t" + "收支金额\t\t" + "说明");
temp = start + income;
System.out.println("收入\t" + (temp) + "\t\t\t" + (+income) + "\t\t\t" + source);
break;
case 3:
System.out.println("收支\t" + "账户总金额\t\t" + "收支金额\t\t" + "说明");
sum = temp - expenditure;
System.out.println("收入\t" + sum
+ "\t\t\t" + (-expenditure) + "\t\t" + reason);
break;
case 4:
//退出界面
String exit = "";
Scanner c = new Scanner(System.in);
System.out.println("请问您确定要退出此登录界面吗?");
System.out.println("确定退出(y)/不,我再想想(n):");
exit = c.next();
if (Objects.equals(exit, "y")) {
System.out.println("您已退出菜单!");
return;
} else if (Objects.equals(exit, "n")) {
System.out.println("您已进入菜单!");
break;
}
}
}
}
}
代码运行后得到:
"E:\IntelliJ IDEA 2019.3.3\jbr\bin\java.exe" "-javaagent:E:\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=49784:E:\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath E:\IdeaProjects\firstProject\out\production\firstProject FamilyLedger_1
----------------家庭收支记账软件-----------------
1 收支明细
2 登记收入
3 登记指出
4 退 出
请选择(1-4):
1
请输入初始金额:
10000
----------------您的收支明细----------------
初始资金10000元
----------------家庭收支记账软件-----------------
1 收支明细
2 登记收入
3 登记指出
4 退 出
请选择(1-4):
2
请输入收入金额:
请输入收入来源:
200
搬砖
收支 账户总金额 收入金额 说明
收入 10200 200 搬砖
----------------家庭收支记账软件-----------------
1 收支明细
2 登记收入
3 登记指出
4 退 出
请选择(1-4):
3
请输入支出金额:
请输入支出原因:
100
点外卖
收支 账户总金额 收入金额 说明
收入 10100 -100 点外卖
----------------家庭收支记账软件-----------------
1 收支明细
2 登记收入
3 登记指出
4 退 出
请选择(1-4):
4
请问您确定要退出此登录界面吗?
确定退出(y)/不,我再想想(n):
y
您已退出菜单!
进程已结束,退出代码 0
改进的2.0版本:
import java.util.Objects;
import java.util.Scanner;
/*1.假设家庭起始的生活基本金为10000元
2.每次登记收入(菜单2)后,收入的金额应累加到基本金上,并记录本次收入明细,以便后续的查询
3.每次登记支出(菜单3)后,支出的金额应从基本金中扣除,并记录本次支出明细,以便后续的查询。
4.查询收支明细( 菜单1)时,将显示所有的收入、支出名细列表 */
public class FamilyLedger_2 {
public static void main(String[] args) {
// 因为使用分级目录,所以会在控制台输入想进入的步骤,导入Scanner
Scanner sc = new Scanner(System.in);
int choice = 0; //菜单选项
int start = 10000; //初始资金
int income = 0; //收入金额
String source = ""; //收入来源
int expenditure = 0; //支出金额
String reason = ""; //支出原因
int temp = start; //定义一个临时变量暂存变化后的资金
int sum = temp; //每次计算后的结果
while (true) { //大的循环体,用死循环实现
System.out.println("----------------家庭收支记账软件-----------------");
System.out.println("\t\t\t\t1 收支明细");
System.out.println("\t\t\t\t2 登记收入");
System.out.println("\t\t\t\t3 登记指出");
System.out.println("\t\t\t\t4 退 出");
System.out.println("请选择(1-4):");
choice = sc.nextInt();
// 限定范围
if (choice < 1 || choice > 4) {
System.out.println("您输入的内容有误!");
}
//因为除了一开始初始资金固定,后面都会有动态变化
//初始账单
/* if (choice == 1) {
Scanner a = new Scanner(System.in);
System.out.println("请输入初始金额:");
start = a.nextInt();
}*/
//收入账单
if (choice == 2) {
Scanner a = new Scanner(System.in);
System.out.println("请输入收入金额:");
income = a.nextInt();
System.out.println("请输入收入来源:");
source = a.next();
}
//支出账单
if (choice == 3) {
Scanner b = new Scanner(System.in);
System.out.println("请输入支出金额:");
expenditure = b.nextInt();
System.out.println("请输入支出原因:");
reason = b.next();
}
//因为涉及跳转对应菜单,这里选择流程控制语句中的switch语句
switch (choice) {
case 1:
System.out.println("----------------您的收支明细----------------");
System.out.println("收支\t" + "账户总金额\t\t" + "收支金额\t\t" + "说明");
System.out.println("收入\t" + (temp) + "\t\t\t" + (+income) + "\t\t\t" + source);
System.out.println("收入\t" + sum + "\t\t\t" + (-expenditure) + "\t\t" + reason);
break;
case 2:
System.out.println("收支\t" + "账户总金额\t\t" + "收支金额\t\t" + "说明");
temp = start + income;
System.out.println("收入\t" + (temp) + "\t\t\t" + (+income) + "\t\t\t" + source);
break;
case 3:
System.out.println("收支\t" + "账户总金额\t\t" + "收支金额\t\t" + "说明");
sum = temp - expenditure;
System.out.println("收入\t" + sum + "\t\t\t" + (-expenditure) + "\t\t" + reason);
break;
case 4:
//退出界面
String exit = "";
Scanner c = new Scanner(System.in);
System.out.println("请问您确定要退出此登录界面吗?");
System.out.println("确定退出(y)/不,我再想想(n):");
exit = c.next();
if (Objects.equals(exit, "y")) {
System.out.println("您已退出菜单!");
return;
} else if (Objects.equals(exit, "n")) {
System.out.println("您已进入菜单!");
break;
}
}
}
}
}
运行后的结果:
"E:\IntelliJ IDEA 2019.3.3\jbr\bin\java.exe" "-javaagent:E:\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=50160:E:\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath E:\IdeaProjects\firstProject\out\production\firstProject FamilyLedger_2
----------------家庭收支记账软件-----------------
1 收支明细
2 登记收入
3 登记指出
4 退 出
请选择(1-4):
2
请输入收入金额:
200
请输入收入来源:
搬砖
收支 账户总金额 收支金额 说明
收入 10200 200 搬砖
----------------家庭收支记账软件-----------------
1 收支明细
2 登记收入
3 登记指出
4 退 出
请选择(1-4):
3
请输入支出金额:
500
请输入支出原因:
买棉花娃娃
收支 账户总金额 收支金额 说明
收入 9700 -500 买棉花娃娃
----------------家庭收支记账软件-----------------
1 收支明细
2 登记收入
3 登记指出
4 退 出
请选择(1-4):
1
----------------您的收支明细----------------
收支 账户总金额 收支金额 说明
收入 10200 200 搬砖
收入 9700 -500 买棉花娃娃
----------------家庭收支记账软件-----------------
1 收支明细
2 登记收入
3 登记指出
4 退 出
请选择(1-4):
4
请问您确定要退出此登录界面吗?
确定退出(y)/不,我再想想(n):
y
您已退出菜单!
进程已结束,退出代码 0
但是间隔太近,加入分隔
import java.util.Objects;
import java.util.Scanner;
/*1.假设家庭起始的生活基本金为10000元
2.每次登记收入(菜单2)后,收入的金额应累加到基本金上,并记录本次收入明细,以便后续的查询
3.每次登记支出(菜单3)后,支出的金额应从基本金中扣除,并记录本次支出明细,以便后续的查询。
4.查询收支明细( 菜单1)时,将显示所有的收入、支出名细列表 */
public class FamilyLedger_2 {
public static void main(String[] args) {
// 因为使用分级目录,所以会在控制台输入想进入的步骤,导入Scanner
Scanner sc = new Scanner(System.in);
int choice = 0; //菜单选项
int start = 10000; //初始资金
int income = 0; //收入金额
String source = ""; //收入来源
int expenditure = 0; //支出金额
String reason = ""; //支出原因
int temp = start; //定义一个临时变量暂存变化后的资金
int sum = temp; //每次计算后的结果
while (true) { //大的循环体,用死循环实现
System.out.println("----------------家庭收支记账软件-----------------");
System.out.println("\t\t\t\t1 收支明细");
System.out.println("\t\t\t\t2 登记收入");
System.out.println("\t\t\t\t3 登记指出");
System.out.println("\t\t\t\t4 退 出");
System.out.println("请选择(1-4):");
choice = sc.nextInt();
// 限定范围
if (choice < 1 || choice > 4) {
System.out.println("您输入的内容有误!");
}
//因为除了一开始初始资金固定,后面都会有动态变化
//初始账单
/* if (choice == 1) {
Scanner a = new Scanner(System.in);
System.out.println("请输入初始金额:");
start = a.nextInt();
}*/
//收入账单
if (choice == 2) {
Scanner a = new Scanner(System.in);
System.out.println("请输入收入金额:");
income = a.nextInt();
System.out.println("请输入收入来源:");
source = a.next();
}
//支出账单
if (choice == 3) {
Scanner b = new Scanner(System.in);
System.out.println("请输入支出金额:");
expenditure = b.nextInt();
System.out.println("请输入支出原因:");
reason = b.next();
}
//因为涉及跳转对应菜单,这里选择流程控制语句中的switch语句
switch (choice) {
case 1:
System.out.println("----------------您的收支明细----------------");
System.out.println("收支\t" + "账户总金额\t\t" + "收支金额\t\t" + "说明");
System.out.println("收入\t" + (temp) + "\t\t\t" + (+income) + "\t\t\t" + source);
System.out.println("支出\t" + sum + "\t\t\t" + (-expenditure) + "\t\t" + reason);
break;
case 2:
System.out.println("收支\t" + "账户总金额\t\t" + "收支金额\t\t" + "说明");
temp = start + income;
System.out.println("收入\t" + (temp) + "\t\t\t" + (+income) + "\t\t\t" + source);
System.out.println("*******************************************************");
System.out.println("\t");
break;
case 3:
System.out.println("收支\t" + "账户总金额\t\t" + "收支金额\t\t" + "说明");
sum = temp - expenditure;
System.out.println("支出\t" + sum + "\t\t\t" + (-expenditure) + "\t\t" + reason);
System.out.println("*******************************************************");
System.out.println("\t");
break;
case 4:
//退出界面
String exit = "";
Scanner c = new Scanner(System.in);
System.out.println("请问您确定要退出此登录界面吗?");
System.out.println("确定退出(y)/不,我再想想(n):");
exit = c.next();
if (Objects.equals(exit, "y")) {
System.out.println("您已退出菜单!");
return;
} else if (Objects.equals(exit, "n")) {
System.out.println("您已进入菜单!");
break;
}
}
}
}
}
最终运行:
"E:\IntelliJ IDEA 2019.3.3\jbr\bin\java.exe" "-javaagent:E:\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=50315:E:\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath E:\IdeaProjects\firstProject\out\production\firstProject FamilyLedger_2
----------------家庭收支记账软件-----------------
1 收支明细
2 登记收入
3 登记指出
4 退 出
请选择(1-4):
2
请输入收入金额:
200
请输入收入来源:
搬砖
收支 账户总金额 收支金额 说明
收入 10200 200 搬砖
*******************************************************
----------------家庭收支记账软件-----------------
1 收支明细
2 登记收入
3 登记指出
4 退 出
请选择(1-4):
3
请输入支出金额:
100
请输入支出原因:
干饭
收支 账户总金额 收支金额 说明
支出 10100 -100 干饭
*******************************************************
----------------家庭收支记账软件-----------------
1 收支明细
2 登记收入
3 登记指出
4 退 出
请选择(1-4):
1
----------------您的收支明细----------------
收支 账户总金额 收支金额 说明
收入 10200 200 搬砖
支出 10100 -100 干饭
----------------家庭收支记账软件-----------------
1 收支明细
2 登记收入
3 登记指出
4 退 出
请选择(1-4):
4
请问您确定要退出此登录界面吗?
确定退出(y)/不,我再想想(n):
y
您已退出菜单!
进程已结束,退出代码 0