基于SSM实现旅游网站项目

基于SSM实现旅游网站项目 1,项目简介 1,1 课题概述 本项目是基于Java语言的SSM框架作为后台进行设计,页面采用JSP,前端使用的是JS

本文包含相关资料包-----> 点击直达获取<-------

基于SSM实现旅游网站项目

1.项目简介

1.1 课题概述

本项目是基于Java语言的SSM框架作为后台进行设计,页面采用JSP,前端使用的是JS、CSS、JQUEY、BootStrap来实现并设计页面;数据库采用目前比较流行的MYSQL数据库进行信息存储,应用服务器采用Tomcat8.0。

1.2 开发背景

随着经济的不断发展,大学生旅行出游的人数正在不断的扩大,大学生对个性定制出游的需求也越来越强烈。研究发现,大学生已经慢慢成为旅游群体主流,随着高校不断扩招,其市场的潜力巨大。而针对大学生毕业旅游的需求往往被忽视,所以存在巨大潜在市场。本系统的总目标是:能够利用基于互联网的技术,结合WEB技术来开发出学生旅游管理系统,可以根据不同的游玩类型,个人预算价格,不同的地域,提供个性化学生旅行。

1.3 系统开发工具

  • 开发工具 :IDEA(服务端)、Hbuilder(前端)

  • 数据库管理工具 :Navicat

  • 服务器 :Tomcat

  • 开发环境 :jdk1.8

2.需求分析

2.1 系统概述

本系统主要服务于大学生毕业旅游出行,因而系统的主要功能都是围绕于此来进行设计。系统主要有2个角色,分别是普通用户和管理员。普通用户可以进行登录注册,查看或修改个人信息,检索和浏览旅游产品信息,产品下单,订单详情查看、定制出行、咨询客服等操作,而网页端管理员可以进行用户管理,产品和产品-销售的增删查改,主题管理,订单管理、数据统计等操作。

2.2 功能需求分析

学生毕业旅游管理系统共有 2 类角色,分别是普通用户和管理员。

普通用户的用例图

普通用户功能

  • 登陆 :用户通过输入用户名和密码进行登陆

  • 注册 :用户需要输入相关信息和验证邮箱验证码后方可注册成功为系统用户

  • 个人信息管理 :在用户进行登陆后可进行查看个人信息和修改个人信息

  • 产品浏览 :用户可查看旅游产品的详情信息比如出发日期、当天价格、景点介绍、行程安排等等

  • 产品检索 :用户可通过主题分类、出发地、目的地、旅游天数、标题查询等检索条件查询合适的产品

  • 在线预定 :用户登录后进入具体产品订购页面选取相应日期和数量后进行支付订购

  • 个性定制 :用户根据特定需求进行填写定制表单,如填写目的地、预算、旅游天数等等

  • 查看订单 :用户在登陆后可对产品进行订购,订购后可查看订单信息

  • 查看定制 :用户在登陆后可以根据自己的需求信息填写个性定制表单,填写完成后可查看填写的信息详情

  • 在线咨询 :用户在登陆后可以根据自己的需求信息填写个性定制表单,填写完成后可查看填写的信息详情

管理员的用例图

  • 用户管理 :用户管理包括查看用户列表、通过用户名或邮件或手机号码模糊查找、查看\修改用户详情信息、删除用户

  • 产品管理 :产品管理包括产品列表查看、产品搜索、产品添加、修改

  • 产品-销售管理 :因为旅游产品的特殊性,一个产品在不同日期的价格和库存呢都不一样,所以新增产品-销售管理(即1-n)同样也是记录的增删改查

  • 主题管理 :主题管理即分类管理,一个产品可以有多个主题,主题管理包括新增主题、主题修改、主题列表、主题删除等

  • 定制管理 :定制管理为对用户定制信息进行管理,包括定制列表、查看定制信息、设置定制信息为已读

  • 订单管理 :订单管理包括查看订单列表、搜索订单、查看订单详情信息

2.3 对性能的规定

  • 时间特性要求
  • 用户请求返回页面或提示响应时间在3秒以内
  • 后台批量新增产品处理时间5秒内
  • 用户注册时邮箱验证码发送时间30秒内

  • 灵活性要求

  • 运行环境:可以在谷歌、火狐、IE9以上的浏览器下兼容运行,运行环境较广
  • 功能改进:当日后需要更新或者增加功能时,不会影响到以前功能

  • 稳定性要求

  • 能承载200个用户同时在线
  • 支持系统数据备份

