家庭收支管理系统(java)

一、系统需要的类

1、FamilyAccount
包含主函数,系统运行的开始

    public static void main(String[] args) 

2、Utility
工具类,各种输入以及校验方法的集合

    //从键盘读入长度不超过limit的字符串
    private static String readKeyBorad(int limit) 

    //从键盘读入收支金额
    public static int readNumber() 

    //从键盘读入菜单选项
    public static char readMenuSelection() 

    //从键盘录入是否确认(Y/N)
    public static boolean isConfirmChoose() 

    //从键盘读入收支说明
    public static String readInfo() 





二、系统所需类的具体代码

1、Utility

package hu7;
import java.util.Locale;
import java.util.Scanner;
public class Utility {
    public static Scanner sc = new Scanner(System.in);

    //从键盘读入长度不超过limit的字符串
    private static String readKeyBorad(int limit) {
        while (true) {
            String str = sc.nextLine();
            if ( str.length() < 1 || str.length() > limit) {
                System.out.println("输入错误,(长度不能超过" + limit + ")请重新输入:");
                continue;
            } else {
                return str;
            }
        }
    }

    //从键盘读入收支金额
    public static int readNumber() {
        int tempMoney;
        while (true) {
            String money = readKeyBorad(5);
            try {
                //将字符串转换为数字
                tempMoney = Integer.parseInt(money);
                break; //try语句中一定要加break跳出循环
            } catch (NumberFormatException e) { //捕捉字符串转换为数字的异常
                System.out.println("数字输入异常,请重新输入:");
            }
        }
        return tempMoney;
    }

    //从键盘读入菜单选项
    public static char readMenuSelection() {
        char c;
        while (true) {
            String str = readKeyBorad(1);
            c = str.charAt(0); //获取字符串的第一个字符
            if ( c != '1' && c != '2' && c != '3' && c != '4') {
                System.out.println("选项输入错误,请重新输入:");
                continue;
            } else {
                break;
            }
        }
        return c;
    }

    //从键盘录入是否确认(Y/N)
    public static boolean isConfirmChoose() {
        boolean flag;
        while (true) {
            String str = readKeyBorad(1);
            //字符串转为大写
            String strUpper = str.toUpperCase(Locale.ROOT);
            //获取字符串的第一个字符
            char c = strUpper.charAt(0);
            if ( c == 'Y') {
                flag = true;
                break;
            } else if ( c == 'N') {
                flag = false;
                break;
            } else {
                System.out.println("输入错误,请重新输入:");
                continue;
            }
        }
        return flag;

    }

    //从键盘读入收支说明
    public static String readInfo() {
        String str = readKeyBorad(16);
        return str;
    }



}

2、FamilyAccount

package hu7;

public class FamilyAccount {
    public static void main(String[] args) {
        Utility t = new Utility();
        int balance = 10000;
        boolean isFlag = true;
        String details = "收支\t账户金额\t收支金额\t说  明\n";
        while (isFlag) {
            System.out.println("---------欢迎使用家庭收支系统---------");
            System.out.println("1 收支明细");
            System.out.println("2 登记收入");
            System.out.println("3 登记支出");
            System.out.println("4 退   出");
            System.out.println("--------------------------------------\n");

            System.out.println("请输如您的选项:");
            char selectionMenu = t.readMenuSelection();
            switch (selectionMenu) {
                case '1':
//                    System.out.println("1 收支明细");
                    System.out.println(details);
                    break;

                case '2':
//                    System.out.println("2 登记收入");
                    System.out.println("请输入收入金额:");
                    int money = t.readNumber();
                    System.out.println("请输入收入说明:");
                    String addInfo = t.readInfo();
                    //更新余额
                    balance += money;
                    details += ("收入" + "\t" + balance + "\t" + money + "\t\t" + addInfo + "\n");
                    System.out.println("------------------登记收入成功-----------------------\n");
                    break;

                case '3':
//                    System.out.println("3 登记支出");
                    System.out.println("请输入支出金额:");
                    int outMoney = t.readNumber();
                    System.out.println("请输入支出说明:");
                    String outInfo = t.readInfo();
                    //更新余额
                    balance -= outMoney;
                    details += ("收入" + "\t" + balance + "\t" + outMoney + "\t\t" + outInfo + "\n");
                    System.out.println("------------------登记支出成功-----------------------\n");
                    break;

                case '4':
//                    System.out.println("4 退   出");
                    System.out.println("是否确认退出? (Y or N)");
                    boolean confirmChoose = t.isConfirmChoose();
                    if ( confirmChoose == true ) {
                        isFlag = false;
                    }
                    break;

            }

        }
    }
}



三、总结

本次家庭收支小系统来源于B站尚硅谷JAVA基础课程。自己跟着视频敲了一遍,然后又独立写了一遍。现在上传的这个版本是自己重写的,主要收获如下:

1、编写小系统的代码时,要先构思然后在写。先编写大框架,然后再逐步细化。
2、每编写一个方法都最好在单独的测试程序中测试,运行与预期相符后再进行下一步。
3、动手比纯粹的看更重要,动手编写程序才能更真切的感受从代码构思,程序编写,处理bug到程序运行成功的整个流程
4、所有涉及数据录入的都最好进行数据校验,避免输入异常导致错误

几个java方法:
<1>Integer.parseInt(String s) 将字符串转换为整型数字
NumberFormatException 捕捉字符串转换为数字的异常
详情见官方文档:Integer.parseInt(String s) 、NumberFormatException

package hu9;

public class test1 {
    public static void main(String[] args) {
        String str = "2345676";
        int number;
        //字符串转换为数字
        try{
            number = Integer.parseInt(str);
            System.out.println("number="+number);
        } catch (NumberFormatException e) { //捕捉字符串转换为数字异常
            System.out.println("字符串转换为数字失败了!");
        }
    }
}

在这里插入图片描述

package hu9;

public class test1 {
    public static void main(String[] args) {
        String str = "2345676jgs";
        int number;
        //字符串转换为数字
        try{
            number = Integer.parseInt(str);
            System.out.println("number="+number);
        } catch (NumberFormatException e) { //捕捉字符串转换为数字异常
            System.out.println("字符串转换为数字失败了!");
        }
    }
}

在这里插入图片描述----------------------------------------------------------------------------------------------
<2>String 中charAt(int i) 方法,取出字符串中第i个字符
详情见官方文档:String 中charAt(int i) 方法

package hu9;

public class test1 {
    public static void main(String[] args) {
        String str = "2345676jgs";
        char c1 = str.charAt(2);
        char c2 = str.charAt(7);
        System.out.println("c1="+c1);
        System.out.println("c2="+c2);
    }
}

在这里插入图片描述<3>String中的toUpperCase方法,将字符串转换为大写
详情:在这里插入图片描述

package hu9;

import java.util.Locale;

public class test1 {
    public static void main(String[] args) {
        String str = "jaGEG";
        String str1 = str.toUpperCase(Locale.ROOT);
        System.out.println("str1="+str1);
    }
}

在这里插入图片描述

  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值