SSM游戏账号租赁平台 计算机专业毕业设计源码89734

摘 要

随着国民生活水平的逐渐提高,每逢假期或空闲时节走出家门游山玩水已渐渐成为人们生活的一部分。互联网的普及给人们带来的便利不需多说,因此如果把游戏产业与互联网结合起来,利用Java技术建设游戏账号租赁平台,实现游戏账号租赁管理的网络化。则对于进一步提高国民经济发展,丰富人们的精神生活定能起到不少的促进作用。

根据游戏账号租赁平台的研究现状和发展趋势,系统从需求分析、结构设计、数据库设计,在到系统实现,并且可以将系统分为前端实现和后端实现。本系统力求结合实际找出一种切实可行的开发方案,经过反复研究和学习,借助Java编程语言、JSP技术、MySQL数据库和Tomcat服务器来完成系统的所有功能,主要根据用户需求来完成首页、轮播图、公告栏、资源管理(游戏资讯、资讯分类)交流管理(论坛系统、论坛分类)系统用户(管理员、注册用户、卖家)模块管理(游戏分类、游戏信息、游戏购买、游戏账号、用户买号)等功能,最后进行系统测试,来检测系统的权限和漏洞,从而将系统完善,达到符合标准。

关键词:游戏账号租赁平台;Java编程语言;MySQL数据库;Tomcat服务器

                                            SSM game account rental platform

ABSTRACT

With the gradual improvement of national living standards, going out to visit mountains and rivers in holidays or leisure time has gradually become a part of people's life. It is needless to say that the popularity of the Internet brings convenience to people. Therefore, if we combine the game industry with the Internet, we can use Java technology to build a game account leasing platform and realize the networking of game account leasing management. It will certainly play a lot of promoting role in further improving the development of the national economy and enriching people's spiritual life.

According to the research status and development trend of the game account rental platform, the system can be divided into front-end implementation and back-end implementation from demand analysis, structure design, database design to system implementation. The system strives to find a practical development plan based on the actual situation. After repeated research and learning, it uses Java programming language, JSP technology, MySQL database and Tomcat server to complete all the functions of the system, mainly according to user needs to complete the home page, broadcast map, bulletin board Resource management (game information, information classification) communication management (forum system, forum classification) system user (administrator, registered user, seller) module management (game classification, game information, game purchase, game account, user purchase number) and other functions, and finally conduct system testing to detect the system's permissions and vulnerabilities, so as to improve the system to meet the standards.

Key words: game account leasing platform; Java programming language; MySQL database; Tomcat server

目录

第1章 绪论

1.1研究背景与意义

1.2开发现状

1.3本章小结

第2章 系统开发技术的介绍

2.2HTML/CSS简介

2.3ssm框架介绍

2.4MySQL数据库概念和特点

2.5本章小结

第3章 系统分析

3.1功能需求分析

3.2业务流程分析

3.3数据流程分析

3.4本章小结

第4章 系统设计

4.1系统设计思想

4.2系统总体设计

4.3系统功能模块设计

4.4数据库设计

4.4.1概念模型设计

4.4.2数据库表设计

4.4.3数据库连接接计

4.5本章小结

第5章 系统的实现

5.1实现环境说明

5.2前台首页的实现

5.3登录模块的实现

5.4公告模块的实现

5.4评论模块的实现

5.8游戏论坛管理模块的实现

5.9游戏账号管理模块的实现

5.11本章小结

第6章 系统测试

6.1测试目的

6.2界面测试

6.3功能测试

6.4测试结果

6.5本章小结

第7章 总结

致 谢

参考文献

第1章 绪论

1.1研究背景与意义

ENIAC的诞生使得信息不再被单调地记录在纸质传统媒介上;ARPANET的出现让人类看到了计算机间信息共享的希望;而Web技术的发展,让人们可以方便快捷地在桌面上完成信息交互。近年来,计算机参与到了人类衣食住行的各个方面,也改善了人们的生活品质。在获取外界信息方面,传统的报纸杂志等渠道已经远远不够,尤其是生活节奏越来越快、信息量越来越大、资讯内容形形色色,传统的资讯发布和管理工作日趋繁重复杂。因此基于Web技术的rpg游戏账号租赁平台应运而生。

1.2开发现状

西方发达国家步入互联网时代的时间较早,国外的新媒体已经由功能单一向初具规模发展,其掌握的相关技术也比较成熟。中国在这方面发展较晚,经历了不断的摸索和实践,目前国内的网络硬件设施基本上已经覆盖了大部分地区,国内的发展重点在于学习先进的互联网技术,使新媒体更好地为人们服务。

在国外,新媒体技术经历了十几年甚至更多年的发展,他们的核心功能基本上已经能够适应社会的飞速发展和人们更高的要求。另外,他们会把客户的实际需求作为最基本的考虑因素,尽量实现易操作高集成化的系统,从资讯的采集工作开始,资讯的提交,审核,修改,发布等各个环节都实现无缝对接。网络资讯会涉及到多领域的实时动态,也可以完成和用户的交互,还可以将传统媒体的文字转化为声音、图像、视频,使用户一目了然。美国的BuzzFeed通过网络从大量资讯博客中搜集资讯,为用户提供最新热门事件;美国有线电视资讯网Cable News Network全天候无休息直播资讯报道,CNN的用户还可以通过评论或电子邮件进行投稿,经编辑审核通过的稿件可在资讯网呈现;英国最大的资讯广播公司BBC的资讯服务BBC News会在各资讯版块显示出最受欢迎领域的最新消息;澳大利亚ABC资讯系统也会特别注重为公众提供最新的实时资讯。

