初次模拟小鲨鱼记账本1.0

我打算逐步将小鲨鱼记账本优化,这次没有用到数据库,等出到2.0版本再用

本次的核心是查找数据用了stream流(我的另一篇简单介绍了什么是Stream流)

用到的比较简单,用于对Java基础的巩固加深,下一次的2.0版正好再对数据库的知识进行复习

如果有机会出3.0就把学的前段一些知识再用上(...够呛了,我努力找找资源)

这是1.0版本的视频(讲的挺好的,我把源码分享给大家,源码是我自己打的哦)

每天1个java练习小项目,java7日项目思维养成_哔哩哔哩_bilibiliicon-default.png?t=M0H8https://www.bilibili.com/video/BV1Aq4y1W79E?p=3*这是账单对象:

package app;
//这是一个账单对象
//ID 类别 账户 类型 金额 时间 备注
//创建类一般流程 用private;
// 之后无参有参构造函数;
//用getter和setter
public class Object_Bill {
    private String name;//吃饭 娱乐
    private String account;
    private String type;
    private double total;
    private String time;
    private String desc;

    public Object_Bill() { //无参构造器
    }
    //有参构造器
    public Object_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 app;
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 Project_01 {
    //创建一个集合来储存,数组
  static   List<Object_Bill> billsList=new ArrayList<>();
    //通过静态代码块来首先加载一些数据//只会实现一次,就算你创建了20个对象,只有第一个对象会执行
    //为了现实3;所以先用静态代码块
    static{
        billsList.add(new Object_Bill("吃饭支出",247,"交行","支出","2021-01-23","家庭聚会"));
        billsList.add(new Object_Bill("工资收入",23443,"现金","收入","2022-02-11","发工资"));
        billsList.add(new Object_Bill("服装支出",666,"微信","支出","2021-01-23","买衣服"));
        billsList.add(new Object_Bill("股票收入",8888,"交行","收入","2022-01-23","股票大涨"));
        billsList.add(new Object_Bill("礼金支出",888,"农行","支出","2022-1-01","给长辈买礼物"));
      }

    public static void main(String[] args) {
        menu();
        run();

    }
    public static void menu(){
        //1.首先显示主界面
        System.out.println("------小鲨鱼随手记--------");
        System.out.println("1.添加账务 2.删除账务 3.查询账务 4.退出系统");
        System.out.println("选择上述服务");
    }
    public static void run(){

        //之后获取输入的文字Scanner
        Scanner sc=new Scanner(System.in);

        boolean flag=true;
        while(flag) {
            int num=sc.nextInt();
            switch (num) {
                case 1:
                    System.out.println("你选择的是添加账务");
                    add();
                    break;
                case 2:
                    System.out.println("你选择的是删除账务");
                    delete();
                    break;
                case 3:
                    System.out.println("你选择的是查询账务");
                    select();
                   break;
                case 4:
                    System.out.println("你选择的是退出系统");
                    flag=false;//用标记退出系统,break退出Switch;while退出while
                    break;
                default:
                    System.out.println("请重新输入");

            }
        }



    }

    public static void add(){
       //  public Object_Bill(String name, double total, String account, String type, String time, String desc)
        Scanner scs=new Scanner(System.in);
        Object_Bill bill =new Object_Bill();
        System.out.println("请输入支出收入类型:");
        bill.setType(scs.next());

        System.out.println("请输入类别:");
        bill.setName(scs.next());

        System.out.println("请输入账户:");
        bill.setAccount(scs.next());

        System.out.println("请输入金额:");
        bill.setTotal(scs.nextDouble());

        System.out.println("请输入时间:");
        bill.setTime(scs.next());

        System.out.println("请输入备注:");
        bill.setDesc(scs.next());

        billsList.add(bill);
        System.out.println("添加账务成功!");
        menu();
    }

    public static void delete(){
        Scanner sc=new Scanner(System.in);
        System.out.println("选择你要删除的序号数:");
         int   num =sc.nextInt();
         Object_Bill bill=billsList.get(num-1);
        billsList.remove(num-1);
        System.out.println("删除账务成功!删除的是:");
        System.out.println("ID\t\t类别\t\t\t账户\t\t类型\t\t金额\t\t\t时间\t\t\t\t备注");
        System.out.println(num+"\t\t"+bill.getName()+"\t\t\t"+bill.getTotal()+"\t\t"+bill.getAccount()+"\t\t"+bill.getType()+"\t\t\t"+bill.getTime()+"\t\t\t\t"+bill.getDesc());
        menu();





    }
    public static void select(){
        System.out.println("账务查询具体功能如下");
        System.out.println("1.查询所有 2.按照时间区间来查询 3.收入和支出的类型查询");
        System.out.println("选择上述服务类型");
        Scanner sc1=new Scanner(System.in);
        int num1=sc1.nextInt();
        switch (num1){

            case 1:
                selectAll();
                break;
            case 2:
                selectByDate();
                break;
            case 3:
                selectByType();
                break;

        }
        menu();



    }
     private static void selectAll(){
         printAll(billsList);
     }
     private static  void selectByDate() {
         //将字符串反向解析为时间
         SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");

         System.out.println("小鲨鱼--账务查询--收入和支出类型");
         Scanner scanner = new Scanner(System.in);
         System.out.println("输入开始时间");
         String start = scanner.next();


         System.out.println("输入结束时间");
         String end = scanner.next();
         //还是用stream流
       List<Object_Bill> billDate=  billsList.stream().filter(bills->{
             String time=bills.getTime();
                     try {
                         Date startDate= format.parse(start);//用try catch 抛出异常
                         Date endDate=   format.parse(end);
                         Date dateTime=format.parse(time);
                         if (dateTime.before(endDate)&&dateTime.after(startDate)) {
                             return true;

                         }
                     } catch (ParseException e) {
                         e.printStackTrace();
                     }
             return false;

                 }


         ).collect(Collectors.toList());
         printAll(billDate);
     }

     private  static  void selectByType(){

         System.out.println("小鲨鱼--账务查询--收入和支出类型");
         System.out.println("输入收入或者支出");
         Scanner scanner = new Scanner(System.in);
         String type = scanner.next();
         //Stream流(lamda表达式)//进行过滤
         //集合Stream
//         Stream<Object_Bill> stream=billsList.stream();
//         stream.filter(bills->{
//             String type1=bills.getType();
//             return type.equals(type1);//equals比较
//              });

    List<Object_Bill> billsList1=billsList.stream()
                 .filter(bills -> {
                     String type1 = bills.getType();
                     return type.equals(type1);
                 })//equals比较
                 .collect(Collectors.toList());//这是把流转换为集合
         printAll(billsList1);

     }
     public static void printAll(List<Object_Bill> billsList){
         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 <billsList.size() ; i++) {
             Object_Bill bill=billsList.get(i);
             System.out.println(i+1+"\t\t"+bill.getName()+"\t\t\t"+bill.getTotal()+"\t\t"+bill.getAccount()+"\t\t"+bill.getType()+"\t\t\t"+bill.getTime()+"\t\t\t\t"+bill.getDesc());

         }






     }


}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值