基于javaweb和mysql的springboot旅游管理系统(java+springboot+maven+vue+elementui+javascript+mysql)
基于javaweb和mysql的springboot旅游管理系统(java+springboot+maven+vue+elementui+javascript+mysql)
私信源码获取及调试交流
私信源码获取及调试交流
运行环境
Java≥8、MySQL≥5.7、Node.js≥14
开发工具
后端:eclipse/idea/myeclipse/sts等均可配置运行
前端:WebStorm/VSCode/HBuilderX等均可
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb的SpringBoot旅游管理系统(java+springboot+maven+vue+elementui+javascript+mysql)
管理员:
admin 123456
用户:
user1 123456
user2 123456
项目介绍
系统分为前台跟后台两个项目 前台: 展示旅游新闻、景区信息、美食信息、旅游线路、在线留言
后台管理员: 账号管理、地区管理、景点信息管理、地方美食管理、旅游线路管理、订单信息管理、新闻管理、系统管理 普通用户:旅游线路、订单信息
环境需要
1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS; 4.数据库:MySql 5.7/8.0版本均可; 5.是否Maven项目:是;
技术栈
后端框架:Springboot
前端技术:ElementUI、vue、css、JavaScript、axios
使用说明
项目运行: 1. 使用Navicat或者其它工具,在mysql中创建对应sql文件名称的数据库,并导入项目的sql文件; 2. 使用IDEA/Eclipse/MyEclipse导入项目,导入成功后请执行maven clean;maven install命令,然后运行; 3. 将项目中application.yml配置文件中的数据库配置改为自己的配置; 4. 运行项目,控制台提示运行成功后再去运行前端项目; 5. 管理员用户名密码:admin/admin 普通用户名密码:user/123456
文档介绍(项目研究背景、研究目的及意义、开发软件介绍、技术介绍、Mysql数据库、系统分析、可行性研究、经济上的可行性、技术上的可行性、操作上的可行性、开发结构分析、功能需求分析、数据流图、业务流程分析、数据字典、旅游网站总体设计、系统功能描述、系统界面设计、系统功能结构图、系统设计目标、系统实现的软硬件平台、数据库设计、数据库概念结构设计、数据库逻辑结构设计、系统详细设计):
景点列表展示:
人情景点列表展示:
旅游线路列表展示:
美食列表展示:
新闻信息列表展示:
登录管理展示页面:
后台功能管理-地方没事查询展示:
旅游线路查询页面展示:
// 将列表写给界面使用
assign("totalCount" , request.getAttribute("totalCount"));
assign("list" , list);
assign("orderby" , order); // 把当前排序结果写进前台
assign("sort" , sort); // 把当前排序结果写进前台
return json(); // 将数据写给前端
}
public String getWhere()
{
_var = new LinkedHashMap(); // 重置数据
String where = " ";
// 判断URL 参数lvyouxianluid是否大于0
if( Request.getInt("lvyouxianluid") > 0 ) {
// 大于0 则写入条件
where += " AND lvyouxianluid='"+Request.getInt("lvyouxianluid")+"' ";
}
// 以下也是一样的操作,判断是否符合条件,符合则写入sql 语句
if(!Request.get("xianlubianhao").equals("")) {
where += " AND xianlubianhao LIKE '%"+Request.get("xianlubianhao")+"%' ";
}
if(!Request.get("xianlumingcheng").equals("")) {
where += " AND xianlumingcheng LIKE '%"+Request.get("xianlumingcheng")+"%' ";
}
if(!Request.get("tujingdi").equals("")) {
where += " AND tujingdi LIKE '%"+Request.get("tujingdi")+"%' ";
}
return where;
}
/**
* 预订人列表
*/
@RequestMapping("/yuding_list_yudingren")
public String listyudingren()
{
// 检测是否有登录,没登录则跳转到登录页面
if(!checkLogin()){
return showError("尚未登录" , "./login.do");
}
* JSON 数据编码
* @param source
* @return
*/
public static String jsonEncode(Object source)
{
return JSON.toJSONString(source);
}
public static JSONObject jsonDecode(Object source)
{
if(source == null){
return JSON.parseObject("{}");
}
return JSON.parseObject( String.valueOf( source ));
}
public static JSONArray jsonDecodeArray( Object source )
{
if(source == null){
return JSON.parseArray("[]");
}
return JSON.parseArray( String.valueOf( source ));
}
public static List objectSplit(String exp , Object str)
{
List arr = new ArrayList();
if(str == null)
{
return arr;
}
String s = String.valueOf(str);
String[] sp = s.split(exp);
return Arrays.asList(sp);
}
/**
* 获取所有子集下的id
* @param table 表名
* @param pid 父级字段
* @param value 获取的所有子集
* @return
*/
public static String getAllChild( String table , String pid , Object value)
{
List templists = Query.make(table).select();
return StringUtil.join(",",getAllChild( table , pid , value , templists));
}
public static List getAllChild( String table , String pid , Object value , List templists)
public String add()
{
_var = new LinkedHashMap(); // 重置数据
return json(); // 将数据写给前端
}
@RequestMapping("/liuyanban_updt")
public String updt()
{
_var = new LinkedHashMap(); // 重置数据
int id = Request.getInt("id");
// 获取行数据,并赋值给前台jsp页面
Liuyanban mmm = service.find(id);
assign("mmm" , mmm);
assign("updtself" , 0);
return json(); // 将数据写给前端
}
/**
* 添加内容
* @return
*/
@RequestMapping("/liuyanbaninsert")
public String insert()
{
_var = new LinkedHashMap(); // 重置数据
String tmp="";
Liuyanban post = new Liuyanban(); // 创建实体类
// 设置前台提交上来的数据到实体类中
post.setXingming(Request.get("xingming"));
post.setLianxidianhua(Request.get("lianxidianhua"));
post.setLiuyanneirong(Request.get("liuyanneirong"));
post.setLiuyanren(Request.get("liuyanren"));
post.setHuifuneirong(Request.get("huifuneirong"));
post.setAddtime(Info.getDateStr());
Diqu post = new Diqu(); // 创建实体类
// 设置前台提交上来的数据到实体类中
post.setDiqumingcheng(Request.get("diqumingcheng"));
post.setAddtime(Info.getDateStr());
service.insert(post); // 插入数据
int charuid = post.getId().intValue();
if(isAjax()){
return jsonResult(post);
}
return showSuccess("保存成功" , Request.get("referer").equals("") ? request.getHeader("referer") : Request.get("referer"));
}
/**
* 更新内容
* @return
*/
@RequestMapping("/diquupdate")
public String update()
{
_var = new LinkedHashMap(); // 重置数据
// 创建实体类
Diqu post = new Diqu();
// 将前台表单数据填充到实体类
if(!Request.get("diqumingcheng").equals(""))
post.setDiqumingcheng(Request.get("diqumingcheng"));
if(!Request.get("addtime").equals(""))
post.setAddtime(Request.get("addtime"));
post.setId(Request.getInt("id"));
service.update(post); // 更新数据
int charuid = post.getId().intValue();
if(isAjax()){
return jsonResult(post);
}
return showSuccess("保存成功" , Request.get("referer")); // 弹出保存成功,并跳转到前台提交的 referer 页面
}
/**
* 获取utf8 字符串
* @param str
* @return
*/
public static String getUTFStr(String str) {
if (str == null) {
return "";
}
try {
str = new String(str.getBytes("ISO-8859-1"), "utf-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return str;
}
/**
* 删除html标签
* @param htmlStr
* @return
*/
public static String delHTMLTag(String htmlStr) {
String regEx_script = "<script[^>]*?>[\\s\\S]*?<\\/script>"; //定义script的正则表达式
String regEx_style = "<style[^>]*?>[\\s\\S]*?<\\/style>"; //定义style的正则表达式
String regEx_html = "<[^>]+>"; //定义HTML标签的正则表达式
Pattern p_script = Pattern.compile(regEx_script, Pattern.CASE_INSENSITIVE);
Matcher m_script = p_script.matcher(htmlStr);
htmlStr = m_script.replaceAll(""); //过滤script标签
Pattern p_style = Pattern.compile(regEx_style, Pattern.CASE_INSENSITIVE);
Matcher m_style = p_style.matcher(htmlStr);
htmlStr = m_style.replaceAll(""); //过滤style标签
Pattern p_html = Pattern.compile(regEx_html, Pattern.CASE_INSENSITIVE);
Matcher m_html = p_html.matcher(htmlStr);
tmp.put("UNKNOWN", "未知错误");
}
public void upload() throws Exception {
boolean isMultipart = ServletFileUpload.isMultipartContent(this.request);
if (!isMultipart) {
this.state = this.errorInfo.get("NOFILE");
return;
}
DiskFileItemFactory dff = new DiskFileItemFactory();
String savePath = this.getFolder(this.savePath);
dff.setRepository(new File(savePath));
try {
ServletFileUpload sfu = new ServletFileUpload(dff);
//sfu.setSizeMax(this.maxSize * 1024);
sfu.setHeaderEncoding("utf-8");
FileItemIterator fii = sfu.getItemIterator(this.request);
while (fii.hasNext()) {
FileItemStream fis = fii.next();
if (!fis.isFormField()) {
this.originalName = fis.getName().substring(fis.getName().lastIndexOf(System.getProperty("file.separator")) + 1);
if (!this.checkFileType(this.originalName)) {
this.state = this.errorInfo.get("TYPE");
continue;
}
this.fileName = this.getName(this.originalName);
this.type = this.getFileExt(this.fileName);
this.url = savePath + "/" + this.fileName;
BufferedInputStream in = new BufferedInputStream(fis.openStream());
File file = new File(this.getPhysicalPath(this.url));
FileOutputStream out = new FileOutputStream( file );
BufferedOutputStream output = new BufferedOutputStream(out);
Streams.copy(in, output, true);
this.state=this.errorInfo.get("SUCCESS");
this.size = file.length();
//UE中只会处理单张上传,完成后即退出
break;
} else {
String fname = fis.getFieldName();
//只处理title,其余表单请自行处理
if(!fname.equals("pictitle")){
continue;
}
BufferedInputStream in = new BufferedInputStream(fis.openStream());
HttpServletRequest http = Request.getRequest();
Object object = http.getAttribute(strings[0] );
return makeTableParam(object , strings[1]);
}
public static String jstltable(Object obj , String param) throws Exception
{
return makeTableParam(obj , param);
}
public static String address(String add)
{
if(add == null || add.length() == 0){
return "";
}
JSONObject json = JSONObject.parseObject(add);
if(json != null && !json.isEmpty()){
return json.getString("address");
}
return "";
}
/**
* 获取images 的第一个图片
* @param str
* @return
*/
public static String images(String str)
{
if(str.indexOf(",")>=0){
String[] li = str.split(",");
return li[0];
}
return str;
}
/**
* 获取jstl标签的值
* @param obj
* @param param
* @return
* @throws Exception
*/
public static String makeTableParam(Object obj, String param) throws Exception
{
if(obj == null){
return "";
}
if(obj instanceof Map)
{
Object ret = ((Map) obj).get(param);
if(ret == null){
jsonObject.put("username" , session.getAttribute("username"));
jsonObject.put("login" , session.getAttribute("login"));
assign("session" , jsonObject);
}
if (cx.equals("用户")) {
Yonghu user = yonghuService.login(username , pwd);
if(user == null){
return showError("用户名或密码错误");
}
session.setAttribute("id" , user.getId());
session.setAttribute("username" , user.getYonghuming());
session.setAttribute("cx" , cx);
session.setAttribute("login" , cx);
session.setAttribute("yonghuming", user.getYonghuming());
session.setAttribute("mima", user.getMima());
session.setAttribute("xingming", user.getXingming());
session.setAttribute("xingbie", user.getXingbie());
session.setAttribute("shouji", user.getShouji());
session.setAttribute("youxiang", user.getYouxiang());
session.setAttribute("shenfenzheng", user.getShenfenzheng());
session.setAttribute("touxiang", user.getTouxiang());
session.setAttribute("addtime", user.getAddtime());
JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(user));
jsonObject.put("cx" , session.getAttribute("cx"));
jsonObject.put("username" , session.getAttribute("username"));
jsonObject.put("login" , session.getAttribute("login"));
assign("session" , jsonObject);
}
if(session.getAttribute("username") == null){
return showError("账号或密码错误");
}
String referer = request.getParameter("referer");
if(referer == null){
if(isAdmin){
referer = "./main.do";
}else{
referer = "./";
}
}
assign("token",createToken(
session.getAttribute("cx"),
session.getAttribute("login") ,
session.getAttribute("username"),
_var.get("session")
)
@Autowired
private DifangmeishiMapper dao;
@Autowired
private DifangmeishiService service;
/**
* 后台列表页
*
*/
@RequestMapping("/difangmeishi_list")
public String list()
{
// 检测是否有登录,没登录则跳转到登录页面
if(!checkLogin()){
return showError("尚未登录" , "./login.do");
}
String order = Request.get("order" , "id"); // 获取前台提交的URL参数 order 如果没有则设置为id
String sort = Request.get("sort" , "desc"); // 获取前台提交的URL参数 sort 如果没有则设置为desc
int pagesize = Request.getInt("pagesize" , 12); // 获取前台一页多少行数据
Example example = new Example(Difangmeishi.class); // 创建一个扩展搜索类
Example.Criteria criteria = example.createCriteria(); // 创建一个扩展搜索条件类
String where = " 1=1 "; // 创建初始条件为:1=1
where += getWhere(); // 从方法中获取url 上的参数,并写成 sql条件语句
criteria.andCondition(where); // 将条件写进上面的扩展条件类中
if(sort.equals("desc")){ // 判断前台提交的sort 参数是否等于 desc倒序 是则使用倒序,否则使用正序
example.orderBy(order).desc(); // 把sql 语句设置成倒序
}else{
example.orderBy(order).asc(); // 把 sql 设置成正序
}
int page = request.getParameter("page") == null ? 1 : Integer.valueOf(request.getParameter("page")); // 获取前台提交的URL参数 page 如果没有则设置为1
page = Math.max(1 , page); // 取两个数的最大值,防止page 小于1
List<Difangmeishi> list = service.selectPageExample(example , page , pagesize); // 获取当前页的行数
assign("jingdianxinxiList" , new CommDAO().select("SELECT * FROM jingdianxinxi ORDER BY id desc"));
assign("meishifenleiList" , new CommDAO().select("SELECT * FROM meishifenlei ORDER BY id desc"));
// 将列表写给界面使用
assign("totalCount" , request.getAttribute("totalCount"));
assign("list" , list);
post.setPwd(Request.get("pwd"));
if(!Request.get("addtime").equals(""))
post.setAddtime(Request.get("addtime"));
post.setId(Request.getInt("id"));
service.update(post); // 更新数据
int charuid = post.getId().intValue();
if(isAjax()){
return jsonResult(post);
}
if(Request.getInt("updtself") == 1){
return showSuccess("保存成功" , "admins_updtself.do");
}
return showSuccess("保存成功" , Request.get("referer")); // 弹出保存成功,并跳转到前台提交的 referer 页面
}
/**
* 删除
*/
@RequestMapping("/admins_delete")
public String delete()
{
_var = new LinkedHashMap(); // 重置数据
if(!checkLogin()){
return showError("尚未登录");
}
int id = Request.getInt("id"); // 根据id 删除某行数据
HashMap map = Query.make("admins").find(id);
service.delete(id);// 根据id 删除某行数据
return showSuccess("删除成功",request.getHeader("referer"));//弹出删除成功,并跳回上一页
}
}
* @param data
* @param url
* @return
*/
protected String showSuccess(String data , String url)
{
return showMessage(null , 0 ,data, url , 2250);
}
}
/**
* 验证码控制器
*/
@Controller
public class CaptchaController extends BaseController {
/**
* 输出验证码图片,并记录session “random” 里等待登录时写入
*/
@RequestMapping("/captcha")
public String Index()
{
// 把验证码字符串写入session 中,保存待下次验证时使用
String sRand = createRandomString(4);
/**
* 格式化代码
* @param source
* @return
*/
public static String html(Object source) {
return html( source.toString());
}
/**
* 格式化字符串
* @param source
* @return
*/
public static String html(String source) {
if (source == null) {
return "";
}
String html = "";
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < source.length(); i++) {
char c = source.charAt(i);
switch (c) {
case '<':
buffer.append("<");
break;
case '>':
buffer.append(">");
break;
case '&':
buffer.append("&");
break;
case '"':
buffer.append(""");
break;
default:
buffer.append(c);
}
}
html = buffer.toString();
int page = request.getParameter("page") == null ? 1 : Integer.valueOf(request.getParameter("page")); // 注释同list
page = Math.max(1 , page); // 注释同list
List<Yuding> list = service.selectPageExample(example , page , pagesize);
assign("totalCount" , request.getAttribute("totalCount"));
assign("list" , list);
assign("orderby" , order);
assign("sort" , sort);
return json(); // 将数据写给前端
}
@RequestMapping("/yuding_add")
public String add()
{
_var = new LinkedHashMap(); // 重置数据
int id = Request.getInt("id"); // 根据id 获取 旅游线路模块中的数据
Lvyouxianlu readMap = serviceRead.find(id);
// 将数据行写入给前台jsp页面
assign("readMap" , readMap);
return json(); // 将数据写给前端
}
@RequestMapping("/yuding_updt")
public String updt()
{
_var = new LinkedHashMap(); // 重置数据
int id = Request.getInt("id");
// 获取行数据,并赋值给前台jsp页面
Yuding mmm = service.find(id);
assign("mmm" , mmm);
assign("updtself" , 0);
return json(); // 将数据写给前端
}
/**
* 添加内容
* @return
*/
@RequestMapping("/yudinginsert")
public String insert()
{
_var = new LinkedHashMap(); // 重置数据
post.setShenfenzheng(Request.get("shenfenzheng"));
post.setTouxiang(Request.get("touxiang"));
post.setAddtime(Info.getDateStr());
service.insert(post); // 插入数据
int charuid = post.getId().intValue();
if(isAjax()){
return jsonResult(post);
}
return showSuccess("保存成功" , Request.get("referer").equals("") ? request.getHeader("referer") : Request.get("referer"));
}
/**
* 更新内容
* @return
*/
@RequestMapping("/yonghuupdate")
public String update()
{
_var = new LinkedHashMap(); // 重置数据
// 创建实体类
Yonghu post = new Yonghu();
// 将前台表单数据填充到实体类
if(!Request.get("yonghuming").equals(""))
post.setYonghuming(Request.get("yonghuming"));
if(!Request.get("mima").equals(""))
post.setMima(Request.get("mima"));
if(!Request.get("xingming").equals(""))
post.setXingming(Request.get("xingming"));
if(!Request.get("xingbie").equals(""))
post.setXingbie(Request.get("xingbie"));
if(!Request.get("shouji").equals(""))
post.setShouji(Request.get("shouji"));
if(!Request.get("youxiang").equals(""))
post.setYouxiang(Request.get("youxiang"));
if(!Request.get("shenfenzheng").equals(""))
{
_var = new LinkedHashMap(); // 重置数据
int id = Request.getInt("id");
// 获取行数据,并赋值给前台jsp页面
Lvyouxianlu mmm = service.find(id);
assign("mmm" , mmm);
assign("updtself" , 0);
return json(); // 将数据写给前端
}
/**
* 添加内容
* @return
*/
@RequestMapping("/lvyouxianluinsert")
public String insert()
{
_var = new LinkedHashMap(); // 重置数据
String tmp="";
Lvyouxianlu post = new Lvyouxianlu(); // 创建实体类
// 设置前台提交上来的数据到实体类中
post.setXianlubianhao(Request.get("xianlubianhao"));
post.setXianlumingcheng(Request.get("xianlumingcheng"));
post.setTupian(Request.get("tupian"));
post.setChufadi(Request.get("chufadi"));
post.setTujingdi(Request.get("tujingdi"));
post.setZhongdian(Request.get("zhongdian"));
post.setJiage(Request.getDouble("jiage"));
post.setLiulanliang(Request.getInt("liulanliang"));
post.setXianlutese(util.DownloadRemoteImage.run(Request.get("xianlutese")));
post.setXianlujianjie(util.DownloadRemoteImage.run(Request.get("xianlujianjie")));
post.setAddtime(Info.getDateStr());
service.insert(post); // 插入数据
int charuid = post.getId().intValue();
if(isAjax()){
}
return showSuccess("保存成功" , Request.get("referer")); // 弹出保存成功,并跳转到前台提交的 referer 页面
}
/**
* 后台详情
*/
@RequestMapping("/difangmeishi_detail")
public String detail()
{
_var = new LinkedHashMap(); // 重置数据
int id = Request.getInt("id");
Difangmeishi map = service.find(id); // 根据前台url 参数中的id获取行数据
assign("map" , map); // 把数据写到前台
return json(); // 将数据写给前端
}
/**
* 前台详情
*/
@RequestMapping("/difangmeishidetail")
public String detailweb()
{
_var = new LinkedHashMap(); // 重置数据
int id = Request.getInt("id");
Difangmeishi map = service.find(id);
assign("map" , map);
return json(); // 将数据写给前端
}
/**
* 删除
*/
@RequestMapping("/difangmeishi_delete")
public String delete()
{
_var = new LinkedHashMap(); // 重置数据
if(!checkLogin()){
return showError("尚未登录");
}
int id = Request.getInt("id"); // 根据id 删除某行数据
HashMap map = Query.make("difangmeishi").find(id);
service.delete(id);// 根据id 删除某行数据
return showSuccess("删除成功",request.getHeader("referer"));//弹出删除成功,并跳回上一页
*/
protected String showMessage( String message , int code , Object data , String jumpUrl , int jumpTime)
{
if(isAjax())
{
JsonResult jsonResult = new JsonResult(code , message , data);
return renderString(response , JSON.toJSONString(jsonResult));
}
assign("message" , message == null ? data : message);
assign("code" , code);
assign("jumpUrl" , jumpUrl);
assign("jumpTime" , jumpTime);
return "message";
}
/**
* 将写入json写到前端
* @return
*/
public String json()
{
return jsonResult(_var);
}
public String jsonReturn(String message , int code , Object data)
{
JsonResult result = new JsonResult(code , message , data);
return renderString(response , JSON.toJSONString(result));
}
public String jsonResult(Object data)
{
return jsonReturn(null , 0 , data);
}
public String jsonError(String msg)
{
return jsonReturn(msg , 1 , null);
}
public Object getRequestAttributeMap()
{
//Map<Object,Object> map = new LinkedHashMap();
Enumeration<String> names = request.getAttributeNames();
while (names.hasMoreElements())
page = Math.max(1 , page); // 注释同list
List<Xinwenxinxi> list = service.selectPageExample(example , page , pagesize);
assign("xinwenfenleiList" , new CommDAO().select("SELECT * FROM xinwenfenlei ORDER BY id desc")); assign("totalCount" , request.getAttribute("totalCount"));
assign("list" , list);
assign("orderby" , order);
assign("sort" , sort);
return json(); // 将数据写给前端
}
/**
* 前台列表页
*
*/
@RequestMapping("/xinwenxinxilist")
public String index()
{
String order = Request.get("order" , "id");
String sort = Request.get("sort" , "desc");
Example example = new Example(Xinwenxinxi.class);
Example.Criteria criteria = example.createCriteria();
String where = " 1=1 ";
where += getWhere();
criteria.andCondition(where);
if(sort.equals("desc")){
example.orderBy(order).desc();
}else{
example.orderBy(order).asc();
}
int page = request.getParameter("page") == null ? 1 : Integer.valueOf(request.getParameter("page"));
page = Math.max(1 , page);
List<Xinwenxinxi> list = service.selectPageExample(example , page , 12);
assign("mapxinwenfenlei3" , new CommDAO().select("SELECT id,fenleimingcheng FROM xinwenfenlei")); assign("totalCount" , request.getAttribute("totalCount"));
assign("list" , list);
assign("where" , where);
assign("orderby" , order);
assign("sort" , sort);
return json();
}
@RequestMapping("/xinwenxinxi_add")
public String add()
{
_var = new LinkedHashMap(); // 重置数据
assign("xinwenfenleiList" , new CommDAO().select("SELECT * FROM xinwenfenlei ORDER BY id desc"));
return json(); // 将数据写给前端
}









更多推荐




所有评论(0)