springboot+mysql+建筑造价师资格考试应试网站设计与实现 毕业设计-附源码260839

Springboot建筑造价师资格考试应试网站

摘  要

如何合理确定和有效控制工程投资,是工程项目建设的一大难题,如何使建筑工程造价管理与社会生产水平相适应,是建筑工程造价管理中需要解决的问题,只有加强建筑工程造价管理工作力度,提高建筑工程造价人员素质,才能使建筑工程造价管理走上国际化的道路。本文根据我国工程造价的现状,针对工程造价管理的重要性进行探讨,以实现预期的投资目标,充分发挥投资效益。

建筑造价师资格考试应试网站主要功能模块包括课程管理、在线考试、成绩管理等,采取面对对象的开发模式进行软件的开发和硬体的架设,能很好的满足实际使用的需求,完善了对应的软体架设以及程序编码的工作采用Spring boot框架、JSP技术、Ajax技术进行业务系统的编码及其开发,实现了本系统的全部功能。本次报告,首先分析了研究的背景、作用、意义,为研究工作的合理性打下了基础。针对建筑造价师资格考试应试网站的各项需求以及技术问题进行分析,证明了系统的必要性和技术可行性,然后对设计系统需要使用的技术软件以及设计思想做了基本的介绍,最后来实现建筑造价师资格考试应试网站的部署与运行。

关键词:建筑造价师资格考试;Java;MySQL; springboot

Springboot construction cost engineer qualification examination website

Abstract

How to reasonably determine and effectively control the project investment is a major problem in the project construction. How to adapt the construction project cost management to the social production level is a problem to be solved in the construction project cost management. Only by strengthening the construction project cost management and improving the quality of construction project cost personnel, can the construction project cost management embark on the road of internationalization. According to the current situation of project cost in China, this paper discusses the importance of project cost management in order to achieve the expected investment goal and give full play to the investment benefit.    

The main functional modules of the website for the qualification examination of construction cost engineer include course management, online examination, score management, etc. the object-oriented development mode is adopted for software development and hardware erection, which can well meet the needs of practical use, improve the corresponding software architecture and program coding, and code and develop the business system by using spring boot framework, JSP technology and Ajax technology, All the functions of the system are realized. This report first analyzes the background, function and significance of the research, which lays a foundation for the rationality of the research work. This paper analyzes the various needs and technical problems of the website for the qualification examination of building cost engineer, proves the necessity and technical feasibility of the system, then makes a basic introduction to the technical software and design ideas needed for the design system, and finally realizes the deployment and operation of the website for the qualification examination of building cost engineer.

Key words :Qualification examination of construction cost engineer; Java; MySQL; springboot

目  录

   1

   1

1 引言 1

1.1 选题背景及意义 1

1.2 研究内容 1

1.3系统的特点 1

1.4论文结构与章节安排 2

2 系统需求分析 3

2.1可行性分析 3

2.1.1 技术可行性分析 3

2.1.2 操作可行性分析 3

2.1.3 经济可行性分析 3

2.2功能需求分析 3

2.3用例分析 4

3系统总体设计 6

3.1 系统开发架构的选择 6

3.1系统功能模块设计 6

3.1.1 前台页面设计 7

3.1.2 用户模块设计 7

3.1.3 课程信息管理模块设计 8

3.2数据库设计 9

3.2.1数据库概要设计 9

3.2.2数据库逻辑设计 9

4系统详细实现 14

4.1系统前台功能实现 14

4.2系统后台功能实现 19

5系统测试 23

5.1 系统测试目的 23

5.2 系统可用性测试 23

5.3 系统典型测试用例 23

5.4 测试总结 24

总结 26

参考文献 27

   28

1 引言

1.1 选题背景

