Java项目-家庭记账程序

      本次项目主要要求是模拟实现一个基于文本界面的《家庭记账软件》,该程序能够记录家庭的收入、支出,并能够打印收支明细表。

一、项目采用分级菜单方式。

主菜单如下:

-----------------家庭收支记账软件-----------------

                1 收支明细

                2 登记收入

                3 登记支出

                4 退 出

请选择(1-4):_

  • 假设家庭起始的生活基本金为10000元
  • 菜单2:每次登记收入后, 收入的金额应累加到基本金上,并记录本次收入明细, 以便后续的查询。
  • 菜单3:每次登记支出后, 支出的金额应从基本金中扣除,并记 录本次支出明细,以便后续的查询。
  • 菜单1:查询收支明细时, 将显示所有的收入、支出名细列表

 二、实现流程

         具体操作的主活动流程图如下图所示:

 1、实现界面展示功能

-------------------家庭收支记账软件---------------------

                    1.收支明细
                    2.登记收入
                    3.登记支出
                    4.退    出


请选择(1-4):

2、完成主要的“收入”,“支出”功能

  • 从键盘读取收入的金额(int)
  • 从键盘读取收入的原因(String)
  • 按照要求存储数据(数组)
  • 添加成功 

3、显示账单明细

三、实现代码

主程序流程:

package txt;

import java.util.Scanner;
public class table {
    static int r = 0, count = 10000;
    static String[][] arr = new String[10][4];

    public static void main(String[] args) {
        init();
        boolean loopFlag = true;
        while(loopFlag){
            System.out.println("-------------------家庭收支记账软件---------------------\n");
            System.out.println("                    1.收支明细");
            System.out.println("                    2.登记收入");
            System.out.println("                    3.登记支出");
            System.out.println("                    4.退    出\n");
            System.out.println();
            System.out.print("请选择(1-4):");
            char n= Utility.readMenuSelection();
            switch(n){
                case '1':
                   list();
                    System.out.println();
                    break;
                case '2':
                    income();
                    break;
                case '3':
                    expend();
                    break;
                case '4':
                    System.out.print("是否确认退出(Y/N):");
                    char selsect= Utility.readConfirmSelection();
                    if(selsect=='Y')
                    loopFlag=false;
                    break;
            }
        }

    }

    public static void init() {
        arr[r][0]="收支";
        arr[r][1]="账号总金额";
        arr[r][2]="收支金额";
        arr[r][3]="说明";
    }

    public static void list() {
        for(int i=0;i<=r;i++){
            for(int j=0;j<4;j++){
                if(i==0)
                    System.out.print(arr[i][j]+"\t\t");
                else
                    System.out.print(arr[i][j]+"\t\t  ");
            }
            System.out.println();
        }
    }
    public static void income() {
        System.out.print("收入金额:");
        int amount=Utility.readNumber();
        System.out.print("收入原因");
        String reason = Utility.readString();
        storage("收入",amount,reason);
        System.out.println("添加成功!");
    }
    public static void storage(String type,int amount,String reason) {
        r++;
        arr[r][0]=type;
        if(type=="收入"){
            arr[r][1]=(count+amount)+"";
            count+=amount;
            arr[r][2]="+"+amount;
        }
        if(type=="支出"){
            arr[r][1]=(count-amount)+"";
            count-=amount;
            arr[r][2]="+"+amount;
        }
        arr[r][3]=reason;
    }
    public static void expend() {
        System.out.print("支出金额:");
        int amount=Utility.readNumber();
        System.out.print("支出原因");
        String reason = Utility.readString();
        storage("支出",amount,reason);
        System.out.println("添加成功!");
    }
}

Utility工具类:

package txt;
import java.util.Locale;
import java.util.Scanner;
public class Utility {
    private static Scanner scanner=new Scanner(System.in);

    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;
    }
    public static String readKeyBoard(int limit) {
        String line="";
        while(scanner.hasNext()){    //hasNext()方法判断输入(文件、字符串、键盘等输入流)是否还有下一个输入项,若有,返回true,反之false。
            line=scanner.nextLine();
            if(line.length()<1||line.length()>limit){    //limit:输入字符串长度限制
                System.out.print("输入长度(不大于"+limit+")错误,请从新输入:");
                continue;
            }
            break;
        }
        return line;
    }
    public static int readNumber() {
        int n;
        for(;;){
            String str=readKeyBoard(4);
            try{
                n=Integer.parseInt(str);//Integer.parseInt() 是Integer包装类下的一个方法,作用是将()内的String类型字符串转化为int类型
                break;
            }catch(NumberFormatException e){
                System.out.print("数字有误请重新输入:");
            }
            /*try {
            } {
                  可能出现异常的代码
                    } catch(异常类名A e){
                          如果出现了异常类A类型的异常,那么执行该代码
                    }*/
    }
        return n;
    }
    public static String readString() {
        String str=readKeyBoard(8);//判断字符串长度不大于8
        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.print("选择错误请从新输入:");
            }
        }
        return c;
    }
}

四、代码实现结果

-------------------家庭收支记账软件---------------------

                    1.收支明细
                    2.登记收入
                    3.登记支出
                    4.退    出


请选择(1-4):2
收入金额:100
收入原因工资
添加成功!
-------------------家庭收支记账软件---------------------

                    1.收支明细
                    2.登记收入
                    3.登记支出
                    4.退    出


请选择(1-4):3
支出金额:150
支出原因吃饭
添加成功!
-------------------家庭收支记账软件---------------------

                    1.收支明细
                    2.登记收入
                    3.登记支出
                    4.退    出


请选择(1-4):1
收支        账号总金额        收支金额        说明        
收入           10100           +100           工资           
支出           9950             +150           吃饭           

-------------------家庭收支记账软件---------------------

                    1.收支明细
                    2.登记收入
                    3.登记支出
                    4.退    出


请选择(1-4):4
是否确认退出(Y/N):y
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值