以往的系统,一部分采用静态页面,需要管理人员必须手动制作新的网页,上传新的网页之后还需要修改链接;对于用户来说,管理人员发布新的网页时,用户无法访问系统。随着中国经济实力和科技实力的增强,资讯网站的技术也在不断进步,现在的技术已经可以解决静态网页的问题了。

1.3本章小结

本章主要对该系统的选题背景、选题意义,分析本人为什么要做这个系统,和这个系统给人们带来什么好处,有什么作用,以及论文的组成部分,还总述了整个系统的组成及实现的功能。

第2章 系统开发技术的介绍

2.1 开发技术说明:

本系统前端部分基于MVVM模式进行开发,采用B/S模式,后端部分基于Java的ssm框架进行开发。

前端部分:前端框架采用了比较流行的渐进式JavaScript框架Vue.js。使用Vue-Router和Vuex实现动态路由和全局状态管理,Ajax实现前后端通信,Element UI组件库使页面快速成型,项目前端通过栅格布局实现响应式,可适应PC端、平板端、手机端等不同屏幕大小尺寸的完美布局展示。

后端部分:采用ssm作为开发框架,同时集成MyBatis、Redis等相关技术。

2.2HTML/CSS简介

HTML全称为Hyper Text Markup Language,是一种超文本标记语言或超文本链接语言,被用来制作万维网页面的简单标记语言,计算机通过他来完成互联网的信息交流,借助浏览器在万维网中信息传递,是一种十分通用的标准语言[9]。

在目前,它在网络上被广泛应用,是大众普遍接受的一种通用制作网页的语言。HTML主要用于制作静态页面,HTML命令可以说明图形信息、表格信息、文字信息、链接信息等。HTML作为制作系统最基础的语言,它主要由头部(head)和主体(body)组成,头部可以加标题,展示浏览器所需信息,主体则是包含网页显示的内容。作为最基础的语言,在HTML文件中可以插入JSP语言形成JSP文件,也可以插入JavaScript语言形成不同风格的功能特效[10]。

2.3ssm框架介绍

SSM(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容)。常作为数据源较简单的web项目的框架。

2.3.1 Spring
Spring就像是整个项目中装配bean的大工厂,在配置文件中可以指定使用特定的参数去调用实体类的构造方法来实例化对象。也可以称之为项目中的粘合剂。
Spring的核心思想是IoC(控制反转),即不再需要程序员去显式地`new`一个对象,而是让Spring框架帮你来完成这一切。
2.3.2 SpringMVC
SpringMVC在项目中拦截用户请求,它的核心Servlet即DispatcherServlet承担中介或是前台这样的职责,将用户请求通过HandlerMapping去匹配Controller,Controller就是具体对应请求所执行的操作。SpringMVC相当于SSH框架中struts。
2.3.3 mybatis
mybatis是对jdbc的封装,它让数据库底层操作变的透明。mybatis的操作都是围绕一个sqlSessionFactory实例展开的。mybatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射。在每次与数据库交互时,通过sqlSessionFactory拿到一个sqlSession,再执行sql命令。

页面发送请求给控制器,控制器调用业务层处理逻辑,逻辑层向持久层发送请求,持久层与数据库交互,后将结果返回给业务层,业务层将处理逻辑发送给控制器,控制器再调用视图展现数据。

2.4MySQL数据库概念和特点

现代计算机中存储的数据呈现暴涨的趋势,工程师便设计了数据库及其管理工具来帮助程序员解决这一问题,使用数据库后,计算机的存储数据更加有秩序,数据的冗余度大大降低,数据的独立性大大提高,程序员操作数据更加方便。MySQL采用图形界面,使用方法一目了然[13]。

(1)MySQL是一款Relational Database Management System

(2)MySQL与Windows系统完美结合

(3)MySQL对计算机的硬件条件要求不高

(4)MySQL具有良好的可伸缩性

(2)MySQL具有良好的灵活性,它可以适应快速变化的环境[14] [15]。

2.5本章小结

    本章主要论述了开发本系统用到的技术和工具,分别对web前端设计工具MyEclipse,前端开发语言html+css+javascript,jsp后端语言和MySQL数据库进行详细介绍。

第3章 系统分析

3.1功能需求分析

本系统主要分为前端和后端两大板块,其中包括了用户管理、留言管理、游戏分类管理、游戏账号管理、游戏论坛管理、官方账号管理、官方论坛管理、系统管理等功能模块。

表3-1功能需求列表

编号

功能名称

功能描述

输入内容

输出内容

前台登录

保证注册用户通过身份验证进入系统前台进行操作

用户名、密码

用户登录是否成功和用户登录状态

用户注册

对注册用户进行检测,信息通过检测之后成为本系统的用户

用户名,密码、性别、QQ、邮箱等

注册的结果(提醒“用户注册成功”或者“用户注册失败”)

站内搜索

用户可以通过标题和类别搜索站内信息

输入标题、选择类别,点击搜索按钮