自我国加入WTO后,我国的基本建设投资也日益增大,据国家统计局网站消息,2006年一季度,我国全国建筑业企业完成建筑业总产值5512亿元,增长 22.3%;完成竣工产值2263亿元,增长 25.30%,数据显示,全国建筑业企业生产规模继续扩大,施工产值快速增长。在这样一个蓬勃发展的建筑业的前提下,加之“企业利润最大化”这个理念在人们心理日益深化,因此与之密切相关的工程造价行业也在迅猛地发展,呈现出前所未有的良好趋势。而此时人们也开始注重起了以前被忽视了的造价人员,不管是施工单位还是开发公司以及政府部门,为了节约成本、控制造价,不惜花高价聘请一些专业的造价人员为自己进行服务。比如说原来在设计图纸的时候,造价工程师只是被动地计算,而现在则是和设计师一起,从设计阶段就开始进行造价控制。随着工程造价咨询行业在我国的迅猛发展以及《内地造价工程师与香港工料测量师互认协议》的签订,很多国外的测量师行到我国设立分支机构,这样给国内造价人员的发展提供了广阔空间,但同时也面临着竞争与挑战。越来越多的相关人才涌入这个行业,为更多的避免良莠不齐的现状,在造价师选拔之初,对相关人员进行资格考试认证也是必须的,而如何结合互联网技术,建立一个简便效率化的考试应试网站,值得我们研究,传统的应试停留在纸笔时代,不仅要浪费大量的人力资源,财力物力上,效率也非常的慢,为解决这些问题,而开发一套建筑造价师资格线上考试应试网站,能节约更多资源。

1.2 选题意义

建筑工程造价是在建筑工程方面十分重要的环节。建设施工阶段中,工程建设投资膨胀严重的现象普遍存在,致使工期越拖越长,工程造价越来越高。当前建设施工阶段造价师是十分重要的角度,工程造价师也称为造价工程师:是指既懂工程技术、又懂工程经济和管理,并具有实践经验,为建设项目提供全过程造价的确定、控制和管理,使工程技术与经济管理密切结合,达到人力、物力和建设资金最有效地利用,使既定的工程造价限额得到控制,并取得最大投资效益的人。关于建筑造价师的评定,都有行业选拔的标准,比如:建筑专业毕业,达到的工作年限,建筑造价师资格考试,评定职称。在互联网时代,如何建立一个关于建筑师造价资格考试应试网站,为国家,为建筑行业选拔更多的人才,尤为重要。

1.3系统的特点

(1)建筑造价师资格考试应试网站中的web后台管理中的后端不再使用古老的jsp+javabean+servlet技术,而是使用当前主流的springboot框架,它减少java配置代码,简化编程代码,目前springboot框架也是很多企业选择的框架之一。

(2)建筑造价师资格考试应试网站中的web后台管理中的前端使用的是bootstrap框架,它配合ajax和jquery可以美化页面设计。

(3)建筑造价师资格考试应试网站中数据库用的mysql5.7,它执行效率高。

1.4论文结构与章节安排

本文共分为六章,章节内容安排如下:

第一章:引言。第一章主要介绍了课题研究的背景意义,国内目前相关研究现状以及技术和本文的研究内容与主要工作。

第二章:系统需求分析。第二章主要从系统的可行性、功能等方面进行需求分析。

第三章:系统总体设计。第三章主要对系统功能模块、数据库进行功能设计。

第四章:系统详细设计。第四章主要介绍了系统各个用户的功能、系统界面的实现。

第五章:系统测试。第五章主要对系统的部分界面进行测试并对主要功能进行测试

2 系统需求分析

2.1可行性分析

通过以下的系统总体需求分析,进而分析是否拥有达成需求的技术、资金和开发人员等条件。那么就从以下几点进行简单的说明:

2.1.1 技术可行性分析

建筑造价师资格考试应试网站存储所使用的mysql数据库以及开发中所使用的IDEA、Tomcat这些开发工具的使用,能够给我们的编写工作带来许多的便利。系统使用springboot框架进行开发,使系统的可扩展性和维护性更佳,减少java配置代码,简化编程代码,目前springboot框架也是很多企业选择的框架之一。

