基于SpringBoot实现功能最全电影购票与信息资讯平台

简介: 基于SpringBoot实现功能最全电影购票与信息资讯平台

一,环境介绍

语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

开发技术:Springboot+Mybatis+freemarker

特色功能:短信发送、沙箱支付宝支付、电影排片、按座购票、数据推荐等

二,项目简介

电影院的快速发展,线下的订票方式费时费力,建立一个线上的电影售票系统可以有效帮助人们知道什么时候有新的电影,而不需要电影院花费极大的代价宣传。

现在确定本系统用例模型有三种,分别是游客、注册用户和系统管理员。下面分别对这三个角色的功能进行描述:

1) 用户

用户是该系统的前台使用者,即消费者、顾客。他们可以浏览电影、浏览影院和选座支付及发表评论。用户用例图1-1如下:

a.  登录注册;

b.  浏览电影;

c.  浏览影院;

d.  选座支付;

e.  发表评论。

图1-1用户用例图

2) 影院运营专员

影院运营专员是各影院的管理者,他们负责各自影院的正常运营。影院运营专员的功能有电影管理、影厅管理、排片管理、新闻资讯管理和订单管理 。影院运营专员用例图如下1-2:

a.  电影管理;

b.  影厅管理;

c.  排片管理;

d.  新闻资讯管理;

e.  订单管理;

           

图1-2 影院运营专员用例图

3) 系统管理员

系统管理员主要负责各个角色及其权限管理、地域管理、影院管理以及用户管理,系统管理员用例图1-3如下:

a.  角色管理;

b.  地域管理;

c.  影院管理;

d.  用户管理;。

图1-3 系统管理员用例图

三,系统展示

系统首页

在线购票

电影评分、评论

用户注册、登录  手机发送验证码

后台管理功能展示

后台管理--角色管理

权限分配

用户管理

地域管理

电影管理

评价管理

影院管理

影厅管理

排片管理

四,核心代码展示

package com.yuanlrc.movie.controller.admin;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.yuanlrc.movie.bean.PageBean;
import com.yuanlrc.movie.bean.Result;
import com.yuanlrc.movie.entity.common.Account;
import com.yuanlrc.movie.service.common.AccountService;
/**
 * 用户管理控制器
 * @author Administrator
 *
 */
@RequestMapping("/admin/account")
@Controller
public class AccountController {
  @Autowired
  private AccountService accountService;
  /**
   * 用户列表
   * @param model
   * @param account
   * @param pageBean
   * @return
   */
  @RequestMapping(value="/list")
  public String list(Model model,Account account,PageBean<Account> pageBean){
    model.addAttribute("pageBean", accountService.findPage(account, pageBean));
    model.addAttribute("mobile",account.getMobile() );
    return "admin/account/list";
  }
  /**
   * 编辑用户状态
   * @param account
   * @return
   */
  @RequestMapping(value="/edit",method=RequestMethod.POST)
  @ResponseBody
  public Result<Boolean> edit(Account account){
    Account findById = accountService.findById(account.getId());
    findById.setStatus(account.getStatus());
    //表示数据合法,可以保存到数据库
    accountService.save(findById);
    return Result.success(true);
  }
}
package com.yuanlrc.movie.controller.admin;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.yuanlrc.movie.bean.CinemaServices;
import com.yuanlrc.movie.bean.CodeMsg;
import com.yuanlrc.movie.bean.PageBean;
import com.yuanlrc.movie.bean.Result;
import com.yuanlrc.movie.entity.common.Area;
import com.yuanlrc.movie.entity.common.Cinema;
import com.yuanlrc.movie.entity.common.CinemaComment;
import com.yuanlrc.movie.service.common.AreaService;
import com.yuanlrc.movie.service.common.CinemaCommentService;
import com.yuanlrc.movie.service.common.CinemaService;
import com.yuanlrc.movie.util.ValidateEntityUtil;
/**
 * 电影院管理控制器
 * @author Administrator
 *
 */
