Java基础学习

实现一个记账本,主要包括展示收支明细、登记收入、登记支出和退出四个功能。FamilyAccount.java是记账本应用的入口,Utility.java是一些功能函数的封装。

目前没有实现持久化存储数据的功能,只是一个简单的demo。

FamilyAccount.java

public class FamilyAccount{
    static int balance = 10000; // 账户余额
    static String details = "收支\t账户余额\t收支金额\t说 明\n";
    private static void incomeRecord()
    {
        System.out.print("本次收入金额为: ");
        int number = Utility.readNumber();
        System.out.print("本次收入说明: ");
        String explanation = Utility.readString();

        balance += number;
        details += "收入\t" + balance + "\t\t" + number + "\t\t" + explanation + "\n";
        System.out.println("--------------------登记完成--------------------");
    }
    private static void expenseRecord()
    {
        System.out.print("本次支出金额为: ");
        int number = Utility.readNumber();
        System.out.print("本次支出说明: ");
        String explanation = Utility.readString();

        balance -= number;
        details += "支出\t" + balance + "\t\t" + number + "\t\t" + explanation + "\n";
        System.out.println("--------------------登记完成--------------------");
    }
    private static void showDetails()
    {
        System.out.println("-----------------当前收支明细记录-----------------");
        System.out.println(details);
        System.out.println("------------------------------------------------");
    }
    public static void main(String [] args)
    {
        boolean loopFlag = true;
        do{
            System.out.println("----------------家庭收支记账软件------------------");
            System.out.println("                  1 收支明细");
            System.out.println("                  2 登记收入");
            System.out.println("                  3 登记支出");
            System.out.println("                  4 退出\n");
            System.out.print("                  请选择功能<1-4>:");
            char key = Utility.readMenuSelection();
            switch(key)
            {
                case '1': 
                showDetails();//展示明细
                break;
                case '2': 
                incomeRecord();//登记收入
                break;
                case '3':
                expenseRecord();//登记支出
                break;
                case '4':
                System.out.print("确认是否退出(Y/N): ");
                char choose = Utility.readConfirmSelection();
                if(choose == 'Y')
                    loopFlag = false;
                break;
            }
        }
        while (loopFlag);
    }
}

Utility.java

import java.util.Scanner;
public class Utility{
    private static Scanner scanner = new Scanner(System.in);

    /*
    获取输入
    */
    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;
    }
    /*
    用于界面菜单的选择。键盘读入用户输入的1,2,3,4中的任意数字。
    */
    public static char readMenuSelection()
    {
        char c;
        while(true)
        {
            String str = readKeyBoard(1);
            c = str.charAt(0);
            if (c!='1' && c!='2'&&c!='3' && c!='4')
            {
                System.out.print("选择错误,请重新输入:");
            }
            else break;
        }
        return c;
    }

    /*
    用于收入或者支出金额的输入
    */
    public static int readNumber(){
        int n;
        while(true)
        {
            String str = readKeyBoard(4);
            try{
                n = Integer.parseInt(str);
                break;
            }
            catch(NumberFormatException e)
            {
                System.out.print("数字输入错误,请重新输入:");
            }
        }
        return n;
    }
    /*
    用于说明支出和收入的描述
    */
    public static String readString(){
        String str = readKeyBoard(10);
        return str;
    }
    /*
    用于确认选择的输入
    */
    public static char readConfirmSelection()
    {
        char c;
        while(true)
        {
            String str = readKeyBoard(1).toUpperCase();
            c = str.charAt(0);
            if (c=='Y' || c =='N')
                break;
            else
                System.out.print("选择错误,请重新输入:");
        }
        return c;
    }

    

}

 

posted @ 2020-10-09 14:18  cindyhuang  阅读(45)  评论(0)    收藏  举报