基于ssm 体育器材租借管理系统设计与实现

0 阅读15分钟

博主介绍:翰文编程 专注于Java(springboot ssm 等开发框架) vue  .net  php phython node.js    uniapp 微信小程序 等诸多技术领域和课设项目实战、企业信息化系统建设,从业十八余年开发设计教学工作
☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟
我的博客空间发布了2000+题目解决方法案例  方便大家学习使用
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人
文末下方有源码获取地址

高校体育器材租借系统包含以下内容:

(1)系统管理:主要对用户进行管理,可以对用户设置不同权限,添加删除用户,修改密码,用户管理等。

(2)器材管理:主要对器材的信息,预约租借,归还统计等业务进行管理。包含添加器材类别、数量或修改器材信息、库存管理、网上预约、器材归还认证等。

(3)租用归还:对器材的租用归还信息进行统计。包括器材租用记录统计,器材归还记录统计。

(4)报表生成:用来定期查看或打印器材信息,以及器材的租用信息。

(5)帮助:帮助师生进行器材的查询,预约租借。   

体育器材租借管理系统主要设计了用户管理、公告管理、器材管理、租借管理等功能,满足用户在网站上面进行课程管理的信息浏览与查看,具体功能模块图如4.1所示:

​编辑

图4.1 系统总体模块图

4.2 数据库层的设计

数据设计方案:采用DBMS方案——mysql . mysql关系数据库引擎支持当今苛刻的数据处理环境所需的功能。数据库引擎充分保护数据完整性,同时将管理上千个并发修改数据库的用户的开销减到最小。

4.2.1 概念模型设计

将需求分析得到的用户需求抽象为信息结构,即概念模型的过程就是概念结构设计,它是整个数据库设计的关键。

(2)系统中实体E-R图

用户信息实体,主要包括 用户编号,用户名,密码,姓名,权限,联系电话,联系地址 等信息实体。如图4.2所示:

​编辑

图4.2 用户实体属性图

公告信息实体,主要包括 公告编号,标题,内容,发布时间 等信息实体。如图4.3所示:

​编辑

图4.3 公告实体属性图

器材类别信息实体,主要包括 器材类别编号,类别 等信息实体。如图4.5所示:

​编辑

图4.5 器材类别实体属性图

器材信息实体,主要包括 器材编号,器材名称,类别,介绍,库存数量,说明 等信息实体。如图4.6所示:

​编辑

图4.6器材实体属性图

   租借信息实体,主要包括 租借编号,租借流水,器材,用户,预约时间,状态,借用时间,数量 等信息实体。如图4.7所示:

​编辑

图4.7 租借实体属性图

归还认证信息实体,主要包括 归还认证编号,器材,租借,数量,状态,归还时间,用户 等信息实体。如图4.7所示:

​编辑

图4.7 归还认证实体属性图

**4. **2 .2 ****关系模式设计

一个实体型转换为一个关系模式的集合。实体的属性就是关系的属性,实体的码就是关系的码。

对于实体间的联系则有以下不同的情况:

在体育器材租借管理系统中,实体有用户实体,公告实体,器材类别实体,器材实体,租借实体,归还认证实体等实体,他们之间的关系如图4.13所示:

​编辑

图4.13 实体之间关系图

********4.3 本章小结

本章主要介绍的内容是总体设计或者概要设计,介绍了体育器材租借管理系统的设计,主要是在架构设计、总体模块设计和数据库设计的方面介绍的,为进一步的详细设计做准备。

第5章  详细设计

详细设计阶段的任务就是把在总体设计阶段提出的比较抽象概括的解决问题的方法具体化,也就是“应该怎样具体地实现这个系统”。在本阶段将包括数据库的设计和每个模块的详细设计,确定实现模块功能所需要的算法和数据结构。

5.1 后台设计

5.1.1 角色权限设计

普通用户或管理员输入自己的用户账号、密码,通过身份验证后可以进入相应的管理界面首页。管理员管理页面分为用户信息管理与查看,公告信息管理与查看,器材类别信息管理与查看,器材信息管理与查看,租借信息管理与查看,归还认证信息管理与查看模块。