@RequestMapping("/admin/cinema")
@Controller
public class CinemaController {
  @Autowired
  private CinemaService cinemaService;
  @Autowired
  private AreaService areaService;
  @Autowired
  private CinemaCommentService cinemaCommentService;
  /**
   * 电影院列表页面
   * @param model
   * @return
   */
  @RequestMapping(value="/list")
  public String list(Model model,Cinema cinema,PageBean<Cinema> pageBean){
    model.addAttribute("pageBean", cinemaService.findPage(cinema, pageBean));
    model.addAttribute("name",cinema.getName());
    return "admin/cinema/list";
  }
  /**
   * 电影院添加页面
   * @param model
   * @return
   */
  @RequestMapping(value="/add",method=RequestMethod.GET)
  public String add(Model model){
    model.addAttribute("provinceList", areaService.getAllProvince());
    model.addAttribute("cinemaServiceList", CinemaServices.values());
    return "admin/cinema/add";
  }
  /**
   * 电影院编辑页面
   * @param model
   * @param id
   * @return
   */
  @RequestMapping(value="/edit",method=RequestMethod.GET)
  public String edit(Model model,@RequestParam(name="id",required=true)Long id){
    Cinema cinema = cinemaService.findById(id);
    model.addAttribute("cinema", cinema);
    model.addAttribute("provinceList", areaService.getAllProvince());
    model.addAttribute("cityList", areaService.getAllCity(cinema.getArea().getProvinceId()));
    model.addAttribute("districtList", areaService.getAllDistrict(cinema.getArea().getCityId()));
    model.addAttribute("cinemaServiceList", CinemaServices.values());
    return "admin/cinema/edit";
  }
  /**
   * 添加电影院表单提交
   * @param cinema
   * @return
   */
  @RequestMapping(value="/add",method=RequestMethod.POST)
  @ResponseBody
  public Result<Boolean> add(Cinema cinema){
    if(cinema == null){
      return Result.error(CodeMsg.DATA_ERROR);
    }
    CodeMsg validate = ValidateEntityUtil.validate(cinema);
    if(validate.getCode() != CodeMsg.SUCCESS.getCode()){
      return Result.error(validate);
    }
    //判断是否是编辑
    if(cinema.getId() != null && cinema.getId() > 0){
      Cinema findById = cinemaService.findById(cinema.getId());
      cinema.setCreateTime(findById.getCreateTime());
      cinema.setRate(findById.getRate());
      cinema.setRateCount(findById.getRateCount());
    }
    if(cinema.getArea() != null){
      Area province = areaService.findById(cinema.getArea().getProvinceId());
      Area city = areaService.findById(cinema.getArea().getCityId());
      String address = "";
      if(province != null){
        address = province.getName();
      }
      if(city != null){
        address += city.getName();
      }
      cinema.setAddress(address+cinema.getAddress());
    }
    //表示数据合法,可以保存到数据库
    if(cinemaService.save(cinema) == null){
      return Result.error(CodeMsg.ADMIN_CINEMA_SAVE_ERROR);
    }
    return Result.success(true);
  }
  /**
   * 删除
   * @param id
   * @return
   */
  @RequestMapping(value="/delete",method=RequestMethod.POST)
  @ResponseBody
  public Result<Boolean> delete(@RequestParam(name="id",required=true)Long id){
    try {
      cinemaService.delete(id);
    } catch (Exception e) {
      return Result.error(CodeMsg.ADMIN_CINEMA_DELETE_ERROR);
    }
    return Result.success(true);
  }
  /**
   * ----------影院评价管理-------------
   */
  /**
   * 影院评价列表
   * @param model
   * @param cinemaComment
   * @param pageBean
   * @return
   */
  @RequestMapping(value="/comment_list")
  public String list(Model model,CinemaComment cinemaComment,PageBean<CinemaComment> pageBean){
    model.addAttribute("pageBean", cinemaCommentService.findPage(cinemaComment, pageBean));
    model.addAttribute("content",cinemaComment.getContent());
    return "admin/cinema/comment_list";
  }
  /**
   * 删除评价
   * @param id
   * @return
   */
  @RequestMapping(value="/delete_comment",method=RequestMethod.POST)
  @ResponseBody
  public Result<Boolean> deleteComment(@RequestParam(name="id",required=true)Long id){
    cinemaCommentService.delete(id);
    return Result.success(true);
  }
}
package com.yuanlrc.movie.controller.admin;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.yuanlrc.movie.bean.CodeMsg;
import com.yuanlrc.movie.bean.Result;
import com.yuanlrc.movie.entity.admin.Menu;
import com.yuanlrc.movie.service.admin.MenuService;
import com.yuanlrc.movie.service.admin.OperaterLogService;
import com.yuanlrc.movie.util.MenuUtil;
import com.yuanlrc.movie.util.ValidateEntityUtil;
/**
 * 后台菜单管理控制器
 * @author Administrator
 *
 */