3.系统设计

3.1 系统总体设计

3.1.1系统框架图

系统整体框架图

3.1.2 系统整体功能图

毕业旅行管理系统按角色主要分为两大模块。

系统总体设计图

3.2 数据库设计

3.2.1 概念模型设计

用户信息的E-R图

主题信息的E-R图

产品信息的E-R图

产品-销售信息的E-R图

产品-描述信息的ER图

订单信息的E-R图

整体E-R图

3.2.2 数据字段

用户信息表为 user ,主要用来存储用户的信息。

序号 字段名 字段意义 字段类型 是否主键 允许为空
1 id varchar(100)
2 username varchar(50)
3 password varchar(100)
4 email varchar(50)
5 phone varchar(50)
6 sex char(2)
7 role 0超级管理员,1管理员,10普通用户 int(10)
8 create_time datetime(0)
9 update_time datetime(0)

email_validate为邮箱验证表 ,主要用来验证邮箱验证码。

序号 字段名 字段意义 字段类型 是否主键 允许为空
1 id varchar(50)
2 email varchar(50)
3 validate_code varchar(20)
4 create_time datetime(0)

customization为定制表 ,主要用来储存定制信息。

序号 字段名 字段意义 字段类型 是否主键 允许为空
1 id varchar(50)
2 uid 用户Id varchar(50)
3 start_areaName varchar(50)
4 end_areaName varchar(50)
5 start_date date(0)
6 days 旅游天数 varchar(4)
7 number 出发人数 int(10)
8 percapita_consumption 人均消费 varchar(255)
9 person_name 联系人 varchar(10)
10 phone varchar(50)
11 remarks 备注 varchar(255)
12 status 0未读,1已读 int(10)

product_order为订单表 ,主要用来储存订单信息。

序号 字段名 字段意义 字段类型 是否主键 允许为空
1 id 订单id varchar(50)
2 order_no 订单号 bigint(19)
3 user_id 用户id varchar(50)
4 product_id 产品id varchar(50)
5 productsell_id 产品销售id varchar(50)
6 username 联系人 varchar(50)
7 phone 联系号码 varchar(50)
8 remarks 备注 varchar(255)
9 pruduct_num 产品数量 int(10)
10 payment 实际付款金额,单位是元,保留两位小数 decimal(20)
11 payment_type 支付类型,1-在线支付 int(10)
12 status 订单状态:0-已取消-10-未付款,20-已付款 int(10)
13 payment_time 支付时间 datetime(0)
14 end_time 交易完成时间 datetime(0)
15 close_time 交易关闭时间 datetime(0)
16 create_time 创建时间 datetime(0)
17 update_time 更新时间 datetime(0)

product为产品表 ,主要用来储存产品相关信息。

序号 字段名 字段意义 字段类型 是否主键 允许为空
1 pid varchar(50)
2 title varchar(100)
3 price double(10)
4 main_image 产品主图,url相对地址 varchar(255)
5 sub_images 图片地址,json格式,扩展用 varchar(255)
6 sell 销量 int(10)
7 status 商品状态,1-正常,2-下架,3-删除 tinyint(3)
8 active_num 活动人数 int(10)
9 active_days 活动天数 int(10)
10 start_areaId 出发地地址id int(10)
11 end_areaId 目的地区域id int(10)
12 start_areaName 冗余字段 varchar(50)
13 end_areaName 冗余字段 varchar(50)
14 create_time datetime(0)
15 update_time datetime(0)

product_desc为产品描述表 ,主要用来储存旅游产品详细描述信息。

序号 字段名 字段意义 字段类型 是否主键 允许为空
1 pid 产品id varchar(50)
2 scenic_desc 景点介绍 text(65535)
3 trip_desc 行程安排 text(65535)
4 cost_desc 费用说明 text(65535)
5 other_desc 其他说明 text(65535)

product_sell为产品销售表 ,主要用来储存旅游产品销售信息。

