失物招领|基于Web的校园失物招领系统的设计与实现

Posted 编程千纸鹤

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了失物招领|基于Web的校园失物招领系统的设计与实现相关的知识,希望对你有一定的参考价值。

作者主页:编程千纸鹤

作者简介:Java、前端、Pythone开发多年,做过高程,项目经理,架构师

主要内容:Java项目开发、毕业设计开发、面试技术整理、最新技术分享

收藏点赞不迷路  关注作者有好处

项目编号:BS-XX-158

引言:

随着互联网的飞速发展,学校也进入了信息化时代。校园中大学生丢失物品的现象较为普遍,但是由于没有一个良好的信息交流平台,使得失主不能及时甚至找不到失物,给生活带来了极大的不便。通过互联网为在校师生搭建一个发布信息的平台,可以有效帮助他们找回失物。

校园失物招领系统基于Web技术进行开发,采用mysql数据库存储数据,主要包括用户和管理员两大模块:用户模块具有注册、登录、发布寻物信息、发布招领信息、浏览、留言板、个人信息管理等功能;管理员模块可以对用户信息、寻物信息、招领信息、个人信息和管理员信息进行管理。

一,项目简介

传统的校园失物招领系统都是通过纸笔记录信息,经过一段时间后,累积的数据达到一定程度,再次查询的效率就会非常低,并且很容易造成数据的损坏和丢失。随着社会的进步,绿色环保成为一种主流,越来越多的公司已经放弃了使用纸笔记录信息,开始通过互联网发送并存储各种信息[1]。这样做不仅大大节约了成本,还省出了更多的时间和精力去做其他的工作。通过设计校园失物招领系统,用户可以使用互联网进入系统,在系统内发布或查看各种物品的信息。这样,通过各个用户之间的信息交流,可以方便快捷的找到丢失物品,并且还可以节省人力资源,也符合现代绿色环保的理念。因此,设计校园失物招领系统势在必行。

通过对系统的功能进行需求分析,应具备以下功能:

(1)游客在使用本系统之前,必须注册一个账号才能进入本系统。

(2)管理员可以使用相应的权限对普通用户进行管理。

(3)实现对失物和拾物两个模块的管理功能。

(4)能够实现用户对失物进行的搜索查找功能。

(5)实现用户对留言板这块的管理功能。

(6)对于个人信息可以及时完成修改或更新。

(7)实现在登录时,能够出现登录成功或失败的界面。

(8)实现用户的退出功能。

(9)管理员对于系统能够简单维护,方便用户实现操作的功能。

任何系统在设计的时候都需要构建数据库,并且在构建的时候,需要根据系统的需求,明确目的,最后在数据库内进行合理的设计,使其各个功能能够一一对应,这样才能有效的对数据进行存储,保证系统的正常运行。

基于Web的校园失物招领系统使用的是MySQL数据库,其中包括个人信息表、失物表、拾物表、留言表和分类表。这五张表具体如下所示。

(1)分类表主要是记录了各类物品的存放信息,如表3-1所示。

表3-1 分类表结构

序列号

字段名称

字段类型

长度

是否主键

说明

1

classify_id

int

11

id自增

2

Classify_name

varchar

255

分类名称

(2)个人信息表主要记录了用户相关的个人信息,如表3-2所示。

表3-2 个人信息表结构

序列号

字段名称

字段类型

长度

是否主键

说明

1

userId

int

11

id自增

2

user_name

varchar

255

用户名

3

user_password

varchar

255

密码

4

user_real_name

varchar

255

真实姓名

5

email

varchar

255

邮箱

6

tel

int

11

电话

7

role

int

11

用户身份

8

academy

varchar

255

院系

(3)失物表主要记录了用户丢失的物品的相关信息,如表3-3所示。

表3-3 失物表结构

序列号

字段名称

字段类型

长度

是否主键

说明

1

lost_id

int

11

id自增

2

lost_name

varchar

255

物品名称

3

lost_time

varchar

255

时间

4

describe

varchar

255

描述

5

place

varchar

255

地点

6

sort

int

11

物品分类

7

user_id

int

11

用户

(4)拾物表主要记录了各种被捡到的物品的相关信息,如表3-4所示。

表3-4 拾物表结构

序列号

字段名称

字段类型

长度

是否主键

说明

1

found_id

int

11

id自增

2

found_goods_name

varchar

255

物品名称

3

time

varchar

255

时间

4

describe

varchar

255

描述

5

place

varchar

255

地点

6

sort

int

11

物品分类

7

user_id

int

11

用户

(5)留言表主要记录了用户的各种留言信息,如表3-5所示。

表3-5 留言表结构

序列号

字段名称

字段类型

长度

是否主键

说明

1

id

int

11

Id自增

2

user_id

varchar

255

用户

3

content

varchar

255

内容

二,环境介绍

语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

后台开发技术:SSM框架

前台开发技术:JSP+JQUERY+CSS+JS

三,系统展示

4.1 前台功能模块设计实现

4.1.1 用户注册模块

用户来到系统界面,点击注册按钮,便会跳转到注册界面,在注册的时候需要输入真实姓名、登录密码、手机号、用户名、邮箱、院校等一些基本信息,其中手机号必须是11位,邮箱格式必须正确,将这些信息输入完成后,点击注册便会注册成功,然后跳转到登录界面进行登录。用户在进行注册时的注册界面如图4-1所示。