搜索出来的列表信息

增加留言

未登录系统的游客用户无法使用留言功能,登录后的用户增加留言

留言人、留言内容、呢称、头像等

系统提示留言成功,并显示新增的留言

留言回复

系统管理员查询已有的留言,并回复未回复的留言

留言的回复内容、回复人等

系统提示回复成功,并显示已回复的留言

留言管理

系统管理员查看所有的留言信息,并可以对其删除

选择某条留言,点击该条留言的删除按钮

系统提示是否删除,点击是则将该条留言删除

评论添加

注册用户选择要评论的信息进行添加评论

评论信息包括评语、评分等

评论是否成功及评论列表

评论管理

管理员对用户的评论信息进行管理,包括删除、修改

评论列表

删除是否成功或者修改是否成功

添加收藏

注册用户可以选择信息添加收藏

收藏信息表单

收藏是否成功

收藏管理

个人用户可以对自己的收藏记录进行管理包括删除、修改

收藏记录列表

删除是否成功或者修改是否成功

添加购买记录

用户添加购买记录

购买记录的相关信息

购买记录列表

添加游戏论坛信息

管理员添加游戏论坛信息

游戏论坛的相关信息

游戏论坛信息列表

编辑游戏论坛信息

管理员修改游戏论坛信息

游戏论坛相关信息

是否编辑成功

删除游戏论坛信息

管理员删除游戏论坛信息

游戏论坛信息

游戏论坛信息删除成功或失败

添加游戏账号信息

用户添加游戏账号信息

游戏账号的相关信息

游戏账号信息列表

编辑游戏账号信息

用户修改游戏账号信息

游戏账号相关信息

是否编辑成功

删除游戏账号信息

用户删除游戏账号信息

游戏账号信息

游戏账号信息删除成功或失败

3.2业务流程分析

业务流程图基本符号如下图所示。

                                  图3-1业务流程图基本符号

系统业务流程图具体如下图所示。

图3-2总体业务流程图

总体业务流程:首先在系统前台,游客用户可以经过账号注册,管理员审核通过后,用账号密码登录系统前台,查看游戏分类、游戏信息、游戏购买、游戏账号、用户买号,在前台用户可以通过标题和类别进行前台信息的搜索,用户可以登录个人中心进行游戏首页、论坛系统、公告、游戏资讯、游戏信息、游戏账号添加等功能。后台主要由管理员使用,以管理员的身份在登录页面输入账号和密码,经过数据库身份验证,验证成功后登录系统主页,可以使用首页、轮播图、公告栏、资源管理(游戏资讯、资讯分类)交流管理(论坛系统、论坛分类)系统用户(管理员、注册用户、卖家)模块管理(游戏分类、游戏信息、游戏购买、游戏账号、用户买号)等功能操作。

3.3数据流程分析

本系统根据上节所设计的各个业务流程图,采用逐层细化的方法,画的每一部分各层的数据流图如下:

1.0层数据流图

注册用户和管理员都可以通过登录系统的界面来进入系统,如下图所示:

图3-3 0层数据流图

系统根据登录的数据,判断是该用户是哪种角色,仍然后跳转至相应的功能页面,系统用户在系统内进行数据操作,此时数据流的有效数据流流向数据库中心执行相应的数据sql语句,反馈结果到显示页面上。

2.1层数据流图

1层为系统的详细数据流图。如下图所示:

图3-4 1层数据流图

1层数据流中,数据实体包括普通用户和管理员,普通用户数据流程包括留言反馈、在线点评;管理员用户数据流程包括用户管理、留言管理、游戏分类管理、游戏账号管理、游戏论坛管理、官方账号管理、官方论坛管理、系统管理;普通用户数据流包括操作信息、添加信息、浏览信息;管理员数据流包括添加信息、删除信息、修改信息、查询信息、浏览信息、提示信息等,数据表包括论坛表、评分表。

3.2层数据流图

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

图3-5 2层数据流图

2层数据流图中,数据流实体主要是管理员,数据流程包括论坛管理、游戏账号管理;数据流包括添加信息、删除信息、修改信息、查询信息、浏览信息、提示信息;数据表包括游戏账号表、游戏论坛表。

3.4本章小结

本章主要论述了对用户的需求调研,系统业务功能,用例分析,系统业务流程分析、数据流程分析,其中数据的组成包括前台和后台的详细数据。

第4章 系统设计

4.1系统设计思想

本课题的目的是设计一款基于jsp的游戏账号租赁平台以实现游戏资讯展示和管理。本系统采用B/S模式不仅可以避免用户必须安装专业软件才能开发系统或者访问系统的局限性,而且更加便利。该系统在不改变和影响用户操作习惯的前提下主要完成对有用信息的记录。

整个软件采用MVC(Model,View,Controller)框架,分别对以下三块进行详细介绍:

(1)Model(模型):

Model模块主要负责应用的核心加密解密功能,以及对数据库和文件的读写功能。该模块为Controller模块服务,在底层做好数据模型,供Controller调用,当完成某个业务逻辑时,Controller向Model发出控制信息,Model接收到控制信息后,做出相应的反应,记录数据和文件,完成业务逻辑操作。

(2)View(视图):

