1、项目要求
- 从需求说明中看出需要实现四个功能,根据读取的用户输入数字实现不同的功能,记账系统应该在用户主动退出之前一直显示。(涉及到循环语句)
- 功能1的实现:屏幕输出明细(涉及到String字符串的使用,这里没有想到!)
- 功能2的实现:收入金额及收入说明(涉及到从键盘扫描数据,字符串的串联)
- 功能3的实现:支出金额及支出明细(涉及到从键盘扫描数据,字符串的串联,if-esle分支结构),这里需要判断是否超支!
- 功能4的实现:退出记账系统,意味着退出死循环。
注:这里涉及到的调用函数操作后续可能才会讲到。
2、项目实现
1. 实现步骤
2. 代码
class FamilyAccount
{
public static void main(String[] args)
{
//程序退出之前保证数据不丢失,所以这两个串联变量是要声明在循环之外的。
int money = 10000; //初始本金
int income = 0,outcome = 0; //记录收入支出
String details = "收支\t账户金额\t收支金额\t说 明\n";
String reason = "";
//循环结束的两种方式,
//1.定义一个flag=true,在循环中的某处使flag变为false
//2.循环设置为死循环,然后程序中的某一处加一个break
label:while(true) //三种循环方式选哪个都可以
{
System.out.println("-------------------家庭收支记账软件-------------------\n");
System.out.println("\t\t 1 收支明细");
System.out.println("\t\t 2 登记收入");
System.out.println("\t\t 3 登记支出");
System.out.println("\t\t 4 退 出\n");
System.out.print("\t\t 请选择(1-4):");
//获取用户的选择:1-4
char selection = Utility.readMenuSelection();
System.out.println();
switch(selection)
{
//定义收入和支出金额
//根据utility中的判断方式,这里应该带引号的数字。
case '1': //当前收支明细
System.out.println("-------------------当前收支记录-------------------\n");
System.out.println(details);
System.out.println("--------------------------------------------------\n");
break;
case '2': //登记收入
//System.out.println("2 shouru");
System.out.print("请输入收入金额(不超过四位数):");
income = Utility.readNumber();
money = money + income;
System.out.print("请输入收入说明(不超过八个字符):");
reason = Utility.readString();
details += "收入" + "\t" + money + "\t\t" + income + "\t\t" + reason + "\n";
System.out.println("-------------------登记完成-------------------\n");
break;
case '3': //登记支出
//System.out.println("3 zhichu");
System.out.print("请输入支出金额(不超过四位数):");
outcome = Utility.readNumber();
System.out.print("请输入支出说明(不超过八个字符):");
reason = Utility.readString();
//这里考虑不周到,有可能支出大于账户余额
if (outcome <= money)
{
money = money - outcome;
details += "支出" + "\t" + money + "\t\t" + outcome + "\t\t" + reason + "\n";
}else
{
System.out.println("账户余额不足,支付失败!");
}
System.out.println("-------------------登记完成-------------------\n");
break;
case '4': //退出系统代表着退出循环
//System.out.println("4 tuichu");
System.out.print("确认是否退出(Y/N,不区分大小写):");
char confirm = Utility.readConfirmSelection();
System.out.println();
if (confirm == 'Y')
{
break label;
}
break;
}
}
}
}
注意:在switch-case分支结构中不可以重复定义同一个变量,因为可能都执行到。
3. 运行结果
D:\MyDownloads\JAVA\my_java_code\project01>java FamilyAccount
-------------------家庭收支记账软件-------------------
1 收支明细
2 登记收入
3 登记支出
4 退 出
请选择(1-4):1
-------------------当前收支记录-------------------
收支 账户金额 收支金额 说 明
--------------------------------------------------
-------------------家庭收支记账软件-------------------
1 收支明细
2 登记收入
3 登记支出
4 退 出
请选择(1-4):2
请输入收入金额(不超过四位数):200
请输入收入说明(不超过八个字符):家教
-------------------登记完成-------------------
-------------------家庭收支记账软件-------------------
1 收支明细
2 登记收入
3 登记支出
4 退 出
请选择(1-4):3
请输入支出金额(不超过四位数):400
请输入支出说明(不超过八个字符):买衣服
-------------------登记完成-------------------
-------------------家庭收支记账软件-------------------
1 收支明细
2 登记收入
3 登记支出
4 退 出
请选择(1-4):2
请输入收入金额(不超过四位数):1500
请输入收入说明(不超过八个字符):工资
-------------------登记完成-------------------
-------------------家庭收支记账软件-------------------
1 收支明细
2 登记收入
3 登记支出
4 退 出
请选择(1-4):4
确认是否退出(Y/N,不区分大小写):n
-------------------家庭收支记账软件-------------------
1 收支明细
2 登记收入
3 登记支出
4 退 出
请选择(1-4):4
确认是否退出(Y/N,不区分大小写):r
选择错误,请重新输入:f
选择错误,请重新输入:y
D:\MyDownloads\JAVA\my_java_code\project01>