基于ssm+vue652的在线电影票购买系统的设计与实现

博主介绍:专注于Java(springboot ssm 等开发框架) vue  .net  php phython node.js    uniapp 微信小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作
☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟
我的博客空间发布了1500+毕设题目 方便大家学习使用
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人
更多项目地址 介绍  翰文编程CSDN博客 翰文编程-CSDN博客
文末下方有源码获取地址

3.1系统功能结构设计

系统的功能结构是采用树形图来绘制功能设计。根据分析所得,本系统的功能设计为管理员、用户两部分。管理员为电影管理、公告管理、订单管理、电影类型管理、用户管理、个人中心管理等,用户的功能为查询电影,在线选座、购票、管理个人信息等。用户可以注册进行登录。本基于Java Web的在线电影票购买系统的功能结构设计图如下图3-1所示:  

图3-1基于Java Web的在线电影票购买系统功能结构图

3.2数据库设计

数据库为数据的仓库,决定了数据的保存和修改、删除、调用等。数据库的稳定决定了系统里数据的安全。为了保证数据的查询效率,在建立数据库时需要按照一定的规则。数据不单指文本类型的,也包括音乐、图片甚至是声音都可以称为数据。为了使数据库更加安全,在建立数据库时就需要使用正规的数据库管理系统和在设置权限时需要设置严格的角色分权,更要阻止一切外部端口的探测形为。

本系统采用MySQL数据库,在建立数据库时采用Root用户名。数据库的建立过程为先进行数据的ER图设计然后进行数据库表的实现。

3.2.1数据ER图设计

数据ER图中记录了关系、实体、属性。实体与实体的关系决定了数据在调用时的正确与否,实体的属性决定了该实体的内容。数据ER图的设计同样重要,也是数据库建立的基础。

通过系统中的功能数据分析,本系统的实体主要有电影、管理员、用户、订单等。

  1. 管理员的ER图中的属性有账号、密码、权限。管理员ER图如下图3-2所示:

图3-2管理员ER图

  1. 用户的ER图里的属性有性别、姓名、编号等,用户的ER图如下图3-3所示:

图3-3用户ER图

  1. 电影的ER图里的属性有电影编号、价格、主演、图片等,电影的ER图如下图3-4所示:

图3-4电影ER图

(4)订单的ER图里的属性有订单人、编号、订单时间、电影等,订单ER图如下图3-5所示:

图3-5订单ER图

3.2.2数据库表设计

数据库表是把ER图进行详细化、实体化。不同的表名下保存着相对应的表信息数据。在数据库表里记录着数据的主键、外键、数据类型、长度等。本基于Java Web的在线电影票购买系统所创建的数据库表有用户信息表、电影信息表、订单信息表、公告信息表等。本基于Java Web的在线电影票购买系统的数据库表如下表3-1—3-10所示:

表3-1 config

表3-2 dianying

表3-3 dianying_collection

表3-4 dianying_commentback

表3-5 dianying_order

表3-6 dictionary

表3-7 gonggao

表3-8 token

表3-9 users

表3-10 yonghu

第4章 系统详细实现                                                                                                                                                                                                                                                                                                                                                                                                  

4.1用户登录功能的详细实现

用户登录界面起到验证身份的作用,本界面采用粉色背景进行设计。在用户登录界面里设置了程序的名称和用户、密码的文本框。在文本框下是用户登录、注册用户两个按钮。用户在信息输入完成后可以使用相关按钮进行相对应的操作。用户登录功能的实现界面如下图4-1所示:

图4-1用户登录实现界面

4.2管理员权限的功能实现

4.2.1用户信息管理功能的详细实现

管理员负责用户信息的审核和管理,用户的账号和密码都可以由管理员在此功能里看到。管理员查询用户信息的功能实现如下图4-2所示:

图4-2管理员查询用户信息的实现界面

4.2.2电影管理功能的详细实现

管理员可以对电影的信息进行发布和修改、删除。本功能可以实现电影的定时更新和审核管理。管理员查询电影信息的实现界面如下图4-3所示:

图4-3管理员查询电影信息的实现界面

4.2.3基础数据管理功能的详细实现

    本功能包括对公告类型信息和电影类型进行管理。可以添加、查询公告类型信息和电影类型信息。基础数据管理功能的实现详情如下图4-4所示:

图4-4基础数据管理功能的实现界面

4.2.4电影评价管理功能的详细实现

管理员可以查看电影的评价信息,做好评价收集可以更好的安排电影。电影评价功能的实现界面如下图4-5所示:

图4-5电影评价信息的实现界面

4.2.5电影订单管理功能的详细实现

管理员可以管理用户的订单,用户是否付款也可以在该功能里看到。电影订单管理功能的实现界面如下图4-6所示:

图4-6电影订单管理功能的实现界面

4.2.6个人中心管理功能的详细实现

管理员可以对个人的资料进行修改和管理,管理员还可以在本功能里修改密码。管理员添加管理员账号的实现界面如下图4-7所示:

