Java小型管理系统,文章中有源码,适合作为课程作业,个人小项目(中等)

简介: Java小型管理系统,文章中有源码,适合作为课程作业,个人小项目(中等)

Bills.java

package cn.tx1;
/**
 * ID  类别  账户  类型   余额  时间  备注
 */
public class Bills {
    private String name;
    private String account;
    private String type;
    private double total;
    private String time;
    private String desc;
    //全参构造器
    public Bills(String name, String account, String type, double total, String time, String desc) {
        this.name = name;
        this.account = account;
        this.type = type;
        this.total = total;
        this.time = time;
        this.desc = desc;
    }
    //无参构造器
    public Bills() {
    }
    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;
    }
}

MainMenu.java

package cn.tx1;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class MainMenu {
    //创建一个集合来存储
    static List<Bills> billsList=new ArrayList<>();
    //静态代码块,类加载的时候第一时间执行   “果然还是用到了”
    static {
        //String name, String account, String type, double total, String time, String desc
        billsList.add(new Bills("吃饭支出","建设银行","支出",122247,"2022-1-1","家庭聚餐"));
        billsList.add(new Bills("吃饭支出","农业银行","支出",111222,"2021-12-11","家庭聚餐"));
        billsList.add(new Bills("工资收入","农商银行","收入",927227,"2021-11-1","发工资"));
        billsList.add(new Bills("交通支出","交通银行","支出",999247,"2021-1-1","交通支出"));
        billsList.add(new Bills("买气球","建设银行","支出",222147,"2025-1-1","买气球"));
        billsList.add(new Bills("奖金收入","投资银行","收入",908227,"2021-1-1","奖金"));
    }
    public static void showMain(){
        System.out.println("--------随手记---------");
        System.out.println("1、添加账务  2、删除帐务  3、查询账务  4、退出系统");
        System.out.println("请输入功能序号【1-4】:");
    }
    public static void main(String[] args) {
        run();
    }
    public static void run(){
        showMain();
        //创建一个flag标志,循环条件,变量存在
        boolean flag=true;
        //创建扫描器
        Scanner sc=new Scanner(System.in);
        //获得输入的选项
        while (flag){
            int num=sc.nextInt();
            //判断1、2、3、4
            switch (num){
                case 1:
                    addBills();
                    break;
                case 2:
                    delBills();
                    break;
                case 3:
                    select();
                    break;
                case 4:
                    flag=false;
                    break;
                default:
                    System.out.println("请重新输入选项:");
            }
        }
        System.out.println("退出系统,拜拜!");
    }
    private static void delBills() {
        Scanner sc2=new Scanner(System.in);
        int id= sc2.nextInt();
        billsList.remove(id-1);
        System.out.println("删除成功!!");
        showMain();
    }
    private static void addBills() {
        Scanner sc2=new Scanner(System.in);
        Bills bills=new Bills();
        System.out.println("请输入类别:");
        bills.setName(sc2.next());
        System.out.println("请输入账户:");
        bills.setAccount(sc2.next());
        System.out.println("请输入收入支出类型:");
        bills.setType(sc2.next());
        System.out.println("请输入金额::");
        bills.setTotal(sc2.nextInt());
        System.out.println("请输入时间:");
        bills.setTime(sc2.next());
        System.out.println("请输入备注:");
        bills.setDesc(sc2.next());
        billsList.add(bills);
        System.out.println("财务添加成功!");
    }
    /**
     * 三种查询
     *   1、查询所有
     *   2、按照时间区间来查询
     *   3、按照收入和支出的类型来查询
     */
    private static void select(){
        System.out.println("随手记>>账务查询");
        System.out.println("1、查询所有   2、按照时间区间来查询    3、按照收入和支出的类型来查询");
        //创建扫描器
        Scanner sc1=new Scanner(System.in);
        int num=sc1.nextInt();
        switch (num){
            case 1:
                selectAll();
                break;
            case 2:
                selectByData();
                break;
            case 3:
                selectByType();
                break;
//            default:
//                System.out.println("亲,请重新输入选项:");
        }
        //展示上一级的主菜单
        showMain();
    }
    private static void selectAll(){
        System.out.println("查询所有");
        print(billsList);
    }
    private static void selectByData(){
        //创建一个时间格式化对象      [格式化器]
        SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
        System.out.println("按照时间查询");
        System.out.println("随手记>>账务查询>>按照时间查询");
        //创建扫描器
        Scanner sc1=new Scanner(System.in);
        System.out.println("请输入开始时间:");
        String start=sc1.next();
        System.out.println("请输入结束时间:");
        String end=sc1.next();
        //stream 流
        List<Bills> billsList1 = billsList.stream().filter(bills -> {
            String time = bills.getTime();
            //把字符串解析成具体时间
            try {
                Date startData = format.parse(start);
                Date endData = format.parse(end);
                Date timeData = format.parse(time);
                if (timeData.before(endData) && timeData.after(startData)) {
                    return true;
                }
            } catch (ParseException e) {
                e.printStackTrace();
            }
            return false;
        }).collect(Collectors.toList());
        print(billsList1);
    }
    private static void selectByType(){
        System.out.println("按照类型查询");
        System.out.println("随手记>>账务查询>>收入和支出类型");
        System.out.println("请输入   收入或者支出");
        //创建扫描器
        Scanner sc1=new Scanner(System.in);
        String type=sc1.next();
        //收入还是支出
        //筛选一下集合中type时支出的元素    stream筛选   collectCollectors.toList():将流转换为集合
        List<Bills> billsList1 = billsList.stream().filter(bills -> {
            String type1 = bills.getType();
            return type1.equals(type);
        }).collect(Collectors.toList());
        print(billsList1);
        //filter 过滤    true要,false不要
//        stream.filter(bills -> {
//           String type1= bills.getType();
//           return type1.equals(type);
//        });
    }
    public static void print(List<Bills> billsList){
        System.out.println("ID\t\t类别\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 bills1=billsList.get(i);
            System.out.println(i+1+"\t\t"+bills1.getName()+"\t\t"+bills1.getAccount()+"\t\t"+bills1.getType()
            +"\t\t"+bills1.getTotal()+"\t\t"+bills1.getTime()+"\t\t"+bills1.getDesc());
        }
    }
}

