该系统是通过jdbc和Mysql达成连接的,新建一个jdbc.properties文件来填写与数据库连接所需要的驱动和参数。
jdbc.driverClass=com.Mysql.jdbc.Driver
jdbc.url=jdbc:Mysql://localhost:3306/tsi
jdbc.username=root
jdbc.password=123
第一个参数代表Mysql数据库的驱动,第二个参数代表要连接的数据库,第三个和第四个参数代表数据库连接名和密码。
后台与数据库访问主要是通过HQL语句来进行查询的,查询语句中的表名是表格的实体类名,在这种查询语句中*是不允许使用的,除非适合聚合函数一起使用才可以。
-
- 登录模块的实现
为确保系统安全性,系统操作员只有在登录界面输入正确的用户名、密码、权限以及验证码,单击“登录”按钮后才能够进入本系统的主界面。
用户登录流程图如下所示。
图5-2用户登录流程图
登录界面如下图所示。
图5-3登录界面
用户登录的逻辑代码如下所示。
{
if (Request::isPost()) {
$request = Request::param();
$result = $this->validate($request, $this->validate);
if (true !== $result) {
// 验证失败 输出错误信息
$data['error'] = 30000;
$data['message'] = $result;
} else {
$request['password'] = md5($request['password']);
$result = $this->model->login($request, $this->table);
$data = $result;
}
} else {
$data['error'] = 30000;
$data['message'] = "field的值不能为空!";
}
return json_encode($data);
}
public function login($request=[],$table_name = ''){
$username = $request['username'];
$password = $request['password'];
$bol = $this->where(['username'=>$username])->find();
if ($bol){
$password = md5($password);
if ($request['password']==$bol['password']) {
//添加token信息
$access_token['create_time'] = date('Y-m-d H:i:s');
$access_token['update_time'] = date('Y-m-d H:i:s');
$access_token['info'] = json_encode($bol);
// $access_token['info'] = $bol;
$access_token['token'] = md5(date('Y-m-d H:i:s'));
$bol_token = Db::name('AccessToken')->insert($access_token);
if ($bol_token){
$data['obj'] = $bol;
$data['obj']['token'] = $access_token['token'];
return ['result' => $data];
}else{
return ['error' => ['code' => 5000, 'message' => '登录失败,token生成失败']];
}
} else {
return ['error' => ['code' => 5000, 'message' => '登录失败,密码不正确']];
}
}else{
return ['error' => ['code' => 5000, 'message' => '登录失败,账号不存在']];
}
}
用户输入用户名、密码、电话、姓名等必填信息后,点击注册按钮完成用户的注册。
用户注册流程图如下所示。
图5-5用户注册流程图
用户注册界面如下图所示。
图5-5用户注册界面
用户注册关键代码如下所示。
{
if (Request::isPost()) {
$request = Request::param();
$request['create_time'] = isset($request['create_time']) ? $request['create_time'] : date('Y-m-d H:i:s');
$request['update_time'] = isset($request['update_time']) ? $request['update_time'] : date('Y-m-d H:i:s');
$result = $this->validate($request, $this->validate);
if (true !== $result) {
// 验证失败 输出错误信息
$data['error'] = 30000;
$data['message'] = $result;
} else {
$request['password'] = md5($request['password']);
$result = $this->model->register($request, $this->table);
$data = $result;
}
} else {
$data['error'] = 30000;
$data['message'] = "field的值不能为空!";
}
return json_encode($data);
}
public function register($request=[],$table_name = ''){
$username = $request['username'];
$bol = $this->where(['username'=>$username])->find();
if (!$bol){
$result = self::allowField(true)->save($request);
if ($result) {
return ['result' => 1];
} else {
return ['error' => ['code' => 3000, 'message' => '注册失败']];
}
}else{
return ['error' => ['code' => 3000, 'message' => '注册失败,账号已存在']];
}
}
-
-
- 竞赛信息模块的实现
-
用户点击某个竞赛信息进入竞赛详细页,点击评论按钮进入竞赛页,搜索竞赛信息。
竞赛信息流程图如下所示。
图5-9竞赛信息流程图
竞赛信息界面如图所示。
图5-10竞赛信息界面
竞赛信息关键代码如下所示。
{
$request = Request::param();
if (isset($request['groupby']) && isset($request['field'])) {
if (!empty($request['groupby']) && !empty($request['field'])) {
$result = $this->model->avg_group($request, $this->table, $this->table_id);
$data = $result;
} else {
$data['error']['code'] = 30000;
$data['error']['message'] = "groupby或者field的值不能为空!";
}
} else {
$data['error']['code'] = 30000;
$data['error']['message'] = "groupby或者field的值不能为空!";
}
return json_encode($data);
}
-
-
- 竞赛报请模块的实现
-
用户点击某个竞赛活动进入竞赛详细页,点击报名申请按钮进入报名申请页,提交报名申请信息,管理员管理用户的报名申请信息,审核报名申请信息。
竞赛报名流程图如下所示。
图5-12竞赛报名流程图
竞赛报名界面如图所示。
图5-13竞赛报名界面
竞赛报名关键代码如下所示。
public function avg()
{
$request = Request::param();
if (isset($request['field'])) {
if (!empty($request['field'])) {
$result = $this->model->avg_field($request, $this->table, $this->table_id);
$data = $result;
} else {
$data['error']['code'] = 30000;
$data['error']['message'] = "field的值不能为空!";
}
} else {
$data['error']['code'] = 30000;
$data['error']['message'] = "field的值不能为空!";
}
return json_encode($data);
}
系统用户管理主要是对新用户的添加和旧用户的删除。新用户的添加主要是指添加用户名称并确定其密码;旧用户的删除也是从下拉菜单中找到对应的用户名称将其删除。不论是新用户添加还是旧用户的删除,这个权限只有管理员具有。
用户管理流程图如下所示。
图5-15用户管理流程图
用户管理界面如下图所示。
图5-16用户管理界面
系统用户管理关键代码如下所示。
{
$request = Request::param();
$result = $this->model->get_obj($request, $this->table, $this->table_id, $this->table_id);
$data['result'] = $result;
return json_encode($data);
}
-
-
- 竞赛管理模块的实现
-
竞赛管理功能主要指对其竞赛类型、竞赛名称、竞赛图标、报名申请等一些基本信息的添加、删除和修改。
竞赛管理流程图如下所示。
图5-19竞赛管理流程图
竞赛管理如下图所示。
图5-20竞赛管理界面
竞赛管理关键代码如下所示。
{
$request = Request::param();
$result['list'] = $this->model->get_list($request, $this->table, $this->table_id);
$result['count'] = $this->model->list_count($request, $this->table, $this->table_id);
$data['result'] = $result;
return json_encode($data);
}
-
-
- 成绩管理模块的实现
-
用户查看竞赛成绩信息,管理员审核竞赛成绩,发布成绩。
成绩管理流程图如下所示。
图5-25成绩管理流程图
成绩管理界面如下所示。
图5-27成绩管理界面
成绩管理关键代码如下所示。
public function get_list($request=[],$table_name = '',$table_id = ''){
$page = 1;
$size = $table_name == "auth" ? 100 : 10;
$where = [];
$order = $table_id.'_id desc';
$field = '*';
// echo $order;exit;
$columns = Db::query( "show COLUMNS FROM `".$table_name."`");
foreach($columns as $key=>$val){
$field_name = $val['Field'];
if(isset($request['like'])){
if ($request['like']==true){
//字段模糊查询
if(isset($request[$field_name])){
$where[] = [$field_name, '=', $request[$field_name]];
}
}else{
//字段模糊查询
if(isset($request[$field_name])){
$where[] = [$field_name, 'like', '%' . $request[$field_name] . '%'];
}
}
}else{
//字段模糊查询
if(isset($request[$field_name])){
$where[] = [$field_name, 'like', '%' . $request[$field_name] . '%'];
}
}
//范围查询
if(isset($request[$field_name.'_min'])){
$where[] = [$field_name, '>=', $request[$field_name.'_min']];
}
if(isset($request[$field_name.'_max'])){
$where[] = [$field_name, '<=', $request[$field_name.'_max']];
}
}
//分页
if (isset($request['page'])){
$page = $request['page'];
}
if (isset($request['size'])){
$size = $request['size'];
}
//排序
if (isset($request['order'])){
$order = $request['order'];
}
//查询字段
if (isset($request['field'])){
$field = $request['field'];
}
//模糊查询
$list= $this->where($where)->order($order)->field($field)->page($page, $size)->select()->toArray();
foreach($list as &$l){
foreach($l as &$o){
if(strpos($o,$_SERVER['HTTP_HOST']) === false){
$o = str_replace('upload','http://'.$_SERVER['HTTP_HOST'].'/upload',$o);
}
}
}
return $list;
}
系统测试是用于检查软件的质量、性能、可靠性等是否符合用户需求。一套严谨的、规范的、完善的测试过程将大大提高软件的质量、可信度、可靠性,降低软件的出错率,降低用户风险系数。通过在计算机上对系统进行测试试验并从中发现此系统中存在的问题和错误然后加以修改,使之更加符合用户需求。
1.测试的目的是通过测试来发现程序在执行过程中的错误的过程。
2.好的测试方案是可以检验出还未被发现的错误的方案。
3.好的测试是发现了到目前为止还未被发现的错误的测试。
4.该系统能够完成校园竞赛报名、校园竞赛维护、组建战队、用户维护、校园展示等功能,做到所开发的系统操作简单,尽量使系统操作不受用户对电脑知识水平的限制。
下表是校园竞赛信息网站的测试用例,检测了校园竞赛管理中对校园竞赛信息的增加,删除,修改,查询操作是否成功运行。观察系统的响应情况,得出该功能也达到了设计目标,系统运行正确。
前置条件;用户登录系统。
表6-1 校园竞赛管理的测试用例
功能描述 | 用于校园竞赛管理 | |
测试目的 | 检测校园竞赛管理时的各种操作的运行情况 | |
测试数据以及操作 | 预期结果 | 实际结果 |
点击添加校园竞赛,必填项合法输入,点击保存 | 提示添加成功 | 与预期结果一致 |
点击添加校园竞赛,必填项输入不合法,点击保存 | 提示必填项不能为空 | 与预期结果一致 |
点击修改校园竞赛,必填项修改为空,点击保存 | 提示必填项不能为空 | 与预期结果一致 |
点击修改校园竞赛,必填项输入不合法,点击保存 | 提示必填项不能为空 | 与预期结果一致 |
点击删除校园竞赛,选择校园竞赛删除 | 提示删除成功 | 与预期结果一致 |
点击搜索校园竞赛,输入存在的校园竞赛名 | 查找出校园竞赛 | 与预期结果一致 |
点击搜索校园竞赛,输入不存在的校园竞赛名 | 不显示校园竞赛 | 与预期结果一致 |
下表是竞赛报名管理功能的测试用例,检测了竞赛报名管理中竞赛报名单的操作是否成功运行。观察系统的响应情况,得出该功能也达到了设计目标,系统运行正确。
前置条件;用户登录系统。
表6-2 竞赛报名管理的测试用例
功能描述 | 用于竞赛报名管理 | |
测试目的 | 检测竞赛报名管理时各种操作的情况 | |
测试数据以及操作 | 预期结果 | 实际结果 |
未选择校园竞赛,点击提交 | 提示请选择校园竞赛 | 与预期结果一致 |
未上传成绩,点击提交 | 提示请选择成绩 | 与预期结果一致 |
根据以上测试情况,测试结果如下表所示。
表6-1测试结果表
测试项目 | 测试结果 |
登录测试 | 成功 |
修改密码测试 | 成功 |
直击现场测试 | 成功 |
校园风采测试 | 成功 |
校园竞赛报名测试 | 成功 |
组建战队测试 | 成功 |
用户管理测试 | 成功 |
竞赛管理测试 | 成功 |
战利品箱测试 | 成功 |
竞赛成绩测试 | 成功 |