2.1.2 操作可行性分析

总体来严,该系统的操作设计和逻辑设计还是比较简单的。因为总体的设计目标只是包括数据的读取等基本内容。而且,就目前使用的客户一般都是用户和管理人员,都是有较高文化的一群人和学习能力较强的人。但是还是要把程序的操作设计得尽量简单,比如课程管理、成绩管理、在线考试等功能,比如用户的登录和退出功能等,都需要尽量的简单,这样让系统用户更容易上手。针对管理员的操作,这边需要指出,是需要一定的理解的,比如系统管理,成绩管理,在线考试功能的设定,比如各类信息的添加和修改等,还是需要一定的计算机基本认识,如有需要,可以对其进行简单的介绍或者培训。

2.1.3 经济可行性分析

在开发建筑造价师资格考试应试网站中所使用的开发软件像IDEA开发工具、Tomcat8.0服务器、MySQL5.7数据库、Photoshop图片处理软件等,这些都是开源免费的,并且建筑造价师资格考试应试网站是自己设计并编码实现的,数据库是使用流行mysql进行数据的存储,开源的mysql等技术的使用,减少系统开发费用。

2.2功能需求分析

建筑造价师资格考试应试网站的主要目的分为三个。

首先:可以通过该系统可以很好的整合建筑造价课程以及建筑造价师资格考试的相关信息。以前通过传统的报名以及考试的方式有个最大的问题就是信息查询、考试方式繁琐,而且各种信息容易丢失,有了这样一个建筑造价师资格考试应试网站,那么则可以很容易的把所有的考试信息都放到数据库中,如果再对数据库进行备份处理,那么这样就可以很好的对课程信息以及在线考试信息进行保存。

其次:建筑造价师资格考试应试网站提供了一个用户和用户,用户与管理员进行互动交流的系统,用户可以通过注册获取一个帐户,查询课程信息,进行在线考试等。

再次:该系统需要很好的功能扩充性和可维护性。由于该系统是涉及的用户比较多,对管理员来说同样也是一个信息管理系统,包括用户信息,课程信息,成绩信息,在线考试信息等。而且,随着用户数量的增加,必然对程序的更新迭代要求更高,所有在开发的时候就需要注意程序的可维护性和可拓展性。

2.3用例分析

建筑造价师资格考试应试网站中的管理员主要负责了如下功能操作。

(1)站点管理功能需求:站点管理包括了公告栏部分,管理员可以对这两部分进行添加,修改,删除和查询等。

(2)用户管理功能需求:用户管理部分包括了管理员,用户两部分,管理员可以对这两部分进行添加,修改,删除以及查询等。

(3)内容管理功能需求:内容管理部分包括了用户在线考试信息。

(4)更多管理功能需求:更多管理主要实现了课程信息、成绩信息的功能,管理员可以进行添加,编辑,删除操作。

图2-1管理员角色用例图

建筑造价师资格考试应试网站中的用户主要负责了如下功能操作。

(1)注册登录功能需求:没有账号的用户,可以输入账号,密码,昵称,邮箱等信息进行注册操作,注册后可以输入账号和密码进行登录。

(2)课程信息功能需求:用户可以进行课程搜索,课程学习,课程视频下载。

(3)在线考试功能需求:用户可以在线进行考试操作。

图2-2用户角色用例图

3系统总体设计

3.1 系统开发架构的选择

如今随着web系统功能的不断完善,越来越多的项目选择web系统,同样建筑造价师资格考试应试网站也是通过浏览器来访问系统主页面的。Web系统与app相比(后者主要是C/S架构),可以通过浏览器来规避很多问题,依靠浏览器让项目的开发变得简单,不再担心项目的版本跟新带来的数据传输等一系列的问题。值得注意的是B/S架构的项目,浏览器与服务器的数据的交互是通过http协议进行的,同样,服务器与数据库的数据交互也是通过http协议,统一的格式让信息的交互更加的简便与快捷。下图是具体的b/s架构图:

图3-1 系统B/S结构

3.1系统功能模块设计

建筑造价师资格考试应试网站的整体架构确定以后,再来看建筑造价师资格考试应试网站的主要功能模块图。整体的功能模块包括前台和后台,前台只要实现了用户,主要的页面,包括首页,课程信息、成绩信息、在线考试等。后台的模块主要实现了管理员,用户管理、课程信息管理、成绩管理、在线考试管理等。确定了模块以后,再设计各个模块的功能特点,方便抽取出各个模块的公共部分来。

图3.1建筑造价师资格考试应试网站功能模块图

3.1.1 前台页面设计

本建筑造价师资格考试应试网站的前台页面所有的页面设计主要是上中下的结构,这样的好处是让所有的页面更加的整洁。主题的页面颜色采用淡色为主,为突出页面的美观。主页面上分为导航栏,导航栏的每个导航项目设计为一张jsp页面,除此之外,还有就是用户中心页面,后台管理的页面了。后台管理页面已简单的上下结构为主。

3.1.2 用户模块设计

(1)用户模块结构图

本系统的用户包括管理员,用户模块。两种角色模块的功能基本是相同的,用户比管理员多了一个注册功能,所以以用户模块的结构图为例进行分析,如下图:

图3.2用户模块结构图

(2)各个结构的具体业务逻辑

a.查询用户信息:设计最基础的查询功能,主要就是根据用户id查询用户信息。该功能主要体现在管理员用户信息查询和用户自己查询信息的时候。

b.修改用户信息:用户可以根据情况,对自己的基本信息进行修改,包括名字修改、密码修改、头像修改等操作。

c.增加用户:用户可以通过注册来获得账号

d.删除用户信息:管理员没有权利进行删除信息的删除,最多把用户加入到黑名单中,禁止用户进行登录操作。

3.1.3 课程信息管理模块设计

(1)课程信息模块结构图

建筑造价师资格考试应试网站同时是一个在线课程学习网站,用户可以在线进行课程信息查询学习,可以在线进行学习视频下载操作。管理员对系统课程视频进行上传以及课程内容进行管理,具体的结构图如下:

图3.3课程信息模块结构图

(2)各个结构的具体业务逻辑

a.查询课程:设计最基础的课程查询功能,主要就是根据用户id查询该系统的所有课程信息。

b.发布课程:管理员可以在线发布课程信息到系统上。

c.删除课程:管理员可以删除系统的课程信息。

3.2数据库设计

3.2.1数据库概要设计

建筑造价师资格考试应试网站根据上面的E-R实体图,就再找到实体与实体之间的关系来,制作总的E-R图,实体之间的关系一共有4种,也就是一对一,多对一,一对多和多对多,总的E-R图是设计数据库表格的依据,如下图是系统的总E-R图。

图3.4系统总体E-R图

3.2.2数据库逻辑设计

根据上面的E-R图,继而设计数据库表格,注意的是数据库表格遵从三范式标准,这样以后操作也会更加简单一些。

系统的各个数据库表如下。

名称

类型

长度

不是null

主键

注释

account_management_id

int

11

科目管理ID

account_number

varchar

64

科目编号

account_name

varchar

64

科目名称

account_type

varchar

64

科目类型

person_in_charge

varchar

64

负责人

remarks

varchar

64

备注

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

名称

类型

长度

不是null

主键

注释

collect_id

int

10

收藏ID:

user_id

int

10

收藏人ID:

source_table

varchar

255

来源表:

source_field

varchar

255

来源字段:

source_id

int

10

来源ID:

title

varchar

255

标题:

img

varchar

255

封面:

create_time

timestamp

0

创建时间:

update_time

timestamp

0

更新时间:

名称

类型

长度

不是null

主键

注释