图4-1 用户注册

4.1.2 用户登录模块

用户来到登录界面后,可以根据注册的用户名和密码进行登录操作,并且需要输入正确的验证码才能登录成功,若验证码复杂不容易识别,可以直接点击图片更换新的验证码。在登录成功后,系统会根据登录的账号自动识别用户或管理员的身份,从而可以进入到不同的界面。

用户在进行登录时的界面如图4-2所示。

图4-2 用户登录界面

4.1.3 浏览模块

4.1.3.1 寻物信息浏览

用户进入首页后,点击“浏览”按钮,选择“寻物信息浏览”,会出现各种物品的丢失信息,包括物品的类别、物品名称、丢失时间、丢失地点、丢失人信息和物品的描述,其中如果用户之前发布过寻物信息,也会显示在上面,并且点击“编辑”按钮后可以跳转到添加寻物信息界面完成寻物信息的更新,点击“更新寻物”按钮就可以完成寻物信息的更新,对于过期的信息,也可以自行删除。

用于浏览物品丢失信息的界面如图4-3所示。

图4-3 丢失信息浏览界面

更新寻物信息的界面如图4-4所示。

图4-4 更新寻物信息界面

4.1.3.2 招领信息浏览

用户进入首页后,点击“浏览”按钮,选择“招领信息浏览”,会出现各种物品的招领信息,包括物品的类别、招领物品、发现时间、发现的地点、发现的用户和物品的描述,如果用户之前捡到过失物,并且在上面发布了招领信息,也会出现在上面,如果失主找回了自己的失物,在删除失物信息之后,招领的信息便会清除。也可以在首页上方的搜索框输入失物的关键字对物品进行搜索,如果有该物品,则会显示该物品的信息,如果没有,则不会显示。

用于浏览招领信息的界面如图4-5所示。

图4-5 招领信息浏览界面

使用搜索功能的搜索结果界面如图4-6所示。

图4-6 搜索结果界面

4.1.4 发布寻物信息模块

用户可以在首页点击“发布寻物信息”按钮,进入到添加寻物信息界面,可以在此添加丢失物品的信息,包括选择物品的类别、添加丢失时间、丢失的物品描述、物品的名称以及丢失物品的地点,完成这些信息的填写后,点击“添加丢失”按钮便可以成功添加失物信息,如图4-7所示。

图4-7 添加寻物信息界面

4.1.5 发布招领信息模块

用户在首页通过点击“发布招领信息”按钮,进入到添加招领信息界面,可以在此添加捡到的物品信息,包括选择物品的类型、物品的名称、发现时间、发现地点以及物品描述,完成之后点击“添加招领”按钮便可以成功添加招领信息,其他用户在使用系统的时候也能看到这些信息,如图4-8所示。

图4-8 添加招领信息界面

4.1.6 留言板模块

用户在首页可以点击“留言板”按钮,进入到留言板模块,在这里用户可以随时发表自己的留言信息。用户只需要在留言框内输入留言内容,点击“发送”按钮,保存的留言信息便会显示在该界面,并且所有的用户都可以看到,如果感觉留言的内容不合适,可以在操作一栏点击“删除”按钮,不合适的留言内容就会被清除,如图4-9所示。

图4-9 用户留言界面

4.1.7 个人信息模块

用户在首页可以通过点击“个人信息”按钮,进入到个人信息修改界面,用户在该界面可以对自己的个人信息进行修改,包括修改用户登录名、用户密码、用户真实姓名、手机号码、邮箱以及所属院校,完成修改后,点击下方的“修改”按钮便可以完成修改,如图4-10所示。

图4-10 个人信息修改界面

4.2 管理员功能模块设计实现

4.2.1 用户信息管理模块

4.2.1.1 用户列表

管理员使用管理员账号可以进入后台管理系统,并且可以在系统的左侧点击用户信息管理,选择用户列表,可以进入用户信息概况界面,在该界面可以对用户信息进行查看和删除,对于一些利用系统来宣传不正当信息的用户,可以执行删除操作,点击“删除”按钮便可完成操作,如图4-11所示。

图4-11 用户信息界面

4.2.1.2 添加用户信息

管理员可以在后台管理系统选择用户信息管理,点击“添加用户信息”按钮便会跳转到管理员添加用户界面,在该界面管理员可以帮助用户添加信息,需要添加的用户信息包括用户登录名、用户密码、用户真实姓名、手机号码、邮箱和所属院校,所有信息写完后,点击“添加”按钮,就可以完成用户的添加,如图4-12所示。

图4-12 管理员添加用户界面

4.2.2 招领信息管理模块

4.2.2.1 招领列表

管理员可以在后台用户管理系统选择招领信息管理,点击“招领列表”按钮便可以跳转到招领信息界面,该界面包括了招领物品的类别、名称、发现的时间、物品的描述、发现的地点和发现的用户相关信息,点击操作栏中的“编辑”按钮便可以跳转到更新界面进行编辑,也可以进行删除,如图4-13所示。

图4-13 招领信息界面

4.2.2.2 添加招领信息

管理员可以在后台管理系统选择招领信息管理,点击“添加招领信息”按钮就会跳转到添加招领信息界面,在该界面可以选择添加招领物品的类别、物品的名称、发现时间、发现地点以及物品描述,完成这些信息的填写之后,点击下方的“添加招领”按钮,就可以将招领信息保存到招领列表,如图4-14所示。