View视图是指用户看到并与之交互的界面。比如由html元素组成的网页界面,或者软件的客户端界面。MVC的好处之一在于它能为应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,它只是作为一种输出数据并允许用户操纵的方式。

(3)Controller(控制器):

controller控制器是指控制器接受用户的输入并调用模型和视图去完成用户的需求,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。

4.2系统总体设计

    根据前面的各项设计分析,按照系统开发的基本理念对系统进行分解,从模块上主要可分为前台模块和后台模块。

前台模块只要是让普通用户和游客用户使用,包括留言反馈、在线点评、游戏论坛发布、官方论坛查询、游戏账号添加,后台模块只要是让管理员使用,包括用户管理、留言管理、游戏分类管理、游戏账号管理、游戏论坛管理、官方账号管理、官方论坛管理、系统管理,后台可以对数据进行添加、删除、修改及查询等操作。

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

图4-1系统功能结构图

4.3系统功能模块设计

  1. 系统登录:系统登录是用户访问系统的路口,设计了系统登录界面,包括用户名、密码和验证码,然后对登录进来的用户判断身份信息,判断是管理员用户还是普通用户。
  2. 页面打印:设计系统时,在代码中连接打印机,进行系统的一些页面的打印。
  3. 导出报表:用户可能需要将某些数据列表提取出来,在代码中调用导出至excel中的函数,并开启连接excel的驱动,实现导出报表的功能。
  4. 系统用户管理:不管是超级管理员还是普通管理员都需要管理系统用户,包括普通管理员的添加、删除、修改、查询,修改管理员的登录密码,新添加的管理员用户可以登录系统。
  5. 注册用户管理:游客在前台首页注册后,经过管理员后台,不管是超级管理员还是普通管理员都需要管理注册用户,包括注册用户审核、删除、修改、查询,审核通过后,注册用户既可以通过账号和密码登录系统。
  6. 修改密码:系统所有用户(管理员和注册用户)应该都要能修改自己的登录密码,修改后需要重新登录。
  7. 增加留言:设计留言信息表,包含留言标题、留言内容、回复内容、留言人等字段,留言标题、留言内容用来存储用户增加的留言,回复内容用来存储管理员回复的留言内容。
  8. 留言管理:系统管理员对留言信息表的删除、查询等操作,回复留言则将回复内容存储在留言表的回复内容字段里,删除不需要的留言,使用户有足够的空间进行留言。
  9. 在线评论:注册用户在系统前台登录个人账号后,可以选择某个游戏论坛,进行评论,查看别人的评论信息。
  10. 评论管理:在系统后台,管理员进行游戏论坛的评论管理,每条游戏论坛对应自己的评论,管理员可以删除、修改、查询。
  11. 游戏论坛信息管理:用户录入游戏论坛信息,跳转至添游戏论坛页面,填写游戏论坛信息,提交后,游戏论坛信息存储数据库的游戏论坛信息表中,包括帖子标题、帖子封面、游戏类型、上传时间、发布人等信息。
  12. 游戏账号信息管理:游戏账号信息管理包括游戏账号信息录入、游戏账号信息修改、游戏账号信息删除,在数据库中设计并建立游戏账号信息表,管理员添加游戏账号信息,即往数据表中插入一条数据,删除游戏账号信息,则在数据库删除一条数据,修改游戏账号信息,则修改数据库的数据。

4.4数据库设计

4.4.1概念模型设计

建立数据库之前,要对系统的数据进行概念模型设计,设计实体包含哪些属性,实体和实体直接的关系是怎么样的,根据概念设计,得到下图的系统总体ER图。

图4-2系统总体ER图

4.4.2数据库表设计

在服务器上建立名为bysjxt的数据库,其中包括以下表:

game_account

字段名称

类型

长度

不是null

主键

字段说明

game_account_id

int

11

主键

游戏账号ID

seller_no

int

11

卖家编号

game_name

varchar

64

游戏名称

game_type

varchar

64

游戏类型

game_account

varchar

64

游戏账号

picture

varchar

255

图片

grade

varchar

64

等级

price

int

11

价格

existing_role

text

0

已有角色

game_skin

text

0

游戏皮肤

equipment

text

0

装备情况

hits

int

11

点击数

praise_len

int

11

点赞数

examine_state

varchar

16

审核状态

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

game_classification

字段名称

类型

长度

不是null

主键

字段说明

game_classification_id

int

11

主键

游戏分类ID

game_category

varchar

64

游戏类型

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

game_information

字段名称

类型

长度

不是null

主键

字段说明

game_information_id

int

11

主键

游戏信息ID

game_name

varchar

64

游戏名称

game_category

varchar

64

游戏类型

cover

varchar

255

封面

price

int

11

价格

development_company

varchar

64

开发公司

game_links

varchar

64

游戏链接

brief_introduction

text

0

简介

introduction_to_the_game

longtext

0

游戏介绍

hits

int

11

点击数

praise_len

int

11

点赞数

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

game_purchase

字段名称

类型

长度

不是null

主键

字段说明

game_purchase_id

int

11

主键

游戏购买ID

game_name

varchar

64

游戏名称

game_category

varchar

64

游戏类型

price

varchar

64

价格

development_company

varchar

64

开发公司

user_no

int

11

用户编号

full_name

varchar

64

姓名

examine_state

varchar

16

审核状态

examine_reply

