Java项目:121SSM记账管理系统

博主主页:Java旅途
简介:分享计算机知识、学习路线、系统源码及教程
文末获取源码

一、项目介绍

记账管理系统基于Spring+SpringMVC+Mybatis开发,系统主要功能如下:

  • 收入项管理

  • 支出项管理

  • 收入方式管理

  • 支出方式管理

  • 添加收入

  • 添加支出

  • 余额管理

  • 历史收支

  • 图表统计

二、技术框架

  • 后端:Spring,Springmvc,Mybatis
  • 前端:bootstrap,echarts,jquery

三、安装教程

  1. 用idea打开项目
  2. 在idea中配置jdk环境
  3. 配置maven环境并下载依赖
  4. 配置Tomcat8.0
  5. 新建数据库,导入数据库文件
  6. mysqldb.properties文件中将数据库账号密码改成自己本地的
  7. 启动运行, , 管理员账号密码 system/123456

四、项目截图

image-20230720101826648

image-20230720101631060

image-20230720101716326

image-20230720101732513

image-20230720101750540

image-20230720101802942

五、相关代码

IncomeController

package com.taoxiuxia.controller;import java.util.HashMap;
import java.util.List;
import java.util.Map;import javax.servlet.http.HttpSession;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;import com.taoxiuxia.model.Balance;
import com.taoxiuxia.model.Income;
import com.taoxiuxia.model.Item;
import com.taoxiuxia.model.PayMethod;
import com.taoxiuxia.model.SessionUser;
import com.taoxiuxia.service.IIncomeService;
import com.taoxiuxia.service.IItemService;
import com.taoxiuxia.service.IMonthlyStatisticsService;
import com.taoxiuxia.service.IPayMethodService;
import com.taoxiuxia.util.Constants;
import com.taoxiuxia.util.MyDateFormat;
import com.taoxiuxia.util.NumberFormat;@Controller
@RequestMapping("/incomeController")
public class IncomeController {private IIncomeService incomeService;private IItemService itemService;private IMonthlyStatisticsService monthlyStatisticsService;private IPayMethodService payMethodService;public IIncomeService getIncomeService() {return incomeService;}@Autowiredpublic void setIncomeService(IIncomeService incomeService) {this.incomeService = incomeService;}public IMonthlyStatisticsService getMonthlyStatisticsService() {return monthlyStatisticsService;}@Autowiredpublic void setMonthlyStatisticsService(IMonthlyStatisticsService monthlyStatisticsService) {this.monthlyStatisticsService = monthlyStatisticsService;}public IItemService getItemService() {return itemService;}@Autowiredpublic void setItemService(IItemService itemService) {this.itemService = itemService;}public IPayMethodService getPayMethodService() {return payMethodService;}@Autowiredpublic void setPayMethodService(IPayMethodService payMethodService) {this.payMethodService = payMethodService;}/*** income页面** @param model* @return*/@RequestMapping("/showIncome")public String showIncomes(Model model, HttpSession session) {Map<String, Float> map = monthlyStatistics(session);SessionUser sessionUser= (SessionUser) session.getAttribute(Constants.SESSION_USER_KEY);int userId = sessionUser.getUserId();//页面上的统计信息model.addAttribute("totalIncome", NumberFormat.save2Decimals(map.get("monthlyIncome")));model.addAttribute("totalExpenditure", NumberFormat.save2Decimals(map.get("monthlyExpenditure")));model.addAttribute("notActualExpenditure", NumberFormat.save2Decimals(map.get("notActualExpenditure")));model.addAttribute("balanceInBeginOfMonth", NumberFormat.save2Decimals(map.get("balanceInBeginOfMonth")));model.addAttribute("balanceId_InBeginOfMonth", NumberFormat.save2Decimals(map.get("balanceId_InBeginOfMonth")));model.addAttribute("balanceShould", NumberFormat.save2Decimals(map.get("balanceShould")));model.addAttribute("actualBalance", NumberFormat.save2Decimals(map.get("actualBalance")));model.addAttribute("actualBalanceId", NumberFormat.save2Decimals(map.get("actualBalanceId")));model.addAttribute("actualExpenditure", NumberFormat.save2Decimals(map.get("actualExpenditure")));// income listList<Income> incomes = incomeService.loadIncomes(userId);model.addAttribute("incomes", incomes);// 收入项 listList<Item> items = itemService.loadIncomeItems(userId);model.addAttribute("items", items);//收入方式listList<PayMethod> payMethods = payMethodService.loadPayMethods(userId, "in");model.addAttribute("payMethods", payMethods);model.addAttribute("sessionUser", sessionUser);return "pages/income";}/*** 增加income** @param item* @param money* @param remark*/@RequestMapping("/addIncome")public void addIncomes(String date, int item, float money, String moneyType, String remark, HttpSession session) {int userId = Integer.parseInt(session.getAttribute(Constants.USER_ID)+"");incomeService.addIncome(userId, date, item, money, moneyType, remark);}/*** 修改收入** @param incomeId* @param money* @param itemId* @param remark*/@RequestMapping("/changeIncome")public void changeIncome(int incomeId, float money, String moneyType, int itemId, String remark, String date) {incomeService.changeIncome(incomeId, money, moneyType, itemId, remark, MyDateFormat.dateFormat(date));}/*** 删除收入** @param incomeId* @param itemId*/@RequestMapping("/deleIncome")public void deleIncome(int incomeId, HttpSession session) {incomeService.deleIncome(incomeId);}/*** 在收入和支出页面上 统计部分的内容* 这部分和ExpenditureController的相同方法完全一样** @param session* @return*/public Map<String,Float> monthlyStatistics(HttpSession session) {int userId = Integer.parseInt(session.getAttribute(Constants.USER_ID)+"");Map<String,Float>map = new HashMap<String, Float>();// 月收入float monthlyIncome = monthlyStatisticsService.monthlyIncome(userId);map.put("monthlyIncome", monthlyIncome);// 月支出float monthlyExpenditure = monthlyStatisticsService.monthlyExpenditure(userId);map.put("monthlyExpenditure", monthlyExpenditure);// 月支出中花呗与信用卡的数额float notActualExpenditure = monthlyStatisticsService.notActualExpenditure(userId);map.put("notActualExpenditure", notActualExpenditure);// 本月实际支出float actualExpenditure = monthlyExpenditure - notActualExpenditure;map.put("actualExpenditure", actualExpenditure);// 本月初(上月末)结余Balance balance_InBeginOfMonth = monthlyStatisticsService.balanceInBeginOfMonth(userId);float actualBalance_InBeginOfMonth = balance_InBeginOfMonth.getActualBalance();map.put("balanceInBeginOfMonth", actualBalance_InBeginOfMonth);map.put("balanceId_InBeginOfMonth", balance_InBeginOfMonth.getId() + 0f);// 本月应结余 ==> 月初结余+月收入- (月支出-花呗/信用卡)float balanceShould = actualBalance_InBeginOfMonth + monthlyIncome - (monthlyExpenditure - notActualExpenditure);map.put("balanceShould", balanceShould);// 本月实际结余Balance balanceOfThisMonth = monthlyStatisticsService.balanceOfThisMonth(userId);float actualBalance; // 本月实际结余float actualBalanceId;if(balanceOfThisMonth == null){actualBalance = -1;actualBalanceId = -1;}else{actualBalance = balanceOfThisMonth.getActualBalance();actualBalanceId = balanceOfThisMonth.getId();}map.put("actualBalance", actualBalance);map.put("actualBalanceId", actualBalanceId);return map;}
}

PayMethodController

package com.taoxiuxia.controller;import java.util.HashMap;
import java.util.List;
import java.util.Map;import javax.servlet.http.HttpSession;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import com.taoxiuxia.model.PayMethod;
import com.taoxiuxia.model.SessionUser;
import com.taoxiuxia.service.IPayMethodService;
import com.taoxiuxia.util.Constants;@Controller
@RequestMapping("/payMethodController")
public class PayMethodController {private Logger logger=LoggerFactory.getLogger(PayMethodController.class);private IPayMethodService payMethodService;public IPayMethodService getPayMethodService() {return payMethodService;}@Autowiredpublic void setPayMethodService(IPayMethodService payMethodService) {this.payMethodService = payMethodService;}/*** 收支方式管理页面* * @param model* @return*/@RequestMapping("/showManagePayMethods")public String showManagePayMethods(Model model,HttpSession session) {SessionUser sessionUser = (SessionUser) session.getAttribute(Constants.SESSION_USER_KEY);int userId = sessionUser.getUserId();List<PayMethod> incomePayMethods = payMethodService.loadPayMethods(userId, "in");List<PayMethod> expenditurePayMethods = payMethodService.loadPayMethods(userId, "ex");model.addAttribute("incomePayMethods", incomePayMethods);model.addAttribute("expenditurePayMethods", expenditurePayMethods);model.addAttribute("sessionUser", sessionUser);return "pages/managePayMethods";}/*** 修改PayMethod* @param payMethodId* @param payMethodName* @param isCountInThisMonthEx* @param remark*/@RequestMapping("/changePayMethod")public void changeItem(int payMethodId, String payMethodName, int isCountInThisMonthEx, String remark) {payMethodService.changePayMethod(payMethodId, payMethodName, isCountInThisMonthEx, remark);}/*** 删除PayMethod* @param payMethodId*/@RequestMapping("/delePayMethod")public void delePayMethod(int payMethodId) {payMethodService.delePayMethod(payMethodId);}/*** 增加PayMethod* @param session* @param payMethodName* @param isCountInThisMonthEx* @param remark* @param inOrEx*/@RequestMapping("/addPayMethod")public void addItem(HttpSession session,String payMethodName, int isCountInThisMonthEx, String remark, String inOrEx) {SessionUser sessionUser = (SessionUser) session.getAttribute(Constants.SESSION_USER_KEY);int userId = sessionUser.getUserId();payMethodService.addPayMethod(userId, payMethodName, isCountInThisMonthEx, inOrEx, remark);}/*** PayMethod的上移和下移* @param session* @param itemId* @param inOrEx* @param upAndDown* @return*/@RequestMapping(value = "/upAndDownPayMethod", produces = "application/json;charset=UTF-8")public @ResponseBody Map<String ,Object> upAndDownPayMethod(HttpSession session, int payMethodId, String inOrEx, String upAndDown) {Map<String, Object> map = new HashMap<String, Object>();SessionUser sessionUser = (SessionUser) session.getAttribute(Constants.SESSION_USER_KEY);int userId = sessionUser.getUserId();String msg = payMethodService.upAndDownPayMethod(userId, payMethodId, inOrEx, upAndDown);map.put("info", msg);return map;}
}

大家点赞、收藏、关注、评论啦 、👇🏻点开下方卡片👇🏻关注后回复 105

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业网盘的价值:为什么企业需要它?

企业网盘因其主打的文件管理协作功能&#xff0c;正好符合信息时代高速发展下企业的需要&#xff0c;能够帮助企业集中管理文件数据&#xff0c;提供便捷的文件协作服务&#xff0c;一跃成为近两年企业服务类产品榜单中的一匹黑马。 企业网盘真的这么好用吗&#xff1f;企业真…

Cleanmymac for mac 4.14.7无弹窗注册版

Cleanmymac for mac是一款先进的、集所有功能于一身的实用系统清理工具&#xff0c;删除系统缓存文件 , 多余的应用程序语言包 , 它能帮助保持您的Mac保持清洁。只需两个简单的点击&#xff0c;就可以删除无用的文件&#xff0c;以节省您宝贵的磁盘空间。 对于很多喜爱摄影朋友…

51-14 Retentive Network,RetNet 多尺度保留机制序列建模论文精读

咱们今天来看的论文叫RetNet&#xff0c;题目是Retentive Network&#xff1a;a successor to transformer for large language models。我们知道BLIP成了一个非常普适的一个工具&#xff0c;你可以拿这个模型去训练VLMo&#xff0c;训练CoCa&#xff0c;训练BEiT-3&#xff0c…

如何实现指定列值排序? ------ MySQL中的field()函数 [让排序更简单]

想自定义排序规则就用field&#xff08;&#xff09; filed(“列名”&#xff0c;“值1”,“值2”…) 案例&#xff1a;要求 STATUS 列 按 N&#xff0c;Y&#xff0c;E&#xff0c; 排序。 select * from 表名 ORDER BY field(STATUS,N,"Y","E") 效果…

H5小游戏如何提升APP变现收益?

在当前用户规模稳定但变现压力增加的背景下&#xff0c;开发者需要挖掘用户价值&#xff0c;提高营收&#xff0c;这成为开发者关注的重点话题。对于那些“用户用完即走”的APP产品来说&#xff0c;接入H5游戏能够吸引停留&#xff0c;为其带来收入上的增长。 一、什么是H5游戏…

班主任在班级管理中的角色定位

你是否曾经想过&#xff0c;为什么有的班主任能够让学生如此敬爱&#xff0c;而有的班主任却让学生敬而远之&#xff1f;其实&#xff0c;这都与班主任在班级管理中的角色定位有关。 班主任应该是学生的良师益友。这意味着班主任不仅要传授知识&#xff0c;更要关心学生的成长…

7. UE5 RPG修改GAS的Attribute的值

前面几节文章介绍了如何在角色身上添加AbilitySystemComponent和AttributeSet。并且还实现了给AttributeSet添加自定义属性。接下来&#xff0c;实现一下如何去修改角色身上的Attribute的值。 实现拾取药瓶回血功能 首先创建一个继承于Actor的c类&#xff0c;actor是可以放置到…

Java爬虫爬取图片壁纸

Java爬虫 以sougou图片为例&#xff1a;https://pic.sogou.com/ JDK17、SpringBoot3.2.X、hutool5.8.24实现Java爬虫&#xff0c;爬取页面图片 项目介绍 开发工具&#xff1a;IDEA2023.2.5 JDK&#xff1a;Java17 SpringBoot&#xff1a;3.2.x 通过 SpringBoot 快速构建开发环境…

C# 线程间操作无效: 从不是创建控件的线程访问它--多线程操作

我们在用线程操作的时候&#xff0c;可能会出现异常&#xff1a;线程间操作无效: 从不是创建控件richTextBox1的线程访问它。因为windows窗体控件不是线程安全的&#xff0c;如果几个线程操作某一控件的状态&#xff0c;可能会使该控件的状态不一致&#xff0c;出现争用或死锁状…

一键信息收集工具 -- ENScan_GO

免责声明 请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;作者不为此承担任何责任。工具来自网络&#xff0c;安全性自测&#xff0c;如有侵权请联系删除。…

基于Java+SSM+MYSQL的助农特色农产品销售系统详细设计和实现【附源码】

基于JavaSSM助农特色农产品销售系统详细设计和实现【附源码】 &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种定…

Spring Boot 配置文件和日志

目录 配置文件格式 properties配置文件说明 1.properties基本语法 2.读取配置文件 3.properties缺点 yml配置文件说明 1.yml基本语法 2.配置不同数据类型 3.字符串特殊情况 4.配置对象 properties和yml对比 日志 日志的使用 日志级别 日志持久化 Lombok Lombo…