图4-7添加管理员账号功能的实现界面

4.2.7公告管理功能的实现界面

    管理员可以发布公告和实现公告的编辑、删除。管理员查询公告信息的实现界面如下图4-8所示:

图4-8查询公告信息的实现界面

4.2.8轮播图信息管理功能的实现界面

    管理员可以添加图片和设置首页的图片播放。查询轮播图信息的实现界面如下图4-9所示:

图4-9轮播图信息的查找界面

4.3用户权限的功能详细实现

4.3.1电影查询功能的详细实现

用户可以根据电影的发布时间查询电影信息。用户查询电影的界面实现如下图4-10所示:

图4-10电影查询功能的运行界面

主要代码:


    /**
    * 后端列表
    */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
        logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(false)
            return R.error(511,"永不会进入");
        else if("用户".equals(role))
            params.put("yonghuId",request.getSession().getAttribute("userId"));
        params.put("dianyingDeleteStart",1);params.put("dianyingDeleteEnd",1);
        if(params.get("orderBy")==null || params.get("orderBy")==""){
            params.put("orderBy","id");
        }
        PageUtils page = dianyingService.queryPage(params);

        //字典表数据转换
        List<DianyingView> list =(List<DianyingView>)page.getList();
        for(DianyingView c:list){
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(c, request);
        }
        return R.ok().put("data", page);
    }

    /**
    * 后端详情
    */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id, HttpServletRequest request){
        logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
        DianyingEntity dianying = dianyingService.selectById(id);
        if(dianying !=null){
            //entity转view
            DianyingView view = new DianyingView();
            BeanUtils.copyProperties( dianying , view );//把实体数据重构到view中

            //修改对应字典表字段
            dictionaryService.dictionaryConvert(view, request);
            return R.ok().put("data", view);
        }else {
            return R.error(511,"查不到数据");
        }

    }

    /**
    * 后端保存
    */
    @RequestMapping("/save")
    public R save(@RequestBody DianyingEntity dianying, HttpServletRequest request){
        logger.debug("save方法:,,Controller:{},,dianying:{}",this.getClass().getName(),dianying.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(false)
            return R.error(511,"永远不会进入");

        Wrapper<DianyingEntity> queryWrapper = new EntityWrapper<DianyingEntity>()
            .eq("dianying_name", dianying.getDianyingName())
            .eq("dianying_address", dianying.getDianyingAddress())
            .eq("dianying_types", dianying.getDianyingTypes())
            .eq("dianying_shijian", dianying.getDianyingShijian())
            .eq("zuowei_number", dianying.getZuoweiNumber())
            .eq("dianying_clicknum", dianying.getDianyingClicknum())
            .eq("shangxia_types", dianying.getShangxiaTypes())
            .eq("dianying_delete", dianying.getDianyingDelete())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        DianyingEntity dianyingEntity = dianyingService.selectOne(queryWrapper);
        if(dianyingEntity==null){
            dianying.setDianyingClicknum(1);
            dianying.setShangxiaTypes(1);
            dianying.setDianyingDelete(1);
            dianying.setCreateTime(new Date());
            dianyingService.insert(dianying);
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }

    /**
    * 后端修改
    */
    @RequestMapping("/update")
    public R update(@RequestBody DianyingEntity dianying, HttpServletRequest request){
        logger.debug("update方法:,,Controller:{},,dianying:{}",this.getClass().getName(),dianying.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));
//        if(false)
//            return R.error(511,"永远不会进入");
        //根据字段查询是否有相同数据
        Wrapper<DianyingEntity> queryWrapper = new EntityWrapper<DianyingEntity>()
            .notIn("id",dianying.getId())
            .andNew()
            .eq("dianying_name", dianying.getDianyingName())
            .eq("dianying_address", dianying.getDianyingAddress())
            .eq("dianying_types", dianying.getDianyingTypes())
            .eq("dianying_shijian", dianying.getDianyingShijian())
            .eq("zuowei_number", dianying.getZuoweiNumber())
            .eq("dianying_clicknum", dianying.getDianyingClicknum())
            .eq("shangxia_types", dianying.getShangxiaTypes())
            .eq("dianying_delete", dianying.getDianyingDelete())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        DianyingEntity dianyingEntity = dianyingService.selectOne(queryWrapper);
        if("".equals(dianying.getDianyingPhoto()) || "null".equals(dianying.getDianyingPhoto())){
                dianying.setDianyingPhoto(null);
        }
        if(dianyingEntity==null){
            dianyingService.updateById(dianying);//根据id更新
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }

4.3.2在线选座功能的详细实现

用户在想要购买电影票时可以选择自己想坐的座位,已选择的座位以绿色表示,未选择的座位以灰色表示。在线选座功能的实现界面如下图4-11所示:

图4-11在线选座功能的实现界面

大家点赞、收藏、关注、评论啦  其他的定制服务  下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 或者私信作者

猜你喜欢

转载自blog.csdn.net/qq_41221322/article/details/143384086