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

news2024/11/28 20:38:11

作者主页:编程千纸鹤

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

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

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

引言:

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

校园失物招领系统基于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());
    }
    
    
}

五,项目总结

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

主要特点为:

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/26693.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Haproxy负载均衡集群

目录 一、HAPorxy简介 二、HAPorxy优点 三、理解四层和七层负载均衡 四、HAProxy与LVS的区别 五、使用Haproxy搭建web群集 1、部署2台web服务器 2、编译安装Haproxy 3、客户端访问测试 六、总结 1、HTTP请求的两种方式 2、haproxy配置文件重要参数说明 一、HAPorxy简介…

c语言:初识指针

初识指针一.指针是什么问题一&#xff1a;指针&#xff0c;指针变量&#xff0c;内存&#xff0c;地址&#xff0c;编号的关系问题二&#xff1a;为什么指针大小是4或8字节二.如何使用指针三.指针类型问题三&#xff1a;既然指针是4个字节&#xff0c;那它是如何放下long类型的…

数据库:Centos7安装解压版mysql5.7图文教程,亲测成功

目录 1、卸载Centos7默认自带的mariadb数据库&#xff0c;避免冲突 2、下载解压版mysql并安装 3、配置mysql 4、mysql客户端访问 Centos7安装mysql5.7解压版完整教程避免踩坑&#xff0c;可以把数据目录和系统目录分开设置。 1、卸载Centos7默认自带的mariadb数据库&#xff0c…

Qt5开发从入门到精通——第十二篇一节(Qt5 事件处理及实例——多线程及简单实例)

提示&#xff1a;欢迎小伙伴的点评✨✨&#xff0c;相互学习c/c应用开发。&#x1f373;&#x1f373;&#x1f373; 博主&#x1f9d1;&#x1f9d1; 本着开源的精神交流Qt开发的经验、将持续更新续章&#xff0c;为社区贡献博主自身的开源精神&#x1f469;‍&#x1f680; 文…

菜鸟Linux(3):环境变量

"Oh heiya New World!" 一、什么是环境变量&#xff1f; 谈起环境变量,也许我们在敲代码的层面上并不关心。在链接的时候,我们从来没有告诉编译器,去哪里找动态库去链接;我们也从来没有告诉进程 执行该进程的用户是谁?以及在命令行解释器时&#xff0c;启动一个进程…

深度学习基础--神经网络(4)参数更新策略,梯度法

导数 导数&#xff1a;表示某个瞬间的变化量&#xff0c;公式定义&#xff1a; df(x)dxlimh→0f(xh)−f(x)h(4.4)\frac{df(x)}{dx} lim_{h \to 0}\frac{f(x h)-f(x)}{h} \tag{4.4} dxdf(x)​limh→0​hf(xh)−f(x)​(4.4) 求导的代码实现&#xff1a; import numpy as np i…

SSM框架-Spring(三)

目录 1 Spring对事务的支持 1.1 引入事务场景 1.2 spring对事务的支持 Spring实现事务的两种方式 Spring事务管理API 1.3 事务属性 1.3.1 事务传播行为 1.3.2 事务隔离级别 1.3.3 事务超时 1.3.4 只读事务 1.3.5 异常回滚事务 1.4 事务的全注解式开发 1.5 声明式事…

玩转SQL:咱们的目标是成为SQL方面的“扫地僧”

引言 (Structured Query Language)标准结构化查询语言简称SQL&#xff0c;编写SQL语句是每位后端开发日常职责中&#xff0c;接触最多的一项工作&#xff0c;SQL是关系型数据库诞生的产物&#xff0c;无论是什么数据库&#xff0c;MySQL、Oracle、SQL Server、DB2、PgSQL....&…

FPGA串口接收Demo

串口接收Demo 简单介绍 在发送数据时将并行数据转换成串行数据来传输&#xff0c;在接收数据时将接收到的串行数据转换成并行数据 空闲状态时&#xff0c;为高电平起始位为一个单位长度低电平&#xff0c;停止位为一个长度高电平 分析 帧格式 8位数据位1位停止位无校验位 …

配电站房监控系统方案

配电站为低压用户配送电能&#xff0c;设有中压进线(可有少量出线)、配电变压器和低压配电装置。计讯物联工业网关下配电站房监控系统方案&#xff0c;24小时对运行设备进行不间断数据采集上传服务器&#xff0c;云平台对接&#xff0c;远程实时在线监控设备运行状态 &#xff…