序号 字段名 字段意义 字段类型 是否主键 允许为空
1 id varchar(50)
2 pid 产品id varchar(50)
3 p_name 产品名称 varchar(255)
4 p_price 价格 double(10)
5 status 销售状态,1正常,2下架 tinyint(3)
6 start_date 出发日期 date(0)
7 active_days 活动天数 int(10)
8 stock 库存 int(10)
9 version 版本 int(10)
10 create_time datetime(0)
11 update_time datetime(0)

theme_product为主题产品表 ,主是主题和产品的中间表。

序号 字段名 字段意义 字段类型 是否主键 允许为空
1 id varchar(50)
2 product_id varchar(50)
3 theme_id varchar(50)
4 theme_name varchar(100)

theme为主题表 ,用例储存主题信息。

序号 字段名 字段意义 字段类型 是否主键 允许为空
1 id varchar(50)
2 theme_name varchar(50)
3 image_url varchar(100)
4 detail varchar(255)

4.系统实现

```java /* *

* 前端控制器 *

* * @author zzh * @since 2019-02-19 / @Controller @RequestMapping("/manager/productSell") public class ProductSellManageController {

@Autowired
private IProductSellService productSellService;

/**
 * 列表
 * @param current
 * @param size
 * @return
 */
@RequestMapping("/list")
@ResponseBody
public ServerResponse list(@RequestParam(value="current",defaultValue="1") int current, @RequestParam(value="size",defaultValue="10") int size){

    if (current<0||size<0){
        return ServerResponse.createByErrorCodeMessage(ResponseCode.ILLEGAL_ARGUMENT.getCode(),ResponseCode.ILLEGAL_ARGUMENT.getDesc());
    }

    return ServerResponse.createBySuccess(productSellService.selectPage(new Page(current,size))) ;
}

/**
 * 列表
 * @param current
 * @param size
 * @return
 */
@RequestMapping("/list/{pid}")
@ResponseBody
public ServerResponse listBypid(@PathVariable String pid,@RequestParam(value="current",defaultValue="1") int current, @RequestParam(value="size",defaultValue="10") int size){

    if (current<0||size<0){
        return ServerResponse.createByErrorCodeMessage(ResponseCode.ILLEGAL_ARGUMENT.getCode(),ResponseCode.ILLEGAL_ARGUMENT.getDesc());
    }
    EntityWrapper<ProductSell> entityWrapper=new EntityWrapper();
    entityWrapper.eq("pid",pid);
    entityWrapper.orderBy("start_date",true);
    return ServerResponse.createBySuccess(productSellService.selectPage(new Page(current,size),entityWrapper)) ;
}

/**
 * 新增
 * @param productSell
 * @return
 */
@RequestMapping("/save")
@ResponseBody
public ServerResponse create(ProductSell productSell){
    productSell.setCreateTime(new Date());
    return ServerResponse.createBySuccess(productSell.insert());
}

/**
 *修改
 * @param id
 * @param productSell
 * @return
 */
@ResponseBody
@RequestMapping("/update/{id}")
public ServerResponse update(@PathVariable  String id, ProductSell productSell){
    productSell.setId(id);
    productSell.setUpdateTime(new Date());
    return ServerResponse.createByResult(productSell.updateById());
}

/**
 * 删除
 * @param id
 * @return
 */
@ResponseBody
@RequestMapping("/delete/{id}")
public  ServerResponse delete(@PathVariable String id){
    ProductSell productSell=new ProductSell();
    productSell.setId(id);
    return ServerResponse.createByResult(productSell.deleteById());
}

/**
 * 批量删除
 * @param ids
 * @return
 */
@ResponseBody
@RequestMapping("/delete")
public  ServerResponse delete(String[] ids){
    return ServerResponse.createByResult(productSellService.deleteBatchIds(Arrays.asList(ids)));
}

/**
 * 批量新增
 * @param productSells
 * @return
 */
@RequestMapping("/insertBatch")
@ResponseBody
public ServerResponse insertBatch(ProductSell productSells,int days){
    if (days>30){
        return ServerResponse.createByErrorMessage("不能连续设置超过30天的产品销售");
    }
    ArrayList<ProductSell> productSellArrayList=new ArrayList<>();
    for (int i=1;i<=days;i++){
        ProductSell productSell=new ProductSell(productSells);
        Calendar c = Calendar.getInstance();
        c.setTime(productSell.getStartDate());
        c.add(Calendar.DAY_OF_MONTH, i);// +i天
        productSell.setStartDate(c.getTime());
        productSell.setCreateTime(new Date());
        productSellArrayList.add(productSell);
    }

    return ServerResponse.createByResult(productSellService.insertBatch(productSellArrayList));
}

@RequestMapping("/addView")
public String addView(String pid, String title,Double price, Model model) throws UnsupportedEncodingException {
    String param = new String(title.getBytes("ISO8859-1"), "UTF-8");//解决get乱码
    model.addAttribute("pid",pid);
    model.addAttribute("title",param);
    model.addAttribute("price",price);
    return "backend/productSell_add";
}

@RequestMapping("/listView/{pid}")
public String listView(@PathVariable String pid,Model model){
    model.addAttribute("pid",pid);
    return "backend/productSell_list";
}

@RequestMapping("/updateView/{id}")
public String updateView(@PathVariable String id,Model model){
    model.addAttribute("productSell", productSellService.selectById(id));
    return "backend/productSell_update";
}

```

