精准客源软件_东莞东城属于哪个区_平面设计素材图片库_西安平面设计师工资一般多少    系统测试是检验系统在开发中是否存在错误,检查系统是否都按照设计时的要求实现。系统中的每一个功能是否都可以正确运行和逻辑无错误。系统测试是所有系统完成后都要经过的过程。也是编程人员最不想经过的过程,系统测试的过程是对编程人员工作的否定,但也是保证系统正确的唯一手段。

">

企业推广视频知名隐迅推

上海金山石化二手房房价、新疆生产建设兵团专业技术继续教育平台、永久使用、不限域名、医院网站制作厂家

山东健康码app下载安装?

精准客源软件_东莞东城属于哪个区_平面设计素材图片库_西安平面设计师工资一般多少

第5章  系统实现

5.1登录模块的实现

美食网站的平台入口就是用户登录功能,在浏览器输系统地址跳转至系统前台首页,系统前台的登录窗口在首页左面,包括用户名、密码、权限、验证码,除了权限框使用下拉列表,其他使用文本框,验证码下方为登录和重置两个按钮,用户点击登录按钮,则进行登录验证。

登录流程图如下所示。

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

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

        if(username != null && "".equals(username) == false){

            map.put("username", username);

            resultList = service.select(map, new HashMap<>()).getResultList();

        }

        else if(email != null && "".equals(email) == false){

            map.put("email", email);

            resultList = service.select(map, new HashMap<>()).getResultList();

        }

        else if(phone != null && "".equals(phone) == false){

            map.put("phone", phone);

            resultList = service.select(map, new HashMap<>()).getResultList();

        }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.select(groupMap, new HashMap<>()).getResultList();

        if (groupList.size()<1){

            return error(30000,"用户组不存在");

        }

        UserGroup userGroup = (UserGroup) groupList.get(0);

        //查询用户审核状态

        if (!StringUtils.isEmpty(userGroup.getSourceTable())){

            String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();

            String res = String.valueOf(service.runCountSql(sql).getSingleResult());

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

        }

}

5.2用户子系统模块的实现

5.2.1用户首页的实现

在美食分享的用户首页,主要有用户登录页面,以及¥的展示等,在首页的导航栏中可看出,该系统主要有¥等主要模块。

如下图所示为系统的用户首页界面。

图5-3用户首页

5.2.2注册模块的实现

这块程序首先根据所取得的表单中的用户名查询数据库中是否有相同用户名的记录,如果数据库存在相同的用户名,则提示用户名已存在,否则,打开记录集并添加一条新的记录,然后系统默认要给用户发送注册成功的提醒。

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

图5-4用户注册流程图

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

图5-5用户注册

用户注册关键代码如下。

/**

     * 注册

     * @param user

     * @return

     */

    @PostMapping("register")

    public Map<String, Object> signUp(@RequestBody User user) {

        // 查询用户

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

        query.put("username",user.getUsername());

        List list = service.select(query, new HashMap<>()).getResultList();

        if (list.size()>0){

            return error(30000, "用户已存在");

        }

        user.setUserId(null);

        user.setPassword(service.encryption(user.getPassword()));

        service.save(user);

        return success(1);

}

/**

     * 用户ID:[0,8388607]用户获取其他与用户相关的数据

     */

    @Id

    @GeneratedValue(strategy = GenerationType.IDENTITY)

    @Column(name = "user_id")

    private Integer userId;

    /**

     * 账户状态:[0,10](1可用|2异常|3已冻结|4已注销)

     */

    @Basic

    @Column(name = "state")

    private Integer state;

    /**

     * 所在用户组:[0,32767]决定用户身份和权限

     */

    @Basic

    @Column(name = "user_group")

    private String userGroup;

    /**

     * 上次登录时间:

     */

    @Basic

    @Column(name = "login_time")

    private Timestamp loginTime;

    /**

     * 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时

     */

    @Basic

    @Column(name = "phone")

    private String phone;

    /**

     * 手机认证:[0,1](0未认证|1审核中|2已认证)

     */

    @Basic

    @Column(name = "phone_state")

    private Integer phoneState;

    /**

     * 用户名:[0,16]用户登录时所用的账户名称

     */

    @Basic

    @Column(name = "username")

    private String username;

    /**

     * 昵称:[0,16]

     */

    @Basic

    @Column(name = "nickname")

    private String nickname;

    /**

     * 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成

     */

    @Basic

    @Column(name = "password")

    private String password;

    /**

     * 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时

     */

    @Basic

    @Column(name = "email")

    private String email;

    /**

     * 邮箱认证:[0,1](0未认证|1审核中|2已认证)

     */

    @Basic

    @Column(name = "email_state")

    private Integer emailState;

    /**

     * 头像地址:[0,255]

     */

    @Basic

    @Column(name = "avatar")

    private String avatar;

    /**

     * 创建时间:

     */

    @Basic

    @Column(name = "create_time")

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")

    private Timestamp createTime;

    @Basic

    @Transient

    private String code;

}

