基于springboot校园缴费管理系统

news2025/2/21 4:19:37

博主主页:猫头鹰源码

博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万+、专注Java技术领域和毕业设计项目实战

主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询

文末联系获取

项目介绍: 

随着社会的不断发展和教育事业的不断壮大,各种信息化技术的应用也越来越广泛,校园缴费系统作为一种信息化管理工具,也得到了越来越多学校和教育机构的重视和使用。在这个背景下,研究和开发一款完善、高效、易用的校园缴费系统具有非常重要的意义。

首先,校园缴费业务管理系统这块发展速度较慢,大部分中学、小学主要是集中在学杂费收取系统的建设,缴费业务过于单一,加上不同年级具有不同的学费标准,收取各种类型的费用,以及统计各种类型的缴费情况都需要投入大量的人力物力,随着学校规模的扩大,由此带来的问题更加突出。其次,校园缴费系统可以提高工作效率,减轻工作负担。而传统的缴费方式需要学校财务部门手动核对每一笔缴费记录,需要大量的人力物力,而校园缴费系统则可以自动完成数据的收集和核对,从而提高工作效率,减轻工作负担。此外,校园缴费系统还可以提高缴费的便捷性。同时可以实现线上支付这种缴费方式,方便学生进行缴费。

用例描述:

本系统的用例主要分为管理员用例和学生用例,其用例描述如下:

(1)注册与登录用例:学生用户可以通过注册功能创建账号并登录系统。在注册时,学生需要提供正确的学号,否则无法进行注册,符合学号格式则可以选择一个安全密码的后进行注册。学生登录时需要输入正确的学号和密码。管理员可以通过预先设置的账号登录功能进入系统管理界面,输入正确的管理员账号和密码即可进入系统管理界面。

(2)学生账号管理用例:管理员都可以对学生账号等进行操作。在添加学生账号时,管理员需要输入学生的账号资料,并为其分配账号和密码。在调整学生帐户时,管理者能够更改学生的基本资料和登录凭据。同样,学生也可以更新自己帐户的信息和更改密码。但修改密码需要确认原密码后才能修改成功,管理员则不需要。

(3)缴费管理用例:缴费管理用例包括缴费类型管理、费用管理、管理员可以添加、修改、删除缴费类型,如学费、住宿费、杂费等。对每个缴费类型,管理员可以设置费用标准。管理员可以发送费用催缴通知,提醒学生及时缴费,并可以设置费用减免数目。

(4)消息通告与催缴信息用例:学生用户可以查看系统发布的消息通告,如学校活动、通知等,同时也可以收到费用催缴通知。管理员可以发布、修改、删除消息通告,查看催缴信息。

(5)管理员管理用例:管理员可以编辑操作管理员账号,在添加管理员账号时,需要输入管理员的账号资料,也就是分配账号和密码。在修改管理员账号时,管理员可以修改登录信息。在删除管理员账号时,直接点击删除即可。

系统包含技术:

后端:springBoot、mybatis
前端:bootstrap、js、css等,html页面
开发工具:idea
数据库:mysql 5.7
JDK版本:jdk1.8

部分截图说明:

下面是登录页面

下面是首页

管理员可以进行学生管理 

 

管理员对费用类型管理

 

 管理员查看费用缴纳信息

 管理员对缴费管理

 学生查看费用

部分代码:

 

/**列表数据*/
    @GetMapping("/list")
    @ResponseBody
    public PageResultVo findCost(Cost cost, Integer limit, Integer page, HttpSession session){
        String type = (String)session.getAttribute("type");
        if(type.equals("02")){
            Student student = (Student)session.getAttribute("userInfo");
            cost.setSid(student.getId().toString());
        }
        PageHelper.startPage(page,limit);
        List<Cost> costList = costService.selectByCondition(cost);
        for(int i=0;i<costList.size();i++){
            Map mp = new HashMap();
            mp.put("cid",costList.get(i).getCid());
            mp.put("sid",costList.get(i).getSid());
            List<Waiver> waivers = waiverService.queryFilter(mp);
            if(waivers.size()>0){
                BigDecimal money = new BigDecimal(costList.get(i).getMoney());
                BigDecimal fee = new BigDecimal(waivers.get(0).getFee());
                costList.get(i).setFeeMoney(fee.setScale(2, BigDecimal.ROUND_HALF_UP).toString());
                BigDecimal actual = money.subtract(fee).setScale(2, BigDecimal.ROUND_HALF_UP);
                costList.get(i).setActualMoney(actual.toString());
            }else{
                BigDecimal money = new BigDecimal(costList.get(i).getMoney());
                costList.get(i).setFeeMoney("无减免");
                costList.get(i).setActualMoney(money.setScale(2, BigDecimal.ROUND_HALF_UP).toString());
            }
        }
        PageInfo<Cost> pages = new PageInfo<>(costList);
        return JsonData.table(costList,pages.getTotal());
    }


    /**编辑详情*/
    @GetMapping("/edit")
    @ResponseBody
    public Cost edit(Model model, String id){
        return costService.selectById(id);
    }


    /**编辑*/
    @PostMapping("/edit")
    @ResponseBody
    public JsonData edit(Cost cost){
        int a = costService.updateById(cost);
        if (a > 0) {
          return JsonData.success(null,"编辑成功!");
        } else {
          return JsonData.fail("编辑失败");
        }
    }


    /**删除*/
    @PostMapping("/del")
    @ResponseBody
    public JsonData del(String id){
        try{
          costService.deleteById(Integer.parseInt(id));
        }catch(Exception ex){
          JsonData.fail("出现错误");
        }
        return JsonData.success(null,"删除成功");
    }

    /**新增*/
    @PostMapping("/add")
    @ResponseBody
    public JsonData add(Cost cost){
        cost.setStatus("01");
        Date date = new Date();
        cost.setCreateTime(date);
        int num = costService.addByCondition(cost);
        if(num > 0){
          return JsonData.success(null,"添加成功");
        }else {
          return JsonData.fail("添加失败");
        }
    }