5.系统测试

5.1 界面测试

记录界面测试的详情

测试目标 1. 兼容性 检查页面是否能够兼容多种浏览器。 2. 易用性 菜单栏文字说明是否一目了然。 系统是否有相应的帮助文档和用户使用说明。每个功能操作是否方便不繁琐。 3. 美观性 页面所使用的布局在拉伸下是否会变形字体的大小和颜色是否与页面协调。
测试方法 1.采用不同内核的浏览器访问系统: IE 浏览器:使用 IETest 工具对 ie8、ie9、ie10 等兼容性进行测试;谷歌浏览器;火狐浏览器 2. 键盘输入,鼠标点击按钮,鼠标点击链接 3. 正常和错误的 I/O 数据验证
测试结论 毕业旅游管理系统能够较好的兼容不同内核的浏览器。易用性高,操作方便,使用体验良好。对于非法和错误的操作,有友好的提示。系统的界面简洁美观,布局合理,颜色协调。

5.2 功能测试

注册

首页

个性定制

项目详情

5.3 测试评估

通过对整个系统的测试,发现本系统还存在着一些小BUG。比如:后台输入框没有进行脚本过滤防止XSS攻击,地址输入框缺乏部分地区、页面也会因过度拉伸而出现样式错乱,同时也发现后台部分路径存在权限漏洞,上传图片没做大小限制等,部分表单字段没有做非空性和合理性字段校验。

但是在发现缺陷后,已经立即处理这些缺陷并使其满足质量要求。本系统在兼容性上能够较好地兼容多种内核的浏览器的,操作性友好,UI美观。同时。在功能上,系统的主要功能已经开发完成,当然仍然可以再添加一些功能,比如详后台管理不能进行批量的修改删除数据,订购没有做线上支付(微信支付或支付宝),统计数据不够完善(只做了简单数据的统计)使系统功能更加完善。在性能上系统能够满足需求,同时也考虑到了可扩展性。

结 论

本系统使用MVC架构、SSM技术、 Mysql数据库,Maven jar包管理,B/S 模式进行页面的呈现。前端页面使用 Bootstrap 、Jquery来实现页面布局设计和实现,同时使用 Jsp、ajax 与服务端进行数据的交互。

在用户权限控制上,系统采用了拦截器对用户的非法操作进行拦截。如订单页面需要用户进行登录,后台页面需要管理员进行登录,根据拦截器设定,请求页面要求必须是对应的用户才能够进入该角色所对应的操作页面。如果不是,请求将会被拦截,并且将会自动跳转到对应的页面。在用户体验上,系统UI美观,交互体验友好,功能完善。

系统的代码耦合度较低,并且设计上预留了扩展功能,因而系统健壮性、稳定性、灵活性比较强。系统开发期间,不断进行单元和集成测试,通过测试驱动开发来完善系统功能。