5.2.3评论模块的实现

用户点击进入美食文章详细页,点击评论按钮进入评论页,提交评论信息,成功发布评论,管理员管理用户的评论信息。

用户评论流程图如下所示。

图5-6用户评论流程图

用户评论界面如图所示。

图5-6用户评论

5.3管理员子系统模块的实现

5.3.1用户管理模块的实现

系统用户管理主要是对新用户的添加和旧用户的删除。新用户的添加主要是指添加用户名称并确定其密码;旧用户的删除也是从下拉菜单中找到对应的用户名称将其删除。不论是新用户添加还是旧用户的删除,这个权限只有管理员具有。

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

图5-7系统用户管理

5.3.2密码修改模块的实现

密码修改是对当前登录用户的密码进行修改,在用户登录后右上方也能进行密码修改。

密码修改流程图如下所示。

图5-8密码修改流程图

密码修改界面如图所示。

图5-9修改密码

5.3.3食谱分类管理模块的实现

美食食谱添加功能主要指对其美食食谱名称、描述、类型、图片、内容等一些基本信息的添加、删除和修改。美食查询能根据美食id、名称、标题等多种条件对美食食谱进行查询。

食谱分类管理流程图如下所示。

图5-10食谱分类管理流程图

食谱分类如下图所示:

图5-11食谱分类

食谱分类管理关键代码如下所示。

@PostMapping("/add")

    @Transactional

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

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

        return success(1);

    }

    @Transactional

    public Map<String, Object> addMap(Map<String,Object> map){

        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){

        StringBuffer sql = new StringBuffer("INSERT INTO ");

        sql.append("`").append(table).append("`").append(" (");

        for (Map.Entry<String,Object> entry:body.entrySet()){

            sql.append("`"+humpToLine(entry.getKey())+"`").append(",");

        }

        sql.deleteCharAt(sql.length()-1);

        sql.append(") VALUES (");

        for (Map.Entry<String,Object> entry:body.entrySet()){

            Object value = entry.getValue();

            if (value instanceof String){

                sql.append("'").append(entry.getValue()).append("'").append(",");

            }else {

                sql.append(entry.getValue()).append(",");

            }

        }

        sql.deleteCharAt(sql.length() - 1);

        sql.append(")");

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

        Query query = runCountSql(sql.toString());

        query.executeUpdate();

    }

5.3.4美食攻略管理模块的实现

   用户根据自己兴趣搜索美食攻略,前台显示美食攻略,。用户可以在线进行美食攻略查看,管理员对美食攻略进行发布管理等操作等。

美食攻略管理如下图所示:

图5-12美食攻略管理

美食攻略管理关键代码如下所示。

@RequestMapping("/get_list")

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

        Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));

        return success(map);

第6  系统测试

6.1软件测试

在设计系统的过程中,存在一些错误是不可避免的。For语句语法错误,运行的提示,并要求立即纠正,因此,容易发现和纠正错误等。但另一种类型的错误是程序执行时由于不正确的操作或对某些数据计算公式的逻辑错误导致错误的结果。这种错误的隐蔽性强,有时会出现,有时不出现,因此,这种误差动态屏幕耗时。

6.2功能测试

功能测试就是对产品的各功能进行验证,根据功能测试用例,逐项检测,检查产品是否达到用户要求的功能。下面列出的测试用例是基于需求分析阶段的用例描述而进行的设计。

下面将通过表格的形式介绍针对本系统每个功能模块所进行的功能测试。

1.注册模块功能测试,如下表所示。

表6-1注册测试

测试用例编号

测试用例描述

前提条件

测试步骤

预期结果

实际结果

状态

用户注册

用户打开注册界面

输入合适的用户名,密码为空

无法注册

提示密码不得为空,无法注册

正常

用户注册

用户打开注册界面

输入不合适的用户名、2次相同的密码

无法注册

提示用户注册失败

正常

用户注册

用户打开注册界面

输入合适的用户名,两次密码不一致

无法注册

提示用户名不得为空,无法注册

正常

用户注册

用户打开注册界面

输入的用户名为空

无法注册

提示用户名不能为空

正常

用户注册

用户打开注册界面

输入合适的用户名和两次相同的密码

正常注册

注册成功

正常

2.登录模块功能测试,如下表所示。

表6-2登录测试

测试用例编号

测试用例描述

前提条件

测试步骤

预期结果

实际结果

状态

登录系统

用户打开登录界面

输入正确的用户名,密码为空

无法登录

提示密码不得为空,无法登录

正常

登录系统

用户打开登录界面

输入正确的用户名,输入错误密码

无法登录

