项目一:控制台实现简易家庭收支记账-Java-尚硅谷-宋红康教学视频

一、来源

该项目(案例)来自是Java -Java 学习- Java 基础到高级-宋红康-零基础自学Java-尚硅谷中的项目一
下面的代码是按照视频中的思路写的,基本与视频相同

二、代码

MyUtil.java文件代码

import java.util.Scanner;

public class MyUtil {
    private static Scanner sc = new Scanner(System.in);

    /*
    该方法用于从键盘读取主菜单的1,2,3,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() {
        return readKeyBoard(8);
    }

    public static char readConfirmSelection(){
        char c;
        System.out.print("是否退出,请输入(Y/N):");
        for(;  ;){
            String str = readKeyBoard(1).toUpperCase();
            c = str.charAt(0);
            if(c == 'Y' || c == 'N'){
                break;
            } else {
                System.out.println("输入错误,请重新输入:");
            }
        }
        return c;
    }

    /*
    改方法用于从键盘读指定长度的取字符串,返回一个字符串
     */
    public static String readKeyBoard(int length) {
        String str;
        for (; ;){
            str = sc.next();
            if(str.length() > length){
                System.out.println("输入数据超出范围,请重新输入" + length + "个数据:");
            } else break;
        }
        return str;
    }

}

 
FamilyAccount.java文件代码

public class FamilyAccount {

    public static void main(String[] args) {
        boolean isFlag = true;  //循环的标志

        int balance = 10000;  //余额

        String datails = "";  //账户信息

        while (isFlag){

            System.out.println("---------------家庭收支记账软件------------------");
            System.out.println("               1.收支明细");
            System.out.println("               2.登记收入");
            System.out.println("               3.登记支出");
            System.out.println("               4.退    出");
            System.out.print("               请输入(1~4):");

           char selection = MyUtil.readMenuSelection();
           System.out.println();

            switch (selection){
               case '1':
                   System.out.println("---------------当前收支明细记录----------------");
                   System.out.println("收  支\t\t账户金额\t\t收支金额\t\t说  明");
                   System.out.println(datails);
                   System.out.println("----------------------------------------------");
                   System.out.println();
                   break;

               case '2':
                   System.out.println("---------------登记收入信息---------------------");
                   System.out.print("本次收入金额:");
                   int money = MyUtil.readNumber();  //调用readNumber方法读取金额
                   balance += money;  //修改金额

                   System.out.print("本次收入说明:");
                   String info = MyUtil.readString();  //调用readString方法读取信息
                   //将信息写入datails
                   datails += "收  入\t\t" + balance + "\t\t" + money + "\t\t\t" + info + "\n";
                   System.out.println();
                   break;

               case '3':
                   System.out.println("---------------登记支出信息-----------------");
                   System.out.print("本次支出金额:");
                   int money2 = MyUtil.readNumber();
                   balance -= money2;

                   System.out.print("本次支出说明:");
                   String info2 = MyUtil.readString();
                   datails += "支  出\t\t" + balance + "\t\t" + money2 + "\t\t\t" + info2 + "\n";
                   System.out.println();
                   break;

               case '4':
                   char confirmSelection = MyUtil.readConfirmSelection();
                   if (confirmSelection == 'Y') {
                       isFlag = false;
                       System.out.println("退出成功!");
                   }
                   break;
           }

        }

    }

}

三、运行效果

image

四、思路小结

  1. 该项目有两个java文件
    MyUtil.java中保存的是数据读取的方法
    FamilyAccount.java是程序的界面和具体功能实现
  2. 整个程序是通过循环来控制,循环标志是isFlag,默认为true,确认退出时将它变为false来退出循环
  3. String变量datails实现账目的数据储存,每次执行登记收入或支出时将新的字符串连接到datails的后面
     
    ps:纯新人,写得不算好,基本打算只是自己记录学习使用,如果有什么问题欢迎在评论区留言(别想了,没什么人会看的)
posted @ 2021-07-15 14:46  oneMoe  阅读(368)  评论(0编辑  收藏  举报