基于Springboot+Mybatis实现个人理财系统

基于Springboot+Mybatis实现个人理财系统

🍅 作者主页 网顺技术团队
🍅 欢迎点赞 👍 收藏 ⭐留言 📝
🍅 文末获取源码联系方式 📝
🍅 查看下方微信号获取联系方式 承接各种定制系统 📝
🚀🚀🚀精彩系列推荐
👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟
Java毕设项目精品实战案例《1000套》
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人

前言:

随着社会的进步,生活的富裕,科学技术的不断提高,计算机科学日益成熟,电脑已经成为家庭必备的工具之一,利用计算机进行个人理财不失为一种行之有效的方法,实用、美观、高效的同时也给用户带来了极大的便利,达到足不出户就能管理财富的目的。作为计算机应用的一部分,使用计算机对个人财务进行管理,具有手工管理所无法比拟的优点:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成品低等。这些优点能够极大地提高个人财务管理的效率,也是个人理财的科学化、正规化管理,与先进科学技术接轨的重要条件。个人理财是以个人为单位的财务规划,具体来说是按照家庭的实物性财产、现金收支流,围绕家庭的收入、消费、投资、借贷、风险承受能力、心理偏好等情况,形成一套以个人财务自由化为目标的家庭财务安排。从广义的角度来讲,合理的理财会节省社会资源,提高社会福利,促进社会的稳定发展。从技术的角度来讲,个人理财就是利用开源节流的原则,增加收入,节省支出,用最合理的方式来达到一个家庭所希望达到的经济目标。现今国内已有成熟的C/S结构的理财管理系统,而B/S结构的在线实时管理的还尚不发达,因此该课题的研究目的在于开发基于SpringBootB/S的家庭理财平台。
在这里插入图片描述

设计思想:

每一个系统,都要有一个合适的设计思想和方法,这样才能保证系统的基本思想是贯彻适中的。选择合理的逻辑结构,物理结构,操作系统和外部开发环境,这些对系统的开发起着关键的作用。只有这样才能构成完善的整体的系统。该系统的设计按照下述原则进行。

实用性

系统以用户需求为目标,以方便用户为原则。根据用户实际的需求情况,完成一个在线理财系统,并且将在统一的界面下提供各种实用功能,尽可能降低使用前的培训、实施和使用中的维护时间。

先进性

该设计将充分应用现有成熟的计算机技术、。网络技术、软件开发技术,为用户提供高性能的系统。系统将运用先进的客户机/服务器结构,采用Mysql数据库,可以方便的满足用户在线理财的需要。

高可靠性

一个实用的系统同时必须是可靠的,该设计通过合理而先进的网络设计以及软、硬件的优化选型,可保证系统的可靠性与容错性。

高安全性

在设计中,将充分利用各种安全措施,既可以保证用户共享资源,同时也可保证关键数据的安全性。

可扩展性及灵活性

系统的设计以方便未来业务的扩展和系统扩充为目标。

系统主要功能设计:

主要技术:springboot、mybatis、themlefy、Jquery、bootstrap、MySQL

普通用户:登录注册,登录后查看各类理财产品及设置各类理财产品的投资方式,查看自己的理财内容等

管理员:登录后可以管理普通用户、管理各类理财产品信息等,

功能实现关键代码:

后台登录验证:

  @GetMapping("/verifyLogin")
    @ResponseBody
    public Msg verifyLogin(@RequestParam("username") String username, @RequestParam("password") String password,
                           HttpSession session) {
 
        User loginUser = userService.selectUserByTerms(username, password);
        if (loginUser != null) {
            //获取当前用户
            Subject subject = SecurityUtils.getSubject();
            //封装用户登录数据
            UsernamePasswordToken token = new UsernamePasswordToken(username, password);
            try {
                subject.login(token);
                return Msg.success().add("url", "/user/index.html");
            } catch (UnknownAccountException | IncorrectCredentialsException e) {
                return Msg.fail();
            }
        }
 
        Admin admin = adminService.selectAdminByTerms(username, password);
        if (admin != null) {
            //获取当前用户
            Subject subject = SecurityUtils.getSubject();
            //封装用户登录数据
            UsernamePasswordToken token = new UsernamePasswordToken(username, password);
            try {
                subject.login(token);
                return Msg.success().add("url", "/admin/index.html");
            } catch (UnknownAccountException | IncorrectCredentialsException e) {
                //model.addAttribute("msg","密码错误");
                return Msg.fail();
            }
        }
        return Msg.fail();
    }

