java小练习---记账软件

记账软件

【注】控制台端的小练习
在这里插入图片描述
在这里插入图片描述

增删改查都已完成,这就是个小练习,我也是在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-01
        String start = scanner.next();

        System.out.println("输入结束日期");
        //2020-12-31
        String 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());
        }
    }



}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值