小白的过关之路--家庭记录收支程序

小白的过关之路--家庭记录收支程序

项目要求

        该软件能够记录家庭的收入、支出,并能够打印收支明细表
        项目采用分级菜单方式。主菜单如下:

------------------家庭收支记账软件 ------------------


                           1.收支明细
                           2.登记收入
                           3.登记支出
                           4.退出


                           请选择(1-4)


家庭初始资金为10000元
查询菜单1时,需要显示所有的收入、支出明细列表
登记完收入(菜单2)、支出(菜单3)以后,需要在初始资金的基础上增加或者扣除

在这里插入图片描述

本小白思路

1.首先做这道题时看到要求本小白是没有任何思路的,之前学的基础知识没有办法在脑海里运用起来
2.看到其他博主写的内容开始慢慢理解怎样写出来
3.利用到基础语法,方法,数组,utility工具包
4.基础语法,方法和数组是之前学到的内容,所以困难点在于utility工具包内容以及运用方面的理解
5.

总结

1.需要先了解一下utility工具包的内容,方便后续引用
2.了解一下编写代码的大致流程然后边引用工具包边思考编写内容
3.初始化的内容,一开始最好就思考全面,编写出来

代码展示

先来展示一下utility工具包的内容

package project;

import project.utility;

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

        然后我们来看一下,整个程序的编写(这里小白是按照其他博主的思绪写的所以程序内容也相同,但是修改了一下,原内容有点bug)
大致理清一下思路:
1.编写目录(目录这里都是直接输出的)
2.编写收支明细(主要就是安排一下“收支”、“账户总金额”、“收支金额”、“说明”,这些标头的位置)
3.开始写登记收入的方法(这里就开始运用到utility工具包了)
4.写登记支出的方法(这里的流程和收入的几乎相同就是修改一下±号以及变量名称之类的内容即可)
5.调用方法,菜单4退出界面在main方法里直接写程序
6.需要注意一下就是登记收入和支出的菜单返回值需要写为int返回数值money,同样需要呈现出一个明细表的界面,我们的a++也需要写在调用方法那里

package project;

/*
        家庭收支记录
 */

import project.utility;

import java.util.Scanner;

public class income {
    static int money = 10000;
    public static void main(String[] args) {

        int a = 0;

        String[][] arr = new String[20][4];



        while(true) {
            //直接调用菜单展现选项
            menu();
            //然后输入选项选择(但是为什么用char而且还要调用utility呢)
            char b = utility.readMenuSelection();
            switch (b) {
                case '1':
                    case1(arr);
                    break;
                case '2':
                    money = case2(arr, a, money);
                    a++;
                    break;
                case '3':
                    money = case3(arr, a, money);
                    a++;
                    break;
                case '4':
                    System.out.println("确认是否退出(Y/N)");
                    char s = utility.readConfirmSelection();
                    if(s == 'y') {
                        return;
                    } else {
                        break;
                    }

            }
        }

    }

    //标题
    public static void menu() {
        System.out.println("--------------------家庭收支记账软件--------------------");
        System.out.println();
        System.out.println("                    1.收支明细");
        System.out.println("                    2.登记收入");
        System.out.println("                    3.登记支出");
        System.out.println("                    4.退出");
        System.out.println();
        System.out.println("请选择(1-4)");

    }

    //目录1 收支明细
    public static void case1(String[][] arr) {
        System.out.println("--------------------收支明细---------------------");
        System.out.println("收支" + "   " + "账户总金额" + "   " + "收支金额" + "   " + "说明");
        for(int i = 0; i<arr.length; i++) {
            if(arr[i][0] != null) {
                System.out.println(arr[i][0] + "   " + arr[i][1] + "   " + arr[i][2] + "   " + arr[i][3]);
            }
        }
        System.out.println("--------------------");
    }

    //目录2 登记收入
    public static int case2(String[][] arr,int a, int money) {
        //从键盘读取输入的金额(int)
        System.out.println("请输入本次收入金额");
        int income = utility.readNumber();
        //从键盘读取输入的原因(String)
        System.out.println("请输入本次收入原因");
        String why = utility.readString();
        //按照要求存储数据(数组)
        arr[a][0] = "收入";
        money += income;
        arr[a][1] = money + "    ";
        arr[a][2] = "+" + income;
        arr[a][3] = "    " + why;
        a++;
        //添加成功
        System.out.println("添加成功");
        return money;
    }

    //目录3 登记支出
    public static int case3(String[][] arr, int a , int money) {
        //从键盘读取支出的金额(int)
        System.out.println("请输入本次支出的金额");
        int spend = utility.readNumber();
        //从键盘读取支出的原因(String)
        System.out.println("请输入本次支出的原因");
        String why2 = utility.readString();
        //按照要求存储数据(数组)
        arr[a][0] = "支出";
        money -= spend;
        arr[a][1] = money + "    ";
        arr[a][2] = "-" + spend;
        arr[a][3] = "    " + why2;

        //添加成功
        System.out.println("添加成功");
        return money;
    }

}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值