标签:通过 失败 ring money mamicode conf import tin new
一、大体思路
实现结果如图所示,故我们可利用switch语句分为四个case来实现收支功能。首先我们要建一个Utility工具类,工具类有四个类:菜单1-4的输入,收入支出金额的输入,收入支出的说明、确认选择的收入。
二、详细讲解
1、菜单的循环
实现用while来实现,定义一个isFlag=true则一直循环,若isFlag=false则退出循环。同时利用Utility工具类中的readMenuSelection(用于界面菜单的选择。该方法读取键盘,如果用户键入’1’-’4’中的任意字符,则方法返回。返回值为用户键入字符。)定义selection来确定菜单的选择1-4。具体代码如下:(Utility工具类源代码在最下边)
1 while(isFlag){ 2 3 System.out.println("-----------------家庭收支记账软件-----------------\n"); 4 System.out.println(" 1 收支明细"); 5 System.out.println(" 2 登记收入"); 6 System.out.println(" 3 登记支出"); 7 System.out.println(" 4 退 出\n"); 8 System.out.print(" 请选择(1-4):"); 9 //获取用户的选择:1-4 10 char selection = Utility.readMenuSelection(); 11 switch(selection)
2、四个选择的实现
收支明细的实现
定义一个字符串details = 收支\t账户金额\t收支金额\t说 明 直接输出
1 case ‘1‘: 2 //System.out.println("1.收支明细"); 3 System.out.println("-----------------当前收支明细记录-----------------"); 4 System.out.println(details); 5 System.out.println("--------------------------------------------------"); 6 break;
登记收入的实现
在details的前提上加上新录入的数据,同时定义初始money为balance=10000;用到了工具类里边的两个类readNumber(
用于收入和支出金额的输入。该方法从键盘读取一个不超过4位长度的整数,并将其作为方法的返回值。)和readString(
用于收入和支出说明的输入。该方法从键盘读取一个不超过8位长度的字符串,并将其作为方法的返回值。)。
1 case ‘2‘: 2 //System.out.println("2.登记收入"); 3 System.out.print("本次收入金额:"); 4 int addMoney = Utility.readNumber(); 5 System.out.print("本次收入说明:"); 6 String addInfo = Utility.readString(); 7 8 //处理balance 9 balance += addMoney; 10 11 //处理details 12 details += ("收入\t" + balance + "\t\t" + addMoney + "\t\t" + addInfo + "\n"); 13 14 15 System.out.println("---------------------登记完成---------------------\n"); 16 break;
登记支出的实现
与登记收入可以类比,有一点不同的就是登记支出不能比原来账户里边的钱多。
1 case ‘3‘: 2 //System.out.println("3.登记支出"); 3 4 System.out.print("本次支出金额:"); 5 int minusMoney = Utility.readNumber(); 6 System.out.print("本次支出说明:"); 7 String minusInfo = Utility.readString(); 8 9 //处理balance 10 if(balance >= minusMoney){ 11 balance -= minusMoney; 12 13 //处理details 14 details += ("支出\t" + balance + "\t\t" + minusMoney + "\t\t" + minusInfo + "\n"); 15 }else{ 16 System.out.println("支出超出账户额度,支付失败"); 17 } 18 19 System.out.println("---------------------登记完成---------------------\n"); 20 break;
退出的实现
如果isExit==Y,则给isFlag赋值false。readConfirmSelection(用于确认选择的输入。该方法从键盘读取‘Y’或’N’,并将其作为方法的返回值。)
1 case ‘4‘: 2 //System.out.println("4.退 出"); 3 System.out.print("确认是否退出(Y/N):"); 4 char isExit = Utility.readConfirmSelection(); 5 if(isExit == ‘Y‘){ 6 isFlag = false; 7 } 8 9 //break;
三、源代码
Utility源代码
1 package day5; 2 3 import java.util.Scanner; 4 /** 5 Utility工具类: 6 将不同的功能封装为方法,就是可以直接通过调用方法使用它的功能,而无需考虑具体的功能实现细节。 7 */ 8 public class Utility { 9 private static Scanner scanner = new Scanner(System.in); 10 /** 11 用于界面菜单的选择。该方法读取键盘,如果用户键入’1’-’4’中的任意字符,则方法返回。返回值为用户键入字符。 12 */ 13 public static char readMenuSelection() { 14 char c; 15 for (; ; ) { 16 String str = readKeyBoard(1); 17 c = str.charAt(0); 18 if (c != ‘1‘ && c != ‘2‘ && c != ‘3‘ && c != ‘4‘) { 19 System.out.print("选择错误,请重新输入:"); 20 } else break; 21 } 22 return c; 23 } 24 /** 25 用于收入和支出金额的输入。该方法从键盘读取一个不超过4位长度的整数,并将其作为方法的返回值。 26 */ 27 public static int readNumber() { 28 int n; 29 for (; ; ) { 30 String str = readKeyBoard(4); 31 try { 32 n = Integer.parseInt(str); 33 break; 34 } catch (NumberFormatException e) { 35 System.out.print("数字输入错误,请重新输入:"); 36 } 37 } 38 return n; 39 } 40 /** 41 用于收入和支出说明的输入。该方法从键盘读取一个不超过8位长度的字符串,并将其作为方法的返回值。 42 */ 43 public static String readString() { 44 String str = readKeyBoard(8); 45 return str; 46 } 47 48 /** 49 用于确认选择的输入。该方法从键盘读取‘Y’或’N’,并将其作为方法的返回值。 50 */ 51 public static char readConfirmSelection() { 52 char c; 53 for (; ; ) { 54 String str = readKeyBoard(1).toUpperCase(); 55 c = str.charAt(0); 56 if (c == ‘Y‘ || c == ‘N‘) { 57 break; 58 } else { 59 System.out.print("选择错误,请重新输入:"); 60 } 61 } 62 return c; 63 } 64 65 66 private static String readKeyBoard(int limit) { 67 String line = ""; 68 69 while (scanner.hasNext()) { 70 line = scanner.nextLine(); 71 if (line.length() < 1 || line.length() > limit) { 72 System.out.print("输入长度(不大于" + limit + ")错误,请重新输入:"); 73 continue; 74 } 75 break; 76 } 77 78 return line; 79 } 80 }
FamilyAccount源代码
1 package day5; 2 3 4 class FamilyAccount{ 5 6 public static void main(String[] args){ 7 8 boolean isFlag = true; 9 //用于记录用户的收入和支出的详情 10 String details = "收支\t账户金额\t\t收支金额\t\t1说 明\n"; 11 //初始金额 12 int balance = 10000; 13 14 while(isFlag){ 15 16 System.out.println("-----------------家庭收支记账软件-----------------\n"); 17 System.out.println(" 1 收支明细"); 18 System.out.println(" 2 登记收入"); 19 System.out.println(" 3 登记支出"); 20 System.out.println(" 4 退 出\n"); 21 System.out.print(" 请选择(1-4):"); 22 //获取用户的选择:1-4 23 char selection = Utility.readMenuSelection(); 24 switch(selection){ 25 26 case ‘1‘: 27 //System.out.println("1.收支明细"); 28 System.out.println("-----------------当前收支明细记录-----------------"); 29 System.out.println(details); 30 System.out.println("--------------------------------------------------"); 31 break; 32 case ‘2‘: 33 //System.out.println("2.登记收入"); 34 System.out.print("本次收入金额:"); 35 int addMoney = Utility.readNumber(); 36 System.out.print("本次收入说明:"); 37 String addInfo = Utility.readString(); 38 39 //处理balance 40 balance += addMoney; 41 42 //处理details 43 details += ("收入\t" + balance + "\t\t" + addMoney + "\t\t" + addInfo + "\n"); 44 45 46 System.out.println("---------------------登记完成---------------------\n"); 47 break; 48 case ‘3‘: 49 //System.out.println("3.登记支出"); 50 51 System.out.print("本次支出金额:"); 52 int minusMoney = Utility.readNumber(); 53 System.out.print("本次支出说明:"); 54 String minusInfo = Utility.readString(); 55 56 //处理balance 57 if(balance >= minusMoney){ 58 balance -= minusMoney; 59 60 //处理details 61 details += ("支出\t" + balance + "\t\t" + minusMoney + "\t\t" + minusInfo + "\n"); 62 }else{ 63 System.out.println("支出超出账户额度,支付失败"); 64 } 65 66 System.out.println("---------------------登记完成---------------------\n"); 67 break; 68 case ‘4‘: 69 //System.out.println("4.退 出"); 70 System.out.print("确认是否退出(Y/N):"); 71 char isExit = Utility.readConfirmSelection(); 72 if(isExit == ‘Y‘){ 73 isFlag = false; 74 } 75 76 //break; 77 } 78 79 80 81 } 82 83 } 84 85 }
标签:通过 失败 ring money mamicode conf import tin new
原文地址:https://www.cnblogs.com/xiayuan521/p/13524912.html