5.1.2 角色验证设计

当用户需要登录的时候,需要有响应的页面来实现这一功能。登录界面是用来支持用户进行登录功能操作的界面,当在界面中输入普通用户的用户名、密码,就可以通过身份验证进入该系统。 登录界面需要让用户输入用户名、密码。如果是错误登录信息造成的还要显示错误信息。否则,当信息输入和权限选择正确时,将分别将用户导入各自对应的操作界面首页。 用户分为普通用户和管理员两种。每种用户具有不同的权限,能完成不同的操作。普通用户具有查看信息权限夹功能等。管理员用户是系统的最高权限具有系统所有功能的操作。

管理员登录信息验证界面是非常重要的一部分,它接收登录表单提交的信息,并在用户信息表里检验是否存在对应的用户,和判断用户的类型以便获得相应的权限。

5.2 数据库设计

5.2.1 逻辑结构设计

1 用户( 用户编号,用户名,密码,姓名,权限,联系电话,联系地址 )

2 公告( 公告编号,标题,内容,发布时间 )

3 器材类别( 器材类别编号,类别 )

4 器材( 器材编号,器材名称,类别,介绍,库存数量,说明 )

5 租借( 租借编号,租借流水,器材,用户,预约时间,状态,借用时间,数量 )

6 归还认证( 归还认证编号,器材,租借,数量,状态,归还时间,用户 )

  

5.2.2 物理结构设计

由各个关系模式和根据需求分析阶段数据字典的数据项描述,给出各数据表结构。

(1)用户信息表如表5.1所示:

表5.1 用户信息表

序号字段名称数据类型长度主键描述
1yhidINTEGER11用户编号
2yhmVARCHAR40用户名
3mmVARCHAR40密码
4xmVARCHAR40姓名
5qxVARCHAR40权限
6lxdhVARCHAR40联系电话
7lxdzVARCHAR40联系地址

(2)用户如表5.2所示:

表5.2 用户表

序号字段名称数据类型长度主键描述
1ggidINTEGER11公告编号
2btVARCHAR40标题
3nrVARCHAR40内容
4fbsjVARCHAR40发布时间

(3)器材类别表如表5.3所示:

表5.3 器材类别表

序号字段名称数据类型长度主键描述
1qclbidINTEGER11器材类别编号
2lbVARCHAR40类别

(4)器材表如表5.4所示:

表5.4 器材信息表

序号字段名称数据类型长度主键描述
1qcidINTEGER11器材编号
2qcmcVARCHAR40器材名称
3lbVARCHAR40类别
4jsVARCHAR40介绍
5kcslVARCHAR40库存数量
6smVARCHAR40说明

(5)租借表如表5.5所示:

表5.5 租借表

序号字段名称数据类型长度主键描述
1zjidINTEGER11租借编号
2zjlsVARCHAR40租借流水
3qcVARCHAR40器材
4yhVARCHAR40用户
5yysjVARCHAR40预约时间
6ztVARCHAR40状态
7jysjVARCHAR40借用时间
8slVARCHAR40数量

(6)归还认证表如表5.6所示:

表5.6归还认证表

序号字段名称数据类型长度主键描述
1ghrzidINTEGER11归还认证编号
2qcVARCHAR40器材
3zjVARCHAR40租借
4slVARCHAR40数量
5ztVARCHAR40状态
6ghsjVARCHAR40归还时间
7yhVARCHAR40用户

5.3 本章小结

本章主要是在上一章的总体设计的基础之上对系统进行详细设计,主要分为两个方面来设计,分别为后台设计和数据库设计,在后台设计方面,主要是设计的系统的权限分配,角色登录的验证;在数据库方面是设计系统的物理结构的设计和逻辑结构的设计。

第6章 系统的实施

系统实施是指将系统设计阶段的结果在计算机上实现,将原来纸面上的·类似于设计图式的新系统方案转换成可执行的应用软件。实施阶段的主要活动:物理系统的建立,程序的编制,系统调试,系统切换,系统维护,系统评价。

