学习Java之项目1(家庭记账软件)

package com.bao.java.project;

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;
  }
}
package com.bao.java.project;

/*
*
家庭记账管理软件
* */
public class FamilyAccout {
   public static void main(String[] args) {
       boolean flag = true;
       int count = 10000;// 账号的初始金额
       String table = "收支       账户金额           收支金额         说 明\n";
       
       while (flag) {
           System.out.println("-----------------家庭收支记账软件-----------------");
           System.out.println("                   1 收支明细");
           System.out.println("                   2 登记收入");
           System.out.println("                   3 登记支出");
           System.out.println("                   4 退     出");
           System.out.println("                   请选择1-4:");
           char number = Utility.readMenuSelection();
           
           switch (number) {
           case '1':
               
               System.out.println("-----------------当前收支明细记录-----------------");
               System.out.println(table);
               System.out.println("--------------------------------------------------\n");
               break;
           case '2':
               System.out.print("本次收入金额:");
               int incomeMoney = Utility.readNumber();// 收入
               count += incomeMoney;
               System.out.print("本次收入说明:");
               String incomeExplain = Utility.readString();// 收入说明
               table+="收入\t" + count +"\t\t"+ incomeMoney+"\t" + incomeExplain+"\n";
               System.out.println("-------------------登记完成-------------------\n");
               break;
           case '3':
              // System.out.println("登记支出");
               System.out.print("本次支出金额:");
               int payMoney = Utility.readNumber();// 支出
               count -= payMoney;
               System.out.print("本次支出说明:");
               String payExplain = Utility.readString();//支出说明
               table+="支出\t" + count +"\t\t"+ payMoney+"\t" + payExplain+"\n";
               System.out.println("-------------------登记完成-------------------\n");
               break;
           case '4':
               System.out.println("确认是否退出(Y/N):");
               char isExit = Utility.readConfirmSelection();
               if (isExit == 'Y') {
                   flag = false;
                   System.out.println("退出成功,欢迎下次使用");
              }
              // break;
          }
      }

  }
}



posted @ 2021-12-17 11:46  天覆者  阅读(138)  评论(0)    收藏  举报