世界杯足球赛网站---附源码73185

第四章 系统实现

4.1 普通用户模块的实现

4.1.1 用户注册界面

用户注册:用户输入对应的账号(必须填写)+密码(必须填写)+确认密码(必须填写,而且要与密码一直)+昵称+邮箱+身份+姓名+姓名+性别,选择用户身份等等,然后点击“注册”,系统在用户这一数据库中会查询账号是不是存在,两次密码是不是一样,都填写正确就会注册成功,然后再进行登录,如果是之前已经注册过的用户很长时间没有使用,忘记密码,也可以点击“忘记密码”进行找回。用户注册界面如下图所示。

图4-1用户注册界面图

注册代码如下:

public String encryption(String plainText) {

String re_md5 = new String();

try {

MessageDigest md = MessageDigest.getInstance("MD5");

md.update(plainText.getBytes());

byte b[] = md.digest();

int i;

StringBuffer buf = new StringBuffer("");

for (int offset = 0; offset < b.length; offset++) {

i = b[offset];

if (i < 0)

i += 256;

if (i < 16)

buf.append("0");

buf.append(Integer.toHexString(i));

}

re_md5 = buf.toString();

} catch (Exception e) {

e.printStackTrace();

}

return re_md5;

}

4.1.2用户登录界面

系统中的前台上注册后的用户是可以通过自己的账户名和密码进行登录的,当用户输入完整的自己的账户名和密码信息并点击“登录”按钮后,将会首先验证输入的有没有空数据,再次验证输入的账户名+密码和数据库中当前保存的用户信息是否一致,只有在一致后将会登录成功并自动跳转到世界杯足球赛网站的首页中;否则将会提示相应错误信息。用户登录界面如下图所示。

图4-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;

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());

Duration duration = Duration.ofSeconds(7200L);

redisTemplate.opsForValue().set(accessToken.getToken(), accessToken,duration);

// 返回用户信息

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, "账号或密码不正确");

}

}

4.1.3密码修改界面

用户使用该系统注册完成后,用户对登录密码有修改需求时,系统也可以提供用户修改密码权限。系统中所有的操作者能够变更自己的密码信息,执行该功能首先必须要登入系统,然后选择密码变更选项以后在给定的文本框中填写初始密码和新密码来完成修改密码的操作。在填写的时候,假如两次密码填写存在差异,那么此次密码变更操作失败。密码修改界面如下图所示。

图4-3密码修改界面图

修改密码关键代码如下:

/**

* 修改密码

* @param data

* @param request

* @return

*/

@PostMapping("change_password")

public Map change_password(@RequestBody Map data, HttpServletRequest request){

// 根据Token获取UserId

String token = request.getHeader("x-auth-token");

Integer userId = tokenGetUserId(token);

// 根据UserId和旧密码获取用户

Map query = new HashMap<>();

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

query.put("user_id" ,String.valueOf(userId));

query.put("password" ,service.encryption(o_password));

int count = service.selectBaseCount(service.count(query, service.readConfig(request)));

if(count > 0){

// 修改密码

Map form = new HashMap<>();

form.put("password",service.encryption(data.get("password")));

service.update(query,service.readConfig(request),form);

return success(1);

}

return error(10000,"密码修改失败!");

}

4.1.4 个人资料界面

个人资料:当用户点击首页右上角“我的账户”这个按钮,可以对个人的资料、进行修改,个人资半界面图如下图所示。

图4-4个人资料界面图

4.1.5 足球论坛界面

足球论坛:输入封面图、标题、分类、标签、正文等信息,点提交,可以发表论坛。足球论坛界面图如下图所示。

图4-5足球论坛界面图

4.1.6 订票信息界面

订票信息:用户可以查看自己已购买的赛事门票信息,如订单编号、赛事编号等。并进行支付,还可以查询、重置的操作。订票信息界面图如下图所示。

图4-6订票信息界面图

4.2 管理员功能模块的实现

4.2.1 管理员登录界面

管理员进入到系统登录界面,需要填写正确的登录名、密码、选择权限等信息输入准确无误后登录进入到系统操作界面。管理员的账号是在数据表表中直接设置生成的,不需要进行注册;修改密码:管理员可以随时修改自己进入系统的登录密码,以保证系统的安全性。管理员登录界面如下图所示。

图4-7管理员登录界面图

4.2.2 管理员功能界面

管理员可以在后台首页可以查看积分榜统计和订票信息统计表。管理员功能界面如下图所示。

图4-8管理员功能界面图

4.2.3 系统用户管理界面

系统用户管理:管理员可以对系统中所有的用户角色进行管控,包含了管理员、普通用户这两种角色,如果需要添加新的用户,点击页面中的“添加”按钮根据提示输入上用户信息,点击“提交”以后在对应的用户界面就可以查看到了,可以点击用户后面的“删除”按钮直接删除某一用户。系统用户管理界面如下图所示。