图4-14 添加招领信息界面

4.2.3 寻物信息管理模块

4.2.3.1 寻物列表

管理员可以在后台管理系统选择寻物信息管理,点击“寻物列表”按钮,就会跳转到丢失信息界面,包括丢失物品的类别、物品名称、丢失时间、丢失的地点、丢失人信息和物品的描述,在操作列可以选择对物品进行编辑或删除,点击“编辑”按钮后会跳转到添加寻物信息界面,可以对物品的信息进行更新操作,如图4-15所示。

图4-15 丢失信息界面

4.2.3.2 添加寻物信息

管理员可以在后台管理系统选择寻物信息管理,点击“添加寻物信息按钮”就会跳转到添加寻物信息界面,包括选择添加物品的类型、物品名称、丢失时间、丢失地点和丢失物品的描述,所有信息填写完后点击“添加寻物”按钮就可以进行保存,如图4-16所示。

图4-16 添加寻物信息界面

4.2.4 个人信息管理模块

4.2.4.1 个人信息修改

管理员可以在后台管理系统选择个人信息管理,点击“个人信息修改”按钮,就会跳转到个人信息修改界面,包括修改用户登录名、用户密码、用户真实姓名、手机号码、邮箱和所属院校,完成修改后,点击“修改”按钮便可以将修改后的个人信息保存,如图4-17所示。

图4-17 个人信息修改界面

4.2.4.2 添加管理员

管理员在后台管理系统可以选择个人信息管理,点击“添加管理员”按钮,可以添加用户登录名、用户密码、用户真实姓名、手机号码、邮箱和所属院校,将所有的信息填写保存之后,便可以添加一位新的管理员,并且拥有管理员的所有权限,如图4-18所示。

图4-18 添加管理员界面

四,核心代码展示

package com.czmec.action;

import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.czmec.bean.FoundGoodsBean;
import com.czmec.bean.GoodsByNameBean;
import com.czmec.bean.LostGoodsBean;
import com.czmec.bean.UserBean;
import com.czmec.service.AdminService;
import com.czmec.service.FoundService;
import com.czmec.service.LostService;
import com.czmec.service.UserService;

