java+mysql+mvc家庭理财管理系统

2023-10-22 00:50

本文主要是介绍java+mysql+mvc家庭理财管理系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

JavaWeb项目:java+mysql+mvc家庭理财管理系统
此项目为本人的Java大作业。
前台代码;代码已经上传到github上 下载地址Github
一、项目概况
1.1设计内容
  一个家庭理财管理系统,家庭理财管理系统,主要包括消费管理模块、收入管理模块、统计汇总模块及理财规划模块等。每个主模块下又分为几个子模块。具体功能描述如下:
着装消费着装消费模块完成家庭成员的衣服、鞋、帽消费记录的功能,主要包括购买物品名称、购买时间、数量、价格,购买者及备注等。完成对着装消费信息的添加与删除的操作。食品消费食品消费模块记录着家庭日常常饮食消费情况,完成对食品消费信息的添加与删除的操作。包括的信息有购买的食品的名称、购买时间、购买数量、价格,备注等。家居消费家居消费记录着家居日杂等消费的功能,完成对家居消费信息的添加与删除的操作。包括的信息有购买物品的名称、购买的时间、数量、价格、备注等。行车消费此系统开发期间我们小组不定时地进行用户使用反馈信息收集,根据收集数据不断对系统进行优化、完善。目的是希望从使用者的角度查找系统的缺陷之处,继而使得整个系统的运行、结构更加清晰化、条理化、自动化。

1.2开发工具
  Eclipse或者Myeclipse,Java,MySQL,Redis,Html,CSS,JS。
二、详细设计
2.1网站结构

代码已经上传github,下载地址:Github
开发环境:
Eclipse ,MYSQL,JDK1.8,Tomcat 7
涉及技术点:
MVC模式、SpringMvc、Mybatis、Spring、bootstrap、HTML、JavaScript、CSS、JQUERY、log4j、Ajax、maven等
系统采用Mybatis框架实现ORM对象关系映射,前台JSP实现,后台springMvc映射,使用Spring框架进行整合。适合学习J2EE的一段时间的熟手,代码思路清晰,注解详细,数据库用的是mysql5.1,服务器用的tomcat7,JDK版本1.8. 编程软件Eclispe J2EE版本。是典型MVC架构,并且前后台分离

该系统的功能模块图如下所示:

 


图4-1系统功能模块图
4.2.2 系统功能模块描述
家庭理财管理系统,主要包括消费管理模块、收入管理模块、统计汇总模块及理财规划模块等。每个主模块下又分为几个子模块。具体功能描述如下:
一、消费管理
消费管理模块记录着家庭消费的相关信息,由四个子模块构成:着装消费、食品消费、家居消费、行车消费。
1.着装消费
着装消费模块完成家庭成员的衣服、鞋、帽消费记录的功能,主要包括购买物品名称、购买时间、数量、价格,购买者及备注等。完成对着装消费信息的添加与删除的操作。
2.食品消费
食品消费模块记录着家庭日常常饮食消费情况,完成对食品消费信息的添加与删除的操作。包括的信息有购买的食品的名称、购买时间、购买数量、价格,备注等。
3.家居消费
家居消费记录着家居日杂等消费的功能,完成对家居消费信息的添加与删除的操作。包括的信息有购买物品的名称、购买的时间、数量、价格、备注等。
4.行车消费
记录家庭汽车支出的信息,完成对汽车消费信息的添加与删除的操作。主要包括支出时间,支出价格,信息描述等。
二、收入管理
收入管理主要完成对家庭收入信息的管理与维护操作。
1. 增加收入
增加收入模块完成对收入信息的添加的功能,包括的内容主要有日期、收入金额、收入类型、备注等。
2. 收入记录管理
收入记录管理模块主要完成对收入记录的管理与维护的操作。
三、统计汇总
统计汇总模块完成对消费信息的统计操作,主要包括当日汇总、月份汇总、年度汇总。
1. 当日汇总
当日汇总模块主要完成对某日消费信息的汇总操作,包括汇总当日的着装消费金额、食品消费金额、家居消费金额、行车消费金额,及总的金额等。
2. 当月汇总
当月汇总模块用于汇总某个自然月的消费支出情况。
3. 当年汇总
当年汇总模块用于汇总某个年度的消费支出信息。
四、理财规划
理财规划模块主要收集一些理财规划的知识,包括家庭财务健康诊断,购房规划,寿险规划,购车规划等。