图4-9系统用户管理界面图

4.2.4 球队赛事管理界面

管理员可以查看球队名称、封面、球队成员、赛程信息、创建时间、更新时间等详情,还可以添加新的球队赛事。球队赛事管理界面如下图所示。

图4-10球队赛事列表界面图

图4-11球队赛事添加界面图

4.2.5 小组赛事管理界面

当点击“小组赛事管理”这一菜单的时候,会出现小组赛事列表、小组赛事添加这两个子菜单,可以对这两个模块进行增删改查操作。小组赛事界面如下图所示。

图4-12球队赛事列表界面图

图4-13小组赛事添加界面图

小组赛事管理添加代码:

@PostMapping("/add")

@Transactional

public Map add(HttpServletRequest request) throws IOException {

service.insert(service.readBody(request.getReader()));

return success(1);

}

public Map addMap(Map map){

service.insert(map);

return success(1);

}

第五章 系统测试

5.1 测试目的

测试存在于软件开发进程中的最后一个阶段,它可以保证一个软件的开发质量是否符合设计者的初衷,也为程序的正式上线做了最后一道质量检测的工序。软件测试主要是控制各种条件、包括软件输出方式,使用模式和运行环境等,来评估一个系统或应用是否符合设计标准。在软件测试过程中,我们一般刻意的去制造错误和极端件,不能仅依照正常模式允许,而是多去尝试那些意外的情况。

5.2 系统测试用例

系统测试包括:用户登录功能测试、球队赛事查看功能测试、发布小组赛事、订票信息添加、密码修改功能测试,如表5-1、5-2、5-3、5-4、5-5所示:

用户登录功能测试:

表5-1 用户登录功能测试表

用例名称

用户登录系统

目的

测试用户通过正确的用户名和密码可否登录功能

前提

未登录的情况下

测试流程

1) 进入登录页面

2) 输入正确的用户名和密码

预期结果

用户名和密码正确的时候,跳转到登录成功界面,反之则显示错误信息,提示重新输入

实际结果

实际结果与预期结果一致

球队赛事查看功能测试:

表5-2 球队赛事查看功能测试表

用例名称

球队赛事查看

目的

测试球队赛事查看功能

前提

用户登录

测试流程

点击球队赛事列表

预期结果

可以查看到所有球队赛事

实际结果

实际结果与预期结果一致

管理员发布小组赛事测试:

表5-3 管理员发布小组赛事测试表

用例名称

小组赛事发布测试用例

目的

测试小组赛事发布功能

前提

用户正常登录情况下

测试流程

1)点击小组赛事,然后点击发布添加后并填写信息。

2)点击进行提交。

预期结果

提交以后,页面首页会显示新的小组赛事

实际结果

实际结果与预期结果一致

订票信息添加功能测试:

表5-4订票信息添加功能测试表

用例名称

订票信息添加测试

目的

测试订票信息添加功能

前提

测试流程

1)在搜索框填入添加关键字。

2)点击添加按钮。

预期结果

页面显示包含有添加关键字的订票信息

实际结果

实际结果与预期结果一致

密码修改功能测试:

表5-5 密码修改功能测试表

用例名称

密码修改测试用例

目的

测试管理员密码修改功能

前提

管理员用户正常登录情况下

测试流程

1)管理员密码修改并完成填写。

2)点击进行提交。

预期结果

使用新的密码可以登录

实际结果

实际结果与预期结果一致

5.3 系统测试结果

经过对世界杯足球赛网站的测试,我们已经完成了5大模块的检测,包括用户登录功能测试、球队赛事查看功能测试、发布小组赛事、订票信息添加、密码修改功能测试试,这些功能为后续的推广运营提供了强有力的技术支持。

第六章 总结与展望

通过世界杯足球赛网站的开发,本人巩固了之前学过的知识,如今将平时所学到的知识融合在设计中,在设计过程中,做了很多的准备,首先,在数据库系统的设计过程中,尤其是在数据库的工作原理、工作特点,对其深刻的讨论,与此同时,对于小型站点来说,最好服务器的选择,其次,利用所学的知识点分析所做的系统,并在此基础上设计。

目前本系统已经上线,正在试运行阶段,用户反馈良好,基本完成用户所需,试运行过程中没有出现阻断性问题,有一些不足和小问题也及时予以修正,系统上线后,为了保证数据的安全性,对系统进行了备份操作,系统备份是每两个月备份一次,数据库备份为每周备份一次,系统部署在租赁的云平台服务器中。

本次系统上线成功后,得到了用户的高度认可,但是在功能上和性能上还需做进一步的研究处理,使其有更高的性能和更好的用户体验。

系统在以后的升级过程中,需要解决一系列用户所提出的问题,例如打印过程中如何避免浏览器的兼容性问题,大量用户访问时,如何保持较高的响应速度,在系统今后的升级过程中将着重解决这些安全性问题。

Top