//管理员操作
@Controller
@RequestMapping("AdminAction")
public class AdminAction 

	@Resource(name = "adminService")
	AdminService admiservice;

	@Resource(name = "lostService")
	LostService lostservice;

	@Resource(name = "foundService")
	FoundService foundservice;

	@Resource(name = "userService")
	private UserService userservice;

	@RequestMapping("adminindex")
	public String Adminindex(HttpServletRequest req) 
		List<UserBean> list = admiservice.SelectUser();
		req.setAttribute("listUser", list);
		return "/admin/UserList";
	

	@RequestMapping("test")
	public String test() 
      return "/admin/test";
	

	// 获取寻物信息列表
	/*@RequestMapping("lostlist")
	@ResponseBody
	public List<LostGoodsBean> LostList() 
		List<LostGoodsBean> list = lostservice.SelectLostGoods();
		return list;
	*/

	// 管理员添加用户
	@RequestMapping("AddUser")
	public String AddUser() 
		return "/admin/AddUser";
	

	// 管理员添加用户具体实现
	@RequestMapping("AddUserImpl")
	public String AddUserImpl(UserBean user, HttpServletRequest req) 
		user.setRole(1);
		int i = userservice.AddUser(user);
		if (i > 0) 
			req.setAttribute("message", "添加成功");
		 else 
			req.setAttribute("message", "添加失败");
		
		List<UserBean> list = admiservice.SelectUser();
		req.setAttribute("listUser", list);
		
		return "/admin/UserList";
	

	// 管理员添加管理具体实现
		@RequestMapping("AddAdminImpl")
		public String AddAdminImpl(UserBean user, HttpServletRequest req) 
			user.setRole(0);
			int i = userservice.AddUser(user);
			if (i > 0) 
				req.setAttribute("message", "添加成功");
			 else 
				req.setAttribute("message", "添加失败");
			
			List<UserBean> list = admiservice.SelectUser();
			req.setAttribute("listUser", list);
			return "/admin/UserList";
		
		
	// 管理员添加招领
	@RequestMapping("AddFound")
	public String AddFound() 
		return "/admin/AddFound";
	

	// 添加拾物列表
	@RequestMapping("AddFoundImpl")
	public String AddFoundImpl(FoundGoodsBean foundgoodsbean, HttpServletRequest req) 
		int i = foundservice.AddFoundGoods(foundgoodsbean);
		if (i > 0) 
			req.setAttribute("message", "添加成功");
		 else 
			req.setAttribute("message", "添加失败");
		
		List<FoundGoodsBean> list = foundservice.SelectFoundGoods();
		req.setAttribute("foundList", list);
		return "/admin/FoundList";
	

	// 添加一条丢物信息
	@RequestMapping("AddLost")
	public String AddLost() 
		return "/admin/AddLost";
	

	// 添加丢物列表
	@RequestMapping("AddLostImpl")
	public String AddLostImpl(LostGoodsBean losetgoodsbean, HttpServletRequest req) 
		int i = lostservice.AddLostGoods(losetgoodsbean);
		if (i > 0) 
			req.setAttribute("message", "添加成功");
		 else 
			req.setAttribute("message", "添加失败");
		
		List<LostGoodsBean> list = lostservice.SelectLostGoods();
		req.setAttribute("lostlist", list);
		return "/admin/LostList";
	

	// 管理员链接到招领列表
	@RequestMapping("FoundList")
	public String FoundList(HttpServletRequest req) 
		List<FoundGoodsBean> list = foundservice.SelectFoundGoods();
		req.setAttribute("foundList", list);
		return "/admin/FoundList";
	

	// 管理员链接到寻物列表
	@RequestMapping("LostList")
	public String LostList(HttpServletRequest req) 
		List<LostGoodsBean> list = lostservice.SelectLostGoods();
		req.setAttribute("lostlist", list);
		return "/admin/LostList";
	

	// 个人信息修改
	@RequestMapping("UpdatUser")
	public String UpdatUser(HttpSession session) 
		if (((UserBean)session.getAttribute("user")).getRole()==0) 
			return "/admin/UpdatUser";
		
		else 
			return "UpdatUser";
		
	
	// 个人信息修改
		@RequestMapping("UpdatUserImpl")
		public String UpdatUserImpl(UserBean user,HttpServletRequest req) 
		int i=userservice.UpdateUser(user);
			if (i > 0) 
				req.setAttribute("message", "修改成功");
			 else 
				req.setAttribute("message", "修改失败");
			
			return "/admin/UpdatUser";
		
	// 添加管理员
	@RequestMapping("AddAdmin")
	public String AddAdmin() 
		return "/admin/AddAdmin";
	
	
	//删除用户
	@RequestMapping("DelUser")
	public String DelUser(UserBean user,HttpServletRequest req)
		int i=userservice.DelUser(user);
		if (i > 0) 
			req.setAttribute("Dmessage", "删除成功");
		 else 
			req.setAttribute("Dmessage", "删除失败");
		
		List<UserBean> list = admiservice.SelectUser();
		req.setAttribute("listUser", list);
		return "/admin/UserList";
	
	
	//删除招领信息
		@RequestMapping("DelFoundGoods")
		public String DelFoundGoods(FoundGoodsBean foundgoodsbean,HttpServletRequest req)
			int i=foundservice.DelFoundGoods(foundgoodsbean);
			if (i > 0) 
				req.setAttribute("Dmessage", "删除成功");
			 else 
				req.setAttribute("Dmessage", "删除失败");
			
			List<FoundGoodsBean> list = foundservice.SelectFoundGoods();
			req.setAttribute("foundList", list);
			return "/admin/FoundList";
		

		//删除寻物信息
		@RequestMapping("DelLostGoods")
		public String DelLostGoods(LostGoodsBean lostgoodsbean,HttpServletRequest req)
			int i=lostservice.DelLostGoods(lostgoodsbean);
			if (i > 0) 
				req.setAttribute("Dmessage", "删除成功");
			 else 
				req.setAttribute("Dmessage", "删除失败");
			
			List<LostGoodsBean> list = lostservice.SelectLostGoods();
			req.setAttribute("lostlist", list);
			return "/admin/LostList";
		
		
		//根据物品名字模糊查询
		@RequestMapping("SelectFoundGoodsByName")
		public String SelectFoundGoodsByName(@Param("foundName")String foundName,HttpServletRequest request) throws UnsupportedEncodingException
		   foundName = java.net.URLDecoder.decode(foundName,"UTF-8"); 
		   GoodsByNameBean goodsbyNameBean=new GoodsByNameBean();
		  goodsbyNameBean.setFoundName(foundName);  
		 List<GoodsByNameBean> list=foundservice.SelectFoundGoodsByName(goodsbyNameBean);
			request.setAttribute("goodsByName", list);
			return "admin/SelectByNameList";
		
		//根据ID查询个人信息
		@RequestMapping("selectUserById")
		public String selectUserById(UserBean user,HttpServletRequest request)
			List<UserBean> list=admiservice.SelectUserById(user);
		  request.setAttribute("geren",list);
	     	return "admin/IdUser";
		
		
		//更新一条招领记录
		@RequestMapping("updatafound")
		public String UpdataFoundList(@Param("foundId")int foundId,HttpServletRequest request)
		FoundGoodsBean fBean=foundservice.SelectFoundById(foundId);
		request.setAttribute("fBean", fBean);
			return "admin/AddFound";
		
		
		//更新一条招领记录实现
		@RequestMapping("updatafoundImpl")
		public String updtafoundImpl(FoundGoodsBean foundgoodsbean,HttpServletRequest req)
			foundservice.UpdateFoundGoods(foundgoodsbean);
			List<FoundGoodsBean> list = foundservice.SelectFoundGoods();
			req.setAttribute("foundList", list);
			return "/admin/FoundList";
		
		
		
		//更新一条寻物记录
				@RequestMapping("updatalost")
				public String UpdataLostList(@Param("lostId")int lostId,HttpServletRequest request)
             LostGoodsBean lBean=lostservice.SelectLostById(lostId);
				request.setAttribute("lBean", lBean);
					return "admin/AddLost";
				
				
				//更新一条寻物实现
				@RequestMapping("updatalostImpl")
				public String updtalostImpl(LostGoodsBean lostGoodsBean,HttpServletRequest req)
					lostservice.UpdateLostGoods(lostGoodsBean);
					
					List<LostGoodsBean> list = lostservice.SelectLostGoods();
					req.setAttribute("lostlist", list);
					return "/admin/LostList";
				
		

