一、项目准备工作

1. 编辑器采用EditPlus

  1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/196818/1611044918352-7d398ffa-7fa8-4a4d-980e-cb5723f92972.png#align=left&display=inline&height=86&margin=%5Bobject%20Object%5D&name=image.png&originHeight=86&originWidth=84&size=20376&status=done&style=none&width=84)

2. 预先准备好的自定义java工具类

此工具类的具体实现细节,暂不深究,按照注释能够调用即可。

  1. //Utility.java
  2. import java.util.*;
  3. /**
  4. Utility工具类:
  5. 将不同的功能封装为方法,就是可以直接通过调用方法使用它的功能,而无需考虑具体的功能实现细节。
  6. */
  7. public class Utility {
  8. private static Scanner scanner = new Scanner(System.in);
  9. /**
  10. 用于界面菜单的选择。该方法读取键盘,如果用户键入’1’-’4’中的任意字符,则方法返回。返回值为用户键入字符。
  11. */
  12. public static char readMenuSelection() {
  13. char c;
  14. for (; ; ) {
  15. String str = readKeyBoard(1);
  16. c = str.charAt(0);
  17. if (c != '1' && c != '2' && c != '3' && c != '4') {
  18. System.out.print("选择错误,请重新输入:");
  19. } else break;
  20. }
  21. return c;
  22. }
  23. /**
  24. 用于收入和支出金额的输入。该方法从键盘读取一个不超过4位长度的整数,并将其作为方法的返回值。
  25. */
  26. public static int readNumber() {
  27. int n;
  28. for (; ; ) {
  29. String str = readKeyBoard(4);
  30. try {
  31. n = Integer.parseInt(str);
  32. break;
  33. } catch (NumberFormatException e) {
  34. System.out.print("数字输入错误,请重新输入:");
  35. }
  36. }
  37. return n;
  38. }
  39. /**
  40. 用于收入和支出说明的输入。该方法从键盘读取一个不超过8位长度的字符串,并将其作为方法的返回值。
  41. */
  42. public static String readString() {
  43. String str = readKeyBoard(8);
  44. return str;
  45. }
  46. /**
  47. 用于确认选择的输入。该方法从键盘读取‘Y’或’N’,并将其作为方法的返回值。
  48. */
  49. public static char readConfirmSelection() {
  50. char c;
  51. for (; ; ) {
  52. String str = readKeyBoard(1).toUpperCase();
  53. c = str.charAt(0);
  54. if (c == 'Y' || c == 'N') {
  55. break;
  56. } else {
  57. System.out.print("选择错误,请重新输入:");
  58. }
  59. }
  60. return c;
  61. }
  62. private static String readKeyBoard(int limit) {
  63. String line = "";
  64. while (scanner.hasNext()) {
  65. line = scanner.nextLine();
  66. if (line.length() < 1 || line.length() > limit) {
  67. System.out.print("输入长度(不大于" + limit + ")错误,请重新输入:");
  68. continue;
  69. }
  70. break;
  71. }
  72. return line;
  73. }
  74. }

3. 项目目录结构

image.png

二、家庭记账项目step01

这一步,代码运行后,能够让用户按照终端提供的选项进行选择,并作出后续响应。

1. 在终端为用户提供选择功能的代码

  1. // FamilyAccount.java
  2. class FamilyAccount{
  3. public static void main(String[] args){
  4. boolean isFlag = true;
  5. String details = "收支\t账户金额\t收支金额\t说 明\n";
  6. while (isFlag)
  7. {
  8. System.out.println("-------家庭收支记账软件----------\n");
  9. System.out.println(" 1 收支明细");
  10. System.out.println(" 2 登记收入");
  11. System.out.println(" 3 登记支出");
  12. System.out.println(" 4 退 出");
  13. System.out.println(" 请选择1-4:");
  14. char select = Utility.readMenuSelection();
  15. switch(select){
  16. case '1' :
  17. System.out.println("--------------------收支明细--------------------");
  18. System.out.println(details);
  19. System.out.println("------------------------------------------------");
  20. break;
  21. case '2' :
  22. System.out.println("登记收入");
  23. break;
  24. case '3' :
  25. System.out.println("登记支出");
  26. break;
  27. case '4' :
  28. System.out.println("确认是否退出(Y/N)");
  29. char isExit = Utility.readConfirmSelection();
  30. if(isExit == 'Y'){
  31. isFlag = false;
  32. }
  33. break;
  34. }
  35. }
  36. }
  37. }

2. 运行改代码

  • 在项目目录打开cmd终端
  • 执行javac编译命令

    1. javac FamilyAccount.java
  • 运行项目代码

    1. java FamilyAccount

    3. 查看运行结果,并体验

    image.png

    三、收入/支出登记功能

  1. 调整项目功能代码 ```java class FamilyAccount{ public static void main(String[] args){
    1. boolean isFlag = true;
    2. String details = "收支\t账户金额\t收支金额\t说 明\n";
    3. int myAccount = 20000;
    4. while (isFlag)
    5. {
    6. System.out.println("-------家庭收支记账软件----------\n");
    7. System.out.println(" 1 收支明细");
    8. System.out.println(" 2 登记收入");
    9. System.out.println(" 3 登记支出");
    10. System.out.println(" 4 退 出");
    11. System.out.println(" 请选择1-4:");
    12. char select = Utility.readMenuSelection();
    13. switch(select){
    14. case '1' :
    15. System.out.println("--------------------收支明细--------------------");
    16. System.out.println(details);
    17. System.out.println("------------------------------------------------");
    18. break;
    19. case '2' :
    20. System.out.println("请输入收入金额:");
    21. int count1 = Utility.readNumber();
    22. System.out.println("请输入收入说明");
    23. String intro1 = Utility.readString();
    24. myAccount += count1;
    25. details += "收入\t" + myAccount + "\t\t" + count1 + "\t\t" + intro1 + "\n";
    26. System.out.println("--------------------登记完成--------------------");
    27. break;
    28. case '3' :
    29. System.out.println("请输入支出金额:");
    30. int count2 = Utility.readNumber();
    31. System.out.println("请输入支出说明");
    32. String intro2 = Utility.readString();
    33. myAccount -= count2;
    34. details += "支出\t" + myAccount + "\t\t" + count2 + "\t\t" + intro2 + "\n";
    35. System.out.println("--------------------登记完成--------------------");
    36. break;
    37. case '4' :
    38. System.out.println("确认是否退出(Y/N)");
    39. char isExit = Utility.readConfirmSelection();
    40. if(isExit == 'Y'){
    41. isFlag = false;
    42. }
    43. break;
    44. }
    45. }
    } }

```

  1. 运行并测试收入\支出登记功能

image.png