提示密码不正确,无法登录

正常

登录系统

用户打开登录界面

输入正确的密码,用户名为空

无法登录

提示用户名不得为空,无法登录

正常

登录系统

用户打开登录界面

输入正确的密码,错误的用户名

无法登陆

提示用户名不正确,无法登录

正常

登录系统

用户打开登录界面

用户名及密码都为空

无法登录

提示用户名和密码不得为空,无法登录

正常

登录系统

用户打开登录界面

用户名及密码都输入错误

无法登录

提示用户名和密码正确,无法登录

正常

登录系统

用户打开登录界面

输入正确的用户名和密码

正常登录

进入主界面

正常

3.修改密码模块功能测试,如下表所示。

表6-3修改密码测试

测试用例编号

测试用例描述

前提条件

测试步骤

预期结果

实际结果

状态

修改密码

用户打开修改密码界面

输入正确初始密码和2次相同的新密码

密码修改成功

密码修改成功

正常

修改密码

用户打开修改密码界面

输入错误的原始密码

密码修改失败

密码修改失败

正常

修改密码

用户打开修改密码界面

输入正确初始密码和2次不相同的新密码

密码修改失败

密码修改失败

正常

4.评论功能测试,如下表所示。

表6-4评论测试

测试用例编号

测试用例描述

前提条件

测试步骤

预期结果

实际结果

状态

在线评论

用户已登录,打开评论界面

输入评论标题、内容等信息

评论成功

评论成功,新评论成功显示

正常

在线评论

用户已登录,打开评论界面

用户未输入评论标题和内容

评论失败

评论失败

正常

5.个人中心功能测试,如下表所示。

表6-5个人中心测试

测试用例编号

测试用例描述

前提条件

测试步骤

预期结果

实际结果

状态

用户信息修改

用户已登录,进入个人中心,且打开个人信息界面

输入内容不合法或必填项为空

修改失败

提示输入内容非法

正常

用户信息修改

用户已登录,进入个人中心,且打开个人信息界面

输入内容合法

修改成功

提示修改成功

正常

6.美食文章管理功能测试,如下表所示。

表6-6美食文章管理测试

测试用例编号

测试用例描述

前提条件

测试步骤

预期结果

实际结果

状态

美食文章信息添加

用户已登录,打开美食文章添加界面

输入美食文章标题、内容等信息

美食文章添加成功

美食文章添加成功,新美食文章成功显示

正常

美食文章信息添加

用户已登录,打开美食文章添加界面

用户未输入美食文章标题和内容

美食文章添加失败

美食文章添加失败

正常

7.食谱分类管理功能测试,如下表所示。

表6-7食谱分类管理测试

测试用例编号

测试用例描述

前提条件

测试步骤

预期结果

实际结果

状态

食谱分类信息添加

用户已登录,打开食谱分类添加界面

输入食谱分类标题、内容等信息

食谱分类添加成功

食谱分类添加成功,新食谱分类成功显示

正常

食谱分类信息添加

用户已登录,打开食谱分类添加界面

用户未输入食谱分类标题和内容

食谱分类添加失败

食谱分类添加失败

正常

7.美食点评功能测试,如下表所示。

表6-8美食点评测试

测试用例编号

测试用例描述

前提条件

测试步骤

预期结果

实际结果

状态

美食点评

用户已登录,打开美食点评界面

输入美食标题、内容等信息

美食点评成功

美食点评成功

正常

美食点评

用户已登录,打开美食点评界面

用户未输入美食标题和内容

美食点评失败

美食点评失败

正常

6.3测试结果

通过对美食分享整个系统功能的测试,发现了许多无法实现的功能并及时得到改正和实现,为美食推荐与交流系统的发布奠定了基础。此系统中各模块的功能都基本实现,不过还存在着许多不足,在以后的学习中通过测试还需加强和完善。

处于开发者模式怎么关家装设计师怎么自学深圳找工作一般用哪个网站儿童房平面设计素材软件开发学习班html怎么下载长沙网约车租车一个月多少钱黑龙江建设网签章建设局消防验收婚庆公司名字大全 独特湖州特色互联网体检小品完整版网络营销有哪些职能视频教学平台软件哪个好柳州市住建局门户网站成都龙兵科技有限公司廉洁长沙答题重庆app开发外包网络培训平台个人中心申请退款动画设计方案b2c模式和o2o模式的区别武汉建站推荐长沙营销型网站公司报价公共关系营销360浏览器电脑版厦门短视频营销2012r2web服务器搭建步骤企业网站搭建报价qq网站投资公司组织架构图汕头市网站建设制作设计平台

猜你喜欢

  • 友情链接:
  • 快速排名优化哪家便宜 秦皇岛软件开发 电子邮件 怎样短视频带货赚佣金 可靠的企业网站建设 办公自动化三大软件