【Java】—— 使用Java在控制台实现海豚记账软件

目录

1. 项目背景

2. 代码思路

2.1 主要功能

2.2 数据结构

2.3 控制流程

3. 实现步骤

3.1 初始化变量

3.2 显示菜单

3.3 处理用户输入

3.4 退出程序

4. 知识点解析

4.1 Scanner类

4.2 字符与数字转换

4.3 循环与条件判断

5.完整代码

6.运行结果展示


1. 项目背景

        海豚记账软件是一款简单的个人财务管理工具,可以帮助用户记录收入和支出,以便更好地管理个人财务。本软件提供了收支明细、登记收入、登记支出等功能,方便用户进行日常的财务管理。

2. 代码思路

2.1 主要功能

  • 收支明细:展示用户的收支情况,包括收支类型、账户金额、收支金额和说明等。
  • 登记收入:允许用户输入收入金额和说明,更新账户余额。
  • 登记支出:允许用户输入支出金额和说明,更新账户余额。
  • 退出程序:用户可以选择退出程序。

2.2 数据结构

  • balance:用于存储账户余额。
  • info:用于存储收支明细信息。

2.3 控制流程

  • 主循环:通过一个布尔变量 isFlag 控制程序是否继续运行。
  • 菜单选择:根据用户的输入选择相应的功能。
  • 功能实现:根据用户的选择执行相应的操作。

3. 实现步骤

3.1 初始化变量

boolean isFlag = true;
int balance = 100000;
String info = "";

3.2 显示菜单

使用 Utility.readMenuSelection() 方法获取用户的选项,并根据选项执行相应的操作。

while (isFlag) {
    System.out.println("---------------海豚记账软件--------------\n");
    System.out.println("               1、收支明细");
    System.out.println("               2、登记收入");
    System.out.println("               3、登记支出");
    System.out.println("               4、退   出\n");
    System.out.println("              请选择(1-4):");
    char selection = Utility.readMenuSelection();
    // ...
}

3.3 处理用户输入

根据用户的选择,调用相应的方法处理用户输入的数据,并更新账户余额和收支明细。

switch (selection) {
    case '1':
        // 显示收支明细
        break;
    case '2':
        // 登记收入
        break;
    case '3':
        // 登记支出
        break;
    case '4':
        // 退出程序
        break;
}

3.4 退出程序

当用户选择退出时,询问用户是否确认退出,如果用户确认,则设置 isFlagfalse,结束程序。

case '4':
    System.out.println("\n确认是否退出(Y/N):");
    char isExit = Utility.readConfirmSelection();
    if (isExit == 'Y') {
        isFlag = false;
    }
    break;

4. 知识点解析

4.1 Scanner类

        在本项目中,我们使用了 Scanner来读取用户的键盘输入。Scanner 是 Java 的一个实用工具类,可以方便地从不同的输入流(如键盘输入、文件输入等)中读取不同类型的数据。在本项目中,我们使用 Scanner 类的 nextLine() 方法读取一行字符串,然后进行处理。

4.2 字符与数字转换

        在处理用户输入时,我们需要将字符转换为数字。在本项目中,我们使用了 Integer.parseInt() 方法将字符串转换为整数。需要注意的是,如果用户输入的不是有效的整数,parseInt() 方法会抛出 NumberFormatException 异常,因此我们需要使用 try-catch 语句来捕获这个异常,并提示用户重新输入。

4.3 循环与条件判断

        在本项目中,我们使用了 while 循环来实现主菜单的循环显示,以及 switch-case 语句来实现不同选项的功能。同时,我们还使用了 if-else 语句来判断用户是否确认退出程序。这些控制结构使得程序能够根据用户的输入执行相应的操作,并保持程序的正常运行。

5.完整代码

Utility.java

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;
    }
}

DolphinAcount.java


// 海豚记账软件的实现
public class DolphinAcount {
    public static void main(String[] args) {
        boolean isFlag = true;

        //初始金额
        int balance = 100000;
        //记录收支的信息
        String info = "";

        while (isFlag){
            System.out.println("---------------海豚记账软件--------------\n");
            System.out.println("               1、收支明细");
            System.out.println("               2、登记收入");
            System.out.println("               3、登记支出");
            System.out.println("               4、退   出\n");
            System.out.println("              请选择(1-4):");

            char selection = Utility.readMenuSelection();    // 获取用户的选项:'1'  '2'  '3'  '4'

            switch (selection){
                case '1':
                    System.out.println("--------------当前收支明细---------------");
                    System.out.println("收支\t\t账户金额\t收支金额\t说  明");
                    System.out.println(info);
                    System.out.println("---------------------------------------\n");
                    break;
                case '2':
                    System.out.print("本次收入金额:");
                    int money1 = Utility.readNumber();
                    if (money1 > 0){
                        balance += money1;
                    }
                    System.out.print("本次收入说明:");
                    String addDesc = Utility.readString();
                    info += "收入\t\t" + balance + "\t" + money1 + "\t\t" + addDesc + "\n";

                    System.out.println("================登记完成===================");
                    break;
                case '3':
                    System.out.print("本次支出金额:");
                    int money2 = Utility.readNumber();
                    if (money2 > 0 && balance >= money2){
                        balance -= money2;
                    }
                    System.out.print("本次支出说明:");
                    String minusDesc = Utility.readString();
                    info += "支出\t\t" + balance + "\t" + money2 + "\t\t" + minusDesc + "\n";
                    System.out.println("================登记完成===================");
                    break;
                case '4':
                    System.out.println("\n确认是否退出(Y/N):");
                    char isExit = Utility.readConfirmSelection();
                    if (isExit == 'Y'){
                        isFlag = false;
                    }
                    break;
            }
        }
    }
}

6.运行结果展示

1、收支明细

2、登记收入

3、登记支出

4、退出

  • 14
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值