@RequestMapping("/admin/menu")
@Controller
public class MenuController {
  @Autowired
  private MenuService menuService;
  @Autowired
  private OperaterLogService operaterLogService;
  /**
   * 菜单列表展示页面
   * @param model
   * @return
   */
  @RequestMapping(value="/list")
  public String list(Model model){
    List<Menu> findAll = menuService.findAll();
    model.addAttribute("title","菜单列表");
    model.addAttribute("topMenus",MenuUtil.getTopMenus(findAll));
    model.addAttribute("secondMenus",MenuUtil.getSecondMenus(findAll));
    model.addAttribute("thirdMenus",MenuUtil.getThirdMenus(findAll));
    return "admin/menu/list";
  }
  /**
   * 菜单添加页面
   * @param model
   * @return
   */
  @RequestMapping(value="/add",method=RequestMethod.GET)
  public String add(Model model){
    List<Menu> findAll = menuService.findAll();
    model.addAttribute("title","菜单列表");
    model.addAttribute("topMenus",MenuUtil.getTopMenus(findAll));
    model.addAttribute("secondMenus",MenuUtil.getSecondMenus(findAll));
    return "admin/menu/add";
  }
  /**
   * 菜单添加提交表单处理
   * @param menu
   * @return
   */
  @RequestMapping(value="/add",method=RequestMethod.POST)
  @ResponseBody
  public Result<Boolean> add(Menu menu){
    if(menu == null){
      Result.error(CodeMsg.DATA_ERROR);
    }
    //用统一验证实体方法验证是否合法
    CodeMsg validate = ValidateEntityUtil.validate(menu);
    if(validate.getCode() != CodeMsg.SUCCESS.getCode()){
      return Result.error(validate);
    }
    if(menu.getParent() != null){
      if(menu.getParent().getId() == null){
        menu.setParent(null);
      }
    }
    //表示验证都通过,开始添加数据库
    if(menuService.save(menu) == null){
      Result.error(CodeMsg.ADMIN_MENU_ADD_ERROR);
    }
    //数据库添加操作成功,记录日志
    operaterLogService.add("添加菜单信息【" + menu + "】");
    return Result.success(true);
  }
  /**
   * 菜单编辑页面
   * @param model
   * @param id
   * @return
   */
  @RequestMapping(value="/edit",method=RequestMethod.GET)
  public String eidt(Model model,@RequestParam(name="id",required=true)Long id){
    List<Menu> findAll = menuService.findAll();
    model.addAttribute("title","菜单列表");
    model.addAttribute("topMenus",MenuUtil.getTopMenus(findAll));
    model.addAttribute("secondMenus",MenuUtil.getSecondMenus(findAll));
    model.addAttribute("menu",menuService.find(id));
    return "admin/menu/edit";
  }
  /**
   * 菜单编辑页面表单提交处理
   * @param request
   * @param menu
   * @return
   */
  @RequestMapping(value="/edit",method=RequestMethod.POST)
  @ResponseBody
  public Result<Boolean> edit(Menu menu){
    if(menu == null){
      Result.error(CodeMsg.DATA_ERROR);
    }
    if(menu.getId() == null){
      Result.error(CodeMsg.ADMIN_MENU_ID_EMPTY);
    }
    //用统一验证实体方法验证是否合法
    CodeMsg validate = ValidateEntityUtil.validate(menu);
    if(validate.getCode() != CodeMsg.SUCCESS.getCode()){
      return Result.error(validate);
    }
    if(menu.getParent() != null){
      if(menu.getParent().getId() == null){
        menu.setParent(null);
      }
    }
    Menu existMenu = menuService.find(menu.getId());
    if(existMenu == null){
      Result.error(CodeMsg.ADMIN_MENU_ID_ERROR);
    }
    //表示验证都通过,开始添加数据库
    existMenu.setIcon(menu.getIcon());
    existMenu.setName(menu.getName());
    existMenu.setParent(menu.getParent());
    existMenu.setSort(menu.getSort());
    existMenu.setUrl(menu.getUrl());
    existMenu.setButton(menu.isButton());
    existMenu.setShow(menu.isShow());
    if(menuService.save(existMenu) == null){
      Result.error(CodeMsg.ADMIN_MENU_ADD_ERROR);
    }
    //数据库添加操作成功,记录日志
    operaterLogService.add("编辑菜单信息【" + existMenu + "】");
    return Result.success(true);
  }
  /**
   * 删除菜单信息
   * @param request
   * @param id
   * @return
   */
  @RequestMapping(value="/delete",method=RequestMethod.POST)
  @ResponseBody
  public Result<Boolean> delete(@RequestParam(name="id",required=true)Long id){
    try {
      menuService.delete(id);
    } catch (Exception e) {
      return Result.error(CodeMsg.ADMIN_MENU_DELETE_ERROR);
    }
    //数据库添加操作成功,记录日志
    operaterLogService.add("删除菜单信息,菜单ID【" + id + "】");
    return Result.success(true);
  }
}

五,相关作品展示

