本文共 1068 个字数,平均阅读时长 ≈ 3分钟
需求分析
目标
- 模拟实现基于文本界面的《豹捷记账》
- 掌握初步的编程技巧和调试技巧
主要设计以下知识点
- 变量的定义
- 基本数据类型的使用
- 循环语句
- 分支语句
- 方法声明、调用和返回值的接收
- 简单的屏幕输出格式控制
深入分析
- 模拟实现基于文本界面的《豹捷记账》
- 该软件能够记录家庭的收入、支出,并额能够打印收支明细表。
- 项目采用分级菜单方式。主菜单如下
-----------豹捷记账软件-----------
1.收支明细
2.登记收入
3.登记支出
4.退出
请选择(1-4):_
- 假设家庭起始的生活基本金为10000元。
- 每次登记收入(菜单2)后,收入的金额应累加到基本金上,并记录本次收入明细,以便后续的查询。
- 每次登记支出(菜单3)后,支出的金额应从基本金中扣除,并记录本次支出明细,以便后续的查询。
- 查询收支明细(菜单1)时,将显示所有的收入、支出名细列表
- "登记收入"的界面及操作过程如下所示:
-----------豹捷记账软件-----------
1.收支明细
2.登记收入
3.登记支出
4.退出
请选择(1-4): 2
本次收入金额:1000
本次收入说明:劳务费
- "登记支出"的界面及操作过程如下所示:
-----------豹捷记账软件-----------
1.收支明细
2.登记收入
3.登记支出
4.退出
请选择(1-4): 3
本次收入金额:800
本次收入说明:物业费
- "收支明细"的界面及操作过程如下所示:
-----------豹捷记账软件-----------
1.收支明细
2.登记收入
3.登记支出
4.退出
请选择(1-4): 1
-----------当前收支明细-----------
收支 账户金额 收支金额 说明
收入 11000 1000 劳务费
收入 11000 800 物业费
----------------------------------
- 提示:明细表格的对其,可以简单使用制表符'\t'来实现
- "退出"的界面及操作过程如下所示:
-----------豹捷记账软件-----------
1.收支明细
2.登记收入
3.登记支出
4.退出
请选择(1-4): 4
确认是否推出(Y/N): _
- 基本金的记录可以使用int类型的变量来实现:int balance = 10000
- 收支明细记录可以使用String类型的变量来实现,其初始值为明细表的表头。例如
String details = "收支\t账户金额\t说 明\n"; - 在登记收支时,将收支金额与balance相加或相减,收支记录直接串接到details后面即可
系统设计
流程图
主流程:
收入和支出处理流程
键盘访问的实现
- 项目中提供了Utility.java类,可用来方便地实现键盘访问。
该类提供以下静态方法
- public static char readMenuSelection():该方法读取键盘输入,如果用户键入'1-4'中的任意字符,则方法返回。返回值为用户键入的字符
- public static int readNumber():该方法从键盘读取一个不超过4位长度的整数,并将其座位方法的返回值
- public static String readString():该方法从键盘读取一个不超过8位长度的字符串,并将其座位方法的返回值。
- public static char readConfirmSelection():该方法从键盘读取'Y'或'N',并将其作为方法的返回值
功能实现
实现主程序结构
- 创建FamilyAccount类及main方法
- 在main方法中,参照主流程图,实现程序主体结构
- 测试程序,确认可以正常执行第1和第4菜单选项
实现收入和支出登记处理
- 在main方法中,参照收入和支出流程,实现"登记收入"功能
- 测试"等级收入"功能
- 在main方法中,参照收入和支出流程,实现"登记支出"功能
- 测试"登记支出"功能
具体实现
code代码
/*
阶段一的项目:豹捷记账软件的实现
*/
public class BaoJieAccount {
public static void main(String[] args) {
//初始金额
int balance = 10000;
//记录收支的信息
String info = "";
//判断是否退出
boolean exitFlag = true;
//记账菜单及实现
while (exitFlag) {
//记账菜单
System.out.println("------------豹捷记账软件------------");
System.out.println("\n\t\t\t1.收支明细");
System.out.println("\t\t\t2.登记收入");
System.out.println("\t\t\t3.登记支出");
System.out.println("\t\t\t4.退出");
System.out.print("\n\t\t\t请选择(1-4):");
//获取用户的选项
char selection = Utility.readMenuSelection();
//根据用户选择对应操作
switch (selection) {
case '1':
System.out.println("------------当前收支明细记录------------");
System.out.println("收支\t\t账户金额\t\t收支金额\t\t说 明");
System.out.print(info);
System.out.println("剩余金额:" + balance);
System.out.println("-------------------------------------");
break;
case '2':
System.out.print("\n本次收入金额:");
int money = Utility.readNumber();
if (money > 0) balance += money;
System.out.print("本次收入说明:");
String addDesc = Utility.readString();
info += "收入\t\t" + balance + "\t\t" + money + "\t\t\t" + addDesc + "\n";
System.out.println("-------------登记完成--------------");
break;
case '3':
System.out.print("\n本次支出金额:");
int out = Utility.readNumber();
if (out > 0) balance -= out;
System.out.print("本次收入说明:");
String delDesc = Utility.readString();
info += "收入\t\t" + balance + "\t\t" + out + "\t\t\t" + delDesc + "\n";
System.out.println("-------------登记完成--------------");
break;
case '4':
System.out.print("确认是否推出(Y/N):");
char isExit = Utility.readConfirmSelection();
if (isExit == 'Y') exitFlag = false;
break;
}
}
}
}
评论 (0)