curriculum_id

int

11

课程ID

course_name

varchar

64

课程名

course_type

varchar

64

课程类型

course_cover

varchar

255

课程封面

course_video

varchar

255

课程视频

enclosure

varchar

255

附件

remarks

varchar

64

备注

tell_content

text

0

讲述内容

hits

int

11

点击数

praise_len

int

11

点赞数

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

名称

类型

长度

不是null

主键

注释

exam_id

mediumint

8

考试id

name

varchar

32

考试名称

duration

int

11

答题时长

score

double

8

总分

status

varchar

10

状态

create_time

timestamp

0

创建时间:

update_time

timestamp

0

更新时间:

名称

类型

长度

不是null

主键

注释

exam_question_id

mediumint

8

type

varchar

20

类型

title

varchar

255

题目

question_item

varchar

500

选项

answer

varchar

500

参考答案

score

double

8

总分

question_order

int

11

排序

exam_id

mediumint

8

所属试卷

create_time

timestamp

0

创建时间:

update_time

timestamp

0

更新时间:

名称

类型

长度

不是null

主键

注释

examinee_id

int

11

考生ID

admission_number

varchar

64

准考号

examine_state

varchar

16

审核状态

recommend

int

11

智能推荐

user_id

int

11

用户ID

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

名称

类型

长度

不是null

主键

注释

notice_id

mediumint

8

公告id:

title

varchar

125

标题:

content

longtext

0

正文:

create_time

timestamp

0

创建时间:

update_time

timestamp

0

更新时间:

名称

类型

长度

不是null

主键

注释

upload_id

int

11

上传ID

name

varchar

64

文件名

path

varchar

255

访问路径

file

varchar

255

文件路径

display

varchar

255

显示顺序

father_id

int

11

父级ID

dir

varchar

255

文件夹

type

varchar

32

文件类型

4系统详细实现

建筑造价师资格考试应试网站的详细设计与实现主要是根据前面的建筑造价师资格考试应试网站的需求分析和建筑造价师资格考试应试网站的总体设计来设计页面并实现业务逻辑。主要从建筑造价师资格考试应试网站界面实现、业务逻辑实现这两部分进行介绍。

4.1系统前台功能实现

4.1.1系统主页功能实现

用户进入首页之后会显示如下的一个窗口。系统以上中下的布局进行展示,首先映入眼帘的是系统的课程信息,在线考试信息、成绩信息,其主界面展示如下图4.1所示。

如下图:

图4.1建筑造价师资格考试应试网站首页界面

由于该项目只是用来测试,用户登录首页展示的图片等数据有的是从项目本地拿到的,有的则是从数据库中获取的。页面中的搜索部分,页头部分等都是属于公共样式,可以进行公告样式的抽取,然后再引入到jsp页面中。

4.1.2用户注册登录功能实现

不是建筑造价师资格考试应试网站中用户的是可以在线进行注册的,当用户点击右上角的“个注册”的时候,,当填写上自己的账号+密码+确认密码+昵称+邮箱+手机号+选择身份登信息后,后再点击“注册”按钮后将会先验证输入的有没有空数据,再次验证密码和确认密码是否是一样的,最后验证输入的账户名和数据库表中已经注册的账户名是否重复,只有都验证没问题后即可会员注册成功。前台注册的部分包括了用户的注册,其用注册界面展示如下图4.2所示。

图4.2建筑造价师资格考试应试网站用户注册界面

用户注册界面关键代码如下。

/**

     * 注册

     * @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;

}

4.2.3 登录功能实现

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

图4.3建筑造价师资格考试应试网站登录界面

用户登录的逻辑代码如下所示。

/**

     * 登录

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

        }

}

4.2.6课程信息功能实现

当用户点击导航栏“课程信息”后可以查看到课程信息列表,点击某一课程就会进入详细课程信息介绍的界面。具体的实现界面如下图4.4所示:

图4.4课程信息界面

课程信息关键代码如下。

@RestController

@RequestMapping("auth")

public class AuthController extends BaseController<Auth, AuthService> {

    /**

     * 服务对象

     */

    @Autowired

    public AuthController(AuthService service) {

        setService(service);

    }

}

