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

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

SQL中的外键约束

外键约束用于表示两张表中的指标连接关系。外键约束的作用主要有以下三点: 1.确保子表中的某个字段(外键)只能引用父表中的有效记录2.主表中的列被删除时,子表中的关联列也会被删除3.主表中的列更新时,子表中的关联元素也会被更新 子表中的元素指向主表 以下是一个外键约束的实例展示

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

如何去写一手好SQL

MySQL性能 最大数据量 抛开数据量和并发数,谈性能都是耍流氓。MySQL没有限制单表最大记录数,它取决于操作系统对文件大小的限制。 《阿里巴巴Java开发手册》提出单表行数超过500万行或者单表容量超过2GB,才推荐分库分表。性能由综合因素决定,抛开业务复杂度,影响程度依次是硬件配置、MySQL配置、数据表设计、索引优化。500万这个值仅供参考,并非铁律。 博主曾经操作过超过4亿行数据