【SSM框架项目】个人理财管理系统项目实战教程

269 阅读7分钟

「这是我参与2022首次更文挑战的第3天,活动详情查看:2022首次更文挑战

今天带大家动手实践一下SSM框架项目:

本系统采用SSM技术进行开发与设计,可以让学员对JavaEE的框架有个全面的认识,并能将实用技能与理论知识进行完美的结合,让学员知其然的同时,也要知其所以然。

ps:

服务端:Spring+SpringMVC+MyBatis框架整合 数据库:MySql8.0 web服务器:Tomcat 项目管理:Maven 前端:jQuery+BootStrap+JavaScript 开发工具:idea2020

第一章:介绍

个人理财系统,主要帮助用户管理个人资金情况管理,养成良好的消费习惯。避免

铺张浪费。功能上主要有消费记录管理,营收管理,消费计划管理,对账管理,登录注册管理等几个主要业务模块

第二章:使用技术

 使用主流开发环境SSM框架,数据库中使用MySql数据库服务器。在用户体现上引入了

 JQUERY,AJAX等前沿的前端技术

第三章:项目优势

3.1 使用了成熟SSM框架

现如今SSM框架已经成为了项目开发时必然使用的技术。个人理财管理系统使用的就是SSM

这套成熟的框架。通过本项目的练习便于学员熟练使用SSM框架中各项开发技巧

3.2 前端应用

一直以来,JAVA学员对于前端的掌握都是一个缺点。经过多年教学实践发现主要有两个原因。一是对于前端使用感受的重要性认识不足。二是在课程学习过程中,前端练习相对较少

本系统在开发时,穿插了数量较多的前端开发,由简单到实用,循序渐进。确保学员进行醒目开发时,弥补前端开发的缺陷。

3.3 AJAX的应用

初学者前端知识的不足,也直接影响了AJAX的理解与使用。对于同步请求与异步请求的本质区别,尚不够清晰。甚至部分学员对于AJAX,谈虎色变。个人理财管理系统使用了较为经典,较为常见的AJAX案例,即生动又使用。同时进行陷阱式教学,制造问题并给出解题步骤。确保学员在经过项目开发之后,熟练掌握AJAX异步请求开发技术,对AJAX技术的理解迈上一个全新的台阶。

3.4 陷阱式教学

在教学过程中,经常听到学员对于异常调试的困惑。思路理解了,代码也形成了。但是在运行时却因为不具备异常调试能力,而陷入迷茫与痛苦。降低了学员学习的动力,同时也增加了学员对于手撕代码的恐惧。结合上述问题,个人理财管理系统在进行项目开发讲解时,将开发时常见异常,比如NullPointerException,NumberFormatException,ClassNotFoundException

等,引入到项目开发过程中,然后手把手带领学员进行BUG调试。确保学员能看懂常见异常信息描述,能定位异常位置,能熟练使用断点进行异常摸排与修改。

3.5 图文并茂式教学

在教学过程中,经常听到学员表示知识点已经掌握,但是独立开发没有思路。因此在个人理财管理系统开发教学中,都是先进行思路讲解,再进行代码演示。而且思路讲解会作为独立视频以此来增加学员关注度。并结合填鸭式教学方式,在相近功能上反复进行思路讲解,最终确保在学员完成项目开发后,掌握常见功能的解决方案,并熟练使用画图技法,来完成思路的引导,事半功倍,增加学员的自信心,激发学员学习热情,确保学员在实际工作中召之即来,来之能战的能力.

第四章:消费类型开发

4.1 介绍:

      个人理财管理系统中,消费类型管理属于基础数据维护管理开发。通过消费类型的帮助在记账环节中突出钱花到哪里了,由是从哪里赚的钱

4.2 功能

  • 消费类型添加
  • 消费类型查询
  • 消费类型删除
  • 消费类型更新

4.3 Entity:

public class Consumption {
private Integer id;
     private String  typeName;
     private Integer level;
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getTypeName() {
        return typeName;
    }

    public void setTypeName(String typeName) {
        this.typeName = typeName;
    }

    public Integer getLevel() {
        return level;
        }

    public void setLevel(Integer level) {
        this.level = level;
    }

    public Consumption(Integer id, String typeName, Integer level) {
        this.id = id;
        this.typeName = typeName;
        this.level = level;
    }

    public Consumption() {
    }

    @Override
    public String toString() {
        return "Consumption{" +
                "id=" + id +
                ", typeName='" + typeName + '\'' +
                ", level=" + level +
                '}';
    }

4.4 Dao

import com.test.entity.Consumption;

import java.util.List;

public interface ConsumptionDao {

    //1.消费类型添加
    public int insert(Consumption obj);
    //2.一级消费类型查询
    public List findAllFirstConsumption();
    //3.消费类型更新
    public int update(Consumption obj);
    //4.一级消费类型删除
    public int delete(int id);
    //5.根据ID编号查询消费类型详细信息
    public Consumption findById(int id);

}

4.5 SQL映射文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.test.dao.ConsumptionDao">