varchar

16

审核回复

pay_state

varchar

16

支付状态

pay_type

varchar

16

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

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

registered_user

字段名称

类型

长度

不是null

主键

字段说明

registered_user_id

int

11

主键

注册用户ID

user_no

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

更新时间

seller

字段名称

类型

长度

不是null

主键

字段说明

seller_id

int

11

主键

卖家ID

seller_no

varchar

64

卖家编号

seller_name

varchar

64

卖家姓名

examine_state

varchar

16

审核状态

recommend

int

11

智能推荐

user_id

int

11

用户ID

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

user_purchase_number

字段名称

类型

长度

不是null

主键

字段说明

user_purchase_number_id

int

11

主键

用户买号ID

order_number

varchar

64

订单号

seller_no

int

11

卖家编号

game_name

varchar

64

游戏名称

game_account

varchar

64

游戏账号

grade

varchar

64

等级

price

varchar

64

价格

user_no

int

11

用户编号

full_name

varchar

64

姓名

examine_state

varchar

16

审核状态

examine_reply

varchar

16

审核回复

pay_state

varchar

16

支付状态

pay_type

varchar

16

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

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

4.4.3数据库连接接计

由于系统采用java语言和MySQL数据库,那么java如何连接MySQL数据库,完成本系统的数据操作。

1. 需要MySQL的连接驱动jar包——sqljdbc4.jar,将jar包加入到工程中,并设置好Build Path 。

2. 编写专门的数据库操作类,实现数据库的连接和操作: 

 @PostMapping("/upload")

    public Map<String, Object> upload(@RequestParam(value = "file",required=false) MultipartFile file,HttpServletRequest request) {

        log.info("进入方法");

        if (file.isEmpty()) {

            return error(30000, "没有选择文件");

        }

        try {

            //判断有没路径,没有则创建

            String filePath = request.getSession().getServletContext().getRealPath("\\") +"upload\\";

//            String filePath = System.getProperty("user.dir") + "\\target\\classes\\static\\upload\\";

            File targetDir = new File(filePath);

            if (!targetDir.exists() && !targetDir.isDirectory()) {

                if (targetDir.mkdirs()) {

                    log.info("创建目录成功");

                } else {

                    log.error("创建目录失败");

                }

            }

//            String path = ResourceUtils.getURL("classpath:").getPath() + "static/upload/";

//            String filePath = path.replace('/', '\\').substring(1, path.length());

            String fileName = file.getOriginalFilename();

            int lastIndexOf = fileName.lastIndexOf(".");

            //获取文件的后缀名 .jpg

            String suffix = fileName.substring(lastIndexOf);

            fileName = IdWorker.getId()+suffix;

            File dest = new File(filePath + fileName);

            log.info("文件路径:{}", dest.getPath());

            log.info("文件名:{}", dest.getName());

            file.transferTo(dest);

            JSONObject jsonObject = new JSONObject();

            jsonObject.put("url", "/api/upload/" + fileName);

            return success(jsonObject);

        } catch (IOException e) {

            log.info("上传失败:{}", e.getMessage());

        }

        return error(30000, "上传失败");

}

4.5本章小结

    本章主要论述了开发本系统时对系统进行的总体设计,包括网络设计采用B/S结构,然后对系统的前台和后台分别进行功能模块的设计,最后对系统的各个模块进行划分,详细介绍如何设计。

第5章 系统的实现

5.1实现环境说明

运行环境包括硬件要求及软件要求如下表所示。

硬件要求

CPU

双核2.0以上

内存

2G,4G以上更好

硬盘

100G以上

软件要求

操作系统

Windows 8 /Windows7/Windows10

开发工具

Myeclipse10

网站服务器

Tomcat7.0

数据库

MySQL2008

开发语言

JAVA语言

浏览器

360安全浏览器

5.2前台首页的实现

本系统设计的是一个游戏账号租赁平台。该系统总共分为首页、论坛系统、公告、游戏资讯、游戏信息、游戏账号等多个模块。通过对此系统的开发,达到了用户对了解。实现系统的实用性和易管理性。

系统首页如下图所示。

图5-1系统首页

前台首页集成了普通用户的注册页面,注册的独立页面为userreg.jsp,通过框架嵌入系统前台首页,用户填写好注册信息后,通过<form  action="userreg.jsp?f=f"  method="post" name="f1"  οnsubmit="return checkform();">方式提交表单,会通过javasrcript验证格式,如果格式有错误,则用户小窗口提示错误的地方,如果格式都正确,则跳转至dao的注册方法,实现注册用户,提示注册成功,并将注册的信息加入用户表中。

其中载入前台首页的主要代码如下:

 @RequestMapping("/get_obj")

    public Map<String, Object> obj(HttpServletRequest request) {

        List resultList = service.selectBaseList(service.select(service.readQuery(request), service.readConfig(request)));

        if (resultList.size() > 0) {

            JSONObject jsonObject = new JSONObject();

            jsonObject.put("obj",resultList.get(0));

            return success(jsonObject);

        } else {

            return success(null);

        }

}

用户注册流程图如下图所示。

图5-2用户注册流程图

用户注册界面如下图所示。

图5-3用户注册界面

