记账软件

【注】控制台端的小练习

增删改查都已完成,这就是个小练习,我也是在B站的直播课上学的,后来要了人家打代码注释,自己完善了功能,供大家学习。
以下是完整的代码,我实在idea上执行的,任意软甲只要能执行java程序都可以运行。
欢迎大家指导,或者有什么好的项目欢迎大家一起学习!!!
注:此练习我没用数据库,我把数据存在了内存中,这个是我的小练习,大家可以试试要是存在了数据库就更简单了!
这个是定义的实体。

package cn.tx;public class Bill {/*** 简称*/private String name;/*** 账户*/private String account;/*** 收入支出类型*/private String type;/*** 发生额*/private double total;/*** 账单的时间*/private String time;/*** 备注*/private String desc;public Bill() {}public Bill(String name,double total, String account, String type,  String time, String desc) {this.name = name;this.account = account;this.type = type;this.total = total;this.time = time;this.desc = desc;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAccount() {return account;}public void setAccount(String account) {this.account = account;}public String getType() {return type;}public void setType(String type) {this.type = type;}public double getTotal() {return total;}public void setTotal(double total) {this.total = total;}public String getTime() {return time;}public void setTime(String time) {this.time = time;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}
}

这个是代码:
全部复制完整运行:

package cn.tx;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;
import java.util.stream.Stream;public class MainMenu {//创建一个集合,存储记账的所有信息static List<Bill> billList = new ArrayList<>();/*** 做了一个数据的初始化*/static{billList.add(new Bill("吃饭支出",247,"交行","支出","2021-03-02","家庭聚餐"));billList.add(new Bill("吃饭支出",247,"交行","支出","2021-03-02","家庭聚餐"));billList.add(new Bill("工资收入",12345,"现金","收入","2021-03-15","开工资了"));billList.add(new Bill("服装支出",1998,"现金","支出","2021-04-02","买衣服"));billList.add(new Bill("吃饭支出",325,"现金","支出","2021-06-18","朋友聚餐"));billList.add(new Bill("股票收入",8000,"工行","收入","2021-7-28","股票大涨"));billList.add(new Bill("股票收入",5000,"工行","收入","2021-8-28","股票又大涨"));billList.add(new Bill("工资收入",5000,"交行","收入","2021-9-28","又开工资了"));billList.add(new Bill("礼金支出",5000,"现金","支出","2021-11-28","朋友结婚"));billList.add(new Bill("其他支出",1560,"现金","支出","2021-12-29","丢钱了"));billList.add(new Bill("交通支出",2300,"交行","支出","2020-10-29","油价还在涨啊"));billList.add(new Bill("吃饭支出",1000,"工行","支出","2020-9-29","又吃饭"));billList.add(new Bill("工资收入",1000,"现金","收入","2020-11-30","开资"));billList.add(new Bill("交通支出",2000,"现金","支出","2020-7-30","机票好贵"));billList.add(new Bill("工资收入",5000,"现金","收入","2020-5-30","又开资"));}public static void main(String[] args) {run();}public static void showOneLevelMenu(){//显示主菜单System.out.println("------------------拓薪记账宝-------------------");System.out.println("1. 添加财务   2.删除财务   3.查询财务  4. 退出系统");System.out.println("请输入要操作的序号[1-4]");}/*** 启动记账软件*/public static void run(){showOneLevelMenu();//创建扫描器对象Scanner s = new Scanner(System.in);//创建一个标志boolean flag = true;while (flag){//获得输入的整数int op = s.nextInt();//等值判断switch (op){case 1:addBill();break;case 2:
//                    System.out.println("删除");delBill();break;case 3:select();break;case 4:System.out.println("退出, 88");flag = false;break;}}}//删除记录private static void delBill() {System.out.println("记账宝>>删除");System.out.println("[提示]   要删除的元素只需要-1即可,索引起始为0,意思是从0开始,eg:要删除15只需要输入Id = 14即可!!!");System.out.println("提示:请输入要删除的记账对应的ID:");Scanner scanner = new Scanner(System.in);int Id = scanner.nextInt();System.out.println("删除成功!");billList.remove(Id);showOneLevelMenu();
//        print(bill);
//        billList.stream().filter(bill -> {//            return bill.getName().;
//        })}/*** 添加账单*/private static void addBill() {System.out.println("记账宝>>添加");System.out.println("提示:请输入名头");Scanner scanner = new Scanner(System.in);Bill bill = new Bill();String name = scanner.next();bill.setName(name);System.out.println("提示:请输入账户");String account = scanner.next();bill.setAccount(account);System.out.println("提示:请输入类型");String type = scanner.next();bill.setType(type);System.out.println("提示:请输入金额");double total = scanner.nextDouble();bill.setTotal(total);System.out.println("提示:请输入时间");String  time = scanner.next();bill.setTime(time);System.out.println("提示:请输入描述");String  desc = scanner.next();bill.setDesc(desc);billList.add(bill);System.out.println("添加成功");showOneLevelMenu();}/*** 查询方法*/private static void select() {System.out.println("记账宝>>查询");System.out.println("查询方式:1.查询所有   2. 日期查询    3. 类型");System.out.println("提示:输入查询方式[1-3]");Scanner scanner = new Scanner(System.in);int op = scanner.nextInt();switch (op){case 1:selectAll();break;case 2:selectByDate();break;case 3:selectByType();break;}showOneLevelMenu();}/*** 根据支出和收入的类型查询*/private static void selectByType() {System.out.println("查询》类型查询");System.out.println("提示:支出,收入");Scanner scanner = new Scanner(System.in);String type = scanner.next();List<Bill> bills = billList.stream().filter(bill -> {return bill.getType().equals(type);}).collect(Collectors.toList());print(bills);}/*** 按着日期查询:*  开始日期: yyyy-MM-dd*  结束日期: yyyy-MM-dd*/private static void selectByDate() {System.out.println("查询》日期查询");System.out.println("提示:请输入开始日期");Scanner scanner = new Scanner(System.in);//2020-01-01String start = scanner.next();System.out.println("输入结束日期");//2020-12-31String end = scanner.next();//把输入的日期字符串转行成日期对象SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");//从记账 大集合中筛选,   在jdk1.8之前集合都不能支持筛选,1.8之后 lamda表达式功能就可以做集合查询Stream<Bill> stream = billList.stream();//给一个集合创建一个管道流//.filter对管道流做过滤List<Bill> bills = stream.filter(bill -> {//获得每一个账单的时间String time = bill.getTime();try {//把我们输入的开始和结束时间的字符串转成日期对象Date startTime = format.parse(start);Date endTime = format.parse(end);//获得的每一个账单的时间Date billTime = format.parse(time);//判断时间的区间if (billTime.after(startTime) && billTime.before(endTime)) {return true;}} catch (ParseException e) {e.printStackTrace();}return false;//把管道流筛选后的结果创建一个新的集合}).collect(Collectors.toList());print(bills);}/*** 查询所有*/private static void selectAll() {print(billList);}/*** 创建一个公用的方法:打印账单* @param bills*/public static void print(List<Bill> bills){System.out.println("------------------------------查询结果--------------------------------");System.out.println("ID\t\t名头\t\t\t账户\t\t类型\t\t金额\t\t\t时间\t\t\t\t备注");for (int i = 0; i < bills.size(); i++) {Bill bill = bills.get(i);System.out.println(i+1 + "\t\t" + bill.getName() + "\t\t" + bill.getAccount() + "\t\t" + bill.getType()+ "\t\t" + bill.getTotal()+ "\t\t" + bill.getTime() + "\t\t" + bill.getDesc());}}}

java小练习---记账软件相关推荐

  1. eclipse编写的Java家庭收支记账软件

    eclipse编写的Java家庭收支记账软件 界面及操作过程如下所示: -----------------家庭收支记账软件----------------- 1 收支明细 2 登记收入 3 登记支出 ...

  2. Java写家庭记账软件

    java 家庭记账软件 Miraitowa 本内容介绍的是有关java制作一个家庭记账软件的相关知识.但是由于我也是初学,所以希望大家多多指教. 以下就是我们这次的题: 需求说明 •模拟实现基于文本界 ...

  3. java家庭收支记账软件-day01

    import java.util.Scanner; public class itemfamily {public static void main(String[] args) {Scanner s ...

  4. 【java】案例一:使用java写的记账软件

    目录 一.需求说明 二.主要思路 三.代码实例 四.运行结果 一.需求说明 1.能够记录家庭的收入.支出,并能够打印收支明细表. 2.项目采用分级菜单方式. 3.假设家庭起始的生活基本金为10000元 ...

  5. Java实现家庭记账软件(文本界面)

    家庭记账软件 一.需求 模拟实现基于文本界面的家庭记账软件. 此软件能够记录家庭收入.支出,并打印收支明细表. 项目采用分级菜单方式.主菜单如下: 二.分析 主要设计以下知识点: 局部变量和基本数据类 ...

  6. java家庭收支记账软件

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

  7. Java项目----家庭记账软件(基于文本界面)

    一.涉及要点: ①变量的定义 ②基本数据类的使用 ③循环语句 ④分支语句 ⑤方法声明.调用和返回值的接收 ⑥简单屏幕输出格式控制 二.需求说明 ①能够记录家庭的收入.支出,并能够打印收支明细表 ②采用 ...

  8. 【Java小案例】家庭记账软件

    一.概述 1.具体需求: 1.首页设有收支明细.登记收入.登记支出.退出四个选项 2.若用户输入不存在的选项数字,请用户重新输入 3.当用户输入一个选项对应的数字,打开该选项的界面,并再次打开首页界面 ...

  9. java小项目家庭记账程序

    文章目录 java小项目家庭记账程序 **1.项目目标:** 2.项目需求: 3.具体思路: 4.具体代码: 1.页面: 2.Option_1类: 3.Option_2类: 4.Option_3类: ...

最新文章

  1. python traceback模块_Python中的traceback模块
  2. 【Infragistics教程】使用可重复使用的自定义组件更快地创建原型
  3. 性能测试(05)-表达式和业务关联-json关联
  4. 总结了一些指针易出错的常见问题(二)
  5. 从编译安装Keepalived 到 配置 负载均衡(LVS-DR)
  6. [并查集][排序][dfs][启发式合并] JZOJ P3635 Peaks
  7. 修改Navicat数据库自动备份目录
  8. A remark on the error-backpropagation learning algorithm for spiking neural networks
  9. linux db2升级,linux 下 db2 v97 升级到db2 v10.1 实战
  10. python接口测试覆盖率统计_pytest文档57-计算单元测试代码覆盖率(pytest-cov)
  11. Java函数replaceAll 的使用
  12. VS2019下载地址和安装教程(图解)
  13. PSPNet: Pyramid Scene Parsing Network
  14. 黑龙江省谷歌高清卫星地图下载
  15. Flash网站的优缺点
  16. 详解boost库中的Message Queue
  17. 萤石开放平台的二次开发——设备如何上云
  18. 八位数字后加逗号_【PTE干货】英文数字的读法
  19. Javascript 实现的 CXK 打篮球游戏
  20. Activity切换闪屏问题

热门文章

  1. 汇编程序设计:代码转换程序
  2. Exception caught: mqAdminExt get broker stats data TOPIC_PUT_NUMS failed
  3. Windows磁盘管理(Raid)
  4. 嵌入式菜单LCD简单版
  5. android 仿QQ音乐歌单效果
  6. springboot+阿里云短信 找不到本地包 解决
  7. 有实力的APP开发公司应该具备哪些优势?
  8. RPA是什么?推荐让电商运营10倍提效的自动化工具
  9. 蓝桥杯 青少年创意编程大赛 scratch组 (三)
  10. nacos界面定制化