java小项目家庭记账程序

java小项目家庭记账程序

1.项目目标:

1.模拟实现一个基于文本界面的家庭记账软件。

2.掌握初步的编程技巧和调试技巧。

3.灵活运用基础知识。

2.项目需求:

1 收支明细

2 登记收入

3 登记支出

4 退 出

请选择(1-4):_

在这里插入图片描述

3.具体思路:

首先,这个记账的页面只要你不按推出,肯定是会一直存在的,所以,我会考虑用一个while来装这个页面,然后就是对数据的打印等,我想到可以用一个二维数组来装这个数据,并且可以把选项123分别单独写一个类,为了程序的耦合性。

4.具体代码:

1.页面:

这个类实现了进入页面的显示,当用户输入1 2 3 4时,后会得到相应的反应,然后如果输入1234以外的数字和字母,程序会提醒用户输入错误并重新输入。

对输入的字符进行处理(如图1):

将nextInt用try包围起来,如果输入到int以外的字符,就抛出异常,我在catch中再次调用键盘扫描的方法即nextInt(),再次开启扫描。
在这里插入图片描述

​ 图1

import java.util.InputMismatchException;
import java.util.Scanner;

    public void face (){
        boolean flag = true;
        Scanner sc = new Scanner(System.in);
        int num = 4;
        String[][] acount = new String[10][4];
        int StartMoney = 10000;
        acount[0][0] = "1.收入";
        acount[0][1] = "2.账户总金额";
        acount[0][2] = "3.收支金额";
        acount[0][3] = "说明";
        while (flag){
            System.out.println("-----------------家庭收支记账软件-----------------");
            System.out.println("1.收支明细");
            System.out.println("2.登记收入");
            System.out.println("3.登记支出");
            System.out.println("4.退\t\t出:请选择1-4");


            try {
                int option = sc.nextInt();
                switch (option){
                    default:
                        System.out.println("输入错误");
                    case 1:
                        System.out.println("收入明细:");
                        new  Option_1().ergodic(acount);//实例化这个选项1这个类,并传入数组。
                        break;
                    case 2:
                        System.out.println("登记收入:");
                        StartMoney =  new Option_2().income(StartMoney,acount);//starMoney初始值为10000,然后每次调用完income方法后会返回一个经过求和以后的一个总金额。
                        System.out.println("总的:"+StartMoney);
                        break;
                    case 3:
                        System.out.println("登记支出:");
                        StartMoney =  new Option_3().outcome(StartMoney,acount);//同option2

                        break;

                    case 4:
                        System.out.println("已退出");
                        flag = false;//将flag修改为false,跳出while循环。
                        break;

                }
            } catch (Exception e){
                sc.next();
                System.out.println("输入错误");
            }

        }
    }
}

2.Option_1类:

这个类里面就是对传入的这个数组进行输出打印,

package com.ccw;

public class Option_1 {

    public Option_1() {
    }

    public static void main(String[] args) {
        String[][] acount = new String[10][4];

        new Option_1().ergodic(acount);
    }
    public void  ergodic(String[][] acount) {

        acount[0][0] = "收入";
        acount[0][1] = "账户总金额";
        acount[0][2] = "收支金额";
        acount[0][3] = "说明";
        for (int i = 0; i < acount.length; i++) { // 8 4

            for (int j = 0; j <acount[i].length ; j++) {
                if(acount[1][1]==null){
                    acount[1][1] =10000+"";
                }
                if(acount[i][j]!=null){
                    System.out.print(acount[i][j]+'\t'+'\t');

                }

            }
            System.out.println();
        }

    }
}

3.Option_2类:

package com.ccw;

import java.util.Scanner;

public class Option_2 {
    int AllMoney ;
    int index;
    int money;
    String str = "+";
    String explain;
    public Option_2() {
        Scanner sc = new Scanner(System.in);
        System.out.println("收入金额");
        money = sc.nextInt();
        System.out.println("说明");
        explain = sc.next();
    }

    public String[][] copy(String[][] acount,int OutMoney){
            String[][] copyacount;
            copyacount = new String[acount.length+1][];
            for (int i = 0; i < acount.length; i++) {
                copyacount[i] = acount[i].clone();
            }
            copyacount[index][0] =  "收入";
            copyacount[index][1] = OutMoney+"" ;
            copyacount[index][2] = str;
            copyacount[index][3] = explain;
        return copyacount;
    }
    public int  income(int OutMoney,String[][] acount){
        OutMoney+=money;
        str = "+"+money;

        for (int i = 0; i < acount.length; i++) {
            if (acount[i][0]==null){
                 index = i ;
                 break;
            }
        }
        if ((index+1)==acount.length){
            
        }

        acount[index][0] =  "收入";
        acount[index][1] = OutMoney+"" ;
        acount[index][2] = str;
        acount[index][3] = explain;

        return OutMoney;
    }

}

4.Option_3类:

这个类和Option2类基本都是差不多 的就不过多解释了。

package com.ccw;

import java.util.Scanner;

public class Option_3 {
    int AllMoney ;
    int index;
    int money;
    String str = "+";
    String explain;
    public Option_3() {
        Scanner sc = new Scanner(System.in);
        System.out.println("支出");
        money = sc.nextInt();
        System.out.println("说明");
        explain = sc.next();
    }

    public String[][] copy(String[][] acount,int OutMoney){
        String[][] copyacount;
        copyacount = new String[acount.length+1][];
        for (int i = 0; i < acount.length; i++) {
            copyacount[i] = acount[i].clone();
        }
        copyacount[index][0] =  "支出";
        copyacount[index][1] = OutMoney+"" ;
        copyacount[index][2] = str;
        copyacount[index][3] = explain;
        return copyacount;
    }
    public int  outcome(int OutMoney,String[][] acount){
        OutMoney-=money;
        str = "-"+money;

        for (int i = 0; i < acount.length; i++) {
            if (acount[i][0]==null){
                index = i ;
                break;
            }
        }
        if ((index+1)==acount.length){

        }

        acount[index][0] =  "支出";
        acount[index][1] = OutMoney+"" ;
        acount[index][2] = str;
        acount[index][3] = explain;

        return OutMoney;
    }
    public void  assignment() {

    }
}

Test类:

public class Test {
    public static void main(String[] args) {
        Option_1 op1 = new Option_1();

        Surface surface = new Surface();
        surface.face();
    }
}//实例化页面的类,并使用face方法加载页面。

5.总结:

项目中并没有做到对这个存放数据的数组的扩容,只有最初初始化数组的时候手动将数组长度调大,希望下次可以改进一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值