web前端-javascript-标识符(说明,命名规则、不以数字关键字保留字开头、驼峰命名,补充)

文章目录标识符1. 说明2. 命名规则3. 补充标识符 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title></title><script type"text/javascript">//千万不要这么用/* var if 123;console.log(if); *//…

Linux、阿里云服务器用tomcat部署项目

文章目录一、安装JDK和Tomcat1.1 安装JDK2.2 安装Tomcat二、把项目打包成war包&#xff08;jar也可以&#xff0c;但是有区别&#xff09;三、把war包放进webapps里面四、修改tomcat配置五、修改防火墙和开放端口等设置六、在浏览器访问项目一、安装JDK和Tomcat 1.1 安装JDK …

如果你想跨行转做数据分析师,劝你慎重

随着数字化时代的浪潮&#xff0c;数据分析师成了炽手可热的香饽饽&#xff0c;疫情当下&#xff0c;各行各业的失业人员逐渐增多&#xff0c;所以人人都想转行当数据分析师。作为业内人员&#xff0c;说实话&#xff0c;真的不建议&#xff0c;数据分析师真的不是想象的那么简…

【Webpack】webpack的基础使用详细总结 上(建议收藏)

1- 前言&#xff08;前端工程化&#xff09; 实际的前端开发&#xff1a; 模块化&#xff08;js 的模块化、css 的模块化、其它资源的模块化组件化&#xff08;复用现有的 UI 结构、样式、行为&#xff09;规范化&#xff08;目录结构的划分、编码规范化、接口规范化、文档规范…

代码随想录算法训练营第六天|LeetCode 242. 有效的字母异位词 、349. 两个数组的交集 、 202. 快乐数、1. 两数之和

LeetCode 242. 有效的字母异位词 题目链接&#xff1a;242. 有效的字母异位词 方法一&#xff1a; 分析&#xff1a; 两个字符串里的每个字母的个数相等&#xff0c;那么我对每个字符串里的字符串都进行下排序&#xff0c;排出来后岂不是两个字符串的每个字母如果一一对应就…

高通平台开发系列讲解(AI篇)高通神经网络处理引擎工作流程详解

文章目录 一、Model to Runtime Workflow(模型运行流程)二、Basic SNPE Workflow(基本工作流程)2.1、Converting a Network Model(模型转换)2.2、Quantizing a Model(模型量化)沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇章主要介绍高通平台神经网络处…

K_A07_002 基于 STM32等单片机驱动ULN2003模块按键控制步进电机正反转

目录 一、资源说明 二、基本参数 1.参数 2、引脚说明 三、驱动说明 步进电机驱动时序 反向输出 对应程序: 四、部分代码说明 1、接线说明 1.1、STC89C52RCULN2003模块 1.2、STM32F103C8T6ULN2003模块 五、基础知识学习与相关资料下载 六、视频效果展示与程序资料获取 七…

C#使用EPPlus操作Excel(读写)

之所以使用EPPlus操作Excel是因为微软自带的运行效率太低&#xff0c;数据多后会特别慢&#xff0c;不能满足现场要求。如果想速度快&#xff0c;而且只是读取Excel的配置还有另一个办法就是将Excel保存成xml文件&#xff0c;参考我的另一个文章&#xff1a;C# 读取XML格式的Ex…

概率统计·大数定律及中心极限定理【大数定律、中心极限定律】

这一章的学习更多的是为后面的知识作铺垫&#xff0c;所以内容比较少&#x1f358;&#x1f358;&#x1f358;&#xff08;当然也减轻一点复习的负担&#x1f917;&#x1f917;&#x1f917;&#xff09; 依概率收敛 需要概率P极限趋近于1 切比雪夫不等式的特殊情况 前提&…

数据库-sql执行深度剖析以及redo log和undo log(下)(二)

目录 buffer pool change Buffer Log Buffer redo log 随机IO/顺序IO redo log刷盘时机 redo logt特点 redo log结构 Adaptive Hash Index 磁盘区域 undo log 总结更新流程 BInlog 基于上一章sql执行原理基础上&#xff0c;我们来深入探讨sql更新的整个原理。 bu…