登录处理

  @GetMapping("/verifyLogin")
    @ResponseBody
    public Msg verifyLogin(@RequestParam("username") String username, @RequestParam("password") String password,
                           HttpSession session) {
 
        User loginUser = userService.selectUserByTerms(username, password);
        if (loginUser != null) {
            //获取当前用户
            Subject subject = SecurityUtils.getSubject();
            //封装用户登录数据
            UsernamePasswordToken token = new UsernamePasswordToken(username, password);
            try {
                subject.login(token);
                return Msg.success().add("url", "/user/index.html");
            } catch (UnknownAccountException | IncorrectCredentialsException e) {
                return Msg.fail();
            }
        }
 
        Admin admin = adminService.selectAdminByTerms(username, password);
        if (admin != null) {
            //获取当前用户
            Subject subject = SecurityUtils.getSubject();
            //封装用户登录数据
            UsernamePasswordToken token = new UsernamePasswordToken(username, password);
            try {
                subject.login(token);
                return Msg.success().add("url", "/admin/index.html");
            } catch (UnknownAccountException | IncorrectCredentialsException e) {
                //model.addAttribute("msg","密码错误");
                return Msg.fail();
            }
        }
        return Msg.fail();
    }

登录拦截器设置:

/**
 * 登陆拦截器:未登录用户不能访问系统界面
 */
public class LoginHandlerInterceptor implements HandlerInterceptor {
    //目标方法执行之前
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        Object user = request.getSession().getAttribute("loginUser");
        Object admin = request.getSession().getAttribute("loginAdmin");
        if(user == null&&admin==null){
            //未登陆,返回登陆页面
            request.setAttribute("msg","没有权限请先登陆");
            System.out.println("LoginHandlerInterceptor.preHandle" + "----------------未登入------拦截请求--------------->");
            response.sendRedirect("/");
            return false;
        }else{
            //已登陆,放行请求
            return true;
        }
    }

乱码通用处理:

/**
 * 对所有乱码进行拦截及纠正,包括get提交方式,解决get提交方式乱码,方式是重写了request的getParameter方法,
 * 让其在返回值的时候检查提交方式,如果为“get”就进行解码。 使用过滤器的@WebFilter注解进行配置和值的初始化
 */
@WebFilter(filterName = "encodingFilter", urlPatterns = "/*", initParams = {
		@WebInitParam(name = "code", value = "utf-8") })
public class EncodingFilter implements Filter {
 
	private String code = null;
 
	public void destroy() {
	}
 
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		// 设置码表
		request.setCharacterEncoding(code);
		response.setCharacterEncoding(code);
		response.setContentType("text/html;charset=" + code);
		// 将现在的reuqest对象换成我自己的request对象
		MyHttpServletRequest myRequest = new MyHttpServletRequest((HttpServletRequest) request);
		//System.out.println("Filter");
		// 跳转到请求的资源,并传入自己定义的myRequest对象
		chain.doFilter(myRequest, response);
	}

数据库设计:

用户表

CREATE TABLE `user` (
`id`  int(10) NOT NULL AUTO_INCREMENT COMMENT '用户id 主键自增' ,
`username`  varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户名' ,
`realname`  varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '真实姓名' ,
`password`  varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '登录密码' ,
`IDcard`  varchar(18) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '身份证号' ,
`phone`  varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '手机号' ,
`email`  varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '邮箱' ,
`paypwd`  int(40) NULL DEFAULT NULL COMMENT '交易密码' ,
`status`  int(10) NULL DEFAULT NULL COMMENT '用户状态(0:离线   1:在线)' ,
`reputation`  varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户信誉' ,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=7
ROW_FORMAT=COMPACT
;

理财表:

CREATE TABLE `NewTable` (
`id`  int(10) NOT NULL AUTO_INCREMENT COMMENT '资金记录表 id主键自增' ,
`userId`  int(10) NULL DEFAULT NULL COMMENT '所属用户' ,
`flowMoney`  decimal(20,2) NULL DEFAULT NULL COMMENT '金额' ,
`type`  int(10) NULL DEFAULT NULL COMMENT '类型(1:支出  2:收入)' ,
`source`  varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '来源' ,
`createTime`  date NULL DEFAULT NULL COMMENT '创建时间' ,
`fundDesc`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注' ,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=18
ROW_FORMAT=COMPACT
;
 

网贷信息表:

CREATE TABLE `NewTable` (
`id`  int(10) NOT NULL AUTO_INCREMENT COMMENT '消息编号 主键自增' ,
`sendId`  int(10) NULL DEFAULT NULL COMMENT '消息发送者id(admin)' ,
`receiveId`  int(10) NULL DEFAULT NULL COMMENT '消息接收者id(user)' ,
`createTime`  date NULL DEFAULT NULL COMMENT '消息创建时间' ,
`title`  varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '消息标题' ,
`infoDesc`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '消息内容' ,
`status`  int(10) NULL DEFAULT NULL COMMENT '消息状态(0:未读  1:已读)' ,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=12
ROW_FORMAT=COMPACT
;
 

获取源码
总体来说这个项目功能相对还是比较简单优秀的、适合初学者作为课程设计和毕业设计参考
🍅 查看下方微信号获取联系方式 承接各种定制系统 📝
🚀🚀🚀精彩系列推荐
Java毕设项目精品实战案例《1000套》
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

网顺技术团队

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

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

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

打赏作者

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

抵扣说明:

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

余额充值