辉仔日记之学代码第三期——家庭收支小程序

目录

标题1:操作主流程

标题2:主菜单

标题3:选项1

标题4:选项2

标题5:选项3

标题6:回到选项1

标题7:选项4

标题8:总结


前言::时隔一天我又回来啦,今天的任务只是编写一个超难超难的小程序(对于我来说就是难!不能反驳),我从来没都没写过这么长的小程序。脑壳都给我扣痛了,我都无从下笔。想键盘敲(kao)脑壳。那就先进入正题。

标题1:操作主流程

/*需求:
     * -----------------家庭收支记账软件----------------
     1 收支明细
     2 登记收入
     3 登记支出
     4 退 出
     请选择(1-4):_

     • 假设家庭起始的生活基本金为10000元。
     • 每次登记收入(菜单2)后,收入的金额应累加到基本金上,并记录本次收入明细,以便后续的查询。
     • 每次登记支出(菜单3)后,支出的金额应从基本金中扣除,并记录本次支出明细,以便后续的查询。
     • 查询收支明细( 菜单1)时,将显示所有的收入、支出名细列表.
     */

     // 需求分析:
     // 1.抽象出变量:lifeMoney、list明细
     // 2.如何更新变量
     // 3.抽象出类:FamilyAccount类,分类讨论switch case或者使用if语句(1 2 3 4)*/



标题2:主菜单

        首先是进入主菜单,选择1、2、3、4;再然后选择收入或者支出;然后选择收支明细。查看完收支明细将会返回主菜单。

        通过分析,主菜单最后又返回到主菜单。  这里明显需要一个循环语句。说明什么呢?整个操作流程都是放在一个循环语句里。这里推荐使用while语句。

以下在代码里面的效果:


        while (tag) {
            Scanner sc = new Scanner(System.in);
            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("请输入1-4");

以下为输出后在控制台的效果:

-----------家庭收支记账系统------------
 
            1.收支明细
            2.登记收入
            3.登记支出
            4.退出
请输入1-4



标题3:选项1

        在这里我们要进入选项,操作当然是while语句下面嵌套if语句。(有人也用switch语句)。

假如我首先进入的是选项1,请看代码图:

 char num = Utility.readMenuSelection();//从这儿开始调用工具类


            if (num == '1') {//这为什么用字符类型的1,因为输入的数据是char,是单个字符
                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]);
                    }
                }
            }

解释说明 

首先引入工具类,避免一定的错误。初学者辉仔建议懂怎么调用就好了。工具集是一个char类型,数字是int类型的那怎么将int变成char类型呢。可以将数字看做一个字符就好了,如图。

当我们循环了一周怎么存储数据呢?可以设置一个String类型的数组。将数据存储在arr里面。

以下是控制台输出结果:

-----------家庭收支记账系统------------
 
            1.收支明细
            2.登记收入
            3.登记支出
            4.退出
请输入1-4
1
-----------当前收支明细--------------
 收支   账户金额    收支明细   说明



标题4:选项2

        进入了选项1之后,我们来学习如何进入选项2。同理我们也需要if语句,当输入2的时候,会自动跳转“收入金额”,然后有跳转“项目类型”,回车之后,回到主菜单。

以下在代码里面的效果:

 if (num == '2') {//这个时候拿来count
                System.out.println("请输入收入的金额:");
                int getmoney = Utility.readNumber();

                System.out.println("请输入项目类型:");
                String way = Utility.readString();

                arr[count][0] = "收入";
                cash += getmoney;
                arr[count][1] = cash + " ";//用+“ ” 将数字类型转换成字符类型
                arr[count][2] = "+" + getmoney;//这里写的输入的钱
                arr[count][3] = way;//输入的是项目
                count++;
                System.out.println("--输入成功");

        注意: cash代表初始现金10000;将它转换为字符串,必须用以上的格式;getmoney前面有一个"+"主要表达现金加减。

         注意:这里我们要调用两个工具类

其一:

  /**
     用于收入和支出金额的输入。该方法从键盘读取一个不超过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;
    }

以下是控制台输出结果 :

-----------家庭收支记账系统------------
 
            1.收支明细
            2.登记收入
            3.登记支出
            4.退出
请输入1-4
2
请输入收入的金额:
6666
请输入项目类型:
running
--输入成功


标题5:选项3

         既然完成了选项2,那么选项3就不是多难的事,依样画葫芦就好了。直接上代码图。

以下是代码图:

if (num == '3') {//3必须用字符表示
                System.out.println("请输入支出金额:");
                int losemoney = Utility.readNumber();


                System.out.println("请输入项目类型:");
                String way = Utility.readString();

                arr[count][0] = "支出";
                cash -= losemoney;
                arr[count][1] = cash + " ";//用+“ ” 将数字类型转换成字符类型
                arr[count][2] = "-" + losemoney;//这里写的支出的钱
                arr[count][3] = way;//输入的是项目
                count++;
                System.out.println("--输入成功");
            }

以下是执行流程图:

-----------家庭收支记账系统------------
 
            1.收支明细
            2.登记收入
            3.登记支出
            4.退出
请输入1-4
3
请输入支出金额:
585
请输入项目类型:
看电影
--输入成功



标题6:回到选项1

         ⑹我们完成了收入和支出的操作。那么我们需要再进一次选项1,查看我们的数据被存入进去没有。

以下是控制台流程图:

-----------家庭收支记账系统------------
 
            1.收支明细
            2.登记收入
            3.登记支出
            4.退出
请输入1-4
1
-----------当前收支明细--------------
 收支   账户金额    收支明细   说明
 收入   16666       +6666     running
 支出   16081       -585     看电影



标题7:选项4

到这里我们的项目是执行得很顺利,这个时候我想。退出那么就需要选项四,那么怎么操作呢?用代码实现?这里我们将使用我们的第四个工具。Yes就是退出系统,No就是退出选项4。肯定用if语句实现。

以下是代码图:

 if (num == '4') {
                System.out.println("请确定是否退出?(Y/N)");
                char ch = Utility.readConfirmSelection();
                if (ch == 'N') {
                    System.out.println("谢谢成功退出");//选N是退出循环,Y是直接退出系统

                } else {
                    break;
                }

            }
        }

char 类型的工具集,如下:

 /**
     用于确认选择的输入。该方法从键盘读取‘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;
    }

以下是控制台输出结果:

-----------家庭收支记账系统------------
 
            1.收支明细
            2.登记收入
            3.登记支出
            4.退出
请输入1-4
4
请确定是否退出?(Y/N)
y



标题8:总结

        到这里我们的整个流程都结束了。其实这道题的逻辑很简单。辉仔拿到的第一时间无法下笔。不知道如何去做,没有理解到这道题该如何运行,通过查看别人的思路与代码再加问同学,才真正的搞懂这道题。详细的代码图和工具集都会放在下面给大家查看。希望能帮上一点忙。

ps:不定期更新自己学习Java的心得体会。以日记的方式见证自己的成长或者退步哈哈哈!!!

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值