4.2.7在线考试功能实现

当用户点击导航栏“在线考试”后可以进行在线答题,点击某一试题栏进入答题界面,具体的实现界面如下图4.5所示:

图4.5在线考试界面

在线考试关键代码如下。

public class FindConfig {

    public static String PAGE = "page";

    public static String SIZE = "size";

    public static String LIKE = "like";

    public static String ORDER_BY = "orderby";

    public static String FIELD = "field";

    public static String GROUP_BY = "groupby";

    public static String MIN_ = "_min";

    public static String MAX_ = "_max";

}

4.2系统后台功能实现

4.2.1后台用户登录功能实现

建筑造价师资格考试应试网站中的后台的管理员是可以通过自己的账户名和密码进行登录的,当管理员输入完整的自己的账户名和密码信息并点击“登录”按钮后,将会首先验证输入的有没有空数据,再次验证输入的账户名+密码和数据库中当前保存的用户信息是否一致,只有在一致后将会登录成功并自动跳转到建筑造价师资格考试应试网站的首页中;否则将会提示相应错误信息,登录界面如下图4.6所示。

图4.6后台登录界面

4.2.2用户管理功能实现

管理员在用户管理模块,可以对用户信息进行管理,用户管理模块由管理员,用户组成,这里以考生用户管理为例,具体的实现界面如下图:

图4.7用户管理界面

用户管理关键代码如下。

 @RequestMapping("/get_obj")

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

        Query select = service.select(service.readQuery(request), service.readConfig(request));

        List resultList = select.getResultList();

        if (resultList.size() > 0) {

            JSONObject jsonObject = new JSONObject();

            jsonObject.put("obj",resultList.get(0));

            return success(jsonObject);

        } else {

            return success(null);

        }

}

 public Query 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 runEntitySql(sql.toString());

    }

4.2.3课程管理功能实现

管理员点击“课程管理”这一按钮就会展示其下子菜单,选择“课程”在这个界面,管理员可以对课程信息添加,编辑,删除,具体的实现界面如下图:

图4.8课程管理界面

4.2.4成绩管理功能实现

管理员在“更多管理”界面的子菜单下可以管理“成绩信息”,管理员能够对考生用户的考试成绩进行发布,具体的实现界面如下图:

图4.9成绩管理界面

成绩管理关键代码如下。

@RequestMapping(value = {"/count_group", "/count"})

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

        Query count = service.count(service.readQuery(request), service.readConfig(request));

        return success(count.getResultList());

}

4.2.5试题信息功能实现

管理员在“更多管理”界面的子菜单下可以管理“试题信息”,可以进行“试题”添加操作,具体的实现界面如下图:

图4.10试题信息界面

试题信息关键代码如下。

 @RequestMapping(value = {"/sum_group", "/sum"})

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

        Query count = service.sum(service.readQuery(request), service.readConfig(request));

        return success(count.getResultList());

}

4.2.6课程视频上传功能实现

管理员在“更多管理”界面的子菜单下可以进行“课程视频上传”,可以进行增删改查操作,具体的实现界面如下图:

图4.11课程视频上传界面

课程视频上传关键代码如下。

@RequestMapping(value = {"/avg_group", "/avg"})

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

        Query count = service.avg(service.readQuery(request), service.readConfig(request));

        return success(count.getResultList());

}

4.2.7在线考试管理功能实现

管理员在“更多管理”界面的子菜单下点击“在线考试管理”就是对其显示出用户提交的在线考试信息进行审核出成绩,具体的实现界面如下图:

图4.12在线考试管理界面

在线考试管理关键代码如下。

@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系统测试

5.1 系统测试目的