package com.czmec.action;

import java.util.List;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.czmec.bean.WordsBean;
import com.czmec.service.WordsService;

//用户操作
@Controller
@RequestMapping("userAction")
public class UserAction 
	
	@Resource
	WordsService wordsservice;
	
	//主页面
	@RequestMapping("main")
	public String UserMain()
		return "main";
	
	
	//感恩
	@RequestMapping("WordsList")
	public String WordsList(HttpServletRequest request)
	 List<WordsBean> list=	wordsservice.SelectAllWords();
	 System.out.println(list);
	 request.setAttribute("wordslist",list);
		return "WordsList";
	
	
	//添加一条感恩信
	@RequestMapping("addWords")
	public String AddWords(WordsBean wBean,HttpServletRequest request)
		 wordsservice.AddWords(wBean);
		
		List<WordsBean> list=	wordsservice.SelectAllWords();
		 System.out.println(list);
		 request.setAttribute("wordslist",list);
			return "WordsList";
	

	
	
	//删除一条感恩信
		@RequestMapping("DelWords")
		public String DelWords(WordsBean wBean,HttpServletRequest request)
			wordsservice.DelWords(wBean);
			
			List<WordsBean> list=	wordsservice.SelectAllWords();
			 System.out.println(list);
			 request.setAttribute("wordslist",list);
				return "WordsList";
		

package com.czmec.action;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.List;
import java.util.Random;

import javax.annotation.Resource;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.czmec.bean.UserBean;
import com.czmec.service.AdminService;
import com.czmec.service.UserService;

/*
 * 用户登录action
 */
@Controller
@RequestMapping("user")
public class UserLogin 
	
	@Resource(name="adminService")
	AdminService admiservice;
	
	@Resource(name="userService")
	private UserService userservice;
	
	@RequestMapping("login")
	public String login()
		return "login";
	
	
	@RequestMapping("checkLogin")
	public String checkLogin(UserBean user,@Param("checkcode")String checkcode,HttpSession session,HttpServletRequest request)
		String piccode=(String) request.getSession().getAttribute("piccode");
		 checkcode=checkcode.toUpperCase();//全部改成大写
		if(checkcode.equals(piccode))
	        UserBean user1=userservice.login(user);
		    if(user1!=null)
			    if(user1.getRole()==0)
				session.setAttribute("countfound", admiservice.SelectCountFoundGoods());
				session.setAttribute("countlost",admiservice.SelectCountLostGoods());
				session.setAttribute("countuser", admiservice.SelectCountUser());
				session.setAttribute("user", user1);
			    List<UserBean> list=	admiservice.SelectUser();
			    session.setAttribute("listUser", list);
				return "/admin/index";
			else 
				session.setAttribute("user", user1);
				  return "index";
			
			
		
		else 
			session.setAttribute("error", "用户名或密码错误");
			 return "Error";
		
	
	else 
		request.setAttribute("image", "验证码不正确");
		 return "login";
		


	
	@RequestMapping("error")
	public String Error()
		return "Error";
	
	
	//用户注册界面
	@RequestMapping("register")
	public String register()
		return "register";
	
	
	//用户注册界面功能
		@RequestMapping("registerAction")
		public String registerAction(UserBean user,HttpServletRequest req)
			user.setRole(1);
		int i=	userservice.AddUser(user);
		if (i>0) 
			req.setAttribute("message", "注册成功");
			
			else
				req.setAttribute("message", "注册失败");
				
			
		  return "login";
		
	//用户退出系统
    @RequestMapping("out")
    public String out()
    	return "login";
    
    
    //发布寻物信息
    @RequestMapping("AddLost")
	public String Addlost()
		return "AddLost";
	
    
    //验证码的实现
    @RequestMapping("image")
    public void Image(HttpServletRequest request,HttpServletResponse response) throws IOException
    	BufferedImage bi=new BufferedImage(68,22,BufferedImage.TYPE_INT_RGB);
		Graphics g=bi.getGraphics();
		Color c=new Color(200,150,255);
		g.setColor(c);
		//背景
		g.fillRect(0, 0, 68, 22);
		
		char[] ch="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();
		//随机获取4个字符
		Random r=new Random();
		//范围数组,随机的位置
		int len=ch.length,index;
		StringBuffer  sb=new StringBuffer();
		for(int i=0;i<4;i++)
		
			
			//获取随机数
			index=r.nextInt(len);//获得一个随机的位置,一个字符
			//放在图片上
			g.setColor(new Color(r.nextInt(88),r.nextInt(188),r.nextInt(255)));//给个颜色
			//字符画在图片上,及位置
			g.drawString(ch[index]+"", (i*15)+3, 18);
			//字符保存StringBuffer
			sb.append(ch[index]);
			
		
		request.getSession().setAttribute("piccode", sb.toString());
		//输出
		ImageIO.write(bi, "JPG", response.getOutputStream());
    
    
    

五,项目总结

校园失物招领系统使得用户更加方便、有效的找回丢失物品,也使得管理者在工作的时候更加简单、轻松,通过合理的分配人力、物力资源,提高校园失物招领工作的效率和质量。

主要特点为:

①界面简洁美观,容易上手。

②硬件要求低,容易维护。