以上就是部分功能展示,从整体上来看,本系统功能是十分完整的,界面设计简洁大方,交互友好,数据库设计也很合理,规模适中,代码工整,清晰,适合学习使用。

好了,今天就到这儿吧,小伙伴们点赞、收藏、评论,一键三连走起呀,下期见~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/886274.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL 索引为什么使用 B+ 树,而不使用红黑树 / B 树 ?

面试官问 &#xff1a;索引为什么使用 B 树&#xff0c;而不使用 B 树&#xff0c;不使用红黑树呢 首先 B 树和 B 树 都是多叉搜索树&#xff0c;然后我们先来观察一下 B 树和 B 树的数据结构&#xff1a; B 树的数据结构实现 >> B 树的数据结构实现 >> 【B 树相…

JAVASE---数组的定义与使用

数组的基本概念 什么是数组 数组是具有相同类型元素的集合&#xff0c;在内存中连续存储。 1. 数组中存放的元素其类型相同 2. 数组的空间是连在一起的 3. 每个空间有自己的编号&#xff0c;起始位置的编号为0&#xff0c;即数组的下标 数组的创建及初始化 数组的创建 T[…

【Unity】UI的一些简单知识

Canvas 新建一个Canvas Render Mode Canvas 中有一个Render Mode&#xff08;渲染模式&#xff09;&#xff0c;有三种渲染模式: Screen Space-Overlay &#xff08;屏幕空间&#xff09;Screen Space-Camara 、 World Space 其中&#xff0c;Space- Overlay是默认显示在…

Docker容器基础

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、Docker概述1、docker是什么2、Docker的设计宗旨3、容器在内核中支持2种重要技术&#xff1a; 三、Docker的核心概念四、Docker相关命令1.安装依赖包2.设置阿里云…

《qt quick核心编程》笔记四

11 Model/View Delegate实际上可以看成是Item的一个模板 11.1 ListView ListView用于显示一个条目列表&#xff0c;数据来自于Model&#xff0c;每个条目的外观来自于Delegate 要使用ListView必须指定一个Model、一个Delegate Model可以是QML内建类型&#xff0c;如ListModel…

2023年武汉市中等职业教育网络安全赛项竞赛试题——综合靶机渗透测试解析教程

任务一&#xff1a;综合靶机渗透测试 任务环境说明&#xff1a; 服务器场景&#xff1a;ZHCS-2&#xff08;关闭连接&#xff09; 服务器场景操作系统&#xff1a;版本不详 大家需要靶机环境可以私信我获取 1.扫描目标靶机将靶机开放的所有端口&#xff0c;当作flag提交&am…

【学会动态规划】乘积为正数的最长子数组长度(21)

目录 动态规划怎么学&#xff1f; 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后&#xff1a; 动态规划怎么学&#xff1f; 学习一个算法没有捷径&#xff0c;更何况是学习动态规划&#xff0c; 跟我…

ESP32 历程解析

最近在用esp32做项目&#xff0c;记录一下 使用的esp32 的官方历程的作用 一、USB历程 1.host 1) cdc_acm_host 这个历程可以用来驱动 usb的虚拟串口从机 cdc__vcp 和 cdc_acm 方式虚拟的串口需要根据自己的设备 修改 VID 和 PID /*cdc-acm*/ #define EXAMPLE_US…