6.1 登录模块界面

登录系统首页,出现用户名、密码的输入框,填写用户名和密码点击【提交】按钮,即可登录;具体的登录页面如图6.1所示:

​编辑

图6.2 登录界面图

6.2 用户管理 界面

​编辑

该功能用于实现对系统用户信息的管理。可以添加、删除和更改用户信息,以及用户信息列表展现,在添加用户信息时,系统会自动查询系统中用户表中的用户编号字段,系统自动将用户表中最大值加1作为该用户表用户记录的用户编号,同时将用户编号,用户名,密码,姓名,权限,联系电话,联系地址 信息添加到用户信息表中;在删除一条用户记录时,先选中一条用户记录,将该条用户记录中的用户编号作为查询条件在用户信息表中进行查询,弹出“确定要删除吗?”的对话框,若是,则执行删除操作,否则退出删除操作;在更改用户记录时,先选中一条用户记录,将用户信息显示在相应的修改页面中,然后更改后保存到用户信息表中;查看用户信息记录时,选中要查看的用户记录,系统根据用户选择用户信息,在详细页面显示用户信息   

6.3 器材 管理界面

​编辑

该功能用于实现对系统器材信息的管理。可以添加、删除和更改器材信息,以及器材信息列表展现,在添加器材信息时,系统会自动查询系统中器材表中的器材编号字段,系统自动将器材表中最大值加1作为该器材表器材记录的器材编号,同时将器材编号,器材名称,类别,介绍,库存数量,说明 信息添加到器材信息表中;在删除一条器材记录时,先选中一条器材记录,将该条器材记录中的器材编号作为查询条件在器材信息表中进行查询,弹出“确定要删除吗?”的对话框,若是,则执行删除操作,否则退出删除操作;在更改器材记录时,先选中一条器材记录,将器材信息显示在相应的修改页面中,然后更改后保存到器材信息表中;查看器材信息记录时,选中要查看的器材记录,系统根据用户选择器材信息,在详细页面显示器材信息     

package com.action;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import com.bean.*;
import com.dao.*;
import com.util.DBO;
@Controller
@RequestMapping(value="/qicai")
public class qicaiAction {
	/**
	 * 自动注入业务逻辑层,注入方式使用了注解自动注入
	 */

	@Resource qicaiDao qicaidao;
	@RequestMapping(value="/addPage")
	public String addPage(qicai qicai,HttpServletRequest request){
		Map<String,Object> map= new HashMap<String,Object>();
		
		System.out.println("addPageok");
		return "qicai/qicaiadd";
	}
	
