基于java+ssm+jsp的理财通的设计与实现

项目介绍

在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对理财信息管理的提升,也为了对理财信息进行更好的维护,理财通的出现就变得水到渠成不可缺少。通过对理财通的开发,不仅仅可以学以致用,让学到的知识变成成果出现,也强化了知识记忆,扩大了知识储备,是提升自我的一种很好的方法。通过具体的开发,对整个软件开发的过程熟练掌握,不论是前期的设计,还是后续的编码测试,都有了很深刻的认知。

理财通通过MySQL数据库与idea工具进行开发,理财通能够实现基金管理,基金自选管理,交易记录管理,基金净值管理,持有基金管理,论坛管理,用户管理等功能。

通过理财通对相关信息的处理,让信息处理变的更加的系统,更加的规范,这是一个必然的结果。已经处理好的信息,不管是用来查找,还是分析,在效率上都会成倍的提高,让计算机变得更加符合生产需要,变成人们不可缺少的一种信息处理工具,实现了绿色办公,节省社会资源,为环境保护也做了力所能及的贡献。

4.2功能结构设计
本系统主要是基于数据的增加,修改,删除等操作,使用者能够通过提前设定的登录功能进入指定的操作区,这里对使用者设计的功能进行结构展示。
管理员功能结构图的绘制结果见图4-1。管理员登录进入本系统操作的功能包括管理基金,管理基金净值,管理基金自选,管理持有基金,管理交易记录,管理论坛帖子,管理公告等。
在这里插入图片描述
用户功能结构图的绘制结果见图4-2。用户登录进入本系统操作的功能包括购买基金,查看基金净值,查看基金经理,把基金添加自选,卖出持有基金,查看基金交易记录等。
在这里插入图片描述

开发环境

编程语言:Java
数据库 :Mysql
系统架构:B/S
后端框架:SSM
编译工具:idea或者eclipse,jdk1.8,maven
支持定做:java/php/python/android/小程序/vue/爬虫/c#/asp.net

系统实现

5.1管理员功能实现
5.1.1 基金管理
管理员进入如图5-1所示的基金管理界面之后,管理员点击信息显示栏中最右侧的修改,删除,下架,上架按钮可依次完成基金信息的修改,删除,下架,上架等操作。
在这里插入图片描述

图5-1 基金管理界面

5.1.2 基金净值管理
管理员进入如图5-2所示的基金净值管理界面之后,管理员点击信息显示栏中最右侧的修改,删除按钮可依次完成基金净值信息的修改,删除等操作,管理员在当前界面也能添加基金净值,查询基金净值。
在这里插入图片描述

图5-2 基金净值管理界面

5.1.3 基金自选管理
管理员进入如图5-3所示的基金自选管理界面之后,管理员点击信息显示栏右侧的查看,删除按钮可依次完成基金自选信息的查看,删除等操作。
在这里插入图片描述

图5-3 基金自选管理界面

5.1.4 论坛管理
管理员进入如图5-4所示的论坛管理界面之后,管理员点击信息显示栏中最右侧的查看,查看帖子回复,删除按钮可依次完成论坛帖子信息的查看,查看帖子回复,删除等操作。
在这里插入图片描述

图5-4 论坛管理界面

5.2用户功能实现
5.2.1 基金信息
用户进入如图5-5所示的基金信息界面之后,用户把基金添加自选,查看基金的基金经理信息,购买本界面的基金等。
在这里插入图片描述

图5-5 基金信息界面

5.2.2 在线论坛
用户进入如图5-6所示的在线论坛界面之后,用户在本模块发布帖子,对已经查看的帖子内容进行评论。
在这里插入图片描述

图5-6 在线论坛界面

5.2.3 持有基金管理
用户进入如图5-7所示的持有基金管理界面之后,用户可以查询持有基金信息,可以卖出部分持有基金。
在这里插入图片描述

图5-7 持有基金管理界面

5.2.4 交易记录管理
用户进入如图5-8所示的交易记录管理界面之后,用户对已经买入和已经卖出的基金的交易记录信息进行查询和查看,可以删除基金买入或卖出的交易记录信息。
在这里插入图片描述

