基于Java基础的家庭收支记账软件

前言

学习完Java基础之后,狗子我便在网上(尚硅谷)寻找了这个练手案例并对其进行了一定的改进,从而达到能够加深对Java基础的印象以及掌握,在此将其在此记录和分享给大家伙们,奥里给(٩(눈౪눈)و
在这里插入图片描述

一、前期准备


在开始搞事情之前得先准备好下面这些东西,其中 JDKIDE 不一定需要统一,这只是狗子我使用的版本而已。准备好之后带上我们的脑子就可以开搞啦

  1. 编程语言 : Java
  2. 运行环境 : JDK1.8
  3. IDE : IDEA 2020
  4. 储备知识 : Java基础

二、整体功能


说简单吧,也确实简单,毕竟只是一个用于巩固加深 Java基础 的一个小案例,因此,功能上我也没有做多大改动,都是一些基本功能·整体功能

三、功能模块


为了增加可读性(装13),下面的这些方法都被我封装到了 Utility 类里面去了,主要是模仿了尚硅谷的做法
| 功能名称 | 说明 | 返回值 |
|–|–|–|–|
| readMenuSelection(int maxSelection) | 用于界面菜单的选择。 | int selection |
| readExpenseAccount(String type) | 用于用户输入限定长度为6的开销金额。 | double incomeAccount |
| readExpenseDescription() | 用于用户输入长度不多于8的开销描述。 | String |
| queryAccountInfo(ArrayList accountInfoList) | 用于通过开销描述查找目标账单。 | int index |
| readConfirmSelection() | 用于退出界面的确定选择。 | boolean |
| readKeyBoard(int limit) |用于接收键盘输入的不大于限制长度为 limit 的字符串。 | String str |
同时附上演示过程的一小撮截图背景不是重点
演示

四、功能浅谈

1、 AccountInfo 类


这是我自己封装的一个账单信息类,用来存在账单里面存在的一些字段

public class AccountInfo {
    public AccountInfo() {
        this.expensesAmount = 0;
        this.expenseDescription = "无";
    }
    public AccountInfo(String expensesType) {
        this.expensesType = expensesType;
    }

    private String expensesType;        //开销种类
    private double expensesAmount;      //开销金额
    private String expenseDescription;  //开销说明
    private String expenseDate;         //开销时间
}

2、收支明细


在写的时候有想过用一个固定大小的数组来对数据进行记录的,但是作为掉头发的跟班人怎么能就用这么随便的方法呢。因此便去查了一下 ArrayList 的基本用法并用其来记录账单数据,而这个模块也只是对数据的简单遍历打印(类似线性表)

System.out.println("收支明细");
                    System.out.println("-----------------------------------------------------");
                    System.out.println("收支\t\t收支金额\t\t收支说明\t\t开销时间");
                    System.out.println("-----------------------------------------------------");
                    for (int i = 0; i < accountInfoList.size(); i++) {
                        System.out.println(accountInfoList.get(i).getExpensesType() + "\t\t¥" + accountInfoList.get(i).getExpensesAmount() + "\t\t" + accountInfoList.get(i).getExpenseDescription() + "\t\t" + accountInfoList.get(i).getExpenseDate());
                    }
                    System.out.println("-----------------------------------------------------");
                    System.out.println("总开销为:¥" + totalCost);

3、登记收入/支出


这两块可以说是一个东西来的,毕竟实现的代码基本一致,由于是基本功能,所以就谈谈在这里我用到的一些不太一样的东西。

  • Date类:用来记录创建账单的时间,其返回的是1970年到当前时间已经过了多少多少毫秒( Long型 )
  • SimpleDateFormat类:用来格式化日期,要不然一长串数字太难看了
System.out.println("登记收入");
                    AccountInfo accountInfo = new AccountInfo("收入");
                    //收入金额
                    System.out.print("请输入收入金额:");
                    accountInfo.setExpensesAmount(Utility.readExpenseAccount("收入"));
                    totalCost += accountInfo.getExpensesAmount();
                    //收入描述
                    System.out.print("请输入收入描述:");
                    accountInfo.setExpenseDescription(Utility.readExpenseDescription());
                    accountInfo.setExpenseDate(new SimpleDateFormat("yyyy年MM月dd日 HH:mm").format(date));
                    //插入ArrayList
                    accountInfoList.add(0, accountInfo);
                    System.out.println("登记成功!");

支出模块的类似我就不放上来了,想查看的可以到文章八月十五(屁股)那里白嫖源码查看

4、 查询账单


在查询这一块用到了自己写的 queryAccountInfo 方法,对输入账单说明进行了遍历对比,返回匹配的下标进行打印账单信息

System.out.println("查询账单");
                    if(accountInfoList.size() == 0) {
                        System.out.println("没有检测到数据");
                        System.out.println("先登记账单哦");
                        break;
                    }
                    System.out.print("请输入需要查到的收支说明:");
                    int index = Utility.queryAccountInfo(accountInfoList);
                    if(index == -1) {
                        System.out.println("查询失败");
                        System.out.println("请检查是否输入有误");
                    } else{
                        System.out.println("收支\t\t收支金额\t\t收支说明\t\t开销时间");
                        System.out.println("-----------------------------------------------------");
                        System.out.println(accountInfoList.get(index).getExpensesType() + "\t\t¥" + accountInfoList.get(index).getExpensesAmount() + "\t\t" + accountInfoList.get(index).getExpenseDescription() + "\t\t" + accountInfoList.get(index).getExpenseDate());
                    }

删除的模块由于运用了查询模块进行查找删除的账单,因此两个模块基本一样,唯一不同的就是删除的需要用到 ArrayList 中的 remove(int index) 进行删除

五、收获


在这里罗列一下这个花了一个晚上写的代码所得到的收获,毕竟刚进村,啥也不懂,收获也挺多的

  1. 封装有了深一丢丢的理解,尤其是在编写 Utility 类的时候,没有之前学C语言那样代码辣么臃肿,在工具类中有些方法进行了多次利用
  2. 了解了 ArrayList 的简单运用,但还没掌握,得多来几次,杀猪刀还没锋利
  3. 认识到了几个新类和方法,如Date类、SimpleDateFormat类、parseInt方法、parseDouble方法等
  4. 简单复习了一些异常处理,毕竟在这里面用的不多,因此这一块并没有什么感觉

六、总结


掉头发这件事情你得实践了才知道你掉的质量怎么样,在学习Java甚至是任何一门语言中,只学不敲,头发也就白掉了。

最后附上代码白嫖传送门----->白嫖走起

在这里插入图片描述

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈宝子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值