热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

🍅作者主页:Java李杨勇 🍅简介:Java领域优质创作者🏆、Java李杨勇公号作者✌ 简历模板

🍅 作者主页:Java李杨勇 

🍅 简介:Java领域优质创作者🏆、Java李杨勇公号作者✌  简历模板、学习资料、面试题库、技术互助【关注我,都给你】

🍅 欢迎点赞 👍 收藏 ⭐留言 📝   


视频演示:文末获取源码联系方式


Springboot个人理财系统



前言:

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

HTML5大作业实战案例《100套》


推荐阅读
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 帝国CMS中的信息归档功能详解及其重要性
    本文详细解析了帝国CMS中的信息归档功能,并探讨了其在内容管理中的重要性。通过归档功能,用户可以有效地管理和组织大量内容,提高网站的运行效率和用户体验。此外,文章还介绍了如何利用该功能进行数据备份和恢复,确保网站数据的安全性和完整性。 ... [详细]
  • 在探讨Hibernate框架的高级特性时,缓存机制和懒加载策略是提升数据操作效率的关键要素。缓存策略能够显著减少数据库访问次数,从而提高应用性能,特别是在处理频繁访问的数据时。Hibernate提供了多层次的缓存支持,包括一级缓存和二级缓存,以满足不同场景下的需求。懒加载策略则通过按需加载关联对象,进一步优化了资源利用和响应时间。本文将深入分析这些机制的实现原理及其最佳实践。 ... [详细]
  • 作为软件工程专业的学生,我深知课堂上教师讲解速度之快,很多时候需要课后自行消化和巩固。因此,撰写这篇Java Web开发入门教程,旨在帮助初学者更好地理解和掌握基础知识。通过详细记录学习过程,希望能为更多像我一样在基础方面还有待提升的学员提供有益的参考。 ... [详细]
  • 本文作为探讨PHP依赖注入容器系列文章的开篇,将首先通过具体示例详细阐述依赖注入的基本概念及其重要性,为后续深入解析容器的实现奠定基础。 ... [详细]
  • 当前,众多初创企业对全栈工程师的需求日益增长,但市场中却存在大量所谓的“伪全栈工程师”,尤其是那些仅掌握了Node.js技能的前端开发人员。本文旨在深入探讨全栈工程师在现代技术生态中的真实角色与价值,澄清对这一角色的误解,并强调真正的全栈工程师应具备全面的技术栈和综合解决问题的能力。 ... [详细]
  • 在List和Set集合中存储Object类型的数据元素 ... [详细]
  • 在Android应用开发中,实现与MySQL数据库的连接是一项重要的技术任务。本文详细介绍了Android连接MySQL数据库的操作流程和技术要点。首先,Android平台提供了SQLiteOpenHelper类作为数据库辅助工具,用于创建或打开数据库。开发者可以通过继承并扩展该类,实现对数据库的初始化和版本管理。此外,文章还探讨了使用第三方库如Retrofit或Volley进行网络请求,以及如何通过JSON格式交换数据,确保与MySQL服务器的高效通信。 ... [详细]
  • 理解和应用HTTP请求中的转发与重定向机制
    在HTTP请求处理过程中,客户端发送请求(通常简称为req),服务器进行相应处理后返回响应(通常简称为res)。理解和应用客户端的转发与重定向机制是前端开发的重要内容。这两种机制在Web开发中具有关键作用,能够有效管理和优化用户请求的处理流程。转发机制允许服务器内部将请求传递给另一个资源,而重定向则指示客户端向新的URL发起新的请求,从而实现页面跳转或资源更新。掌握这些技术有助于提升应用的性能和用户体验。 ... [详细]
  • 在CentOS 7上部署WebRTC网关Janus
    在CentOS 7上部署WebRTC网关Janus ... [详细]
  • 《精通 jQuery》第六章:深入解析与实战应用
    《精通 jQuery》第六章:深入解析与实战应用本章详细探讨了 Ajax 技术的核心机制及其实际应用。Ajax 通过 XMLHttpRequest 对象实现客户端与服务器之间的异步数据交换,从而在不重新加载整个页面的情况下更新部分内容。这种技术不仅提升了用户体验,还提高了应用的响应速度和效率。此外,本章还介绍了如何利用 jQuery 简化 Ajax 操作,并提供了多个实战案例,帮助读者更好地理解和掌握这一重要技术。 ... [详细]
  • 深入解析Spring Boot启动过程中Netty异步架构的工作原理与应用
    深入解析Spring Boot启动过程中Netty异步架构的工作原理与应用 ... [详细]
  • 本文详细解析了JSONP(JSON with Padding)的跨域机制及其工作原理。JSONP是一种通过动态创建``标签来实现跨域请求的技术,其核心在于利用了浏览器对``标签的宽松同源策略。文章不仅介绍了JSONP的产生背景,还深入探讨了其具体实现过程,包括如何构造请求、服务器端如何响应以及客户端如何处理返回的数据。此外,还分析了JSONP的优势和局限性,帮助读者全面理解这一技术在现代Web开发中的应用。 ... [详细]
  • 深入解析 Django 中用户模型的自定义方法与技巧 ... [详细]
  • 本文详细解析了如何使用 jQuery 实现一个在浏览器地址栏运行的射击游戏。通过源代码分析,展示了关键的 JavaScript 技术和实现方法,并提供了在线演示链接供读者参考。此外,还介绍了如何在 Visual Studio Code 中进行开发和调试,为开发者提供了实用的技巧和建议。 ... [详细]
author-avatar
大帅哥晶晶_527
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有