zoukankan      html  css  js  c++  java
  • Java 练习(家庭收支记账软件)

    工具类:Utility.java

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

    FamilyAccount.java

    class FamilyAccount{
    	public static void main(String[] args){
    		boolean isFlag = true;
    		//记录用户的收入和支出的详情
    		String details = "类型 	 账号余额 		 收支金额 		 说明 
    ";
    		
    		//初始金额
    		int balance = 10000;
    		
    		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): ");
    			
    			//获取用户的选择: 1-4
    			char selection = Utility.readMenuSelection();
    			switch(selection){
    				case '1':
    					System.out.println("----------------当期收支明细记录----------------");
    					System.out.println(details);
    					System.out.println("--------------------------------------------------------");
    					break;
    				case '2':
    					System.out.print("本次收入金额: ");
    					int addMoney = Utility.readNumber();
    					System.out.print("本次收入说明: ");
    					String addInfo = Utility.readString();
    					
    					//处理 balance
    					balance += addMoney;
    					
    					//处理details
    					details += ("收入	" + balance + "			" + addMoney + "			" + addInfo + "
    ");
    					
    					System.out.println("----------------登记完成----------------
    ");
    					
    					break;
    				case '3':
    					System.out.print("本次支出金额: ");
    					int minusMoney = Utility.readNumber();
    					System.out.print("本次支出说明: ");
    					String minusInfo = Utility.readString();
    					
    					//处理 balance
    					if(balance >= minusMoney){
    						balance -= minusMoney;
    						
    						//处理details
    						details += ("支出	" + balance + "			" + minusMoney + "			" + minusInfo + "
    ");
    					}else{
    						System.out.println("支出超出账户额度,支付失败");
    					}
    					
    					
    					
    					
    					System.out.println("----------------登记完成----------------
    ");
    					break;
    				case '4':
    					System.out.print("确认是否退出(Y/N): ");
    					char isExit = Utility.readConfirmSelection();
    					if(isExit == 'Y'){
    						isFlag = false;
    					}
    					
    			}
    		}
    	
    	}
    }
    

    效果:

  • 相关阅读:
    unable to import maven project see logs for details
    全栈工程师:第一章:NodeJS的安装与配置
    Unable to open debugger port (127.0.0.1:63959): java.net.SocketException "socket closed",编译过来就是无法打开调试器端口,套接字已关闭
    我的分享:第七章:数据埋点
    我的分享:第六章:IDEA的优秀插件
    我的分享:第五章:java程序员一个人搭建网站(静态的,动态的都有)
    Docker:第三章:简单入门和深入理解
    我的分享:第四章:深入理解MySQL索引底层数据结构与算法
    NPM使用详解(上)
    JS实现继承的几种方式
  • 原文地址:https://www.cnblogs.com/klvchen/p/14252754.html
Copyright © 2011-2022 走看看