用户注册的关键代码为:

 /**

     * 注册

     * @return

     */

    @PostMapping("register")

    public Map<String, Object> signUp(HttpServletRequest request) throws IOException {

        // 查询用户

        Map<String, String> query = new HashMap<>();

        Map<String,Object> 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<String,Object> 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<String,Object> body){

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

        baseMapper.insert(entity);

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

}

5.3登录模块的实现

系统的登录是使用该系统的第一关卡,用户在登录界面输入账号和密码后,系统判断该账号密码是否能在数据库中存在并且匹配,返回登录成功或登录失败的信息,登录成功后才能使用系统的功能。

登录流程图如下图所示。

图5-4登录流程图

用户登录界面如下图所示。

图5-5用户登录界面

随着系统规模的壮大,系统发布更新的信息及对普通用户量会越来越多,只有超级管理员负责系统后台恐怕任务艰巨,本系统考虑到这一问题后开发了超级管理员有权限可以增加管理员的模块。管理员角色不同对应权限亦不相同。

系统用户管理界面如下图所示。

图5-6系统用户管理界面

用户登录的关键代码如下:

   /**

     * 登录

     * @param data

     * @param httpServletRequest

     * @return

     */

    @PostMapping("login")

    public Map<String, Object> login(@RequestBody Map<String, String> 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<User>();

        Map<String, String> 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<String, String> 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<String,String> query,Map<String,String> 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<Map<String,Object>> mapList = baseMapper.selectBaseList(select);

        List<E> list = new ArrayList<>();

        for (Map<String,Object> map:mapList) {

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

        }

        return list;

}

5.4公告模块的实现

    在系统前台界面上点击公告动态中每个标题都自动跳转到公告界面,这样就可以查看有关公告的详细内容。并可以添加信息、删除信息、编辑信息等操作。在xinwentongzhilist.jsp实现视图层上公告的展示,在xinwentongzhi_list.jsp实现视图层上公告的管理。

前台公告展示如下图所示。

图5-6前台公告展示界面

公告管理后台操作界面如下图所示。

图5-7公告管理后台操作界面

后台公告发布界面如下图所示。

图5-8后台公告发布界面图

公告发布的关键代码如下:

  public List selectBaseList(String select) {

        List<Map<String,Object>> mapList = baseMapper.selectBaseList(select);

        List<E> list = new ArrayList<>();

        for (Map<String,Object> map:mapList) {

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

        }

        return list;

}

5.4评论模块的实现

添加游戏论坛评论是在“查询游戏论坛信息 “的前提下操作的。当页面显示查询的游戏论坛信息后,可以点击“添加评论”超级链接,既可跳转到pinglunadd.jsp页添加评论。管理员在pinglun_list.jsp进行评论管理,pinglun_ list.jsp通过查询数据库的评论表列出所有评论信息,每条评论对应一个删除按钮和修改按钮,当管理员点击删除按钮,直接在数据库删除评论信息,并重定向当前页面,当管理员选择点击修改,则进入pinglun_update.jsp页面,进行评论信息的修改。

评论添加流程图如下图所示。

图5-9评论添加流程图

添加评论界面设计效果如下图所示。

图5-10添加评论界面

评论添加关键代码为:

 public Map<String, Object> error(Integer code, String message) {

        Map<String, Object> map = new HashMap<>();

        map.put("error", new HashMap<String, Object>(4) {{

            put("code", code);

            put("message", message);

        }});

        return map;

}

5.8游戏论坛管理模块的实现

管理员添加游戏论坛信息是在点击添加按钮的前提下操作的,当页面跳转至shangpinxinxi_add.jsp,添加成功后,管理员在shangpinxinxi_list.jsp进行游戏论坛管理,shangpinxinxi_ list.jsp通过查询数据库的游戏论坛表列出所有游戏论坛信息,每条游戏论坛对应一个删除按钮和修改按钮,当管理员点击删除按钮,直接在数据库删除游戏论坛信息,并重定向当前页面,当管理员选择点击修改,则进入shangpinxinxi_update.jsp页面,进行游戏论坛信息的修改。

游戏论坛管理流程图如下图所示。

图5-11游戏论坛管理流程图

游戏论坛添加页面设计效果如下图所示。

图5-12游戏论坛添加界面

游戏论坛管理页面效果如下图所示。

图5-13游戏论坛管理界面

游戏论坛发布的关键代码如下:

 @RequestMapping("/get_obj")

    public Map<String, Object> obj(HttpServletRequest request) {

        List resultList = service.selectBaseList(service.select(service.readQuery(request), service.readConfig(request)));

        if (resultList.size() > 0) {

            JSONObject jsonObject = new JSONObject();

            jsonObject.put("obj",resultList.get(0));

            return success(jsonObject);

        } else {

            return success(null);

        }

}

5.9游戏账号管理模块的实现

管理员添加游戏账号信息是在点击添加按钮的前提下操作的,当页面跳转至huodongxinxi_add.jsp,添加成功后,管理员在huodongxinxi_list.jsp进行游戏账号管理,huodongxinxi_ list.jsp通过查询数据库的游戏账号表列出所有游戏账号信息,每条游戏账号对应一个删除按钮和修改按钮,当管理员点击删除按钮,直接在数据库删除游戏账号信息,并重定向当前页面,当管理员选择点击修改,则进入huodongxinxi_update.jsp页面,进行游戏账号信息的修改。