图5-2系统登录管理模块
5.4.2 着装消费管理模块
 着装消费管理模块完成家庭成员的着装消费信息的添加或删除的操作,用户可以添加着装消费信息,也可以删除着装消费信息,着装消费管理模块对应的页面为yifuxiaofeimama.action。着装消费管理模块界面的设计如图5-3所示:

图5-3着装消费页面
在着装消费管理页面中,用户可以添加着装消费的信息,点击添加按钮输入相应的信息,完成着装消费信息的添加功能。着装消费信息的添加界面如图5-4所示:

图5-4 着装消费添加界面
5.4.3 食品消费管理模块
食口消费管理模块完成家庭饮食消费的记录功能,用户可以添加食品消费信息,也可以删除食品消费信息,食品消费管理模块对应的页面文件为shipinxiaofeimama.action。食品消费界面设计如图5-5所示:

图5-5 食品消费界面

食品消费添加
5.4.4 家居消费管理模块
家居消费管理模块用于记录家居日常消费的功能,用户可以添加家居消费信息,也可以对家居消费记录进行删除操作,家居消费信息包括购买物品的名称,数量,价格,购买时间及说明等。家居消费管理模块对应的磁盘文件为jiajuxiaofeimama.action,家居消费界面设计如图5-6所示:


图5-6 家居消费界面
 5.4.5 行车消费管理模块
行车消费管理模块完成对行车消费信息的添加、删除等操作,行车消费管理主要包括支出金额,日期,及说明等。行车消费管理模块对应的磁盘文件xiexiaofeimama.action,行车消费管理模块界面设计如图5-7所示:


图5-7行车消费模块界面

 5.4.6 增加收入管理模块
增加收入管理模块,完成收入信息的添加功能,在添加收入信息时,输入收入日期,收入金额,类别及说明等进行添加。增加收入管理模块的页面设计如图shouruadd.jsp,增加收入面设计如图5-8所示:

图5-8增加收入窗口界面

 5.4.7 收入管理模块
收入管理模块主要完成对收入信息的查看与维护操作,用户可以查看收入信息,也可以对收信息进行删除的操作,收入管理模块对应的磁盘为shourumama.action,收入管理模块对应的界面设计如图5-9所示:


图5-9收入管理界面
5.4.8 当日汇总模块
当日汇总模块用于统计某天的支出消费信息,分类汇总着装消费、食品消费、家居消费、行车消费等分项的和及消费总额,当日汇总模块对应的页面文件为Huizongdangri.action,当日汇总模块的页面设计如图5-10所示:

图5-9当日汇总界面
 5.4.9 当月汇总模块
当月汇总模块完成按月份分类汇总的功能,用于统计某个自然月中各项费用的支出汇总及总支出情况,当月汇总模块对应的磁盘文件为Huizongyuefen.action,当月汇总模块的代码设计如图5-11所示:

图5-11月份汇总界面
 5.4.10 年份汇总
年份汇总模块统计某年的着装消费合计、食品消费合计、家居消费合计、行车消费合计等功能,年份汇总模块对应的磁盘文件为Huizongnianfen.action。年份汇总模块的设计如图5-12所示:

图5-12年份汇总界面

 5.4.11 理财规划模块
理财规划模块主要收集了一些理财规划的知识,主要包括家庭财务健身诊断、购房规划、寿险规划、购车规划等,理财规划模块对应的磁盘文件为Licaiguihua\case.jsp。理财规划模块的页面设计如图5-13所示:

图5-13理财规划界面

package com.linxf.ticketsale.controller;

