• mysql基于ssm协同过滤推荐算法的电影院购票系统毕业设计源码131124


    基于ssm协同过滤推荐算法的电影院购票系统

     

       随着信息技术的飞速发展以及Internet的迅速普及,以Web2.0为代表的互联网技术使得网络数据呈爆炸式增长,越来越多的信息和服务充斥着网络。人们在日常生活中能接触到越来越多的信息但同时也增加了其找到对自己有用信息的难度,即产生了“信息过载”所谓的“信息过载”是指用户的知识水平、认知能力有限,在面对海量复杂的互联网信息时,不能快速准确找到自己需要的信息,甚至无法理解和使用信息。所以面对海量的数据,如何从中摄取到对用户有用的数据成为焦点。

    本电影院售票系统是针对目前电影院售票系统的实际需求,从实际工作出发,对过去的售票系统存在的问题进行分析,结合计算机系统的结构、概念、模型、原理、方法,在计算机各种优势的情况下,采用目前最流行的B/S结构、java技术MySQL数据库设计并实现的 。本电影院售票系统主要包括登录模块、管理员模块、会员模块等功能。它帮助电影院售票系统实现了信息化、网络化,通过测试,实现了系统设计目标,相比传统的管理模式,本系统合理的利用了网络数据资源,有效的减少了电影院售票系统的经济投入,大大提高了电影院售票系统的效率。

    关键词:JAVA编程语言;MYSQL数据库;售票系统

    Cinema ticket purchasing system based on SSM collaborative filtering recommendation algorithm

    ABSTRACT

    With the rapid development of information technology and the rapid popularization of Internet, web2 The Internet technology represented by 0 makes the network data grow explosively, and more and more information and services fill the network. People can access more and more information in their daily life, but it also increases the difficulty of finding useful information for themselves, that is, there is an "information overload". The so-called "information overload" refers to the limited knowledge level and cognitive ability of users. In the face of massive and complex Internet information, they can not quickly and accurately find the information they need, or even understand and use the information. Therefore, in the face of massive data, how to get useful data for users has become the focus.

    According to the actual needs of the current cinema ticketing system, starting from the actual work, this cinema ticketing system analyzes the problems existing in the past ticketing system, combines the structure, concept, model, principle and method of the computer system, and adopts the most popular B / S structure, Java technology and MySQL database to design and implement under the condition of various advantages of the computer. The cinema ticketing system mainly includes login module, administrator module, member module and other functions. It helps the cinema ticketing system realize informatization and networking, and realizes the system design goal through testing. Compared with the traditional management mode, this system makes rational use of network data resources, effectively reduces the economic investment of the cinema ticketing system, and greatly improves the efficiency of the cinema ticketing system.

    Key words: Java programming language; Mysql database; Ticketing system

    目   录

    第1章 绪论

    1.1开发背景

    1.2开发意义

    1.3研究内容

    第2章 技术与原理

    2.1  SSM框架

    2.2  JAVA技术

    2.3  MySQL数据库

    2.4  B/S结构

    第3章 系统分析

    3.1可行性分析

    3.1.1经济可行性

    3.1.2技术可行性

    3.1.3操作可行性

    3.1.4 时间可行性

    3.1.5 法律可行性

    3.2需求分析

    3.3数据流程分析

    第4章 系统设计

    4.1系统结构设计

    4.2功能模块设计

    4.3数据库设计

    4.3.1 E-R图设计

    4.3.2表设计

    第5章  系统实现

    5.1登录模块的实现

    5.2系统功能模块

    5.3管理员功能模块

    5.4会员后台功能模块

    第6章  系统测试

    6.1 程序测试基本概念

    6.2 程序测试具体内容

    6.2.1 测试的重要性及目的

    6.2.2登录测试

    6.2.3用户管理模块测试

    6.3 系统的优点

    第7章  总结

    致  谢

    参考文献

    1 绪论

    1.1开发背景

    在发展迅速的信息化时代中,越来越多互联网科技走进人们的生活,人们开始接受互联网带来的方便快捷的服务,同时享受这互联网带来的冲击。电影院售票系统是目前管理电影院售票不可或缺的管理网站,但是由于各种无法预测的现实原因让它无法普遍实现出来,。如果时间久了,管理十分不便利,存在误差,查询难的现象,一旦数据过多,人工管理方式就很难维持。随着信息技术的应用拓展,逐渐引用了信息化技术管理,逐渐取代了人工管理模式,采用计算机系统来管理售票信息,智能的管理减少了人力物力财力,节省了管理的时间和空间,提升了工作的准确率和效率。本次系统开发,主要以售票系统为对象,根据需求来完成功能设计。

    1.2开发意义

    为了解决“信息过载”的问题,已经有无数科学家和工程师提出了很多天才的解决方案,其中代表性的解决方案是分类目录和搜索引擎。而这两种解决方案分别催生了雅虎和谷歌两家互联网领域的著名公司。雅虎凭借分类目录起家,将著名的网站分门别类,从而方便用户根据类别查找网站但是随着互联网规模的不断扩大,分类目录也只能覆盖少量的热门网站,越来越不能满足用户的需求因此催发了搜索引擎的诞生,以谷歌为代表的搜索引擎可以让用户通过关键词找到自己需要的信息但是,搜索引擎需要用户主动提供准确的关键词来寻找信息,因此不能解决用户的很多其他需求,比如当用户无法主动提供准确描述自己需求的关键词时,搜索引擎就无能为力了。另一方面,搜索引擎根据关键字检索的信息是千篇一律的,不能满足各种用户在不同阶段不同背景下的个性化需求。由于搜索引擎存在这样的缺陷,采用协同过滤算法的电影院购票系统应运而生。

    采用协同过滤算法的电影院购票系统也是一种帮助用户快速发现有用信息的工具,和搜索引擎不同的是,采用协同过滤算法的电影院购票系统不需要用户提供明确的需求,而是通过分析用户的历史行为为用户的兴趣建模,从而主动推荐能够满足用户兴趣和需求的信息。搜索引擎满足了用户有明确目的时的主动查找需求,而采用协同过滤算法的电影院购票系统能够在用户没有明确目的时帮助他们发现感兴趣的新内容。从物品的角度出发,采用协同过滤算法的电影院购票系统可以更好地发掘物品的长尾。互联网条件下,电子商务网站往往能出售比传统零售店更丰富的商品。虽然其中绝大多数是不热门的商品,但其数量极其庞大,因此这些长尾商品的销售额将是一个不可小觑的数字。如果要通过发掘长尾提高销售额,就必须充分研究用户的兴趣,而这正是协同过滤算法的电影院购票系统主要解决的问题。协同过滤算法的电影院购票系统通过发掘用户行为,找到用户的个性化需求,从而将长尾物品准确地推荐给需要它的用户,帮助用户发现那些他们感兴趣但很难发现的物品。

    如今,随着互联网的飞速发展,人们越来越意识到电影院购票系统的重要性并投入其中。目前几乎所有的大型视频网站,如腾讯、优酷、爱奇艺都建立起了自己的协同过滤算法的电影院购票系统,为用户提供个性化智能服务。在日趋激烈的竞争环境下,个性化电影院购票系统能有效的提高用户体验,提高电子商务网站的服务质量,为企业带来巨大的经济效益。因此,采用协同过滤算法的电影院购票系统技术的研究具有重要的商业价值和使用意义。

    1.3研究内容

    本系统使用的角色主要有系统管理员、普通用户,本系统分为系统前台和系统后台,首先在系统前台,游客用户可以经过账号注册,管理员审核通过后,用账号密码登录系统前台,进行首页、站点内容(轮播图、公告栏)系统用户(管理员、普通用户)公共内容(留言板、论坛分类列表、电影资讯、资讯分类列表)模块管理(影院信息、电影信息、分类管理、订单信息)等操作,在前台用户可以通过标题和类别进行前台信息的搜索,普通用户可以登录个人中心进行个人资料管等功能。后台主要由管理员使用,以管理员的身份在登录页面输入账号和密码,经过数据库身份验证,验证成功后登录系统主页,可以使用首页、留言板、公告栏、电影资讯、影院信息、电影信息等功能操作。同时管理员可以通过关键字搜索可以搜索相应的信息。

    2 技术与原理

    2.1  SSM框架

    当今流行的“SSM组合框架”是Spring + SpringMVC + MyBatis的缩写,受到很多的追捧,“组合SSM框架”是强强联手、各司其职、协调互补的团队精神。web项目的框架,通常更简单的数据源。Spring属于一个轻量级的反转控制框架(IoC),但它也是一个面向表面的容器(AOP)。SpringMVC常常用于控制器的分类工作模式,与模型对象分开,程序对象的作用与自动取款机进行处理。这种解耦治疗使整个系统的个性化变得更加容易。MyBatis是一个良好的可持续性框架,支持普通SQL查询,同时允许对存储过程的高级映射进行数据的优化处理。大型Java Web应用程序的由于开发成本太高,开发后难以维护和开发过程中一些难以解决的问题,而采用“SSM组合框架”,它允许建立业务层次结构,并为这个问题提供良好的解决方案。

    2.2  JAVA技术

    Java语言是目前使用率最高的一个语言类程序,并且他的代码还是开源的,任何的软件开发者都可以进行使用,目前已经在人类计算机编程语言发展史上产生了深远影响。所以Java语言是很成熟的,将他应用到我们的系统的开发中是不错的选择,而且由于常见所以绝大多数的人们都可以操作。

    Java语言具有非常多种的特性,他的代码编写非常的简单,并且有多种编写方式,他有很好的面向对象性,而且他对使用的平台没有任何的要求,所有的平台都可以进行操作,他的安全性能也很高,因此他非常适合该系统的开发。

    Java可以对平台没有任何的要求限制,可以在任何的平台上进行运行,不需要借助其他的语言编辑器来对代码进行编辑就可以开始运行了,这一点是非常好的,不仅我们在使用的时候更加的方便而且由于不需要借助其他的程序就能实现,所以可以节约我们的开发成本,而且经过Java编辑过的程序代码,可以直接进行使用,不需要重新编译,因此它是非常便利的,而且程序的运用不需要有专业的技术就可以运行了,为软件开发提供了很大的可行性。

    2.3  MySQL数据库

    mysql数据库具有很多的优点,他操作起来非常的简单,只需要编写一小段代码就可以实现相应的功能,而且编写出的代码可以在任何的平台下进行使用,对使用平台没有任何的要求,因此任何的软件开发人员都可以利用mysql数据库来进行系统的开发设计,同时他也可以为软件开发节省了很多的开销,mysql数据库由于存储量大、操作简单。功能强大因此将他最为该系统的数据存储是完全可以的。

    mysq数据库是一个开放的架构,任何软件开发员都可以进行使用,随着计算机网络的不断发展,MySQL数据库也在功能方面不断的进行提升,也更加适应所有的系统的开发,我们在对数据库进行操作的时候,是非常简单易上手的,我们只需要编写一小段的代码就可以实现相应的功能,而且编辑出的代码可以在任何的平台上使用,不需要在进行二次的编译。由于MySQL数据库具有以上非常多的优点,我们将它最为数据库的首选应用到系统的开发中,由于他的体积非常小,开发的成本也非常的低,所有受到很多软件开发者的喜欢,被更多的运用到系统的开放中,所以本系统也是利用MySQL数据库来对所有的数据进行存储和编辑。

    2.4  B/S结构

    B/S(浏览器/服务器)结构是目前使用最多的结构模式,它可以使得系统的开发更加的简单,好操作,而且还可以对其进行维护。使用该结构时只需要在计算机中安装数据库,和一些很常用的浏览器就可以了。浏览器就会与数据库进行信息的连接,可以实现很多的功能,B/S结构是可以直接进行使用的,而且B/S结构在使用中极大的减少了工作的维护。基于B/S的软件,所有的数据库之间都是相互独立的,因此是非常安全的。因为基于B/S结构可以清楚的看到系统正在处理的业务,并且能够及时的让管理人员作出决策,这样就可以避免企业的损失。B/S结构的基本特点是集中式的管理模式,用户使用系统生成数据后,这些数据就可以存储到系统的数据库中,方便日后能够用到,这样就可以满足人们的所有的需求。

    图2-1  B/S模式三层结构图

    3 系统分析

    3.1可行性分析

    本文的设计的系统将会分别从经济的可行性,技术的可行性以及操作的可行性等方面进行全面的可行性的分析。

    3.1.1经济可行性

    本系统是电影院售票系统,面向的是电脑用户所以成本并不高,维护和调试只需个别成员参与,所以人力投入也很少。虽说人力和资金的投入不是很多,但是面临的增益是十分的可观尤其是从长远角度来看,所谓知识是无价的,而保管者需要面临很多困扰,而电影院售票系统很大程度上解决了这一问题,未来,需要投入到资源保管的人十分的少,不需要很多的人就够了,人少却又能保证信息的安全,那么对人员的资金就可以减少不少,并且工作人员并不会很辛苦。

    使用的数据库是MySQL数据库,对于小型网站来讲是很低的成本,大大减少了空间,而原有的空间则可以用来处理别的事物

    3.1.2技术可行性

    在技术方面也是完全可以做到的,目前所拥有的技术足以开发出一个完整的电影院售票系统。因为面向的对象较为单一,所以所需要的技术并不复杂,皆是学校内所学到的知识,而且所需要的工具也不是很复杂。使用Dreamweaver作为开发的平台,使用SSM编写页面和apache连接数据库,使用最简单的MySQL数据库,维护起来也是十分的容易,而本系统是基于B/S的结构创建的,也是比较简单明了的。所以从技术方面来讲也是可以实行的

    3.1.3操作可行性

    本系统的开发,运用的是基础技术,面向的是单一群体,所以不会造成信息拥堵和崩溃的局面,所以运行时是可以较快的执行用户的命令的。而存在于页面的数据都会以表单的形式传送到数据库,所以不会造成混乱

    就目前而言,计算机普及的时代,学习维护和运用系统并不会很困难,所以人员方面是可以实行的,而且系统可以运用在不同的计算机上,所以这里也是可以运行的

    3.1.4 时间可行性

    就时间而言,因为项目并不是很庞大,所以是可以在时间范围内完成的。但是需要好好把握时间的安排,因为本次毕业设计是单人的,所以需要自我监督和敦促,不能见异思迁,一定要先有一个明确的时间规划表。才能在有限的时间内完成本系统

    3.1.5 法律可行性

    本系统所用的技术和资源均是合法的,引用的部分都有注明,参考文献等也是合乎规定的,是属于个人的创作成果,没有涉及到危害他人的知识产权的行为

    3.2需求分析

    针对现存的问题和需要,通过功能需求的分析,特建立了数字化、信息化的电影院售票系统。

    本系统主要包含了首页、个人中心、电影分类管理、热映电影管理、会员管理、留言板管理、系统管理、订单管理等多个功能。不同的权限对应相应的功能模块的需求,管理员权限的级别是最高的,所以所对应的需求是最多的。

    3.3数据流程分析

    数据流图的简称为DFD,是通过使用图形的方法对系统所具备的逻辑功能进行阐述,描述系统数据的流向和逻辑变换。由于该方法能将难以阐述的问题进行表述,因此被开发者广泛应用,是当前应用范围较为广泛的结构化系统分析方法。

    零层数据流程是流程中最抽象的一层,它包括了登录管理、管理员功能管理和检索维护管理等功能模块,在登录模块使用到的数据存储有管理员账户信息文档、管理员信息文档,管理员功能管理模块需要的存储是管理员添加信息文档、查询信息文档、删除信息文档,检索维护是通过以上这些文档信息通过关键词进行搜索。

    系统的1层数据流图如下图所示。

    3-2系统数据流图(1层)

    2层为管理员操作后台数据流图,管理员可以分别通过添加、修改和删除来对系统管理员进行管理,如下图所示:

    3-4系统数据流图(2层)

    4 系统设计

    4.1系统结构设计

    系统设计主要是管理员登录后对整个系统相关操作进行处理,可进行管理员的添加和删除,影院信息、电影信息、分类管理、订单信息等操作管理。

    系统的功能结构图如下图所示。

         

    4-1系统功能结构图

    4.2功能模块设计

    系统登录:系统登录是管理员访问系统的路口,设计了系统登录界面,包括管理员名、密码和验证码,然后对登录进来的管理员判断身份信息,判断是管理员还是普通用户。

    管理员管理:管理员可以管理系统的其他普通用户的账号,包括录入新管理员,删除现有的普通用户,修改现有的普通用户的信息,并可以通过管理员名和姓名等关键字搜索普通用户,打印管理员列表页面,导出管理员列表至excel中。

    修改密码:系统所有管理员(管理员和普通用户)应该都要能修改自己的登录密码,修改后需要重新登录。

    个人资料管理:由普通用户使用,普通用户登录系统后,可以修改个人原始信息,如修改电话号码、邮箱等,管理员的管理员名是无法修改的。

    登录情况管理:系统每个管理员应该都能查看个人的历史登录情况,如登录IP、登录时间、登录地址等,防止管理员账号被盗,加强管理员账号安全。

    操作日志管理:系统每个管理员应该都能查看个人的历史操作日志,如管理员添加了某条数据,历史操作日志需要展示操作人,操作描述,操作时间等信息。防止系统被黑客攻击,加强系统的安全性。

    4.3数据库设计

    系统里尤为关键的部分是在数据库方面,需要十分清晰的思路,所以从开始的设计时需要做到确立模块之间的联系,从而可以很明确的建立表间的联系和表中所需的内容。设计数据库还有一点是减少表的繁杂的创建,所以联系很关键,可以大大的减少,数据表中重复的事项。由此可以保证数据的完整和统一,不会造成数据的错误和重复,并且可以使数据得到数据库安全的保护,会使用户更加的放心

    4.3.1 E-R图设计

    概念设计是整个数据库设计的关键,在概念设计阶段,由需求分析得到了E-R模型。E-R图是识别功能模型与数据模型间关联关系的,在主题数据库的抽取和规范化的过程中,采用的是简化的E-R图表示方法,从而避免过繁过细的E-R图表示影响规划的直观和可用性。是对现实世界的抽象和概括,是数据库设计人员进行数据可设计的有力工具,能够方便直接地表达应用中的各种语义知识,令一方面它简单、清晰、易于用户理解

    管理员实体包括管理员名称、密码和权限三个属性。

    管理员体ER图如下图所示。

    4-4管理员ER

    电影信息管理ER图如下图所示。

    4-5电影信息管理ER

    用户管理ER图如下图所示。

    4-6会用户管理ER

    4.3.2表设计

    数据库表是数据库重要的组成部分,其实数据库只是一个框架,数据库表才是数据库的本质,本系统数据库表如下:

    cinema_information

    字段名称

    类型

    长度

    不是null

    主键

    字段说明

    cinema_information_id

    int

    11

    主键

    影院信息ID

    cinema_name

    varchar

    64

    影院名称

    cinema_location

    varchar

    64

    影院位置

    cinema_telephone

    varchar

    64

    影院电话

    cinema_pictures

    varchar

    255

    影院图片

    cinema_introduction

    text

    0

    影院简介

    hits

    int

    11

    点击数

    recommend

    int

    11

    智能推荐

    create_time

    datetime

    0

    创建时间

    update_time

    timestamp

    0

    更新时间

    classification_management

    字段名称

    类型

    长度

    不是null

    主键

    字段说明

    classification_management_id

    int

    11

    主键

    分类管理ID

    film_classification

    varchar

    64

    电影分类

    recommend

    int

    11

    智能推荐

    create_time

    datetime

    0

    创建时间

    update_time

    timestamp

    0

    更新时间

    comment

    字段名称

    类型

    长度

    不是null

    主键

    字段说明

    comment_id

    int

    11

    主键

    评论ID

    user_id

    int

    11

    评论人ID

    reply_to_id

    int

    11

    回复评论ID空为0

    content

    longtext

    0

    内容

    nickname

    varchar

    255

    昵称

    avatar

    varchar

    255

    头像地址[0,255]

    create_time

    timestamp

    0

    创建时间

    update_time

    timestamp

    0

    更新时间

    source_table

    varchar

    255

    来源表

    source_field

    varchar

    255

    来源字段

    source_id

    int

    10

    来源ID

    movie_information

    字段名称

    类型

    长度

    不是null

    主键

    字段说明

    movie_information_id

    int

    11

    主键

    电影信息ID

    movie_title

    varchar

    64

    电影名称

    film_classification

    varchar

    64

    电影分类

    cover_photo_

    varchar

    255

    封面图片

    movie_ticket_price

    int

    11

    电影票价

    session_information

    varchar

    64

    场次信息

    movie_gags

    varchar

    255

    电影花絮

    cinema_name

    varchar

    64

    影院名称

    film_description

    text

    0

    电影描述

    hits

    int

    11

    点击数

    recommend

    int

    11

    智能推荐

    create_time

    datetime

    0

    创建时间

    update_time

    timestamp

    0

    更新时间

    notice

    字段名称

    类型

    长度

    不是null

    主键

    字段说明

    notice_id

    mediumint

    8

    主键

    公告id

    title

    varchar

    125

    标题

    content

    longtext

    0

    正文

    create_time

    timestamp

    0

    创建时间

    update_time

    timestamp

    0

    更新时间

    order_information

    字段名称

    类型

    长度

    不是null

    主键

    字段说明

    order_information_id

    int

    11

    主键

    订单信息ID

    movie_title

    varchar

    64

    电影名称

    film_classification

    varchar

    64

    电影分类

    movie_ticket_price

    varchar

    64

    电影票价

    cinema_name

    varchar

    64

    影院名称

    booking_quantity

    int

    11

    订票数量

    total_fare

    varchar

    64

    票价总计

    booker

    int

    11

    订票人

    session_remarks

    varchar

    64

    场次备注

    pay_state

    varchar

    16

    支付状态

    pay_type

    varchar

    16

    支付类型 微信、支付宝、网银

    recommend

    int

    11

    智能推荐

    seat

    varchar

    64

    座位号

    create_time

    datetime

    0

    创建时间

    update_time

    timestamp

    0

    更新时间

    ordinary_users

    字段名称

    类型

    长度

    不是null

    主键

    字段说明

    ordinary_users_id

    int

    11

    主键

    普通用户ID

    full_name

    varchar

    64

    姓名

    gender

    varchar

    64

    性别

    examine_state

    varchar

    16

    审核状态

    recommend

    int

    11

    智能推荐

    user_id

    int

    11

    用户ID

    create_time

    datetime

    0

    创建时间

    update_time

    timestamp

    0

    更新时间

    5  系统实现

    5.1登录模块的实现

    系统登录模块可分为前台登录模块和后台登录模块,为确保系统安全性,系统操作员只有在登录界面输入正确的管理员名、密码、权限以及验证码,单击登录按钮后才能够进入本系统的主界面。

    管理员登录流程图如下所示。

    5-1管理员登录流程图

    登录界面如下图所示。 

    5-2登录界面

    登录代码如下:

     /**

         * 登录

         * @param data

         * @param httpServletRequest

         * @return

         */

        @PostMapping("login")

        public Map login(@RequestBody Map data, HttpServletRequest httpServletRequest) {

            log.info("[执行登录接口]");

            String username = data.get("username");

            String email = data.get("email");

            String phone = data.get("phone");

            String password = data.get("password");

            List resultList = null;

            QueryWrapper wrapper = new QueryWrapper();

            Map map = new HashMap<>();

            if(username != null && "".equals(username) == false){

                map.put("username", username);

                resultList = service.selectBaseList(service.select(map, new HashMap<>()));

            }

            else if(email != null && "".equals(email) == false){

                map.put("email", email);

                resultList = service.selectBaseList(service.select(map, new HashMap<>()));

            }

            else if(phone != null && "".equals(phone) == false){

                map.put("phone", phone);

                resultList = service.selectBaseList(service.select(map, new HashMap<>()));

            }else{

                return error(30000, "账号或密码不能为空");

            }

            if (resultList == null || password == null) {

                return error(30000, "账号或密码不能为空");

            }

            //判断是否有这个用户

            if (resultList.size()<=0){

                return error(30000,"用户不存在");

            }

            User byUsername = (User) resultList.get(0);

            Map groupMap = new HashMap<>();

            groupMap.put("name",byUsername.getUserGroup());

            List groupList = userGroupService.selectBaseList(userGroupService.select(groupMap, new HashMap<>()));

            if (groupList.size()<1){

                return error(30000,"用户组不存在");

            }

            UserGroup userGroup = (UserGroup) groupList.get(0);

            //查询用户审核状态

            if (!StringUtils.isEmpty(userGroup.getSourceTable())){

                String res = service.selectExamineState(userGroup.getSourceTable(),byUsername.getUserId());

                if (res==null){

                    return error(30000,"用户不存在");

                }

                if (!res.equals("已通过")){

                    return error(30000,"该用户审核未通过");

                }

            }

            //查询用户状态

            if (byUsername.getState()!=1){

                return error(30000,"用户非可用状态,不能登录");

            }

            String md5password = service.encryption(password);

            if (byUsername.getPassword().equals(md5password)) {

                // 存储Token到数据库

                AccessToken accessToken = new AccessToken();

                accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));

                accessToken.setUser_id(byUsername.getUserId());

                tokenService.save(accessToken);

                // 返回用户信息

                JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));

                user.put("token", accessToken.getToken());

                JSONObject ret = new JSONObject();

                ret.put("obj",user);

                return success(ret);

            } else {

                return error(30000, "账号或密码不正确");

            }

    }

        public String select(Map query,Map config){

            StringBuffer sql = new StringBuffer("select ");

            sql.append(config.get(FindConfig.FIELD) == null || "".equals(config.get(FindConfig.FIELD)) ? "*" : config.get(FindConfig.FIELD)).append(" ");

            sql.append("from ").append("`").append(table).append("`").append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));

            if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){

                sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");

            }

            if (config.get(FindConfig.ORDER_BY) != null && !"".equals(config.get(FindConfig.ORDER_BY))){

                sql.append("order by ").append(config.get(FindConfig.ORDER_BY)).append(" ");

            }

            if (config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE))){

                int page = config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE)) ? Integer.parseInt(config.get(FindConfig.PAGE)) : 1;

                int limit = config.get(FindConfig.SIZE) != null && !"".equals(config.get(FindConfig.SIZE)) ? Integer.parseInt(config.get(FindConfig.SIZE)) : 10;

                sql.append(" limit ").append( (page-1)*limit ).append(" , ").append(limit);

            }

            log.info("[{}] - 查询操作,sql: {}",table,sql);

            return sql.toString();

    }

        public List selectBaseList(String select) {

            List> mapList = baseMapper.selectBaseList(select);

            List list = new ArrayList<>();

            for (Map map:mapList) {

                list.add(JSON.parseObject(JSON.toJSONString(map),eClass));

            }

            return list;

    }

    5.2系统功能模块

    电影院售票系统,在系统首页可以查看首页、留言板、公告栏、电影资讯、影院信息、电影信息等内容进行详细操作,如图5-3所示。

    图5-3系统首页界面图

    系统首页代码如下:

        

        

        

        

            ${sql}

        

        

            ${sql}

        

       

      会员注册,在会员注册页面通过填写会员号、密码、姓名、年龄、手机、邮箱、身份证等信息完成会员注册,如图5-4所示。在个人中心页面通过填写会员号、密码、姓名、年龄、性别、手机、邮箱、身份证、余额等信息进行信息更新,还可以根据需要对我的订单、我的地址、我的收藏进行相应操作,如图5-5所示。

    图5-4会员注册界面图

    图5-5个人中心界面图

    注册代码如下:

       /**

         * 注册

         * @return

         */

        @PostMapping("register")

        public Map signUp(HttpServletRequest request) throws IOException {

            // 查询用户

            Map query = new HashMap<>();

            Map map = service.readBody(request.getReader());

            query.put("username",String.valueOf(map.get("username")));

            List list = service.selectBaseList(service.select(query, new HashMap<>()));

            if (list.size()>0){

                return error(30000, "用户已存在");

            }

            map.put("password",service.encryption(String.valueOf(map.get("password"))));

            service.insert(map);

            return success(1);

    }

        public Map readBody(BufferedReader reader){

            BufferedReader br = null;

            StringBuilder sb = new StringBuilder("");

            try{

                br = reader;

                String str;

                while ((str = br.readLine()) != null){

                    sb.append(str);

                }

                br.close();

                String json = sb.toString();

                return JSONObject.parseObject(json, Map.class);

            }catch (IOException e){

                e.printStackTrace();

            }finally{

                if (null != br){

                    try{

                        br.close();

                    }catch (IOException e){

                        e.printStackTrace();

                    }

                }

            }

            return null;

        }

        public void insert(Map body){

            E entity = JSON.parseObject(JSON.toJSONString(body),eClass);

            baseMapper.insert(entity);

            log.info("[{}] - 插入操作:{}",entity);

    }

        电影信息,在电影信息页面可以查看电影名称、价格、电影编号、电影类型、主演、导演、上映时间、放映场次、放映大厅、座位总数、电影介绍等详细内容进行立即预定、选座、评论或收藏等操作,如图5-6所示。

    图5-6电影信息界面图

    电影信息代码如下:

      @PostMapping("/add")

        @Transactional

        public Map add(HttpServletRequest request) throws IOException {

            Map paramMap = service.readBody(request.getReader());

            this.addMap(paramMap);

            return success(1);

    }

        @Transactional

        public Map addMap(Map map){

            service.insert(map);

            return success(1);

    }

    5.3管理员功能模块

    管理员登录进入系统可以查看首页、站点内容(轮播图、公告栏)系统用户(管理员、普通用户)公共内容(留言板、论坛分类列表、电影资讯、资讯分类列表)模块管理(影院信息、电影信息、分类管理、订单信息)等信息进行详细操作,如图5-7所示。

    图5-7管理员功能界面图

    电影分类管理,在电影分类管理页面中可以查看索引、电影类型等内容进行修改或删除等详细操作,如图5-8所示。

    图5-8电影分类管理界面图

    电影信息管理,在电影信息管理页面中可以查看索引、电影类型、电影名称、电影票价、场次信息、电影花絮、影院名称等信息,并可根据需要进行详情、修改、查看评论或删除等操作,如图5-9所示。

    图5-9电影信息管理界面图

    用户管理,在用户管理页面中可以查看索引、用户名、姓名、性别等信息,并可根据需要进行详情、修改或删除等详细操作,如图5-10所示。

    图5-10用户管理界面图

    留言板管理,在留言板管理页面中可以查看索引、用户名、留言内容、回复内容等内容,并且根据需要进行详情、修改、回复或删除等详细操作,如图5-11所示。

    图5-11留言板管理界面图

    订单管理,在已支付订单页面中可以查看索引、电影名称、电影分类、电影票价、影院名称、订票数量、票价总计、订票人等操作,并且根据需要对已完成订单、未支付订单、已取消订单进行相应操作,如图5-12所示。

    图5-12订单管理界面图

    5.4会员后台功能模块

    会员登录进入系统后台可以查看首页、个人中心、订单管理等内容,并根据需要进行相应操作,如图5-13所示。

    图5-13会员后台功能界面图

    订单管理,在已支付订单页面中可以查看索引、电影名称、电影分类、电影票价、影院名称、订票数量、票价总计、订票人等操作,并且根据需要对已完成订单、未支付订单、已取消订单、已退款订单进行相应操作,如图5-14所示。

    图5-14订单管理界面图

    6  系统测试

    6.1 程序测试基本概念

    程序测试是很重要的一个环节,当自身的程序已经完成时,仍需要测试来保证程序的正确性和可靠性,因为往往此时出现的错误就是用户可能会出现的错误,所以调试变得至关重要。唯有经过多次的调试才能够使系统达到完美的状态,使得用户可以安全,放心的使用程序,保障用户信息的安全是每个系统最基本的需求,因而调试也就是系统的最基本的要求。但是为了保证说最大程度减少开发者的工作量,应当分三个阶段来测试,初期,中期和最终期。前期:主要调试模块间的关系部分,看看是否是正确的,合理的,否则到后面会造成难以修改和总是出错的现象。中期:插入部分数据,看看是否数据库方面连接和设计得当,有些时候理念存在的是不能够在现实中完美实现的,并且调试界面找到最优的布局。最终期:插入全部数据,看是否正确,修改页面看是否能达到最初预期效果,检查功能是否完全实现。

    6.2 程序测试具体内容

    6.2.1 测试的重要性及目的

    1.测试的重要性

    只有经过反复的测试,才能够使系统得到最稳定的状态,才能把最好的一面展现给使用的用户,是极为关键的一个步骤。但是往往也是大家极容易忽视的一个部分,因为绝大部分的人认为这个部分是不重要的,但事实并非如此,任何系统不管怎样做都不可能完全去除错误,所以需要测试来最大程度的降低和减少错误。要在多环境下进行测试,以保证用户能够在不同环境配置下都能够正常使用。大多数,用户的需求是不断更新的,所以测试具有十分重要的意义,能够及时的把握到用户的最新动态,做出对系统的修改。

    测试的目的

    测试是为了让用户能够使用到系统的最好一面,能够充分利用到系统内的跟自己相关的部分。另一方面,从系统开发者的角度来说,这个举措有助于开发者在开发系统的同时能够与用户保持有好的关系,能够使开发的系统减少最多的错误和误差,并且有助于开发,边测试边开发,能够及时解决用户的需求,而开发者也能够减少返工的工作量,保证开发是朝着正确的道路前进的,并且对于用户来说能够定期看到一定的工作成果,也是更有助于提出更好的意见,而不是到末期突然提出大量的工作需求。这样可以使得用户和开发者之间的关系得到一定程度的改善,而开发者也从中得到更多改善系统的方向。

    6.2.2登录测试

    登录及管理员添加模块是对各个系统中不可缺少的功能之一,为了对在运行过程能正常的操作本项目就要对此进行测试。

    1. 使用不同浏览器访问服务器的IP地址。

    2. 输入特殊的信息登录系统,例如边界值等。

    3. 查看登录及管理员添加之后登录系统所返回的结果。

    无论系统管理员还是用户登录时都需要用户名和密码进行登录,当输入正确的用户名和密码观察是否正常登录。登录测试表如下表6-1所示:

    6-1登录测试表

    名称

    功能名称

    操作阐述

    期盼结果

    测试结果

    登录信息管理

    登录

    系统管理员登录时输入

    账号:admin密码:admin

    进入后台主页面

    成功

    添加用户登录时输入

    账号:zhangchao密码:000000

    进入系统首页

    成功

    用户添加成功之后会给出提示,继续进行登录操作,用户添加成功验证的页面如下图6-2所示:

    图6-2 系统后台管理员登录成功页面

    管理员可以管理添加用户的信息。添加测试表如下表6-2所示:

    6-2添加测试表

    名称

    功能名称

    操作阐述

    期盼结果

    测试结果

    添加信息管理

    添加

    管理员进入添加用户管理页面

    成功显示所有添加用户列表

    成功

    管理员进入添加用户管理页面,点击删除按钮

    删除成功,出现删除成功的提示

    成功

    用户进入添加页面,按提示输入添加用户信息

    添加成功,出现添加成功的提示

    成功

    6.2.3用户管理模块测试

    用户管理信息模块对本界面中的数据和信息进行相对应得基本操作,主要有查看用户,删除用户等。

    点击右面的删除按钮之后,会“提示确定要删除”,点击删除之后的验证页面如下图6-3所示:

    图6-3 系统点击确定删除按钮页面

    管理员在可以查看并删除用户。用户管理如表6-3所示:

    6-3用户管理测试表

    模块名称

    功能名称

    操作描述

    预期结果

    测试结果

    用户信息管理

    查看

    管理员进入用户管理页面,查看用户 

    所有用户均显示

    成功

    删除

    管理员进入用户管理页面,点击删除按钮 

    弹窗提示,删除成功

    成功

    6.3 系统的优点

    本系统的优点在于界面简单,对于有计算机基本操作的人群均可以高效的使用,查询功能可以使使用者在大量的数据搜索时能够快速的找到所需要的内容,开发的结构简单所以便于日后进行维护和更新功能。信息的添加和查询,使得资源得到了充分的利用。功能并不复杂所以执行速度也较快,所以用户可以得到比较良好的体验,系统内部的增删改查也比较人性化,所以比较快捷和精准。用户为管理员用户,而身份而判别使得系统比较明了,更具有安全性,系统内的数据是得到了一定的保护的。而页面上添加用户,新增添了的一个优势在于,添加后的用户,需得到管理员的审核才能够使用,避免了恶意添加或是恶意进入用户内部的举动。并且管理员据有最高权限,保证数据的安全

    7  总结

    经过几个月的努力还坚持,基于ssm协同过滤推荐算法的电影院购票系统终于完成了,程序功能模块能按照需求来运行,能实现多管理员的迸发使用,但是系统由于设计经验以及旅行团知识的局限性,在本系统的开发过程中,在一些功能方面和业务逻辑方面做得不是很完善,系统还存在一些缺陷。界面的设计从布局到外观,受限于自身的设计功底较低,没能达到自己所要设计的界面要求,另一方面,系统存在一些没有考虑的问题和模块。

    在学习的过程中首次进行独立设计工作,编码过程出现了许多问题和困难,原以为正确无误的程序运行过程中不会遇到问题,但是在运行过程中也总会出现各种各样的问题,在调试过程中找不出运行出错的原因。而这些基本问题却都是一些简单的问题,例如标点符号应该是英文状态下的,却因为不好的编程习惯造成了一些中文的符号输入,经过仔细观察和老师的帮组下,还是将问题解决了。

    目前系统的功能比较简单,还存在许多瑕疵,这是一份遗憾,也是促进我不断进步的动力。

      

    经历了近三个多月的动手实践及老师辛勤的指导和同学朋友热心的帮助下,本人的毕业设计电影院售票系统的基本功能也基本完成。

    此次设计中,通过不断的探讨与学习使我熟悉、使我初步了解了JAVA相关技术。做的是一个B/S结构的电影院售票系统,使我对做网站所需要,及运行的环境有了初步的了解,在此次设计中我翻阅了较多的书籍,在有限的时间了丰富了对电影院售票系统技术的知识也积累了少许的经验。起初对JAVA的初步认识,通过这次设计更进一步的了解了其工作原理,懂得了配置服务器环境,连接数据库源,在设计过程中,也学会了用dreamweaver设计一个简单的页面,增强了动手的能力,激发了在此方面的兴趣。

    但是由于时间、基础及缺乏实践等多方面的问题,还有诸多需要解决的问题依然存在,设计中很多方面考虑不够周全或者考虑不到。

    非常感谢我的老师,我的同学,我的朋友并希望在今后的学习生活中不断陪养多方面的兴趣,不断学习进步从而能够实现独立完成。设计中存在的诸多缺点诚肯老师的原谅。

    参考文献

    [1]王宁,沈正一,崔德龙,刘晴瑞.结合协同过滤与隐语义模型的视频推荐策略[J].湖南工程学院学报(自然科学版),2021,31(04):40-43.DOI:10.15987/j.cnki.hgbjbz.2021.04.007.

    [2]Sufyan bin Uzayr. Mastering Java:A Beginner's Guide[M].CRC Press:2021-11-01.

    [3]李滨,李广庆,万义鹏. 基于TF-IDF算法及视频图像识别的视频电影院购票系统在新媒体中的应用[C]//中国新闻技术工作者联合会2021年学术年会论文集.,2021:98-100.DOI:10.26914/c.cnkihy.2021.047241.

    [4]杨东辰. 基子Spark大数据的短视频电影院购票系统的设计与研究[D].南昌大学,2021.

    [5]姚伟.基于协同过滤的视频电影院购票系统设计[J].网络安全技术与应用,2021(05):54-55.

    [6]何璐. 具有个性化推荐功能的云点播平台的设计与实现[D].电子科技大学,2021.DOI:10.27005/d.cnki.gdzku.2021.002549.

    [7]Minmin He,Shengli Lv. Research on Civil Aircraft Structural Strength Material Performance Database Based on SpringBoot[C]//Proceedings of 2020 4th International Conference on Electrical,Automation and Mechanical Engineering(EAME2020).Proceedings of 2020 4th International Conference on Electrical,2020:1062-1067.DOI:10.26914/c.cnkihy.2020.057541.

    [8]陈凡. 视频检索与电影院购票系统的设计与实现[D].华中科技大学,2020.DOI:10.27157/d.cnki.ghzku.2020.000327.

    [9]李佳铭. 智慧教育平台中课程推荐算法的研究与应用[D].中北大学,2020.DOI:10.27470/d.cnki.ghbgc.2020.000632.

    [10]朱璐微. 基于用户行为的视频推荐[D].云南财经大学,2020.DOI:10.27455/d.cnki.gycmc.2020.000573.

    [11]蔡梓超. 基于推荐算法的移动微视频社区系统的设计与实现[D].广东工业大学,2020.DOI:10.27029/d.cnki.ggdgu.2020.000496.

    [12]张雨萌. 基于内容推荐的视频服务平台的设计与实现[D].北京交通大学,2020.DOI:10.26944/d.cnki.gbfju.2020.003772.

    [13]任开旭. 融合内容的协同过滤电影院购票系统[D].北京邮电大学,2020.DOI:10.26969/d.cnki.gbydu.2020.002969.

    [14]Kan Ji,Xiaojun Chen,Aoming Qin,Jia Liu,Jinmei Wu. Design and Implementation of Teaching Quality Evaluation System Based on SpringBoot[C]//第七届计算与信息科学国际学术会议论文集.,2019:444-452.

    [15]张晶. 基于改进的协同过滤短视频个性化电影院购票系统分析与实现[D].江西农业大学,2019.DOI:10.27177/d.cnki.gjxnu.2019.000035.

    免费领取本源代码,请关注点赞+私信

  • 相关阅读:
    ERR_PNPM_LINKING_FAILED Error: EPERM: operation not permitted, rename
    分布式任务调度内的 MySQL 分页查询优化
    【集训DAY N】函数【数学】
    ElasticSearch7.3学习(十四)----生产环境实时重建索引
    【openGauss】让gsql和sqlplus输出包含有SQL及数据的完全一致的文本文件
    golang学习之七:并发编程基础(goroutine、channel、select)
    MHA+MYCAT 高可用架构
    Python python-docx 使用教程
    【第四阶段】kotlin语言集合转换与快捷转换学习
    HIC-YOLOv5:改进的YOLOv5,用于小物体检测
  • 原文地址:https://blog.csdn.net/m0_73244011/article/details/126817194