图5-8 交易记录管理界面

核心代码

package com.controller;

import java.io.File;
import java.math.BigDecimal;
import java.net.URL;
import java.text.SimpleDateFormat;
import com.alibaba.fastjson.JSONObject;
import java.util.*;
import org.springframework.beans.BeanUtils;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import com.service.TokenService;
import com.utils.*;
import java.lang.reflect.InvocationTargetException;

import com.service.DictionaryService;
import org.apache.commons.lang3.StringUtils;
import com.annotation.IgnoreAuth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.*;
import com.entity.view.*;
import com.service.*;
import com.utils.PageUtils;
import com.utils.R;
import com.alibaba.fastjson.*;

/**
 * 交易记录
 * 后端接口
 * @author
 * @email
*/
@RestController
@Controller
@RequestMapping("/jiaoyijilu")
public class JiaoyijiluController {
    private static final Logger logger = LoggerFactory.getLogger(JiaoyijiluController.class);

    @Autowired
    private JiaoyijiluService jiaoyijiluService;


    @Autowired
    private TokenService tokenService;
    @Autowired
    private DictionaryService dictionaryService;

    //级联表service
    @Autowired
    private JijinService jijinService;
    @Autowired
    private YonghuService yonghuService;



    /**
    * 后端列表
    */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
        logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(StringUtil.isEmpty(role))
            return R.error(511,"权限为空");
        else if("用户".equals(role))
            params.put("yonghuId",request.getSession().getAttribute("userId"));
        if(params.get("orderBy")==null || params.get("orderBy")==""){
            params.put("orderBy","id");
        }
        PageUtils page = jiaoyijiluService.queryPage(params);