import com.linxf.ticketsale.pojo.Order;
import com.linxf.ticketsale.pojo.Passenger;
import com.linxf.ticketsale.pojo.Train;
import com.linxf.ticketsale.pojo.User;
import com.linxf.ticketsale.service.OrderService;
import com.linxf.ticketsale.service.UserService;
import com.linxf.ticketsale.util.JedisUtil;
import com.linxf.ticketsale.util.TimeUtil;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

@Controller
@RequestMapping("/orderController")
public class OrderController {

 private static final Logger LOG = Logger.getLogger(UserController.class);

 @Resource
 private OrderService orderService;
 @Resource
 private UserService userService;

 // 根据订单号查看订单详情
 @RequestMapping("/toOrderShow.action")
 public ModelAndView toOrderShow(int oid) {
  ModelAndView modelAndView = new ModelAndView();
  Order order = null;
  try {
   if (oid != 0) {
    order = orderService.findOrderByOid(oid);
   }
  } catch (Exception e) {
   LOG.info("orderController.toOrderShow e:" + e);
   e.printStackTrace();
  }
  modelAndView.addObject("order", order);
  modelAndView.setViewName("WEB-INF/jsp/main/orderShow.jsp");
  return modelAndView;

 }

 /*
  * 支付成功,订单状态为已支付,并跳转到订单列表页面
  */
 @RequestMapping("/toPay.action")
 public String toPay() {
  try {
   Order order = JedisUtil.get("order");// 从缓存中取
   if (order != null) {// 缓存中有
    orderService.OtypeToPay(order.getOid());// 改变订单状态为已支付
   }
  } catch (Exception e) {
   LOG.info("orderController.toPay e:" + e);
   e.printStackTrace();
  }
  return "WEB-INF/jsp/main/payUi.jsp";
 }

 /*
  * 从订单列表中出票,并刷新订单列表页面
  */
 @RequestMapping("/listToTake.action")
 public ModelAndView listToTake(int oid) {
  ModelAndView modelAndView = new ModelAndView();
  try {
   orderService.OtypeToPost(oid);// 改变订单状态为已支付
  } catch (Exception e) {
   LOG.info("orderController.listToPay e:" + e);
   e.printStackTrace();
  }
  modelAndView.setViewName("forward:orderListUi.action");
  return modelAndView;
 }

 /*
  * 从订单列表中支付支付,并跳转到订单列表页面
  */
 @RequestMapping("/listToPay.action")
 public String listToPay(int oid) {
  try {
   orderService.OtypeToPay(oid);// 改变订单状态为已支付
  } catch (Exception e) {
   LOG.info("orderController.listToTake e:" + e);
   e.printStackTrace();
  }
  return "WEB-INF/jsp/main/payUi.jsp";
 }

 /*
  * 确认订单,并跳转到支付页面
  */
 @RequestMapping("/sureOrder.action")
 public ModelAndView sureOrder(Order order) {
  ModelAndView modelAndView = new ModelAndView();
  String m = "s" + order.getCreateTime();
  double money = Double.parseDouble(m.split("¥")[1]);
  order.setMoney(money); // 订单总价
  order.setCreateTime(TimeUtil.getTime());// 订单创建时间
  // 根据乘客id查询乘客信息
  Passenger passenger = null;
  int oid = 0;
  try {
   passenger = userService.findByid(order.getPid());
   orderService.addOrder(order); // 添加订单
   oid = order.getOid();
  } catch (Exception e) {
   e.printStackTrace();
  }
  order.setPassenger(passenger);
  order.setOid(oid);
  // 将订单信息存入缓存
  Order order0 = JedisUtil.get("order");
  if (order0 == null) {// 缓存中没有
   JedisUtil.put("order", order);
  } else {// 缓存中有
   JedisUtil.remove("order");
   JedisUtil.put("order", order);
  }
  modelAndView.addObject("order", order);
  modelAndView.setViewName("WEB-INF/jsp/main/sureOrder.jsp");
  return modelAndView;
 }

