说明:

这篇文章主要运用了一些java基础知识的一个综合运用
主要涉及以下知识点:
 变量的定义
 基本数据类型的使用
 循环语句
 分支语句
 方法声明、调用和返回值的接收
 简单的屏幕输出格式控制

                                      需求分析
模拟实现基于文本界面的《家庭记账软件》。
• 该软件能够记录家庭的收入、支出,并能够打印收支明细表。
• 项目采用分级菜单方式。

下载链接


项目演示

      

java个人收支系统 java家庭收支记账软件_jvm

操作步骤

创建类Tool

public class Tool{
}

Tool加入键盘读入逻辑

private static Scanner scanner =new Scanner(System.in);
                //键盘读入1~4,进行菜单的选择
                public static char readMenuSelector() {  //阅读菜单选择
                    char c;
                    for(;;){
                        String str=readKeyBoard(1);
                        c=str.charAt(0);
                        if(c!='1'&&c!='2'&&c!='3'&&c!='4'){
                            System.out.println("输入错误,请从新输入!");
                        }
                        else
                            break;
        }
        return c;
        }

Tool里面加入收入支出读取方法

//用于读取4位数的收入或者支出,限制4位数字
    public static int readNumber(){
        int n;
        for(;;){
            String str=readKeyBoard(4);
               try{
                   n=Integer.parseInt(str);
                   break;
               }catch(NumberFormatException e){
                   System.out.println("数字输入有误,请从新输入!");
               }
            }
        return n;
    }

Tool加入收入支出说明

//用于对收入或者支出的说明,不超过16个长度的字符串
    public static String readString(){
        String str=readKeyBoard(16);
            return str;
    }

Tool加入退出确认方法

//用于确认选择的输入
    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.println("输入错误,请从新输入!");
        }
        return c;
    }

Tool类加入输入规范方法

//写出readKeyBoard方法
    private static String readKeyBoard(int limit){
        String line="";
        while(scanner.hasNext()) {
            line = scanner.nextLine();
            if(line.length()<1||line.length()>limit){
                System.out.println("输入长度不超过"+limit+",请从新输入!");
                continue;
            }
            break;
        }
       return line;
    }

创建FamilyAccount类

public class FamilyAccount {
    public static void main(String[] args) {
        }
    }

在FamilyAccount中定义变量

boolean isFlag=true;
   String details="收支\t账户金额\t收支金额\t说  明\n";
   //初始金额
    int balance=10000;

在FamilyAccount中写出界面

while(isFlag){
           System.out.println("-----------------家庭收支记账软件-----------------");
           System.out.println("                   1 收支明细");
           System.out.println("                   2 登记收入");
           System.out.println("                   3 登记支出");
           System.out.println("                   4 退    出\n");
           System.out.println("                   请选择(1-4):");

在FamilyAccount中获取用户的选择,并在不同的选择中做出相应的逻辑操作。

char selection= Tool.readMenuSelector();
          switch(selection){
              case '1':
                  System.out.println("-----------------当前收支明细记录-----------------");
                  System.out.println(details);
                  System.out.println("--------------------------------------------------");
                  break;
              case '2':
                  System.out.print("本次收入金额:");
                  int money1=Tool.readNumber();
                  System.out.print("本次收入说明:");
                  String info1=Tool.readString();
                  balance=balance+money1;
                  details+="收入\t"+balance+"\t\t"+money1+"\t\t\t"+info1+"\n";
                  System.out.println("---------------------登记完成---------------------");
                  break;
              case '3':
                  System.out.print("本次支出金额:");
                  int money2 = Tool.readNumber();
                  System.out.print("本次支出说明:");
                  String info2 = Tool.readString();
                  if(money2<=balance) {
                      balance -= money2;
                      details += "支出\t" + balance + "\t\t" +
                              money2 + "\t\t\t" + info2 + "\n";
                  }
                  else
                  System.out.println("支出超出账户额度!支付失败");
                  System.out.println("---------------------登记完成---------------------");
                  break;
              case '4':
                  System.out.print("确认是否退出!Y/N");
                 char isExit= Tool.readConfirmSelection();
                 if(isExit=='Y')
                 {
                     isFlag=false;
                 }
                  break;
          }

       }

完整代码

Tool类

import java.util.Scanner;
public class Tool {
                private static Scanner scanner =new Scanner(System.in);
                //键盘读入1~4,进行菜单的选择
                public static char readMenuSelector() {  //阅读菜单选择
                    char c;
                    for(;;){
                        String str=readKeyBoard(1);
                        c=str.charAt(0);
                        if(c!='1'&&c!='2'&&c!='3'&&c!='4'){
                            System.out.println("输入错误,请从新输入!");
                        }
                        else
                            break;
        }
        return c;
    }
    //用于读取4位数的收入或者支出,限制4位数字
    public static int readNumber(){
        int n;
        for(;;){
            String str=readKeyBoard(4);
               try{
                   n=Integer.parseInt(str);
                   break;
               }catch(NumberFormatException e){
                   System.out.println("数字输入有误,请从新输入!");
               }
            }
        return n;
    }

    //用于对收入或者支出的说明,不超过16个长度的字符串
    public static String readString(){
        String str=readKeyBoard(16);
            return str;
    }
    //用于确认选择的输入
    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.println("输入错误,请从新输入!");
        }
        return c;
    }

    //写出readKeyBoard方法
    private static String readKeyBoard(int limit){
        String line="";
        while(scanner.hasNext()) {
            line = scanner.nextLine();
            if(line.length()<1||line.length()>limit){
                System.out.println("输入长度不超过"+limit+",请从新输入!");
                continue;
            }
            break;
        }
       return line;
    }
}

FamilyAccount类

public class FamilyAccount {
    public static void main(String[] args) {
       boolean isFlag=true;
       String details="收支\t账户金额\t收支金额\t说  明\n";
       //初始金额
        int balance=10000;
       while(isFlag){
           System.out.println("-----------------家庭收支记账软件-----------------");
           System.out.println("                   1 收支明细");
           System.out.println("                   2 登记收入");
           System.out.println("                   3 登记支出");
           System.out.println("                   4 退    出\n");
           System.out.println("                   请选择(1-4):");
           //获取用户的选择
          char selection= Tool.readMenuSelector();
          switch(selection){
              case '1':
                  System.out.println("-----------------当前收支明细记录-----------------");
                  System.out.println(details);
                  System.out.println("--------------------------------------------------");
                  break;
              case '2':
                  System.out.print("本次收入金额:");
                  int money1=Tool.readNumber();
                  System.out.print("本次收入说明:");
                  String info1=Tool.readString();
                  balance=balance+money1;
                  details+="收入\t"+balance+"\t\t"+money1+"\t\t\t"+info1+"\n";
                  System.out.println("---------------------登记完成---------------------");
                  break;
              case '3':
                  System.out.print("本次支出金额:");
                  int money2 = Tool.readNumber();
                  System.out.print("本次支出说明:");
                  String info2 = Tool.readString();
                  if(money2<=balance) {
                      balance -= money2;
                      details += "支出\t" + balance + "\t\t" +
                              money2 + "\t\t\t" + info2 + "\n";
                  }
                  else
                  System.out.println("支出超出账户额度!支付失败");
                  System.out.println("---------------------登记完成---------------------");
                  break;
              case '4':
                  System.out.print("确认是否退出!Y/N");
                 char isExit= Tool.readConfirmSelection();
                 if(isExit=='Y')
                 {
                     isFlag=false;
                 }
                  break;
          }


          
       }
    }
}