尚硅谷Javase项目一(家庭收支记账软件)

  • Post author:
  • Post category:java


尚硅谷的B站视频中所做的项目一不关注后面的工具类怎么实现的具体功能,只能看到一部份原码。对于想了解的同学我这里写了他的工具类的readKeyBoard()方法,对于他的主类中的String details我用了StringBuilder来代替(因为我自己写这个项目的时候最先想到的就是StringBuilder)下面直接上源码

//package jph;这是我源码所在的包名,你们需要按照实际情况写

/**
 * 家庭记账主方法体
 */
public class FamilyAccount {
    public static void main(String[] args) {
        int balance = 10000;//初始金额
        boolean goOn = true;//标志是否退出
        char select;//用户的选择操作
        //用于记录用户收入和支出的详情
        StringBuilder details = new StringBuilder("收支\t账户金额\t收支金额\t说   明\n");//可变的字符串

        while (goOn){
            System.out.println("---------------家庭收支记账软件---------------\n");
            System.out.println("                 1 收支明细");
            System.out.println("                 2 登记收入");
            System.out.println("                 3 登记支出");
            System.out.println("                 4 退    出");
            System.out.println("                 请选择(1-4)");
            //获取用户的选择
            select = Utility.readMenuSelection();

            switch (select){
                case '1':
                    System.out.println("-----正在查询收支明细-----");
                    System.out.println("---------------当前收支明细记录---------------");
                    System.out.println(details);//打印详细收支信息
                    System.out.println("--------------------------------------------\n");
                    break;
                case '2':
                    System.out.println("-----登记收入中-----");
                    System.out.print("收入金额:");
                    //调用方法从键盘获得收入金额
                    int income = Utility.readNumber();
                    balance += income;  //余额增加
                    System.out.print("收入说明:");
                    //从键盘获取指支出说明
                    String incomeDescription = Utility.readString();
                    //加上之前的收支信息,之所以说最先想到StringBuilder是因为提供的append方法可以直接扩展字符串
                    details = details.append("收入" + "\t" + balance + "\t\t" + income + "\t\t" + incomeDescription + "\n");
                    System.out.println("------登记完成------");
                    break;
                case '3':
                    System.out.println("-----登记支出中------");
                    System.out.print("支出金额:");
                    //从键盘获取支出信息
                    int expenses = Utility.readNumber();
                    if (expenses > balance){  //处理余额不足的情况
                        System.out.println("余额不足,支付失败。。。");
                    }else {
                        balance -= expenses;
                        System.out.print("支出说明:");
                        String expensesDescription = Utility.readString();
                        details = details.append("支出" + "\t" + balance + "\t\t" + expenses + "\t\t" + expensesDescription + "\n");
                    }
                    System.out.println("------登记完成------");
                    break;
                case '4':
                    System.out.println("-----退出操作------");
                    System.out.println("是否确认退出?(Y/N)");
                    char confirm = Utility.readConfirmSelection();
                    if (confirm == 'Y'){
                        System.out.println("退出成功...");
                        goOn = false;
                    }/*else {//可写可不写
                        continue;
                    }*/
                    break;

            }
        }
    }
}

Utility类的源代码

package jph;

import java.util.Scanner;

/**
 * 工具类
 * 提供具体的人机界面交互的方法
 */
public class Utility {
    private static Scanner scanner = new Scanner(System.in);

    /**
     * 从键盘读取信息
     * @param i
     * @return
     */
    private static String readKeyBoard(int limit) {

        label:for (;;){
            String str = scanner.next();
            if (str.length() > limit){
                System.out.println("输入过长,请重新输入:");
                continue label;
            }else {
                return str;
            }
        }
    }

    /**
     * 用于界面的选择,该方法读取键盘,如果用户键入”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.println("数字输入有误,请重新输入:");
            }
        }
        return n;
    }

    /**
     * 用于收入和支出说明的输入,该方法从键盘读取一个不超过八位长度的字符串,并将其作为方法的返回值
     */
    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.println("选择错误,请重新输入:");
            }
        }
        return c;
    }
}



版权声明:本文为qq_45757934原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。