基于Java+SpringMVC+vue+element实现前后端分离校园失物招领系统详细设计

 博主介绍公司项目主程、全网粉丝10W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,CSDN博客之星TOP100、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业设计

公众号java奥斯卡  简历模板、学习资料、面试题库等都给你💪

🍅文末获取源码联系🍅

🍅CSDN官方推荐10W+JAVA技术人文章发布打卡社区🍅

前言介绍:

        随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。

        校园失物招领系统,主要的模块包括首页、个人中心、公告信息管理、用户管理、物品类别管理、失物信息管理、招领信息管理、留言板管理、交流论坛、系统管理等功能。系统中管理员主要是为了安全有效地存储和管理各类信息,还可以对系统进行管理与更新维护等操作,并且对后台有相应的操作权限。

        要想实现校园失物招领系统的各项功能,需要后台数据库的大力支持。管理员验证注册信息,收集的信息,并由此分析得出的关联信息等大量的数据都由数据库管理。本文中数据库服务器端采用了Mysql作为后台数据库,使Web与数据库紧密联系起来。在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。

        本系统的开发使获取校园失物招领系统信息能够更加方便快捷,同时也使校园失物招领系统管理信息变的更加系统化、有序化。系统界面较友好,易于操作。

系统设计:

主要功能设计: 首页、个人中心、公告信息管理、用户管理、物品类别管理、失物信息管理、招领信息管理、留言板管理、交流论坛、系统管理等相应操作管理

系统架构图属于系统设计阶段,系统架构图只是这个阶段一个产物,系统的总体架构决定了整个系统的模式,是系统的基础。校园失物招领系统的整体结构设计如图所示

功能截图:

系统前台模块:

用户登录:在用户注册页面通过填写用户名、密码、姓名、手机等信息完成用户注册

系统前端首页:校园失物招领系统,在系统的首页可以查看首页、公告信息、失物信息、招领信息、交流论坛、留言反馈、个人中心、后台管理等信息进行详细操作

公告信息:在公告信息页面中可以查看公告标题、类型、发布日期、内容、图片等信息,并进行评论、收藏等操作

失物信息:失物信息,在失物信息页面中可以查看物品名称、图片、物品类别、丢失地点、丢失时间、用户名、姓名、手机、详细描述等信息,并进行评论操作

招领信息:招领信息,在招领信息页面中可以查看物品名称

 招领详情页面:查看物品名称、图片、物品类别、捡拾地点、捡拾时间、用户名、姓名、手机、详细描述等信息,并进行评论操作

交流论坛信息:交流论坛,在交流论坛页面通过填写标题、类型、内容等信息进行发布帖子或重置操作

评论交流

留言反馈:在留言反馈页面输入留言内容并立即提交或重置操作

个人中心:在个人中心页面通过填写用户名、密码、姓名、性别、上传图片、手机等信息进行个人信息修改操作,根据需要对我的发布、我的收藏等进行相应操作

普通用户后台管理:用户登录进入系统可以查看首页、个人中心、失物信息管理、招领信息管理、我的收藏管理等信息进行详细操作

管理员后台管理:

管理员登录进入系统之后,就可以对所有的信息进行查看,可以查看到首页、个人中心、公告信息管理、用户管理、物品类别管理、失物信息管理、招领信息管理、留言板管理、交流论坛、系统管理等,并且还可以对其进行相应的操作管理

公告管理:在公告信息管理页面中可以对索引、公告标题、类型、图片、发布日期等信息进行详情,查看评论,修改或删除等操作

内容详情:

用户管理:在用户管理页面中可以对索引、用户名、密码、姓名、性别、头像、手机等信息进行详情,修改或删除等操作

物品类型管理:

失物信息管理:失物信息管理,在失物信息管理页面中可以对索引、物品名称、图片、物品类别、丢失地点、丢失时间、用户名、姓名、手机等信息进行详情,修改或删除等操作

招领信息管理:在招领信息管理页面中可以对索引、物品名称、图片、物品类别、捡拾地点、捡拾时间、用户名、姓名、手机等信息进行详情,修改或删除等操作

留言板管理:在留言板管理页面中可以对索引、用户名、留言内容、回复内容等信息进行详情,回复,修改或删除等操作

交流论坛管理:在交流论坛页面中可以对索引、帖子标题、用户名、状态等信息进行详情,修改或删除等操作

系统轮播管理: 在轮播图管理页面中可以对索引、名称、值等信息进行详情,修改或删除等操作

数据设计:

 失物信息实体属性图,如图所示:

 招领信息实体属性图,如图所示:

 交流论坛实体属性图如图所示。

将数据库概念设计的E-R图转换为关系数据库。在关系数据库中,数据关系由数据表组成,但是表的结构表现在表的字段上。

表4-1收藏表

字段名称

类型

长度

字段说明

id

bigint

主键

addtime

timestamp

创建时间

userid

bigint

用户id

refid

bigint

收藏id

tablename

varchar

200

表名

name

varchar

200

收藏名称

picture

varchar

200

收藏图片

type

varchar

200

类型(1:收藏,21:赞,22:踩)

inteltype

varchar

200

推荐类型

表4-2失物信息

字段名称

类型

长度

字段说明

id

bigint

主键

addtime

timestamp

创建时间

wupinmingcheng

varchar

200

物品名称

tupian

varchar

200

图片

wupinleibie

varchar

200

物品类别

