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

本文介绍了使用Spring、SpringMVC和Mybatis开发的记账管理系统,包括收入和支出项管理、支付方式管理等功能,以及IncomeController和PayMethodController中的关键方法。
摘要由CSDN通过智能技术生成

博主主页: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;
	}
	@Autowired
	public void setIncomeService(IIncomeService incomeService) {
		this.incomeService = incomeService;
	}


	public IMonthlyStatisticsService getMonthlyStatisticsService() {
		return monthlyStatisticsService;
	}
	@Autowired
	public void setMonthlyStatisticsService(IMonthlyStatisticsService monthlyStatisticsService) {
		this.monthlyStatisticsService = monthlyStatisticsService;
	}

	public IItemService getItemService() {
		return itemService;
	}
	@Autowired
	public void setItemService(IItemService itemService) {
		this.itemService = itemService;
	}

	public IPayMethodService getPayMethodService() {
		return payMethodService;
	}
	@Autowired
	public 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 list
		List<Income> incomes = incomeService.loadIncomes(userId);
		model.addAttribute("incomes", incomes);

		// 收入项 list
		List<Item> items = itemService.loadIncomeItems(userId);
		model.addAttribute("items", items);

		//收入方式list
		List<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;
	}
	
	@Autowired
	public 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

java语言写的android系统,用于个人账目管理,课程设计上写的欢迎下载 package moneymanager.moneymanager; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; /* * * 데이터베이스를 관리하는 클래스입니다. * */ public class DBAdapter { private static final String TAG = "NotesDbAdapter"; private DatabaseHelper mDbHelper; private SQLiteDatabase mDb; // 데이터베이스이름과 테블이름들을 정의 private static final String DATABASE_NAME = "MoneyManagerDB"; private static final int DATABASE_VERSION = 2; private static final String DATABASE_SETTING_TABLE = "SettingTbl"; private static final String DATABASE_BADGET_TABLE = "BadgetTbl"; private static final String DATABASE_PAYMENT_TABLE = "PaymentTbl"; // 테블안의 항목들을 정의 public static final String KEY_SETTINGTBL_ID = "ID"; public static final String KEY_SETTINGTBL_NAME = "Name"; public static final String KEY_SETTINGTBL_VALUE = "Value"; public static final String KEY_BADGETTBL_ID = "ID"; public static final String KEY_BADGETTBL_ITEM = "Item"; public static final String KEY_BADGETTBL_MONEY = "Money"; public static final String KEY_PAYMENTTBL_ID = "ID"; public static final String KEY_PAYMENTTBL_BADGETID = "BadgetID"; public static final String KEY_PAYMENTTBL_OUTDATE = "OutDate"; public static final String KEY_PAYMENTTBL_MONEY = "Money"; public static final String KEY_PAYMENTTBL_NOTE = "Note"; private final Context mCtx; private static class DatabaseHelper extends SQLiteOpenHelper { DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { String strCreateTbl; // SettingTbl생성 strCreateTbl = "CREATE TABLE " + DATABASE_SETTING_TABLE + " (" + KEY_SETTINGTBL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_SETTINGTBL_NAME + " TEXT NOT NULL, " + KEY_SETTINGTBL_VALUE + " TEXT NOT NULL);"; db.execSQL(strCreateTbl); // BadgetTbl생성 strCreateTbl = "CREATE TABLE " + DATABASE_BADGET_TABLE + " (" + KEY_BADGETTBL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_BADGETTBL_ITEM + " TEXT NOT NULL, " + KEY_BADGETTBL_MONEY + " INTEGER NOT NULL);"; db.execSQL(strCreateTbl); // PaymentTbl생성 strCreateTbl = "CREATE TABLE " + DATABASE_PAYMENT_TABLE + " (" + KEY_PAYMENTTBL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_PAYMENTTBL_BADGETID + " INTEGER NOT NULL, " + KEY_PAYMENTTBL_OUTDATE + " TEXT NOT NULL, " + KEY_PAYMENTTBL_MONEY + " INTEGER NOT NULL, " + KEY_PAYMENTTBL_NOTE + " TEXT);"; db.execSQL(strCreateTbl); } ......
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java旅途

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值