- 3 章 学生成绩管理总体设计
在分析了项目开发的背景、意义以及其开发的可行性后,接下来就是探讨项目的功能划分,以及具体实现的时候对项目数据库各种表的设计,在本章会做一个系统的介绍。
-
- 系统功能模块设计
系功能模块的设计就是把系统具体要实现哪些功能,功能如何划分做一个系统的架构,以模块图的方式展示出来,方便我们进行功能得罗列以及涉及。在系统的功能方面,项目分成了管理员+教师+学生三个模块,每个模块登录进去对应相应的功能,具体的功能模块图如图3.1所示。
图3.1 学生成绩管理功能模块图
-
- 数据库设计
数据库的设计承载者系统的各种数据,在一个系统中各种数据都需要一个专门的容器,数据库就是这个容器,在建立数据库的时候,主要是数据库模型的设计以及各个数据库表的设计两部分。
-
-
- 数据库概念结构设计
-
下面是整个学生成绩管理中主要的数据库表总E-R实体关系图。
图3.2 学生成绩管理总E-R关系图
-
-
- 数据库逻辑结构设计
-
通过前面E-R关系图可以看到项目需要创建很多个数据表。以下是项目中的主要数据库表的关系模型:
编号
名称
数据类型
长度
小数位
允许空值
主键
默认值
说明
1
average_data_id
int
10
0
N
Y
平均值数据ID
2
title
varchar
64
0
Y
N
标题
3
account_name
varchar
64
0
Y
N
科目名称
4
class_name
varchar
64
0
Y
N
班级名称
5
total_score_of_grades
int
10
0
Y
N
0
成绩总分
6
number_of_students
int
10
0
Y
N
0
学生人数
7
average_value
varchar
64
0
Y
N
平均值
8
remarks
varchar
64
0
Y
N
备注
9
recommend
int
10
0
N
N
0
智能推荐
10
create_time
datetime
19
0
N
N
CURRENT_TIMESTAMP
创建时间
11
update_time
timestamp
19
0
N
N
CURRENT_TIMESTAMP
更新时间
编号
名称
数据类型
长度
小数位
允许空值
主键
默认值
说明
1
course_information_id
int
10
0
N
Y
课程信息ID
2
course_name
varchar
64
0
Y
N
课程名称
3
cover
varchar
255
0
Y
N
封面
4
class
varchar
64
0
Y
N
上课班级
5
class_time
datetime
19
0
Y
N
上课时间
6
teacher_no
int
10
0
Y
N
0
教师编号
7
teacher_name
varchar
64
0
Y
N
教师姓名
8
course_introduction
longtext
2147483647
0
Y
N
课程介绍
9
recommend
int
10
0
N
N
0
智能推荐
10
create_time
datetime
19
0
N
N
CURRENT_TIMESTAMP
创建时间
11
update_time
timestamp
19
0
N
N
CURRENT_TIMESTAMP
更新时间
编号
名称
数据类型
长度
小数位
允许空值
主键
默认值
说明
1
student_id
int
10
0
N
Y
学生ID
2
student_no
varchar
64
0
N
N
学生学号
3
full_name
varchar
64
0
Y
N
姓名
4
gender
varchar
64
0
Y
N
性别
5
examine_state
varchar
16
0
N
N
已通过
审核状态
6
recommend
int
10
0
N
N
0
智能推荐
7
user_id
int
10
0
N
N
0
用户ID
8
create_time
datetime
19
0
N
N
CURRENT_TIMESTAMP
创建时间
9
update_time
timestamp
19
0
N
N
CURRENT_TIMESTAMP
更新时间
编号
名称
数据类型
长度
小数位
允许空值
主键
默认值
说明
1
student_grades_id
int
10
0
N
Y
学生成绩ID
2
student_no
int
10
0
Y
N
0
学生学号
3
full_name
varchar
64
0
Y
N
姓名
4
class_name
varchar
64
0
Y
N
班级名称
5
professional_name
varchar
64
0
Y
N
专业名称
6
teacher_no
int
10
0
Y
N
0
教师编号
7
account_name
varchar
64
0
Y
N
科目名称
8
subject_grades
int
10
0
Y
N
0
科目成绩
9
annotation_notes
varchar
64
0
Y
N
标注说明
10
recommend
int
10
0
N
N
0
智能推荐
11
create_time
datetime
19
0
N
N
CURRENT_TIMESTAMP
创建时间
12
update_time
timestamp
19
0
N
N
CURRENT_TIMESTAMP
更新时间
编号
名称
数据类型
长度
小数位
允许空值
主键
默认值
说明
1
student_information_id
int
10
0
N
Y
学生信息ID
2
student_no
int
10
0
Y
N
0
学生学号
3
full_name
varchar
64
0
Y
N
姓名
4
gender
varchar
64
0
Y
N
性别
5
class_name
varchar
64
0
Y
N
班级名称
6
professional_name
varchar
64
0
Y
N
专业名称
7
department_name
varchar
64
0
Y
N
院系名称
8
teacher_no
int
10
0
Y
N
0
教师编号
9
teacher_name
varchar
64
0
Y
N
教师姓名
10
recommend
int
10
0
N
N
0
智能推荐
11
create_time
datetime
19
0
N
N
CURRENT_TIMESTAMP
创建时间
12
update_time
timestamp
19
0
N
N
CURRENT_TIMESTAMP
更新时间
编号
名称
数据类型
长度
小数位
允许空值
主键
默认值
说明
1
teacher_id
int
10
0
N
Y
教师ID
2
teacher_no
varchar
64
0
N
N
教师编号
3
teacher_name
varchar
64
0
Y
N
教师姓名
4
gender
varchar
64
0
Y
N
性别
5
teaching_subjects
varchar
64
0
Y
N
授业科目
6
department_name
varchar
64
0
Y
N
院系名称
7
examine_state
varchar
16
0
N
N
已通过
审核状态
8
recommend
int
10
0
N
N
0
智能推荐
9
user_id
int
10
0
N
N
0
用户ID
10
create_time
datetime
19
0
N
N
CURRENT_TIMESTAMP
创建时间
11
update_time
timestamp
19
0
N
N
CURRENT_TIMESTAMP
更新时间
- 4 章 关键模块的设计与实现
- 登录模块
管理员、教师和学生在登录界面输入账号+密码,点击“登录”按钮,系统在用户数据库表中会对管理员、教师和学生的账号进行匹配,账号+密码正确的话,就会登录到系统中各个用户的主管理界面,否则提示对应的信息,返回到登录的界面,其主界面展示如下图4.1所示。
图4.1 登录界面图
登录系统主要代码如下。
public function login()
{
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' => '登录失败,账号不存在']];
}
}
-
- 注册模块
注册模块满足学生这部分,当学生想要进行学生相关信息的查询管理的时候,就必须进行登录,如果没有账号的话,在登录界面,点击“注册”按钮就会跳转到注册的界面,根据提示填写好注册信息,添加提交,注册的信息在数据库中就添加完成了,然后再输入填写好的账号和密码进行登录,其主界面展示如下图4.2所示。
图4.2 注册界面图
注册逻辑关键代码如下所示。
public function register()
{
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' => '注册失败,账号已存在']];
}
}
-
- 系统用户管理模块
管理员可以对系统中所有的用户角色进行管控,包含了管理员、学生以及教师这三种角色,如果需要添加新的用户,点击页面中的“添加”按钮根据提示输入上用户信息,点击“提交”以后在对应的用户界面就可以查看到了,可以点击用户后面的“删除”按钮直接删除某一用户,这里以学生用户为例。界面如下图4.3所示。
图4.3 系统用户管理界面图
系统用户管理代码如下。
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;
}
-
- 课程信息模块
管理员和学生点击“课程信息”这个按钮可以查看到系统中的课程信息,支持通过课程名称或者上课班级进行查询课程信息,如果想要添加新的课程信息,点击“添加”按钮然后根据提示输入课程信息,点击“提交”后,在课程信息界面就会显示新增的课程信息,可以点击某一课程信息查看课程信息的详情,也可以直接点击“删除”进行删除课程信息。界面如下图4.4所示。
图4.4 课程信息界面图
课程信息逻辑代码如下所示。
public function add()
{
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 {
if($this->table == 'user'){
$request['password'] = md5($request['password']);
}
$res = $this->add_before($request, $this->table, $this->table_id);
if($res['code'] == 200){
$result = $this->model->add($request, $this->table, $this->table_id);
$this->add_after($this->table);
$data = $result;
}else{
$data['error'] = $res;
}
}
} else {
$data['error']['code'] = 30000;
$data['error']['message'] = "field的值不能为空!";
}
return json_encode($data);
}
-
- 学生信息模块
点击“学生信息”这个菜单,可以查看到系统中所有添加的学生信息,支持通过学生学号或者姓名或者性别对学生信息进行查询,如果想要了解某一学生的详细信息,点击后面的“详情”会进入详情界面,教师和管理员如果想要选择某一学生,点击“发布成绩”按钮,根据提示填写对应的信息,点击“提交”按钮,信息没有错误在数据库就会提交成功,发布成绩成功。界面如下图4.5所示。
图4.5 学生信息界面图
-
- 学生成绩模块
点击“学生成绩”这个按钮可以查看到自己所有的学生的成绩,支持通过学生学号或者班级名称进行查询学生成绩信息,管理员和教师可以对所添加的学生成绩进行删除。界面如下图4.6所示。
图4.6 学生成绩界面图
学生成绩逻辑代码如下所示。
public function del()
{
$request = Request::param();
$result = $this->model->del_data($request, $this->table, $this->table_id);
$data = $result;
return json_encode($data);
}
-
- 平均值数据模块
点击“平均值数据”这个菜单,可以查看到系统中所有添加的平均值数据信息,支持通过学生学号或者姓名或者班级名称对平均值数据信息进行查询,只有管理员用户可以添加新的平均值数据,点击“添加”按钮,根据提示输入平均值数据信息,点击“提交”按钮,新的平均值数据信息就在系统中显示出来了,也可以对添加的平均值数据信息进行删除。界面如下图4.7所示。