diushididian

varchar

200

丢失地点

diushishijian

datetime

丢失时间

xiangximiaoshu

longtext

4294967295

详细描述

yonghuming

varchar

200

用户名

xingming

varchar

200

姓名

shouji

varchar

200

手机

表4-3留言板

字段名称

类型

长度

字段说明

id

bigint

主键

addtime

timestamp

创建时间

userid

bigint

留言人id

username

varchar

200

用户名

content

longtext

4294967295

留言内容

cpicture

varchar

200

留言图片

reply

longtext

4294967295

回复内容

rpicture

varchar

200

回复图片

表4-4公告信息

字段名称

类型

长度

字段说明

id

bigint

主键

addtime

timestamp

创建时间

gonggaobiaoti

varchar

200

公告标题

leixing

varchar

200

类型

tupian

varchar

200

图片

neirong

longtext

4294967295

内容

faburiqi

date

发布日期

表4-5招领信息

字段名称

类型

长度

字段说明

id

bigint

主键

addtime

timestamp

创建时间

wupinmingcheng

varchar

200

物品名称

tupian

varchar

200

图片

wupinleibie

varchar

200

物品类别

jianshididian

varchar

200

捡拾地点

jianshishijian

datetime

捡拾时间

xiangximiaoshu

longtext

4294967295

详细描述

yonghuming

varchar

200

用户名

xingming

varchar

200

姓名

shouji

varchar

200

手机

表4-6用户

字段名称

类型

长度

字段说明

id

bigint

主键

addtime

timestamp

创建时间

yonghuming

varchar

200

用户名

mima

varchar

200

密码

xingming

varchar

200

姓名

xingbie

varchar

200

性别

touxiang

varchar

200

头像

shouji

varchar

200

手机

表4-7物品类别

字段名称

类型

长度

字段说明

id

bigint

主键

addtime

timestamp

创建时间

wupinleibie

varchar

200

物品类别

表4-8用户表

字段名称

类型

长度

字段说明

id

bigint

主键

username

varchar

100

用户名

password

varchar

100

密码

role

varchar

100

角色

addtime

timestamp

新增时间

表4-9token表

字段名称

类型

长度

字段说明

id

bigint

主键

userid

bigint

用户id

username

varchar

100

用户名

tablename

varchar

100

表名

role

varchar

100

角色

token

varchar

200

密码

addtime

timestamp

新增时间

expiratedtime

timestamp

过期时间

表4-10交流论坛

字段名称

类型

长度

字段说明

id

bigint

主键

addtime

timestamp

创建时间

title

varchar

200

帖子标题

content

longtext

4294967295

帖子内容

parentid

bigint

父节点id

userid

bigint

用户id

username

varchar

200

用户名

isdone

varchar

200

状态

表4-11招领信息评论表

字段名称

类型

长度

字段说明

id

bigint

主键

addtime

timestamp

创建时间

refid

bigint

关联表id

userid

bigint

用户id

nickname

varchar

200

用户名

content

longtext

4294967295

评论内容

reply

longtext

4294967295

回复内容

代码实现:


/**
 * 上传文件映射表
 */
@RestController
@RequestMapping("file")
@SuppressWarnings("unchecked","rawtypes")
public class FileController
	@Autowired
    private ConfigService configService;

/**
	 * 下载文件
	 */
	@IgnoreAuth
	@RequestMapping("/download")
	public void download(@RequestParam String fileName, HttpServletRequest request, HttpServletResponse response) 
		try 
			File file = new File(request.getSession().getServletContext().getRealPath("/upload")+"/"+fileName);
			if (file.exists()) 
				response.reset();
				response.setHeader("Content-Disposition", "attachment; filename=\\"" + fileName+"\\"");
				response.setHeader("Cache-Control", "no-cache");
				response.setHeader("Access-Control-Allow-Credentials", "true");
				response.setContentType("application/octet-stream; charset=UTF-8");
				IOUtils.write(FileUtils.readFileToByteArray(file), response.getOutputStream());
			

		 catch (IOException e) 
			e.printStackTrace();
		
	
	/**
	 * 上传文件
	 */
	@RequestMapping("/upload")
	public R upload(@RequestParam("file") MultipartFile file, String type,HttpServletRequest request) throws Exception 
		if (file.isEmpty()) 
			throw new EIException("上传文件不能为空");
		
		String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);
		String fileName = new Date().getTime()+"."+fileExt;
		File dest = new File(request.getSession().getServletContext().getRealPath("/upload")+"/"+fileName);
		file.transferTo(dest);
		if(StringUtils.isNotBlank(type) && type.equals("1")) 
			ConfigEntity configEntity = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));
			if(configEntity==null) 
				configEntity = new ConfigEntity();
				configEntity.setName("faceFile");
				configEntity.setValue(fileName);
			 else 
				configEntity.setValue(fileName);
			
			configService.insertOrUpdate(configEntity);
		
		return R.ok().put("file", fileName);
	
	
	
	


/**
 * 失物信息
 * 后端接口
 * @author 
 * @email 
 * @date 2022-03-06 13:11:28
 */