image.png

目录
相关文章
|
2月前
|
监控 Java API
如何使用Java语言快速开发一套智慧工地系统
使用Java开发智慧工地系统,采用Spring Cloud微服务架构和前后端分离设计,结合MySQL、MongoDB数据库及RESTful API,集成人脸识别、视频监控、设备与环境监测等功能模块,运用Spark/Flink处理大数据,ECharts/AntV G2实现数据可视化,确保系统安全与性能,采用敏捷开发模式,提供详尽文档与用户培训,支持云部署与容器化管理,快速构建高效、灵活的智慧工地解决方案。
|
2月前
|
设计模式 消息中间件 搜索推荐
Java 设计模式——观察者模式:从优衣库不使用新疆棉事件看系统的动态响应
【11月更文挑战第17天】观察者模式是一种行为设计模式,定义了一对多的依赖关系,使多个观察者对象能直接监听并响应某一主题对象的状态变化。本文介绍了观察者模式的基本概念、商业系统中的应用实例,如优衣库事件中各相关方的动态响应,以及模式的优势和实际系统设计中的应用建议,包括事件驱动架构和消息队列的使用。
|
2月前
|
运维 自然语言处理 供应链
Java云HIS医院管理系统源码 病案管理、医保业务、门诊、住院、电子病历编辑器
通过门诊的申请,或者直接住院登记,通过”护士工作站“分配患者,完成后,进入医生患者列表,医生对应开具”长期医嘱“和”临时医嘱“,并在电子病历中,记录病情。病人出院时,停止长期医嘱,开具出院医嘱。进入出院审核,审核医嘱与住院通过后,病人结清缴费,完成出院。
136 4
|
2月前
|
Java 数据库连接 数据库
深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
54 1
|
2月前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
9天前
|
监控 Java
java异步判断线程池所有任务是否执行完
通过上述步骤,您可以在Java中实现异步判断线程池所有任务是否执行完毕。这种方法使用了 `CompletionService`来监控任务的完成情况,并通过一个独立线程异步检查所有任务的执行状态。这种设计不仅简洁高效,还能确保在大量任务处理时程序的稳定性和可维护性。希望本文能为您的开发工作提供实用的指导和帮助。
48 17
|
19天前
|
Java
Java—多线程实现生产消费者
本文介绍了多线程实现生产消费者模式的三个版本。Version1包含四个类:`Producer`(生产者)、`Consumer`(消费者)、`Resource`(公共资源)和`TestMain`(测试类)。通过`synchronized`和`wait/notify`机制控制线程同步,但存在多个生产者或消费者时可能出现多次生产和消费的问题。 Version2将`if`改为`while`,解决了多次生产和消费的问题,但仍可能因`notify()`随机唤醒线程而导致死锁。因此,引入了`notifyAll()`来唤醒所有等待线程,但这会带来性能问题。
Java—多线程实现生产消费者
|
4天前
|
缓存 安全 算法
Java 多线程 面试题
Java 多线程 相关基础面试题
|
21天前
|
安全 Java Kotlin
Java多线程——synchronized、volatile 保障可见性
Java多线程中,`synchronized` 和 `volatile` 关键字用于保障可见性。`synchronized` 保证原子性、可见性和有序性,通过锁机制确保线程安全;`volatile` 仅保证可见性和有序性,不保证原子性。代码示例展示了如何使用 `synchronized` 和 `volatile` 解决主线程无法感知子线程修改共享变量的问题。总结:`volatile` 确保不同线程对共享变量操作的可见性,使一个线程修改后,其他线程能立即看到最新值。
|
21天前
|
消息中间件 缓存 安全
Java多线程是什么
Java多线程简介:本文介绍了Java中常见的线程池类型,包括`newCachedThreadPool`(适用于短期异步任务)、`newFixedThreadPool`(适用于固定数量的长期任务)、`newScheduledThreadPool`(支持定时和周期性任务)以及`newSingleThreadExecutor`(保证任务顺序执行)。同时,文章还讲解了Java中的锁机制,如`synchronized`关键字、CAS操作及其实现方式,并详细描述了可重入锁`ReentrantLock`和读写锁`ReadWriteLock`的工作原理与应用场景。