登记支出功能的实现(java)

2021-04-01 18:27

阅读:394

标签:通过   失败   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()  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 }

 

登记支出功能的实现(java)

标签:通过   失败   ring   money   mamicode   conf   import   tin   new   

原文地址:https://www.cnblogs.com/xiayuan521/p/13524912.html


评论


亲,登录后才可以留言!