@RestController
@RequestMapping("/shiwuxinxi")
public class ShiwuxinxiController 
    @Autowired
    private ShiwuxinxiService shiwuxinxiService;
    


    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,ShiwuxinxiEntity shiwuxinxi, HttpServletRequest request)

		String tableName = request.getSession().getAttribute("tableName").toString();
		if(tableName.equals("yonghu")) 
			shiwuxinxi.setYonghuming((String)request.getSession().getAttribute("username"));
		
        EntityWrapper<ShiwuxinxiEntity> ew = new EntityWrapper<ShiwuxinxiEntity>();
		PageUtils page = shiwuxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, shiwuxinxi), params), params));
        return R.ok().put("data", page);
    
    
    /**
     * 前端列表
     */
	@IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,ShiwuxinxiEntity shiwuxinxi, HttpServletRequest request)
        EntityWrapper<ShiwuxinxiEntity> ew = new EntityWrapper<ShiwuxinxiEntity>();
		PageUtils page = shiwuxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, shiwuxinxi), params), params));
        return R.ok().put("data", page);
    

	/**
     * 列表
     */
    @RequestMapping("/lists")
    public R list( ShiwuxinxiEntity shiwuxinxi)
       	EntityWrapper<ShiwuxinxiEntity> ew = new EntityWrapper<ShiwuxinxiEntity>();
      	ew.allEq(MPUtil.allEQMapPre( shiwuxinxi, "shiwuxinxi")); 
        return R.ok().put("data", shiwuxinxiService.selectListView(ew));
    

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(ShiwuxinxiEntity shiwuxinxi)
        EntityWrapper< ShiwuxinxiEntity> ew = new EntityWrapper< ShiwuxinxiEntity>();
 		ew.allEq(MPUtil.allEQMapPre( shiwuxinxi, "shiwuxinxi")); 
		ShiwuxinxiView shiwuxinxiView =  shiwuxinxiService.selectView(ew);
		return R.ok("查询失物信息成功").put("data", shiwuxinxiView);
    
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/id")
    public R info(@PathVariable("id") Long id)
        ShiwuxinxiEntity shiwuxinxi = shiwuxinxiService.selectById(id);
        return R.ok().put("data", shiwuxinxi);
    

    /**
     * 前端详情
     */
	@IgnoreAuth
    @RequestMapping("/detail/id")
    public R detail(@PathVariable("id") Long id)
        ShiwuxinxiEntity shiwuxinxi = shiwuxinxiService.selectById(id);
        return R.ok().put("data", shiwuxinxi);
    
    



    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody ShiwuxinxiEntity shiwuxinxi, HttpServletRequest request)
    	shiwuxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(shiwuxinxi);

        shiwuxinxiService.insert(shiwuxinxi);
        return R.ok();
    
    
    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody ShiwuxinxiEntity shiwuxinxi, HttpServletRequest request)
    	shiwuxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(shiwuxinxi);

        shiwuxinxiService.insert(shiwuxinxi);
        return R.ok();
    

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody ShiwuxinxiEntity shiwuxinxi, HttpServletRequest request)
        //ValidatorUtils.validateEntity(shiwuxinxi);
        shiwuxinxiService.updateById(shiwuxinxi);//全部更新
        return R.ok();
    
    

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids)
        shiwuxinxiService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    
    
    /**
     * 提醒接口
     */
	@RequestMapping("/remind/columnName/type")
	public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, 
						 @PathVariable("type") String type,@RequestParam Map<String, Object> map) 
		map.put("column", columnName);
		map.put("type", type);
		
		if(type.equals("2")) 
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			Calendar c = Calendar.getInstance();
			Date remindStartDate = null;
			Date remindEndDate = null;
			if(map.get("remindstart")!=null) 
				Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
				c.setTime(new Date()); 
				c.add(Calendar.DAY_OF_MONTH,remindStart);
				remindStartDate = c.getTime();
				map.put("remindstart", sdf.format(remindStartDate));
			
			if(map.get("remindend")!=null) 
				Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
				c.setTime(new Date());
				c.add(Calendar.DAY_OF_MONTH,remindEnd);
				remindEndDate = c.getTime();
				map.put("remindend", sdf.format(remindEndDate));
			
		
		
		Wrapper<ShiwuxinxiEntity> wrapper = new EntityWrapper<ShiwuxinxiEntity>();
		if(map.get("remindstart")!=null) 
			wrapper.ge(columnName, map.get("remindstart"));
		
		if(map.get("remindend")!=null) 
			wrapper.le(columnName, map.get("remindend"));
		

		String tableName = request.getSession().getAttribute("tableName").toString();
		if(tableName.equals("yonghu")) 
			wrapper.eq("yonghuming", (String)request.getSession().getAttribute("username"));
		

		int count = shiwuxinxiService.selectCount(wrapper);
		return R.ok().put("count", count);
	
	



论文参考:

源码获取:

大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻微信公众号获取联系方式👇🏻👇🏻👇🏻

打卡 文章 更新 255/  365天

 精彩专栏推荐订阅:下方专栏👇🏻👇🏻👇🏻👇🏻

Java项目精品实战案例《100套》

web前端期末大作业网页实战《100套》

以上是关于失物招领|基于Web的校园失物招领系统的设计与实现的主要内容,如果未能解决你的问题,请参考以下文章

java基于微信小程序的校园失物招领系统+ssm+uinapp+Mysql+计算机毕业设计

基于SSM实现校园失物招领系统

基于ssm校园失物招领系统

校园失物招领小程序源码可作毕业设计

校园失物招领小程序源码可作毕业设计

校园版失物招领小程序设计模板