系统开发到了最后一个阶段那就是系统测试,系统测试对软件的开发其实是非常有必要的。因为没什么系统一经开发出来就可能会尽善尽美,再厉害的系统开发工程师也会在系统开发的时候出现纰漏,系统测试能够较好的改正一些bug,为后期系统的维护性提供很好的支持。通过系统测试,开发人员也可以建立自己对系统的信心,为后期的系统版本的跟新提供支持。

5.2 系统可用性测试

系统的可用性测试是测试系统最基本的功能,比如鼠标点击是否可用,页面跳转是否正常等。下面是具体的测试结果。

表5-1建筑造价师资格考试应试网站可用性测试

测试项

测试人员评价

窗口移动、改变大小、关闭等操作是否正常

操作模块是否友好

模块和提示内容等文字描述是否正确

模块布局是否合理、协调

模块的状态是否正确(对选中项能否发生对应切换)

键盘、鼠标操作是否支持

所需的数据项是否正确显示

操作流程是否合理

是否提供帮助信息

5.3 系统典型测试用例

对系统主要页面和功能点的测试用例如下:

(1) 用户登陆系统测试用例如表 5-2 所示。

表5-2用户登录系统测试用例

用例名称

用户登录系统

目的

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

前提

未登录的情况下

测试流程

1) 进入登录页面

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

预期结果

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

实际结果

实际结果与预期结果一致

(2)课程信息测试用例如表 5-3 所示

表5-3 课程测试用例

用例名称

课程

目的

测试课程功能

前提

测试流程

打开课程界面

预期结果

可以进行查看课程详细

实际结果

实际结果与预期结果一致

(3)评论试用例如表 5-4所示

表5-4评论测试用例

用例名称

评论

目的

测试评论模块功能

前提

测试流程

用户在评论区进行点评操作。

预期结果

评论提交以后,可以查看到自己的评论信息

实际结果

实际结果与预期结果一致

(4)成绩发布信息测试用例如表 5-5 所示

表5-5 成绩发布测试用例

用例名称

成绩发布

目的

测试成绩发布功能

前提

测试流程

管理员点击成绩发布,输入成绩信息

预期结果

用户提交试卷后可以查看成绩信息,前台显示成绩信息

实际结果

实际结果与预期结果一致

5.4 测试总结

通过系统的调试,能够检测项目的稳定性,为项目正式运行、稳定运行提供了可预测性的维护备案。能够帮助用户熟悉整个项目,并对项目可能出现的错误有所了解。本文提供了部分调试用例及调试日志,可以帮助用户解决简单的错误问题,也加深了开发者对于此框架下的项目编写的了解度,为后期开发者顺利完成项目、发布项目提供了非常大的帮助。

总结

本次设计中,我还学会了很多,例如良好的编程思想和完善的规划思想。在着手编程之前需要罗列出程序框架的大概,脑海中构建出程序的主题框架。做好这一步我们才能胸有成竹的经行开发项目。当设计框架了熟于心之后,需要思考本次编程所需的主要知识点和技术点,并充分学习。如此一来项目的开发才能循序渐进、如丝般顺滑,长久以往就能养成良好的开发习惯。一个程序好不好还要看出的bug多不多,如果在项目完成前做好bug的查验与预防可能发生的事故才能保证程序的稳定长久性运行。如果项目在完工后出现各种问题自己,那么在进入社会后,不仅会给公司团队带来麻烦和增加不必要的工作,还会导致客户流失,公司对自己的评价下降。

在本次项目中我也暴露了诸多问题。对于Java的编程知识有所欠缺,环境配置和算法上出现诸多问题,时常导致项目运行出错,或者目标的实现有问题。或者实现想法时算法未优化,使得代码冗长,程序运行不顺畅。

参考文献

[1]李云娜.论建筑工程造价预算控制要点及策略[J].建材发展导向,2021,19(24):61-63.DOI:10.16673/j.cnki.jcfzdx.2021.0388.