        //字典表数据转换
        List<JiaoyijiluView> list =(List<JiaoyijiluView>)page.getList();
        for(JiaoyijiluView c:list){
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(c, request);
        }
        return R.ok().put("data", page);
    }

    /**
    * 后端详情
    */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id, HttpServletRequest request){
        logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
        JiaoyijiluEntity jiaoyijilu = jiaoyijiluService.selectById(id);
        if(jiaoyijilu !=null){
            //entity转view
            JiaoyijiluView view = new JiaoyijiluView();
            BeanUtils.copyProperties( jiaoyijilu , view );//把实体数据重构到view中

                //级联表
                JijinEntity jijin = jijinService.selectById(jiaoyijilu.getJijinId());
                if(jijin != null){
                    BeanUtils.copyProperties( jijin , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setJijinId(jijin.getId());
                }
                //级联表
                YonghuEntity yonghu = yonghuService.selectById(jiaoyijilu.getYonghuId());
                if(yonghu != null){
                    BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setYonghuId(yonghu.getId());
                }
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(view, request);
            return R.ok().put("data", view);
        }else {
            return R.error(511,"查不到数据");
        }

    }

    /**
    * 后端保存
    */
    @RequestMapping("/save")
    public R save(@RequestBody JiaoyijiluEntity jiaoyijilu, HttpServletRequest request){
        logger.debug("save方法:,,Controller:{},,jiaoyijilu:{}",this.getClass().getName(),jiaoyijilu.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(StringUtil.isEmpty(role))
            return R.error(511,"权限为空");
        else if("用户".equals(role))
            jiaoyijilu.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
        Wrapper<JiaoyijiluEntity> queryWrapper = new EntityWrapper<JiaoyijiluEntity>()
            .eq("jijin_id", jiaoyijilu.getJijinId())
            .eq("yonghu_id", jiaoyijilu.getYonghuId())
            .eq("jiaoyijilu_fenshu", jiaoyijilu.getJiaoyijiluFenshu())
            .eq("jiaoyijilu_types", jiaoyijilu.getJiaoyijiluTypes())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        JiaoyijiluEntity jiaoyijiluEntity = jiaoyijiluService.selectOne(queryWrapper);
        if(jiaoyijiluEntity==null){
            jiaoyijilu.setInsertTime(new Date());
            jiaoyijilu.setCreateTime(new Date());
            jiaoyijiluService.insert(jiaoyijilu);
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }

    /**
    * 后端修改
    */
    @RequestMapping("/update")
    public R update(@RequestBody JiaoyijiluEntity jiaoyijilu, HttpServletRequest request){
        logger.debug("update方法:,,Controller:{},,jiaoyijilu:{}",this.getClass().getName(),jiaoyijilu.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(StringUtil.isEmpty(role))
            return R.error(511,"权限为空");
        else if("用户".equals(role))
            jiaoyijilu.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
        //根据字段查询是否有相同数据
        Wrapper<JiaoyijiluEntity> queryWrapper = new EntityWrapper<JiaoyijiluEntity>()
            .notIn("id",jiaoyijilu.getId())
            .andNew()
            .eq("jijin_id", jiaoyijilu.getJijinId())
            .eq("yonghu_id", jiaoyijilu.getYonghuId())
            .eq("jiaoyijilu_fenshu", jiaoyijilu.getJiaoyijiluFenshu())
            .eq("jiaoyijilu_types", jiaoyijilu.getJiaoyijiluTypes())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        JiaoyijiluEntity jiaoyijiluEntity = jiaoyijiluService.selectOne(queryWrapper);
        if(jiaoyijiluEntity==null){
            //  String role = String.valueOf(request.getSession().getAttribute("role"));
            //  if("".equals(role)){
            //      jiaoyijilu.set
            //  }
            jiaoyijiluService.updateById(jiaoyijilu);//根据id更新
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }

    /**
    * 删除
    */
    @RequestMapping("/delete")
    public R delete(@RequestBody Integer[] ids){
        logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
        jiaoyijiluService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }

    /**
     * 批量上传
     */
    @RequestMapping("/batchInsert")
    public R save( String fileName){
        logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);
        try {
            List<JiaoyijiluEntity> jiaoyijiluList = new ArrayList<>();//上传的东西
            Map<String, List<String>> seachFields= new HashMap<>();//要查询的字段
            Date date = new Date();
            int lastIndexOf = fileName.lastIndexOf(".");
            if(lastIndexOf == -1){
                return R.error(511,"该文件没有后缀");
            }else{
                String suffix = fileName.substring(lastIndexOf);
                if(!".xls".equals(suffix)){
                    return R.error(511,"只支持后缀为xls的excel文件");
                }else{
                    URL resource = this.getClass().getClassLoader().getResource("static/upload/" + fileName);//获取文件路径
                    File file = new File(resource.getFile());
                    if(!file.exists()){
                        return R.error(511,"找不到上传文件,请联系管理员");
                    }else{
                        List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件
                        dataList.remove(0);//删除第一行,因为第一行是提示
                        for(List<String> data:dataList){
                            //循环
                            JiaoyijiluEntity jiaoyijiluEntity = new JiaoyijiluEntity();
//                            jiaoyijiluEntity.setJijinId(Integer.valueOf(data.get(0)));   //基金 要改的
//                            jiaoyijiluEntity.setYonghuId(Integer.valueOf(data.get(0)));   //用户 要改的
//                            jiaoyijiluEntity.setJiaoyijiluFenshu(Integer.valueOf(data.get(0)));   //交易份数 要改的
//                            jiaoyijiluEntity.setJiaoyijiluSumMoney(data.get(0));                    //总金额 要改的
//                            jiaoyijiluEntity.setJiaoyijiluTypes(Integer.valueOf(data.get(0)));   //类型 要改的
//                            jiaoyijiluEntity.setInsertTime(date);//时间
//                            jiaoyijiluEntity.setCreateTime(date);//时间
                            jiaoyijiluList.add(jiaoyijiluEntity);


                            //把要查询是否重复的字段放入map中
                        }

                        //查询是否重复
                        jiaoyijiluService.insertBatch(jiaoyijiluList);
                        return R.ok();
                    }
                }
            }
        }catch (Exception e){
            return R.error(511,"批量插入数据异常,请联系管理员");
        }
    }




    /**
    * 前端列表
    */
    @IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params, HttpServletRequest request){
        logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));

        // 没有指定排序字段就默认id倒序
        if(StringUtil.isEmpty(String.valueOf(params.get("orderBy")))){
            params.put("orderBy","id");
        }
        PageUtils page = jiaoyijiluService.queryPage(params);

        //字典表数据转换
        List<JiaoyijiluView> list =(List<JiaoyijiluView>)page.getList();
        for(JiaoyijiluView c:list)
            dictionaryService.dictionaryConvert(c, request); //修改对应字典表字段
        return R.ok().put("data", page);
    }

    /**
    * 前端详情
    */
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id, HttpServletRequest request){
        logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
        JiaoyijiluEntity jiaoyijilu = jiaoyijiluService.selectById(id);
            if(jiaoyijilu !=null){


                //entity转view
                JiaoyijiluView view = new JiaoyijiluView();
                BeanUtils.copyProperties( jiaoyijilu , view );//把实体数据重构到view中

                //级联表
                    JijinEntity jijin = jijinService.selectById(jiaoyijilu.getJijinId());
                if(jijin != null){
                    BeanUtils.copyProperties( jijin , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setJijinId(jijin.getId());
                }
                //级联表
                    YonghuEntity yonghu = yonghuService.selectById(jiaoyijilu.getYonghuId());
                if(yonghu != null){
                    BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setYonghuId(yonghu.getId());
                }
                //修改对应字典表字段
                dictionaryService.dictionaryConvert(view, request);
                return R.ok().put("data", view);
            }else {
                return R.error(511,"查不到数据");
            }
    }


    /**
    * 前端保存
    */
    @RequestMapping("/add")
    public R add(@RequestBody JiaoyijiluEntity jiaoyijilu, HttpServletRequest request){
        logger.debug("add方法:,,Controller:{},,jiaoyijilu:{}",this.getClass().getName(),jiaoyijilu.toString());
        Wrapper<JiaoyijiluEntity> queryWrapper = new EntityWrapper<JiaoyijiluEntity>()
            .eq("jijin_id", jiaoyijilu.getJijinId())
            .eq("yonghu_id", jiaoyijilu.getYonghuId())
            .eq("jiaoyijilu_fenshu", jiaoyijilu.getJiaoyijiluFenshu())
            .eq("jiaoyijilu_types", jiaoyijilu.getJiaoyijiluTypes())
            ;
        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        JiaoyijiluEntity jiaoyijiluEntity = jiaoyijiluService.selectOne(queryWrapper);
        if(jiaoyijiluEntity==null){
            jiaoyijilu.setInsertTime(new Date());
            jiaoyijilu.setCreateTime(new Date());
        //  String role = String.valueOf(request.getSession().getAttribute("role"));
        //  if("".equals(role)){
        //      jiaoyijilu.set
        //  }
        jiaoyijiluService.insert(jiaoyijilu);
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }



}

论文参考

在这里插入图片描述

目 录
第一章 绪论 1
1.1 选题背景 1
1.2 选题意义 1
1.3 研究内容 2
第二章 开发环境 3
2.1 Java语言 3
2.2 MYSQL数据库 3
2.3 Eclipse开发工具 4
2.4 SSM框架 4
第三章 系统分析 5
3.1可行性分析 5
3.1.1技术可行性 5
3.1.2操作可行性 5
3.1.3经济可行性 5
3.2系统流程分析 5
3.3系统性能分析 9
3.3.1系统安全性 9
3.3.2数据完整性 10
3.3.3系统可扩展性 10
3.4系统功能分析 10
第四章 系统设计 13
4.1 系统设计目标 13
4.2功能结构设计 14
4.3数据库设计 15
4.3.1 数据库概念设计 15
4.3.2 数据库物理设计 18
第五章 系统实现 23
5.1管理员功能实现 23
5.1.1 基金管理 23
5.1.2 基金净值管理 23
5.1.3 基金自选管理 24
5.1.4 论坛管理 24
5.2用户功能实现 25
5.2.1 基金信息 25
5.2.2 在线论坛 26
5.2.3 持有基金管理 26
5.2.4 交易记录管理 27
第六章 系统测试 28
6.1系统测试的特点 28
6.2 系统功能测试 28
6.2.1 用户登录测试 28
6.2.2 基金查询功能测试 29
6.3 系统测试结果 29
结 论 30
致 谢 32
参考文献 33

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值