基于Java开发、Python开发、PHP开发、C#开发等相关语言开发的实战项目

基于Nodejs、Vue等前端技术开发的前端实战项目

基于微信小程序和安卓APP应用开发的相关作品

基于51单片机等嵌入式物联网开发应用

基于各类算法实现的AI智能应用

基于大数据实现的各类数据管理和推荐系统


相关文章
|
1月前
|
安全 算法 Java
在Spring Boot中应用Jasypt以加密配置信息。
通过以上步骤,可以在Spring Boot应用中有效地利用Jasypt对配置信息进行加密,这样即使配置文件被泄露,其中的敏感信息也不会直接暴露给攻击者。这是一种在不牺牲操作复杂度的情况下提升应用安全性的简便方法。
576 10
|
5月前
|
XML 前端开发 Java
SpringBoot实现文件上传下载功能
本文介绍了如何使用SpringBoot实现文件上传与下载功能,涵盖配置和代码实现。包括Maven依赖配置(如`spring-boot-starter-web`和`spring-boot-starter-thymeleaf`)、前端HTML页面设计、WebConfig路径映射配置、YAML文件路径设置,以及核心的文件上传(通过`MultipartFile`处理)和下载(利用`ResponseEntity`返回文件流)功能的Java代码实现。文章由Colorful_WP撰写,内容详实,适合开发者学习参考。
484 0
|
6月前
|
Java 测试技术 微服务
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——少量配置信息的情形
本课主要讲解Spring Boot项目中的属性配置方法。在实际开发中,测试与生产环境的配置往往不同,因此不应将配置信息硬编码在代码中,而应使用配置文件管理,如`application.yml`。例如,在微服务架构下,可通过配置文件设置调用其他服务的地址(如订单服务端口8002),并利用`@Value`注解在代码中读取这些配置值。这种方式使项目更灵活,便于后续修改和维护。
89 0
|
2月前
|
人工智能 安全 Java
Spring Boot yml 配置敏感信息加密
本文介绍了如何在 Spring Boot 项目中使用 Jasypt 实现配置文件加密,包含添加依赖、配置密钥、生成加密值、在配置中使用加密值及验证步骤,并提供了注意事项,确保敏感信息的安全管理。
707 1
|
4月前
|
安全 Java API
Spring Boot 功能模块全解析:构建现代Java应用的技术图谱
Spring Boot不是一个单一的工具,而是一个由众多功能模块组成的生态系统。这些模块可以根据应用需求灵活组合,构建从简单的REST API到复杂的微服务系统,再到现代的AI驱动应用。
|
5月前
|
SQL 前端开发 Java
深入理解 Spring Boot 项目中的分页与排序功能
本文深入讲解了在Spring Boot项目中实现分页与排序功能的完整流程。通过实际案例,从Service层接口设计到Mapper层SQL动态生成,再到Controller层参数传递及前端页面交互,逐一剖析每个环节的核心逻辑与实现细节。重点包括分页计算、排序参数校验、动态SQL处理以及前后端联动,确保数据展示高效且安全。适合希望掌握分页排序实现原理的开发者参考学习。
317 4
|
5月前
|
存储 Java 定位技术
SpringBoot整合高德地图完成天气预报功能
本文介绍了如何在SpringBoot项目中整合高德地图API实现天气预报功能。从创建SpringBoot项目、配置依赖和申请高德地图API开始,详细讲解了实体类设计、服务层实现(调用高德地图API获取实时与预报天气数据)、控制器层接口开发以及定时任务的设置。通过示例代码,展示了如何获取并处理天气数据,最终提供实时天气与未来几天天气预报的接口。文章还提供了测试方法及运行步骤,帮助开发者快速上手并扩展功能。
|
6月前
|
Java 微服务 Spring
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——少量配置信息的情形
在微服务架构中,随着业务复杂度增加,项目可能需要调用多个微服务。为避免使用`@Value`注解逐一引入配置的繁琐,可通过定义配置类(如`MicroServiceUrl`)并结合`@ConfigurationProperties`注解实现批量管理。此方法需在配置文件中设置微服务地址(如订单、用户、购物车服务),并通过`@Component`将配置类纳入Spring容器。最后,在Controller中通过`@Resource`注入配置类即可便捷使用,提升代码可维护性。
96 0
|
8月前
|
JavaScript NoSQL Java
基于SpringBoot+Vue实现的大学生就业服务平台设计与实现(系统源码+文档+数据库+部署等)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
|
8月前
|
JavaScript NoSQL Java
基于SpringBoot+Vue实现的冬奥会科普平台设计与实现(系统源码+文档+数据库+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!

热门文章

最新文章