设计公司logo公司文化_兰州装修公司有哪些_创意网课_免费咨询图片素材 第4章 系统设计

系统结构设计

目前B/S体系的系统主要的数据访问方式是:通过浏览器页面用户可以进入系统,系统可以自动对用户向服务器发送的请求进行处理,处理请求是在系统后台中进行的,用户在浏览器页面上进行相应操作,就能够看到服务端传递的处理结果。教务系统网站主要分为视图-模型-控制三层架构设计。在视图层中,主要是操作在服务器端向客户端反馈并显示的数据,在模型层中,主要处理相关的业务逻辑、数据整合等,最后的控制层它介于视图和模型之间,主要是调整两层之间的关系,最终落实数据的传递。

系统架构图如下图所示。

图4-1系统架构图

功能模块设计

系统设计的目的是分析系统包括的所有功能结构,为开发人员设计开发和实现系统做好准备工作。经过前期的需求调查、分析和整理之后,确定的总体需求主要包括多个模块,分别是:系统用户设置、学生管理、教师管理、课程管理、学生选课管理、课程评价管理。系统整体角色分为三个部分,一是学生、二是教师、最后是管理员。权限分布也是很明显,学生用户是在除去浏览信息之外还具有查询和管理自己账户信息、选课申请等权限;管理员是最高权限拥有者。

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

图4-2系统功能结构图

数据库设计

概念模型设计

对于一个要开发的系统来说,E-R图可以让别人能更快更轻松的了解此系统的事务及它们之间的关系。根据系统分析阶段所得出的结论确定了在教务系统网站中存在着多个实体分别是用教师、管理员、课程、选课、学生。

系统总体ER图如下图所示。

图4-4系统总体ER图

数据表设计

数据库逻辑结构就是将E-R图在数据库中用具体的字段进行描述。用字段和数据类型描述来使对象特征实体化,最后形成具有一定逻辑关系的数据库表结构。教务系统网站所需要的部分数据结构表如下表所示。

course_information

字段名称

类型

长度

不是null

主键

字段说明

course_information_id

int

11

主键

课程信息ID

course_number

varchar

64

课程编号

course_type

varchar

64

课程类型

course_name

varchar

64

课程名称

course_video

varchar

255

课程视频

picture

varchar

255

图片

teacher

int

11

教师

course_introduction

text

0

课程简介

hits

int

11

点击数

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

course_recommendation

字段名称

类型

长度

不是null

主键

字段说明

course_recommendation_id

int

11

主键

课程推荐ID

course_number

varchar

64

课程编号

course_type

varchar

64

课程类型

course_name

varchar

64

课程名称

picture

varchar

255

图片

teacher

int

11

教师

score

int

11

评分

rank

int

11

排位

course_introduction

text

0

课程简介

hits

int

11

点击数

praise_len

int

11

点赞数

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

curriculum_evaluation

字段名称

类型

长度

不是null

主键

字段说明

curriculum_evaluation_id

int

11

主键

课程评价ID

course_number

varchar

64

课程编号

course_type

varchar

64

课程类型

course_name

varchar

64

课程名称

teacher

int

11

教师

score

varchar

64

评分

student

int

11

学生

whether_to_evaluate

varchar

64

是否评价

evaluation_details

text

0

评价详情

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

更新时间

slides

字段名称

类型

长度

不是null

主键

字段说明

slides_id

int

10

主键

轮播图ID

title

varchar

64

标题

content

varchar

255

内容

url

varchar

255

链接

img

varchar

255

轮播图

hits

int

10

点击量

create_time

timestamp

0

创建时间

update_time

timestamp

0

更新时间

student_user

字段名称

类型

长度

不是null

主键

字段说明

student_user_id

int

11

主键

学生用户ID

gender

varchar

64

性别

examine_state

varchar

16

审核状态

recommend

int

11

智能推荐

user_id

int

11

用户ID

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

teacher_user

字段名称

类型

长度

不是null

主键

字段说明

teacher_user_id

int

11

主键

教师用户ID

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.2登录模块的实现

