Java控制台小项目,随手记系统

系统介绍

Java基础练习,随手记系统。实现账单的增删改查功能

模块功能介绍

账单类

package cn.tx;
/*
* ID   类别   账户   类型   金额   时间   备注
*/

public class Bills {
    private String name;
    private String account; //支出 收入方式
    private String type;  // 支出  收入
    private Double total; //金额
    private String time;
    private String desc; //备注

    public Bills(){

    }

    public Bills(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;
    }
}

数据存储以及初始化

这里我们采用List列表来存储Bills类对象,同时在static代码块中初始化部分账单数据

// 创建一个集合来存储,  数组
    static List<Bills> billsList = new ArrayList<>();

    // 类加载的时候会第一时间执行, 在billsList中加入初始化数据
    static {
        billsList.add(new Bills("吃饭支出",247,"交行","支出","2021-03-01","家庭聚餐"));
        billsList.add(new Bills("吃饭支出",247,"交行","支出","2021-03-01","家庭聚餐"));
        billsList.add(new Bills("工资收入",12345,"现金","收入","2021-03-03","发工资"));
        billsList.add(new Bills("交通支出",200,"交行","支出","2021-03-04","交通出行"));
        billsList.add(new Bills("股票收入",5000,"交行","收入","2021-03-05","股票涨"));
        billsList.add(new Bills("礼金支出",1000,"现金","支出","2021-03-06","朋友结婚"));
    }

打印输出方法

 private static void print(List<Bills> billsList){
        System.out.println("IC\t\t类别\t\t\t账户\t\t类型\t\t金额\t\t\t时间\t\t\t\t备注");
        for (int i = 0; i < billsList.size(); i++) {
            Bills bills = billsList.get(i);
            System.out.println(i+1+"\t\t"+bills.getName()+"\t\t"+bills.getAccount()+"\t\t"+bills.getType()+"\t\t"+
                    bills.getTotal()+"\t\t"+bills.getTime()+"\t\t"+bills.getDesc());
        }
    }

添加账单

private static void addBills(){
        Scanner scanner = new Scanner(System.in);
        Bills bills = new Bills();

        System.out.println("请输入类别:");
        bills.setName(scanner.next());
        System.out.println("请输入账户:");
        bills.setAccount(scanner.next());
        System.out.println("请输入支出收入类型:");
        bills.setType(scanner.next());
        System.out.println("请输入金额:");
        bills.setTotal(scanner.nextDouble());
        System.out.println("请输入时间:");
        bills.setTime(scanner.next());
        System.out.println("请输入备注:");
        bills.setDesc(scanner.next());

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

    }

删除账单

 private static void delBills(){
        System.out.println("请输入需要删除的序号");
        Scanner scanner = new Scanner(System.in);
        int id = scanner.nextInt();
        billsList.remove(id-1);
        System.out.println("删除成功");
    }

查询账单

/*
     *  三种查询 1、查询所有  2、按照时间区间查询  3、收入和支出的类型查询
     * */
    private static void select(){
        System.out.println("随手记>>账务查询:");
        System.out.println("1、查询所有  2、按照时间区间查询  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;

        }
    }

分别实现三种查询

显示账单全部内容

 private static void selectAll(){
        print(billsList);
    }

根据收入与支出来进行账单的查询,这里使用了lambda表达式,可以理解为将billsList对象转换成stream流,用filter进行条件筛选,()中,bills相当于形参,代指billsList中的每一个对象,返回值为真时,保留该对象。之后再collect方法将stream流转回List即可

private static void selectByType(){
        System.out.println("随手记>>账务查询>>收入和支出的类型:");
        // 创建扫描器
        Scanner scanner = new Scanner(System.in);
        String op = scanner.next();
        // lambda 表达式
        List<Bills> billsList1 = billsList.stream().filter(bills -> {
            String type = bills.getType();
            return type.equals(op);
        }).collect(Collectors.toList());
        print(billsList1);
    }

与上述类似,不过采用了SimpleDateFormat类对时间格式进行了处理

private static void selectByDate(){

        //创建一个时间格式化的对象
        SimpleDateFormat format = new SimpleDateFormat("yyyy-mm-dd");
        System.out.println("随手记>>账务查询>>按照时间区间来查询:");
        // 创建扫描器
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入开始时间,格式YYYY-MM—DD");
        String start = scanner.next();
        System.out.println("请输入结束时间,格式YYYY-MM-DD");
        String end = scanner.next();

        List<Bills> billsList1 = billsList.stream().filter(bills -> {
            String time = bills.getTime();
            // 把字符串解析成具体的时间
            try {
                Date startDate = format.parse(start);
                Date endDate = format.parse(end);
                Date timeDate = format.parse(time);
                if (timeDate.before(endDate) && timeDate.after(startDate)) {
                    return true;
                }
            } catch (ParseException e) {
                e.printStackTrace();
            }
            return false;
        }).collect(Collectors.toList());
        print(billsList1);

    }

主界面方法

public static void run(){

        // 创建一个flag标志,用于退出系统的标志
        boolean flag = true;
        while(flag) {
            System.out.println("---------------随手记----------------");
            System.out.println("1.添加账务  2.删除账务  3.查询账务  4.退出系统");
            System.out.println("请输入功能序号【1-4】:");

            //创建扫描器
            Scanner scanner = new Scanner(System.in);

            // 获得输入的选项
            int op = scanner.nextInt();

            // 判断1,2,3,4
            switch (op) {
                case 1:
                    addBills();
                    break;
                case 2:
                    delBills();
                    break;
                case 3:
                    select();
                    break;
                case 4:
                    System.out.println("退出系统:");
                    flag = false;
                    break;
                default:
                    System.out.println("请重新输入:");

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值