非计算机科班如何顺利转码进入计算机领域?

文章目录 如何规划才能实现转码&#xff1f;计算机岗位发展前景&#xff1f;现阶段转码 总结 &#x1f389;欢迎来到Java学习路线专栏~探索非计算机科班如何顺利转码进入计算机领域 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#xff1a;IT陈寒的博客&#x1f3…

8.16日 算法做题【4道题】

8. 分行从上往下打印二叉树 &#xff08; 利用两个队列遍历 &#xff09; 利用数组个数 进行遍历 原题链接 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(N…

工业设备状态监测如何实现从技术试点到规模实施?

工业企业正逐步引入基于人工智能的持续监控设备健康状况系统&#xff0c;这对工业维护领域带来了颠覆性的影响。然而&#xff0c;与任何新技术一样&#xff0c;要实现其最大价值&#xff0c;需要克服一些挑战。在数字化转型中&#xff0c;成功实现工业设备状态监测的从技术试点…

企业什么时候需要PMO?PMO的作用和职责是什么?

在当今复杂的商业环境中&#xff0c;企业依靠高效的项目管理来推动成功和实现战略目标。这就是**项目管理办公室**&#xff08;PMO&#xff09;发挥作用的地方。那么&#xff0c;PMO在企业中的作用和职责究竟是什么&#xff1f;本文就这个问题来做个探讨。 PMO &#xff08;项…

第 3 章 稀疏数组和队列(1)

3.1 稀疏 sparsearray 数组 3.1.1先看一个实际的需求 编写的五子棋程序中&#xff0c;有存盘退出和续上盘的功能。 分析问题: 因为该二维数组的很多值是默认值 0.因此记录了很多没有意义的数据.->稀疏数组 3.1.2基本介绍 当一个数组中大部分元素为 0&#xff0c;或者为同…

python进阶之符号计算概述SymPy

一、概述 1.1SymPy简介 SymPy 是一个由 Python 编写的符号计算库&#xff0c;它的目标是成为一个全功能的计算机代数系统&#xff0c;同时保持代码简洁、易于理解和扩展。它完全由 Python 写成&#xff0c;不依赖于外部库。SymPy 支持符号计算、高精度计算、模式匹配、绘图、解…

搭建Excel服务器

1、下载Excel服务器 下载地址 2、解压文件 3、打开服务器 4、服务器运行信息 5、连接测试 打开客户端 6、登录到服务器 默认账号 密码 admin 3 修改文件保存路径(服务器端点击配置) 7、客户端整体界面 8、配置权限 9、设计模板 10、其他用户登录就可以填写信息 11、用户&#…

JVM基础了解

JVM 是java虚拟机。 作用&#xff1a;运行并管理java源码文件锁生成的Class文件&#xff1b;在不同的操作系统上安装不同的JVM&#xff0c;从而实现了跨平台的保证。一般在安装完JDK或者JRE之后&#xff0c;其中就已经内置了JVM&#xff0c;只需要将Class文件交给JVM即可 写好的…

【MCUXpresso for VS Code】-- 工程搭建后期维护

​ 基于上一篇文章【MCUXpresso for VS Code】 – 基于VSCode搭建nxp mcu工程_ 本章将介绍工程搭建完成后&#xff0c;后期维护问题。 1.MCUXpresso 插件窗口 该窗口&#xff0c;通常用在编译调试&#xff0c;工程导入导出等场合。编译和调试除了点击图标外&#xff0c;也可以…

python简单计算器

附赠源码&#xff1a; import PySimpleGUI as sg import relistsNumber [[AC, (, ), %],[1, 2, 3, ],[4, 5, 6, -],[7, 8, 9, x],[0, ., , ], ]layout [[sg.Text(font(黑体, 10), key-msg-)],[sg.Multiline(,key-show-,s(22, 10),font(黑体, 14),border_width1,expand_xTrue…

Java进阶(3)——手动实现ArrayList 源码的初步理解分析 数组插入数据和删除数据的问题

目录 引出手动实现ArrayList定义接口MyList<T>写ArrayList的实现类增加元素删除元素 写测试类进行测试数组插入数据? 总结 引出 1.ArrayList的结构分析&#xff0c;可迭代接口&#xff0c;是List的实现&#xff1b; 2.数组增加元素和删除元素的分析&#xff0c;何时扩容…

Spring三级缓存解决循环依赖问题

一、Bean对象的创建过程 一般的Bean对象如下&#xff1a;首先通过构造器构造一个普通对象&#xff0c;然后进行依赖注入&#xff0c;再进行一些初始化操作&#xff0c;初始化后根据AOP生成代理对象&#xff0c;最后再放入单例池map&#xff0c;这个单例池map就是一级缓存。 …