游戏账号管理流程图如下图所示。

图5-14游戏账号管理流程图

游戏账号添加页面设计效果如下图所示。

图5-15游戏账号添加界面

游戏账号管理页面效果如下图所示。

图5-16游戏账号管理界面

游戏账号发布的关键代码如下:

 @RequestMapping(value = "/del")

    @Transactional

    public Map<String, Object> del(HttpServletRequest request) {

        service.delete(service.readQuery(request), service.readConfig(request));

        return success(1);

}

5.11本章小结

本章节主要论述了登录模块用户的登录、用户管理、评论管理、游戏账号管理、等功能模块的设计与代码的编写,以及最终实现的步骤。

第6章 系统测试

6.1测试目的

软件测试能够识别项目风险,为开发人员和程序经理提供软件测试的反馈结果,为风险评估提供必要的信息。再者,软件测试确保在上线日前达到上线标准。包括持续追踪项目进度和严格把控各个开发阶段的游戏账号质量。

本系统主要测试客户端的使用和后台服务器的使用。客户端主要是测试用户注册、用户登录、用户完善信息、页面是否进行跳转、在线点评等功能是否实现。后台主要是测试用户管理、游戏分类、游戏信息、游戏购买、游戏账号、用户买号的功能是否实现。

6.2界面测试

使用黑盒测试方法测试本系统的界面,测试界面是否正常、可用。

用户界面测试检查表如下表。

表6-1用户界面测试表

测试项

测试人

测试结果

窗口切换、移动、改变大小时正常吗?

本人

正常

各种界面元素的文字正确吗?(如标题、提示等)

本人

正常

各种界面元素的状态正确吗?(如有效、无效、选中等状态)

本人

正常

各种界面元素支持键盘操作吗?

本人

正常

数据项能正确回显吗?

本人

正常

执行有风险的操作时,有“确认”、“放弃”等提示吗?

本人

正常

各种界面元素的布局合理吗?

本人

正常

6.3功能测试

依据黑盒测试的方法和步骤,对系统做了相关测试,主要功能测试用例如下表所示。

6-3主要功能测试用例

模块

用例描述

预期结果

备注

用户注册

用户名文本框中不输入任何数据

提示“请填写完整的信息”

测试用户名是否为空

在密码文本框中输入“123”三个字符

提示“密码长度最少为6位”

测试密码位数是否正确

在密码文本框和确认密码文本框中分别输“123456”和“258769”

提示“两次输入的密码不匹配”

测试用户两次输入的密码是否匹配

密码修改

在用户管理中修改密码,原始密码若输入不正确

提示“原始密码错误”

测试原始密码是否正确

在线留言

留言内容为空

系统提示留言内容为空,留言失败

测试留言是否为空

输入呢称和留言内容

系统提示留言成功,留言板显示新留言

测试留言是否成功

在线评论

用户未登录时,点击评论按钮

系统提示请先登录

测试是否能不用登录用户发表评论

用户登录后,评论内容为空

系统提示评论内容不能为空

测试评论内容是否能为空

添加收藏

用户未登录时,点击收藏按钮

系统提示请先登录

测试是否能不用登录用户添加收藏

用户登录后,点击收藏按钮

系统提示收藏成功

测试收藏功能是否可用

游戏论坛管理

必填文本框中不输入任何数据,如标题和类别

提示“请填写完整的信息”

测试标题和类别是否为空

在图片栏输入非图片格式数据

提示“图片必须为图片格式

测试图片是否能为非图片格式

输入完整的游戏论坛信息”

提示“游戏论坛添加成功”

测试游戏论坛录入是否可用

公告管理

必填文本框中不输入任何数据,如标题和类别

提示“请填写完整的信息”

测试标题和类别是否为空

在图片栏输入非图片格式数据

提示“图片必须为图片格式

测试图片是否能为非图片格式

输入完整的公告信息”

提示“公告添加成功”

测试公告录入是否可用

6.4测试结果

游戏账号租赁平台经测试和调试后能够按照需求正常运行,基本没有错误,能够满足开发者和用户的需求。在系统整体测试过程中,系统功能相对来说比较简单,数据源的配置,需进一步改善。

6.5本章小结

    本章主要论述了系统开发结束后,要对系统进行各方面的测试,开头介绍了系统的运行环境,需要哪些工具,由于本系统属于毕业设计,是小型的系统,所以本人只对系统进行黑盒测试,采用一些单独的测试数据对系统进行输入输出的结果判断,最后对测试结果进行总结。

                                                     第7章 总结

本次毕业设计基于当前比较流行mvc架构完成了游戏账号租赁平台,遵循java应用软件的规则,将系统划分为四个层次包括模型model层,持久层,业务逻辑service层和表现层。使用的开发软件是MyEclipse编辑器以及MySQL数据库。

主要完成了以下的任务:

(1)正确分析了游戏账号租赁平台目前的发展形势,特别是对社会影响方面的发展进行了深入的调查和研究。

(2)深入明确了系统的总体架构,在技术选型上选取了三个主流的框架,对三者的功能,整合做了详细的描述。

(3)系统项目的开发严格遵循软件的开发规范,制定了详细的系统开发步骤,开发之前做了大量的工作包括:需求分析、技术选型、架构设计等。