参考文献

  • 丹东市旅游交通信息系统设计与实现(东北大学·祝贺)
  • 旅游业网络营销服务平台的设计与应用(北京工业大学·星丹丹)
  • 基于Web Service的旅游管理系统的设计与实现(北京邮电大学·李琳)
  • 基于JAVA WEB技术旅游服务网站系统设计与实现(电子科技大学·张岚)
  • 旅游管理网站系统的设计与实现(大连理工大学·秦鑫)
  • 基于REST的农业旅游园区系统的设计与实现(河北农业大学·钤程程)
  • 旅游服务网的设计与实现(电子科技大学·赵洋)
  • 基于SSM的企业网站设计与实现(黑龙江大学·张泷元)
  • 基于JAVA WEB技术旅游服务网站系统设计与实现(电子科技大学·张岚)
  • 基于REST的农业旅游园区系统的设计与实现(河北农业大学·钤程程)
  • 基于SSM的客户关系管理系统的设计与实现(北京交通大学·白元)
  • 湖南省旅游项目管理系统的设计与实现(山东大学·林茵)
  • 旅游管理系统的设计与实现(东北大学·王宇慧)
  • 在线旅游管理信息系统的设计与实现(电子科技大学·任缘)
  • 基于JAVA WEB技术旅游服务网站系统设计与实现(电子科技大学·张岚)

本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:源码工坊 ,原文地址:https://m.bishedaima.com/yuanma/35554.html

相关推荐

  • 基于Java+JSP+Servlet的图书管理系统

    研究背景和当前研究现状: 随着信息技术的迅猛发展和互联网的普及,图书管理系统作为信息管理的重要工具,在图书馆,学校,企事业单位等各个领域得到了广泛应用,传统的图书管理方式已经无法满足日益增长的信息管理需求
    2024年05月07日
    9 1 1
  • 购物推荐网站

    这是一个🔥🔥基于SpringBoot框架的购物推荐网站设计与实现🔥🔥的项目源码,开发语言Java,框架使用的SpringBoot+vue技术,开发环境Idea/Eclipse
    2024年05月23日
    2 1 1
  • 基于Python制作的24点生成器

    基于 Python 制作的 24 点生成器 导语 看了下上周那篇推文,阅读量相对有些惨淡,看来大家都不太喜欢那个主题(说实话我也不喜欢),这周还是来点正常的吧
    2024年05月14日
    3 1 1
  • 基于SpringBoot框架的新闻稿件管理系统

    这是一套采用Java语言编写的新闻稿管理系统的源代码,基于流行的SpringBoot框架,我们利用了SpringBoot与Vue技术栈进行开发,支持Idea或Eclipse等集成开发环境
    2024年05月23日
    6 1 1
  • 二维非稳态热传导 膏体发动机之Python

    二维非稳态热传导 膏体发动机 一,划分网格: X 方向网格:20;Y 方向网格:20 材料 1:材料 2:材料 1=8:4:8 总网格数量:400 网格尺寸: 注意有界性条件:方程的各项系数大于 0 显式格式: 网格时 网格时 隐式格式: 有界性条件自动满足 C-N 格式: 二
    2024年05月14日
    1 1 1
  • 基于Python制作吃豆豆小游戏

    基于 Python 制作吃豆豆小游戏 导语 今天上 GitHub 发现 Python 制作小游戏系列文章的代码 repo 竟然有 500stars 了
    2024年05月14日
    4 1 1
  • 基于python制作一个打砖块小游戏

    基于 python 制作一个打砖块小游戏 导语 想起来好久没更这个系列的文章了,周末过来补一波好了,本期我们将利用 python 制作一个打砖块小游戏
    2024年05月14日
    1 1 1
  • 汽车资讯网站

    这是一个🔥🔥基于SpringBoot框架的汽车资讯网站设计与实现🔥🔥的项目源码,开发语言Java,框架使用的SpringBoot+vue技术,开发环境Idea/Eclipse
    2024年05月23日
    5 1 1
  • 基于JSP和Oracle实现的志愿服务银行系统

    基于JSP和Oracle实现的志愿服务银行系统 1,系统概述 1,1 系统背景 本次实习我们小组选择志愿服务银行网站的建设,志愿服务的行为是高尚的
    2024年05月14日
    43 1 8
  • 基于Java Web的智能二维码门禁管理系统

    基于 Java Web 的智能二维码门禁管理系统的设计与实现 摘要 我们身边的很多事物都已悄然接入互联网,由此本文提出基于 Java Web 和微信小程序的一套门禁系统的设计
    2024年05月14日
    5 1 1

发表回复

登录后才能评论