	@RequestMapping(value="/add")
	public String add(qicai qicai,HttpServletRequest request){
		Map<String,Object> map= new HashMap<String,Object>();
		//String name=(String)request.getParameter("name");

		map.put("qcid", qicai.getQcid());//器材编号

		map.put("qcmc", qicai.getQcmc());//器材名称

		map.put("lb", qicai.getLb());//类别

		map.put("js", qicai.getJs());//介绍

		map.put("kcsl", qicai.getKcsl());//库存数量

		map.put("sm", qicai.getSm());//说明



		String qcid=(String)qicai.getQcid();//器材编号

		String qcmc=(String)qicai.getQcmc();//器材名称

		String lb=(String)qicai.getLb();//类别

		String js=(String)qicai.getJs();//介绍

		String kcsl=(String)qicai.getKcsl();//库存数量

		String sm=(String)qicai.getSm();//说明
		
		int num=0;
		String sql="select count(1) as num from qicai where qcmc='"+qcmc+"'";
		ResultSet rs=null;
		DBO db=new DBO();
		try{
			rs=db.query(sql);
			if(rs.next()){
				num=rs.getInt("num");
			}
			if(num>0){
				request.setAttribute("msg", "<script>alert('添加失败、器材名称重复');</script>");
			}else{

				
				qicaidao.save(map);
				
				
				request.setAttribute("msg", "<script>alert('添加成功');</script>");
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		
		

		System.out.println("addok");
		return "qicai/qicaiadd";
	}
	
	/**删除 
	 * 
	 */
	@RequestMapping(value="/del")
	public String  del(Integer id,HttpServletRequest request,Map<String,Object> map){
	//	Map<String,Object> map= new HashMap<String,Object>();
		String a=(String)request.getParameter("keyid");
		id=Integer.parseInt(a);
		request.setAttribute("msg", "<script>alert('删除成功');</script>");
		qicaidao.del(id);
		return selectall(null,map,request);
	}
	/**
	 * 修改qicai信息
	 */
	@RequestMapping(value="/update")
	public String update(qicai qicai,HttpServletRequest request,Map<String,Object> map1){
		Map<String,Object> map= new HashMap<String,Object>();
		map.put("qcid", qicai.getQcid());//器材编号

		map.put("qcmc", qicai.getQcmc());//器材名称

		map.put("lb", qicai.getLb());//类别

		map.put("js", qicai.getJs());//介绍

		map.put("kcsl", qicai.getKcsl());//库存数量

		map.put("sm", qicai.getSm());//说明



		String qcid=(String)qicai.getQcid();//器材编号

		String qcmc=(String)qicai.getQcmc();//器材名称

		String lb=(String)qicai.getLb();//类别

		String js=(String)qicai.getJs();//介绍

		String kcsl=(String)qicai.getKcsl();//库存数量

		String sm=(String)qicai.getSm();//说明

		request.setAttribute("msg", "<script>alert('修改成功');</script>");
		qicaidao.update(map);
		return selectall(null,map1,request);
	}
	/**
	 * 查询qicai信息
	 */
	@RequestMapping(value="/modify")
	public String modify(Integer id,Map<String,Object> map,HttpServletRequest request){
		String keyid=(String)request.getParameter("keyid");
		List<Map<String,Object>> list= new  ArrayList<Map<String,Object>>();
		list=qicaidao.select(Integer.parseInt(keyid));
		request.setAttribute("qcid", list.get(0).get("qcid"));//器材编号

		request.setAttribute("qcmc", list.get(0).get("qcmc"));//器材名称

		request.setAttribute("lb", list.get(0).get("lb"));//类别

		request.setAttribute("js", list.get(0).get("js"));//介绍

		request.setAttribute("kcsl", list.get(0).get("kcsl"));//库存数量

		request.setAttribute("sm", list.get(0).get("sm"));//说明

		
		return "qicai/qicaimodify";
	}
	
	@RequestMapping(value="/detail")
	public String detail(Integer id,Map<String,Object> map,HttpServletRequest request){
		String keyid=(String)request.getParameter("keyid");
		List<Map<String,Object>> list= new  ArrayList<Map<String,Object>>();
		list=qicaidao.select(Integer.parseInt(keyid));
		request.setAttribute("qcid", list.get(0).get("qcid"));//器材编号

		request.setAttribute("qcmc", list.get(0).get("qcmc"));//器材名称

		request.setAttribute("lb", list.get(0).get("lb"));//类别

		request.setAttribute("js", list.get(0).get("js"));//介绍

		request.setAttribute("kcsl", list.get(0).get("kcsl"));//库存数量

		request.setAttribute("sm", list.get(0).get("sm"));//说明

		return "qicai/qicaidetail";
	}
	
	/**
	 * 查询qicai信息
	 */
	@RequestMapping(value="/selectall")
	public String selectall(Integer id,Map<String,Object> map,HttpServletRequest request){
		List<Map<String,Object>> list= new  ArrayList<Map<String,Object>>();
	Map<String,Object> map1= new HashMap<String,Object>();

	String qcid=(String)request.getParameter("qcid");//器材编号
	if(qcid!=null&&!qcid.equals("")){
	map1.put("qcid",qcid);//器材编号
	}
	String qcmc=(String)request.getParameter("qcmc");//器材名称
	if(qcmc!=null&&!qcmc.equals("")){
	map1.put("qcmc",qcmc);//器材名称
	}
	String lb=(String)request.getParameter("lb");//类别
	if(lb!=null&&!lb.equals("")){
	map1.put("lb",lb);//类别
	}
	String js=(String)request.getParameter("js");//介绍
	if(js!=null&&!js.equals("")){
	map1.put("js",js);//介绍
	}
	String kcsl=(String)request.getParameter("kcsl");//库存数量
	if(kcsl!=null&&!kcsl.equals("")){
	map1.put("kcsl",kcsl);//库存数量
	}
	String sm=(String)request.getParameter("sm");//说明
	if(sm!=null&&!sm.equals("")){
	map1.put("sm",sm);//说明
	}

		list=qicaidao.selectAll(map1);
		System.out.println("listsize="+list.size());
		
		map.put("mylist", list);
		return "qicai/qicailist";
	}
	/**
	 * 查询qicai信息
	 */
	@RequestMapping(value="/list")
	public String list(Integer id,Map<String,Object> map,HttpServletRequest request){
		List<Map<String,Object>> list= new  ArrayList<Map<String,Object>>();
	Map<String,Object> map1= new HashMap<String,Object>();

	String qcid=(String)request.getParameter("qcid");//器材编号
	if(qcid!=null&&!qcid.equals("")){
	map1.put("qcid",qcid);//器材编号
	}
	String qcmc=(String)request.getParameter("qcmc");//器材名称
	if(qcmc!=null&&!qcmc.equals("")){
	map1.put("qcmc",qcmc);//器材名称
	}
	String lb=(String)request.getParameter("lb");//类别
	if(lb!=null&&!lb.equals("")){
	map1.put("lb",lb);//类别
	}
	String js=(String)request.getParameter("js");//介绍
	if(js!=null&&!js.equals("")){
	map1.put("js",js);//介绍
	}
	String kcsl=(String)request.getParameter("kcsl");//库存数量
	if(kcsl!=null&&!kcsl.equals("")){
	map1.put("kcsl",kcsl);//库存数量
	}
	String sm=(String)request.getParameter("sm");//说明
	if(sm!=null&&!sm.equals("")){
	map1.put("sm",sm);//说明
	}

		list=qicaidao.selectAll(map1);
		System.out.println("listsize="+list.size());
		
		map.put("mylist", list);
		return "qicai/list";
	}
}

6.4 租借 界面

​编辑

该功能用于实现对系统租借信息的管理。可以添加、删除和更改租借信息,以及租借信息列表展现,在添加租借信息时,系统会自动查询系统中租借表中的租借编号字段,系统自动将租借表中最大值加1作为该租借表租借记录的租借编号,同时将租借编号,租借流水,器材,用户,预约时间,状态,借用时间,数量 信息添加到租借信息表中;在删除一条租借记录时,先选中一条租借记录,将该条租借记录中的租借编号作为查询条件在租借信息表中进行查询,弹出“确定要删除吗?”的对话框,若是,则执行删除操作,否则退出删除操作;在更改租借记录时,先选中一条租借记录,将租借信息显示在相应的修改页面中,然后更改后保存到租借信息表中;查看租借信息记录时,选中要查看的租借记录,系统根据用户选择租借信息,在详细页面显示租借信息

   

6.5 ****归还认证 管理 界面

​编辑

该功能用于实现对系统归还认证信息的管理。可以添加、删除和更改归还认证信息,以及归还认证信息列表展现,在添加归还认证信息时,系统会自动查询系统中归还认证表中的归还认证编号字段,系统自动将归还认证表中最大值加1作为该归还认证表归还认证记录的归还认证编号,同时将归还认证编号,器材,租借,数量,状态,归还时间,用户 信息添加到归还认证信息表中;在删除一条归还认证记录时,先选中一条归还认证记录,将该条归还认证记录中的归还认证编号作为查询条件在归还认证信息表中进行查询,弹出“确定要删除吗?”的对话框,若是,则执行删除操作,否则退出删除操作;在更改归还认证记录时,先选中一条归还认证记录,将归还认证信息显示在相应的修改页面中,然后更改后保存到归还认证信息表中;查看归还认证信息记录时,选中要查看的归还认证记录,系统根据用户选择归还认证信息,在详细页面显示归还认证信息