    <!--消费类型添加-->
    <insert id="insert" parameterType="Consumption">
        insert into Consumption(id,typeName,level)
        values(#{id},#{typeName},#{level})
    </insert>

    <!-- 消费类型一级查询 -->
    <select id="findAllFirstConsumption"
    resultType="Consumption">
           select * from consumption where level is null
    </select>

    <!--消费类型更新-->
    <update id="update" parameterType="Consumption">
        update consumption set typeName=#{typeName},level=#{level}
        where id=#{id}
    </update>

    <!--消费类型删除-->
    <delete id="delete">
        delete from consumption where id=#{id}
    </delete>

    <!--消费类型详细信息查询-->
    <select id="findById" resultType="Consumption">

           select * from Consumption
           where
                id=#{id}
                </select>
</mapper>

4.6 Service

package com.test.service;

import com.test.entity.Consumption;

import java.util.List;

public interface ConsumptionService {

    //1.消费类型添加业务
    public int insertConsumption(Consumption obj);
    //2.消费类型更新业务
    public int updateConsumption(Consumption obj);
    //3.一级消费类型更新业务
    public List findFirstConsumption();
    //4.一级消费类型删除业务
    public int  deleteFirstConsumption(int id);
    //5.根据id编号查询消费类型消息信息
    public Consumption findById(int id);

4.7 ServiceImpl

package com.test.serviceImpl;\
\
import com.test.dao.ConsumptionDao;\
import com.test.entity.Consumption;\
import com.test.service.ConsumptionService;\
import org.springframework.beans.factory.annotation.Autowired;\
import org.springframework.beans.factory.annotation.Qualifier;\
import org.springframework.beans.factory.annotation.Value;\
import org.springframework.stereotype.Component;\
import org.springframework.stereotype.Controller;\
import org.springframework.stereotype.Service;\
\
import java.util.List;\
@Service(value = "consumptionService")\
public class ConsumptionServiceImpl implements ConsumptionService {\
\
    @Autowired\
     private ConsumptionDao consumptionDao;\
\
    @Override\
    public int insertConsumption(Consumption obj) {\
        if(obj.getId()==null || 0==obj.getId()){\
            obj.setId(1);\
        }\
        return consumptionDao.insert(obj);\
    }\
\
    @Override\
    public int updateConsumption(Consumption obj) {\
        return consumptionDao.update(obj);\
    }\
    @Override\
    public List findFirstConsumption() {\
        return consumptionDao.findAllFirstConsumption();\
    }\
\
     //进行事务管理,实现消费类型以及消费记录级联删除\
    @Override\
    public int deleteFirstConsumption(int id) {\
        return consumptionDao.delete(id);\
    }\
\
    @Override\
    public Consumption findById(int id) {\
        return consumptionDao.findById(id);\
    }\
}

4.8 Controller

package com.test.controller;
import com.test.entity.Consumption;
import com.test.service.ConsumptionService;
import 
org.springframework.beans.factory.annotation.Autowired;
import 
org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import 
org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import java.util.List;

@Controller
@RequestMapping(value = "/consumption")
public class ConsumptionController {

    @Autowired
    @Qualifier(value = "consumptionService")
    private ConsumptionService consumptionService;

    //一级消费类型注册
    @RequestMapping(value = "/first_insert.do")
    public ModelAndView firstInsert(Consumption obj){
          int result =-1;//表示失败
          ModelAndView mv = new ModelAndView();
         //1.调用业务类对象完成服务
         result =consumptionService.insertConsumption(obj);
         //2.处理结果
         if(result<=0){
             mv.addObject("info","一级消费类型添加失败");
         }else{
             mv.addObject("info","一级消费类型添加成功");
         }
         mv.setViewName("info");
        return mv;
    }
    //一级消费类型删除

    @RequestMapping(value = "/delete/first.do")
    public ModelAndView deleteFirst(int id){
    int result =-1;
        ModelAndView mv = new ModelAndView();
        //1.调用service处理服务
        result = consumptionService.deleteFirstConsumption(id);
        //2.处理结果
        if(result<=0){
            mv.addObject("info","一级消费类型删除失败");
        }else{
            mv.addObject("info","一级消费类型删除成功");
        }
        mv.setViewName("info");
        return mv;
    }

    //根据id编号查询消费类型详细信息
    @RequestMapping(value = "/findById.do")
    public ModelAndView findById(int id){
        Consumption cp = null;
        ModelAndView mv = new ModelAndView();
        //1.调用业务对象提供服务
        cp =  consumptionService.findById(id);
        //2.处理结果

       mv.addObject("result",cp);

        mv.setViewName("first_Consumption_info");
        return mv;\
    }

    //一级消费类型查询
    @RequestMapping(value = "/first_findAll.do")
    public ModelAndView findFirst(){
             List consumptionList = null;
             ModelAndView mv = new ModelAndView();
            //1.调用service提供所有一级消费类型
             consumptionList =consumptionService.findFirstConsumption();
            //2.结果处理
            mv.addObject("list",consumptionList);
            mv.setViewName("comsumption_first_show");
            return mv;
    }

    //消费类型更新\
    @RequestMapping(value = "/update.do")
    public ModelAndView updateConsumption(Consumption obj){
        int result =-1;//表示失败
        ModelAndView mv = new ModelAndView();
        //1.调用业务类对象完成服务
        result =consumptionService.updateConsumption(obj);
        //2.处理结果
        if(result<=0){
            mv.addObject("info","消费类型更新失败");
        }else{
            mv.addObject("info","消费类型更新成功");
        }
        mv.setViewName("info");
        return mv;
        }
}

第五章 收入类型开发

5.1 介绍:

个人理财系统中,通过收入类型管理。确保用户可以科学有效的分析自己的财务来源

5.2 功能:

  • 收入类型添加
  • 收入类型查询
  • 收入类型删除
  • 收入类型更新

第六章 收支管理

6.1 介绍:

     完成每日收支记录管理

6.2 功能:

  • 收支类型添加
  • 收支类型查询
  • 收支类型删除
  • 收支类型更新

第七章 财务任务管理

7.1介绍:

      设置财务任务,即设定每月计划收入与消费金额。做到有计划的生活

7.2 功能

  • 财务任务添加
  • 财务任务查询
  • 财务任务删除
  • 财务任务更新

第八章 对账管理

8.1介绍:

基于指定的财务任务评价本月财务任务是否达标

8.2 功能

对账查询分析