系统的登录窗口是用户的入口,用户只有在登录成功后才可以进入访问。通过在登录提交表单,后台处理判断是否为合法用户,进行页面跳转,进入系统中去。

登录合法性判断过程:用户输入账号和密码后,系统首先确定输入输入数据合法性,然后在login.jsp页面发送登录请求,调用src下的mainctrl类的dopost方法来验证。

用户登录模块的IPO如下所示:

输入:用户名和密码。

处理:

1)检测用户输入的账号、密码是否正确及在数据库已对应存在。

2)从数据库中提取记录,并储存在本地的session中(timeout默认=30min)。

3)根据用户名,将其显示在系统首页上。

输出:是否成功的信息。

登录流程图如下所示。

图5-1登录流程图

系统登录界面如下所示。

图5-2系统登录界面

登录代码如下:

   /**

     * 登录

     * @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.3管理员功能模块

管理员登录教务系统网站,管理员后台功能为:首页、轮播图、公告栏、管理员、论坛列表、论坛分类列表、课程资讯、课程资讯分类、学生用户、教师用户、课程信息、课程评价、课程推荐等功能,如下图所示:

                      图 5-3 管理员后台功能界面图

学生管理,在学生管理界面图可添加学生信息内容:昵称、用户名、性别等信息,并可在学生管理查询页面进行编辑删除详情等操作,如图5-4

图5-4学生管理界面图

教师管理,在教师管理页面中对教师进行添加:昵称、用户名、性别等内容,还可在教师查询页面对已有的教师信息进行编辑删除详情等操作,如图5-5所示:

                        图5-5 教师信息管理界面图

课程管理,在课程管理页面图中可以添加课程内容:课程类型、课程编号、课程名称、课程视频、图片、教师、课程简介等内容,还可在课程管理查询页面对已有的课程进行评价,编辑删除详情等操作 如图5-6

                             图5-6课程管理界面图

课程推荐管理,在课程推荐管理可查询、课程编号、课程名称、教师类型、课程名称、图片、教师、评分、排位等内容,还可在该页面进行编辑删除详细等操作,如图5-7

图5-7 课程推荐管理界面图

课程评价管理,在课程评价管理页面列表可查询评价信息:课程编号、课程名称、教师工号、教师姓名、评分、评价详情、添加时间等内容,还可在该页面进行编辑删除详细等操作,如5-8

图5-8课程评价管理界面图

5.4教师功能模块

教师登录教务系统网站,教师后台功能为:首页、课程信息、课程评价等功能,如下图所示:

图5-9教师功能界面图

课程管理,在课程管理页面图中可以添加课程内容:课程类型、课程编号、课程名称、课程视频、图片、教师、课程简介等内容,还可在课程管理查询页面已有的课程,修改、编辑、删除详情等操作。

图5-10课程管理界面图

5.4学生功能模块

学生登录教务系统网站,教师后台功能为:首页、课程评价等功能,如下图所示:

图5-11学生功能界面图

">

施工企业如何节约人力成本

微信开发者工具可视化怎么打开、网络信息设计是什么专业、永久使用、不限域名、推动房地产发展新模式

团智慧团建登录入口?

设计公司logo公司文化_兰州装修公司有哪些_创意网课_免费咨询图片素材

郑州资助app下载手机看网站色卡2297c设计制作小乐器黑五手表网站烟台网站建设询问臻动传媒手表网网站动态网页设计个人简历代码南昌自动seoplc编程软件春考网页制作素材江小白发展过程中采用了哪些网络营销方式中牟网络推广公司电商开发系统凡客官方网竞价sem托管公司求购机械加工58同城网招聘招聘广州企业咨询设计素材网站哪几个好用小型app开发公司市场监督管理局电话号app发布流程河南省建设厅地址深圳商业策划公司十大公司黄骅港自驾游景点网站怎么创建内容室内设计招聘网站有哪些静态网页设计代码模板免费域名网站黄002822中装建设股吧

猜你喜欢

  • 友情链接:
  • 怎么样做短视频 5118网站查询 室内效果图用什么软件做最好 网站建设教程集体苏州久远网络 个人公众号如何推广 ppt设计器在哪里