 /*
  * 跳转到订单列表页面
  */
 @RequestMapping("/orderListUi.action")
 public String orderListUi(HttpServletRequest request) {
  User user = (User) request.getSession().getAttribute("loginUser");
  List<Order> list = null;
  Passenger passenger = null;
  try {
   list = orderService.findAllOrderByUid(user.getUid());
   if (list != null) {
    for (Order order2 : list) {
     int pid = order2.getPid();
     passenger = orderService.findNameByUid(pid);
     order2.setPassenger(passenger);
     // 将订单信息存入缓存
     Order order0 = JedisUtil.get("order-" + user.getUid() + order2.getOid());
     if (order0 == null) {// 缓存中没有
      JedisUtil.put("order-" + user.getUid() + order2.getOid(), order2);
     } else {// 缓存中有
      JedisUtil.remove("order-" + user.getUid() + order2.getOid());
      JedisUtil.put("order-" + user.getUid() + "-" + order2.getOid(), order2);
     }
    }
   }
   request.setAttribute("orderList", list);
  } catch (Exception e) {
   LOG.info("orderController.orderListUi e:" + e);
  }
  return "WEB-INF/jsp/main/orderList.jsp";
 }

 /*
  * 根据订单状态查询订单,异步加载
  */
 @RequestMapping("/findOrderByOtype.action")
 @ResponseBody
 public List<Order> findOrderByOtype(int otype, HttpSession session) {
  User user = (User) session.getAttribute("loginUser");
  List<Order> orders = new ArrayList<>();
  try {
   orders = orderService.findOrderByOtype(otype);
   if (orders != null) {
    Iterator<Order> it = orders.iterator();
    while (it.hasNext()) {
     Order orderTemp = it.next();
     // 从缓存中获取
     Order order0 = JedisUtil.get("order-" + user.getUid() + "-" + orderTemp.getOid());
     if (order0 == null) {// 缓存中没有
      it.remove();
     }
    }
   }
  } catch (Exception e) {
   LOG.info("orderController.findOrderByOtype e:" + e);
  }
  return orders;
 }

 /*
  * 取消订票
  */
 @RequestMapping("/deleteOrder")
 @ResponseBody
 public ModelAndView deleteOrder(int oid) {
  ModelAndView modelAndView = new ModelAndView();
  try {
   orderService.deleteOrderByOid(oid);
   modelAndView.addObject("msg", "取消订单成功!");
  } catch (Exception e) {
   LOG.info("orderController.deleteOrder e:" + e);
  }
  modelAndView.setViewName("forward:orderListUi.action");
  return modelAndView;
 }

 // 跳转到订单详情页--用户购票下单
 @RequestMapping("/toOrderInfo.action")
 public ModelAndView toOrderInfo(String tid, String sname1, String sname2, int type, String startDay) {
  ModelAndView modelAndView = new ModelAndView();
  Train train = null;
  if (type == 1) {// 直达车
   List<Train> trainList = JedisUtil.get(sname1 + "-" + sname2 + "直达");// 从缓存中获取车辆信息
   if (trainList != null) {
    for (Train traint : trainList) {
     if (tid.equals(traint.getTid())) {
      train = traint;
      break;
     }
    }
   }
  } else if (type == 2) {// 换乘
   // 从缓存中获取车辆信息
   List<Map<String, Object>> listMap = JedisUtil.get(sname1 + "-" + sname2 + "换乘");
   if (listMap != null) {
    for (Map<String, Object> map : listMap) {
     String saname = (String) map.get("changeState");
     Train train1 = (Train) map.get("train1");
     Train train2 = (Train) map.get("train2");
     if (tid.equals(train1.getTid())) {// 买train1的票
      train = train1;
      sname2 = saname;
      break;
     } else if (tid.equals(train2.getTid())) {// 买train2的票
      train = train2;
      sname1 = saname;
      break;
     }
    }
   }
  } else {
   modelAndView.setViewName("forword:404");
   return modelAndView;
  }
  modelAndView.addObject("train", train);
  modelAndView.addObject("sname1", sname1);
  modelAndView.addObject("sname2", sname2);
  modelAndView.addObject("startDay", startDay);
  modelAndView.setViewName("WEB-INF/jsp/main/orderInfo.jsp");
  return modelAndView;
 }

}