[2]郭生南,曾彩艳,郭阳明.大数据时代BIM对工程造价行业的影响与策略分析[J].四川建材,2021,47(12):194-195.

[3]陈文胜.信息技术对工程造价的影响及应用分析[J].新型工业化,2021,11(08):86-87.DOI:10.19335/j.cnki.2095-6649.2021.8.040.

[4]强宇明,杨玲霞.工程造价专业学生BIM技能培养的研究[J].砖瓦,2021(07):207+209.DOI:10.16001/j.cnki.1001-6945.2021.07.108.

[5]史伟伟.工程造价管理的信息化建设[J].经济研究导刊,2021(15):78-80.

[6]Ya Zhao, Xuan Peng, Haoyu Ren, Fang Liu, Jie Kong, Zhuozhuang Tong. Research on the Current Situation of Temporary Assembly Construction Industry based on Public Health Emergencies[J]. International Core Journal of Engineering,2021,7(1):

[7]蒋浩翔.建筑工程造价管理优化策略[J].建材与装饰,2020(18):159-160.

[8]吴伟康.浅析目前建筑工程造价管理存在的问题及其对策[J].现代物业(中旬刊),2020(01):156.DOI:10.16141/j.cnki.1671-8089.2020.01.138.

[9]原莉.C语言教学网站及网上考试系统的设计与实现[J].计算机产品与流通,2019(07):235.

[10]刘亚丽,霍畅,闫铜铜.在线考试系统的前台网站设计研究[J].信息记录材料,2019,20(01):110-111.DOI:10.16009/j.cnki.cn13-1295/tq.2019.01.070.

[11]Liu Yujia,Feng Bin,Ma Yujiao,Wang Mingli,Liu Jiaqi. Research on the Current Situation of Inner Mongolia Construction Industry and Competitiveness of Construction Enterprises[J]. IOP Conference Series: Materials Science and Engineering,2018,439(3):

[12]王现民.阐述公共建筑工程造价控制措施[J].建材与装饰,2018(35):116-117.

[13]周海涛.试述现代建筑工程造价现状及问题[J].现代物业(中旬刊),2018(06):55.DOI:10.16141/j.cnki.1671-8089.2018.06.045.

[14]胡北,刘戟.BIM技术的应用对工程造价行业的影响[J].四川建筑,2018,37(05):70-71+73.

[15]张佳伟. 浅谈工程造价管理的核心作用及其影响因素[N]. 山西经济日报,2016-11-08(007).DOI:10.28755/n.cnki.nsxjj.2018.000282.

[16]霍福华,韩慧.基于SpringBoot微服务架构下前后端分离的MVVM模型[J].电子技术与软件工程,2022(01):73-76.

致  谢

至此论文结束,感谢您的阅读。在此我要感谢我的导师,虽然我在实习期间很忙,论文撰写总是停停改改,但是导师依然十分负责,时不时的询问我的任务进展情况,跟进我的论文进度。虽然我在实习期间很忙,以至于很晚才开始进行论文撰写和编写程序的工作,但是在指导老师的帮助下,我逐步完成了自己的论文和程序,从导师身上也学习到很多知识,和经验,这些知识和经验令我受益匪浅。也从导师身上看到了自己的不足,不论是在即使层面上还是在对待工作的态度上,倒数如同明镜一般照出了我的缺点我的不足。此外,我还要感谢在我实习期间在论文和程序上帮助过我的同学和社会人士,此前我对于框架及JQuery和BootSatrp方面的一些知识还不了解,是他们在我编写程序过程中给了我很多的启发和感想,也帮助了我对于程序的调试和检测。没有他们我是不能顺利完成本次毕业设计的。至此,我的毕业设计就花上了一个圆满的句号了。

点赞+收藏+关注 → 私信领取本源代码、数据库

猜你喜欢

转载自blog.csdn.net/yuyuxun/article/details/130348309