(4)完成了预期赋予系统的功能的实现。

本系统的缺陷也是明显的,如安全性,效率问题等等。由于时间,能力,国内java技术资料有限等原因,有些功能实现的并不完美,在已经完成的程序中,也存在许多不尽人意的地方,也没有统一优化,网站有待进一步改善,而这些问题也让我充分认识到了软件开发的困难。

本次毕业设计虽然完成了预期研究和目标,但后期还有很多工作需要完成,不光需要对系统框架进行深入学习和研究,还要对系统的架构进行研究。另外,目前客户端技术正在崛起,需要做出能让用户体验度更好的游戏账号,接下来会继续深入研究并作进一步的完善和设计开发。

                                                       致 谢

大学的学习生活总是感觉短暂的,总感到知识还没有学够,但大学毕业就在我们面前,即毕业设计即将的结束,意味着我们的大学生涯即将结束。毕业设计是我们在大学所学知识的一次总结,更是对我们过去所学知识的提炼和升华,通过毕业设计,我们认识到大学学习过程中还有那些知识没有掌握,那些知识需要我们进入深入研究。这次毕业设计让我学到了很多新的知识,研究了一些新的以前自己不熟悉的领域,使我处理问题的能力得到了一定的提升,同时也为今后的继续深造或踏入社会大门提供了很好的锻炼机会。

在本次毕业设计过程中,得到了老师的指导与支持。在此特别感谢我的指导老师。指导老师的悉心指导和大力支持,在总体结构、功能的把握上给予了非常大的帮助,同时根我提供了非常优越的设计环境,并对我在编程、数据库设计等细节工作上给予了耐心的指导,对于我顺利完成这次毕业设计起到了关键性的作用。

我还要感谢我的母校,以及在大学生活中给予我关心和帮助的老师和同学,是他们教会了我专业的知识和做人的道理。通过这次毕业设计我还明白了我们要会的不仅仅是编写代码,更重要的是要有整体把握系统设计的能力。我会在以后的工作和学习中不断完善自己,为我最热爱的母校争光,为自己翻开辉煌的新篇章。

                                            参考文献

[1]周林,季松华,符欲梅.Java程序设计课程思政探究与实践[J].黑龙江科学,2022,13(19):149-151.

[2]张晨.Java Web反序列化网络安全漏洞分析[J].四川职业技术学院学报,2022,32(05):158-162+168.DOI:10.13974/j.cnki.51-1645/z.2022.05.021.

[3]李乐.Java语言应用研究[J].智慧中国,2022(09):80-81.

[4]苏婉怡,揣小龙,赵国松,王煜尧.基于Java技术的考试系统关键点研究[J].无线互联科技,2022,19(18):58-60.

[5]王崟,陆莉莉.从SSM进阶到Spring Boot课程的教学内容设计[J].电脑知识与技术,2022,18(26):163-166.DOI:10.14004/j.cnki.ckt.2022.1689.

[6]欧阳桂秀.基于Java和MySQL的数据库管理系统的设计与实现[J].信息记录材料,2022,23(09):240-242.DOI:10.16009/j.cnki.cn13-1295/tq.2022.09.007.

[7]仓业金.基于Java的软件保护技术研究[J].电脑知识与技术,2022,18(23):29-30+52.DOI:10.14004/j.cnki.ckt.2022.1597.

[8]Zheng Hongying. A Study on the Design of English Speaking Examination System Based on SSM Framework[J]. Journal of Sensors,2022,2022.

[9]宋旸.使用Java语言开发Web应用软件的知识探讨[J].中国设备工程,2022(14):121-123.

[10]杨迎.Java技术在嵌入式系统中的作用探讨[J].无线互联科技,2022,19(14):96-98.

[11]张海越,范曦.浅析Java语言中线程的生命周期及实现方式[J].大众科技,2022,24(07):18-20+28.

[12]李璋,赵鸿皓,黄震,陈逸凡,杨洲.Java在程序设计语言课程中的应用[J].长江信息通信,2022,35(07):108-111.

[13]林前.论网络游戏账号交易的合法性[J].西南法律评论,2022,5(00):69-83.

[14]王慧芳,孙方,陈玉,朱茜.基于SSM框架的大数据个性化推荐系统设计[J].信息与电脑(理论版),2022,34(02):90-92.

[15]. 卖号、租号问题依然严重![N]. 电脑报,2021-09-13(022).DOI:10.28184/n.cnki.ndina.2021.000729.

[16]冯丽露,康耀龙,高晓晶,王涛.基于SSM框架的数据结构在线评测系统设计与实现[J].中国信息技术教育,2021(13):86-89.

[17]曹华山.SSM框架在Web应用开发中的设计与实现[J].无线互联科技,2021,18(11):108-109.

[18]方昌勋. 基于Object-Z的业务逻辑Java代码自动生成器设计与实现[D].北京邮电大学,2021.DOI:10.26969/d.cnki.gbydu.2021.002208.

[19]陈钊.SSM框架在Web应用开发中的设计与实现研究[J].电脑知识与技术,2021,17(10):226-227.DOI:10.14004/j.cnki.ckt.2021.1097.

[20]. Design and Implementation of ERP System Based on SSM Framework[J]. ,2020,440(5).

                         免费领取源码,请点赞关注私信博主

  • 28
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值