这篇关于java+mysql+mvc家庭理财管理系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/258028

相关文章

Java对象和JSON字符串之间的转换方法(全网最清晰)

《Java对象和JSON字符串之间的转换方法(全网最清晰)》:本文主要介绍如何在Java中使用Jackson库将对象转换为JSON字符串,并提供了一个简单的工具类示例,该工具类支持基本的转换功能,... 目录前言1. 引入 Jackson 依赖2. 创建 jsON 工具类3. 使用示例转换 Java 对象为

SpringBoot快速接入OpenAI大模型的方法(JDK8)

《SpringBoot快速接入OpenAI大模型的方法(JDK8)》本文介绍了如何使用AI4J快速接入OpenAI大模型,并展示了如何实现流式与非流式的输出,以及对函数调用的使用,AI4J支持JDK8... 目录使用AI4J快速接入OpenAI大模型介绍AI4J-github快速使用创建SpringBoot

Java中的Cursor使用详解

《Java中的Cursor使用详解》本文介绍了Java中的Cursor接口及其在大数据集处理中的优势,包括逐行读取、分页处理、流控制、动态改变查询、并发控制和减少网络流量等,感兴趣的朋友一起看看吧... 最近看代码,有一段代码涉及到Cursor,感觉写法挺有意思的。注意是Cursor,而不是Consumer

解决java.lang.NullPointerException问题(空指针异常)

《解决java.lang.NullPointerException问题(空指针异常)》本文详细介绍了Java中的NullPointerException异常及其常见原因,包括对象引用为null、数组元... 目录Java.lang.NullPointerException(空指针异常)NullPointer

javaScript在表单提交时获取表单数据的示例代码

《javaScript在表单提交时获取表单数据的示例代码》本文介绍了五种在JavaScript中获取表单数据的方法:使用FormData对象、手动提取表单数据、使用querySelector获取单个字... 方法 1:使用 FormData 对象FormData 是一个方便的内置对象,用于获取表单中的键值

前端知识点之Javascript选择输入框confirm用法

《前端知识点之Javascript选择输入框confirm用法》:本文主要介绍JavaScript中的confirm方法的基本用法、功能特点、注意事项及常见用途,文中通过代码介绍的非常详细,对大家... 目录1. 基本用法2. 功能特点①阻塞行为:confirm 对话框会阻塞脚本的执行,直到用户作出选择。②

SpringBoot项目注入 traceId 追踪整个请求的日志链路(过程详解)

《SpringBoot项目注入traceId追踪整个请求的日志链路(过程详解)》本文介绍了如何在单体SpringBoot项目中通过手动实现过滤器或拦截器来注入traceId,以追踪整个请求的日志链... SpringBoot项目注入 traceId 来追踪整个请求的日志链路,有了 traceId, 我们在排

Java实战之利用POI生成Excel图表

《Java实战之利用POI生成Excel图表》ApachePOI是Java生态中处理Office文档的核心工具,这篇文章主要为大家详细介绍了如何在Excel中创建折线图,柱状图,饼图等常见图表,需要的... 目录一、环境配置与依赖管理二、数据源准备与工作表构建三、图表生成核心步骤1. 折线图(Line Ch

Spring Boot 3 整合 Spring Cloud Gateway实践过程

《SpringBoot3整合SpringCloudGateway实践过程》本文介绍了如何使用SpringCloudAlibaba2023.0.0.0版本构建一个微服务网关,包括统一路由、限... 目录引子为什么需要微服务网关实践1.统一路由2.限流防刷3.登录鉴权小结引子当前微服务架构已成为中大型系统的标

MySQL zip安装包配置教程

《MySQLzip安装包配置教程》这篇文章详细介绍了如何使用zip安装包在Windows11上安装MySQL8.0,包括下载、解压、配置环境变量、初始化数据库、安装服务以及更改密码等步骤,感兴趣的朋... 目录mysql zip安装包配置教程1、下载zip安装包:2、安装2.1 解压zip包到安装目录2.2