计算机毕业设计项目选题推荐(免费领源码)Springboot+MySQL智能购房推荐系统09040

news2024/11/15 4:55:03

摘  要

近年来随着我国经济的高速发展,房地产业也随之蓬勃发展,尤其是最近国家新出台的房改政策。鼓励居民购房,这对房产公司无疑是一个极好的发展势头。尤为重要的是,近几年随着信息技术和电子商务的快速发展,许多企业都开发了自己房产信息软件。

智能购房推荐系统主要针对房屋购买推荐业务的应用特点,涉及房屋信息管理、地区管理、房型管理、用户需求以及房源推荐的全面系统。本设计主要实现集人性化、高效率、便捷等优点于一身的智能购房推荐系统,系统通过浏览器与服务器进行通信,实现数据的交互与变更。只需通过一台电脑,动动手指就可以操作系统,实现数据通信管理。整个系统的设计过程都充分考虑了数据的安全、稳定及可靠等问题,而且操作过程简单。本系统通过科学的管理方式、便捷的服务提高了工作效率,减少了数据存储上的错误和遗漏。

关键词:智能购房推荐系统;Springboot;MySQL;

Springboot intelligent house purchase recommendation system

Abstract

In recent years, with the rapid development of China's economy, the real estate industry has also developed vigorously, especially the recently issued housing reform policy. Encouraging residents to buy houses is undoubtedly an excellent development momentum for real estate companies. More importantly, with the rapid development of information technology and e-commerce in recent years, many enterprises have developed their own real estate information software.

The intelligent house purchase recommendation system is mainly aimed at the application characteristics of house purchase recommendation business, involving a comprehensive system of house information management, regional management, house type management, user demand and house source recommendation. This design mainly realizes an intelligent house purchasing recommendation system that integrates the advantages of humanization, high efficiency and convenience. The system communicates with the server through the browser to achieve data interaction and change. With a computer, you can operate the system by moving your finger to achieve data communication management. The design process of the whole system fully considers the security, stability and reliability of data, and the operation process is simple. The system improves work efficiency and reduces errors and omissions in data storage through scientific management and convenient services.

Key words :Intelligent buyer recommendation system; Springboot; MySQL;

目  录

  

  

1 引言

1.1 选题背景及意义

1.2 研究内容

1.3 系统的特点

1.4 论文结构与章节安排

2 系统需求分析

2.1可行性分析

2.1.1 技术可行性分析

2.1.2 操作可行性分析

2.1.3 经济可行性分析

2.2功能需求分析

2.3用例分析

3系统总体设计

3.1 系统开发架构的选择

3.1系统功能模块设计

3.1.1 前台页面设计

3.1.2 用户模块设计

3.1.3 房源信息管理模块设计

3.2数据库设计

3.2.1数据库概要设计

3.2.2数据库逻辑设计

4系统详细实现

4.1系统前台功能实现

4.2系统后台功能实现

5系统测试

5.1 系统测试目的

5.2 系统可用性测试

5.3 系统典型测试用例

5.4 测试总结

总结

参考文献

  

1 引言

1.1 选题背景及意义

当今时代,随着信息技术的发展,某些传统的方式在处理庞大的信息量时已经显的极不适应,人们对于运用计算机来辅助协调和管理自身工作的需求正逐步提高,人们希望能借助计算机技术实现某些方面的自动化管理。

Internet的迅速发展将整个世界经济带入了一个从未有过的高速增长期,随着网络技术的成熟,电子商务的概念已经逐渐深入人心,电子商务正飞速兴起,电子商务大潮正在全球范围内急速改变传统的商业模式。在线购物、B2B、B2C已经成为大家谈论的焦点。在未来的20年,电子商务的膨胀将形成指数型上升曲线。电子商务系统提供了一种商家与客户进行交流的新方式,但电子商务带来的冲击是革命性的,对传统房屋销售提出了严峻的挑战要求房屋销售管理者以全新的思维来看待未来的客户、未来的竞争对手、未来的技术工具,仅仅把现有的商业流程实现数据处理自动化并不意味着可以在“新经济”时代取得成功。

随着社会的进步,人们生活水平的提高。人们为了提高办事的效率,利用一些先进的工具和技术来完成人们需要的工作。各个城市在经济腾飞发展的支持下,逐步积累了大量的闲置房屋。这样,为了方便用户在网上查询各方面的房源信息,利用计算机和网络技术设计一个能够实现购房推荐、自动化的系统就显得很必要了,本文的Springboot智能购房推荐系统就是适应这种需求而设计的。

1.2 研究内容

智能购房推荐系统的开发及实现,所需要的工作内容:

(1)首先是确定选题,确定好所要做的系统,并对系统的背景及现在面临的一些问题等进行系统的初步确认。

(2)系统确认完成后,结合系统开发的需求进行确认系统开发所使用的技术,智能购房推荐系统的开发使用Springboot框架,数据库进行平台的搭建开发,确认好使用的技术进行技术分析,所使用的技术是否可以完成智能购房推荐系统的实现。

(3)确定好系统使用的技术,进行在线确认系统所划分的用户角色,并且根据用户角色划分确定所要设计的功能模块,对于智能购房推荐系统的设计主要划分别为管理员和用户角色,并所使用的功能模块也相应不同,但是系统的数据库实现的内容是交互的,用户可以随时根据自己的需求进行信息查询以及检索,对于系统工作人员可以根据自己的分管内容进行在线信息的处理及操作,管理员获取到所有用户的详细数据信息,并根据需求进行第一时间处理解决。

(4)系统的功能模块确认完成后进行程序及界面的设计,设计完成后,并且通过测试来判断程序是否完善,对于系统测试,需要不同的用户进行不同的内容编辑及提交,及使用不同的测试方式找出程序中存在的漏洞,并对程序出现的漏洞问题进行在线解决处理,如果测试系统没有任何问题时,可以将系统上传进行正式操作使用。

1.3系统的特点

(1)智能购房推荐系统中的web后台管理中的后端不再使用古老的jsp+javabean+servlet技术,而是使用比较流行的渐进式JavaScript框架Vue.js,它减少java配置代码,简化编程代码,目前Springboot框架也是很多企业选择的框架之一。

(2)智能购房推荐系统中的web后台管理中的前端使用的是Springboot框架Ajax实现前后端通信,Element UI组件库使页面快速成型,项目前端通过栅格布局实现响应式,可适应PC端、平板端、手机端等不同屏幕大小尺寸的完美布局展示。

(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)用户需求功能需求:可以将自己的购房需求填写上传。

(4)房产资讯功能需求:可以查看系统发布的房产资讯信息。

图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. 房源信息管理模块设计

(1)房源信息模块结构图

用户可以进行在线进行房源信息查看操作。可以进行房源信息搜索等。

具体的结构图如下:

图3.3产权登记模块结构图

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

a.查询房源:设计最基础的查询功能,主要就是搜索查询房源信息。

b.发布房源:管理员后台进行房源信息的增删改查操作。

3.2数据库设计

3.2.1数据库概要设计

智能购房推荐系统根据上面的E-R实体图,就再找到实体与实体之间的关系来,制作总的E-R图,实体之间的关系一共有4种,也就是一对一,多对一,一对多和多对多,总的E-R图是设计数据库表格的依据,如下图是系统的总E-R图。

图3.5系统总体E-R图

3.2.2数据库逻辑设计

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

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

名称

类型

长度

不是null

主键

注释

registered_user_id

int

11

注册用户ID

user_name

varchar

64

用户名

examine_state

varchar

16

审核状态

recommend

int

11

智能推荐

user_id

int

11

用户ID

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

名称

类型

长度

不是null

主键

注释

house_type_management_id

int

11

房型管理ID

layout_of_a_house_or_an_apartment

varchar

64

房型

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

名称

类型

长度

不是null

主键

注释

housing_information_id

int

11

房源信息ID

title

varchar

64

标题

layout_of_a_house_or_an_apartment

varchar

64

房型

region

varchar

64

地区

photo

varchar

255

照片

address

varchar

64

地址

the_measure_of_area

varchar

64

面积

floor

varchar

64

楼层

orientation

varchar

64

朝向

state

varchar

64

状态

surrounding_environment

text

0

周边环境

house_listing_introduction

longtext

0

房源介绍

hits

int

11

点击数

praise_len

int

11

点赞数

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

名称

类型

长度

不是null

主键

注释

listing_recommendation_id

int

11

房源推荐ID

title

varchar

64

标题

layout_of_a_house_or_an_apartment

varchar

64

房型

region

varchar

64

地区

address

varchar

64

地址

the_measure_of_area

varchar

64

面积

floor

varchar

64

楼层

orientation

varchar

64

朝向

user

int

11

用户

reason_for_recommendation

text

0

推荐理由

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

名称

类型

长度

不是null

主键

注释

regional_management_id

int

11

地区管理ID

region

varchar

64

地区

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

名称

类型

长度

不是null

主键

注释

user_demand_id

int

11

用户需求ID

user_name

int

11

用户名

resident_name

varchar

64

住户姓名

age

int

11

年龄

with_or_without_children

varchar

64

有无子女

whether_there_are_old_people

varchar

64

有无老人

number_of_residents

int

11

居住人数

house_purchase_budget

varchar

64

购房预算

resident_members

text

0

居住成员情况

other_needs

text

0

其他需求

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

4系统详细实现

智能购房推荐系统的详细设计与实现主要是根据前面的智能购房推荐系统的需求分析和智能购房推荐系统的总体设计来设计页面并实现业务逻辑。主要从智能购房推荐系统界面实现、业务逻辑实现这两部分进行介绍。

4.1系统前台功能实现

4.1.1系统主页功能实现

用户进入首页之后会显示如下的一个窗口。系统以上中下的布局进行展示,首先映入眼帘的是系统的导航栏,下面是轮播图,再往下是各种各样的模块信息,其主界面展示如下图4.1所示。

如下图:

图4.1智能购房推荐系统主界面

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

系统主界面关键代码如下:

@Application

@EnableJpaRepositories

public class Application {

    public static void main(String[] args) {

        SpringApplication.run(Application.class,args);

    }

}

4.1.2用户注册功能实现

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

如下图:

图4.2智能购房推荐系统用户注册界面

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

/**

     * 注册

     * @return

     */

    @PostMapping("register")

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

        // 查询用户

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

        Map<String,Object> map = service.readBody(request.getReader());

        query.put("username",String.valueOf(map.get("username")));

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

        if (list.size()>0){

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

        }

        map.put("password",service.encryption(String.valueOf(map.get("password"))));

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

        E entity = JSON.parseObject(JSON.toJSONString(body),eClass);

        baseMapper.insert(entity);

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

}

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.4房源信息功能实现

用户在查看房源信息的时候,可以进行搜索,界面如图4.4所示:

图4.4智能购房推荐系统的房源信息界面

房源信息界面的关键的代码如下。

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

}

4.2.5用户需求功能实现

用户在用户需求界面可以添加个人的购房需求信息,点击编辑信息详细进行提交,具体的实现界面如下图4.5所示:

图4.5用户需求界面

用户需求的关键代码如下。

 @RestController

@RequestMapping("auth")

public class AuthController extends BaseController<Auth, AuthService> {

    /**

     * 服务对象

     */

    @Autowired

    public AuthController(AuthService service) {

        setService(service);

    }

}

4.2.6房产资讯功能实现

当用户点击导航栏“房产资讯”后可以查看到系统发布的最新房产资讯信息,具体的实现界面如下图4.6所示:

图4.6房产资讯界面

房产资讯关键代码如下。

@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.7个人信息功能实现

当用户点击导航栏“个人信息”后可以查看到个人信息,点击可以进行个人信息的修改,具体的实现界面如下图4.7所示:

图4.7个人信息界面

个人信息关键代码如下。

@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系统后台功能实现

4.2.1后台管理员登录功能实现

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

图4.8后台登录界面

4.2.3用户管理功能实现

管理员在用户管理模块,可以对用户信息进行管理,用户管理模块由管理员,普通用户部分组成组成,这里以普通用户管理为例,具体的实现界面如下图4.9所示:

图4.9用户管理界面

用户管理关键代码如下。

 @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.4房型管理功能实现

管理员点击“房型管理”这一按钮就会展示房型列表,管理员可以对房型添加,编辑,删除,具体的实现界面如下图4.10所示:

图4.10房型管理界面

4.2.5地区管理功能实现

管理员在“地区管理”界面可以对地区信息进行增删改查,具体的实现界面如下图4.11所示:

图4.11地区管理界面

地区管理关键代码如下。

@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.12所示:

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

    }

4.2.7房源推荐管理功能实现

管理员在“模块管理”界面的子菜单下可以对房源推荐信息进行维护管理,具体的实现界面如下图4.13所示:

图4.13房源推荐管理界面

房源推荐管理关键代码如下。

@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());

}

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]单树倩,任佳勋.基于SpringBoot和Vue框架的数据库原理网站设计与实现[J].电脑知识与技术,2021,17(30):40-41+50.

[2]喻佳,吴丹新.基于SpringBoot的Web快速开发框架[J].电脑编程技巧与维护,2021(09):31-33.

[3]陶富. A房屋中介公司房屋租赁个性化推荐研究[D].北京交通大学,2021.

[4]陈德文. 基于室内场景图像增强的房屋交易推荐系统的研究与开发[D].新疆大学,2021.

[5]熊永平.基于SpringBoot框架应用开发技术的分析与研究[J].电脑知识与技术,2019,15(36):76-77.

[6]徐晨. 基于二部网络分析的推荐算法研究及其应用[D].扬州大学,2017.

[7]陶颖,刘薇.基于SH框架的网络选房及预定系统的研究与设计[J].电脑知识与技术,2015,11(23):31-33..

[8] Han CE, Zhang Na, Wang Songting, Zhang Kai, He Fang, Yuan Feng Design and research of Springboot OPC client [J] Electronic world, 2021 (19): 25-26

[9] Wang Ping Implementation of ehcache caching technology in Springboot project [J] Computer knowledge and technology, 2021,17 (29): 79-81

[10] Tian Chenglong, Lu Xiaohan, Yan Mengyao, Zhou Xin Score ranking system based on Springboot [j] Software, 2021,42 (10): 129-132

致  谢

本次设计历时3个月。在这个毕业设计中,它离不开指导教师的指导,使事情基本顺利。指导老师无论是在毕业设计历经中,还是在论文做完中都给了了我特别大的助益。另1个方面,教师认真负责的工作姿态,谨慎的教学精神厚重的理论水准都使我获益匪浅。他勤恳谨慎的教学育人学习姿态也给我留下了特别特别深的感觉。我从老师那里学到了很多东西。在理论和实践中,我的技能得到了特别大的提高。在此,特向教师表示由衷的感激。

经过对该毕业设计的全部研究和开发,我的系统研发经历了从需求分析到实现详细功能,再到最终测试和维护的特殊进展。让我对系统研发有了更深层次的认识。如今我的动手本领单独处理疑惑的本领也获取到了特别大的演练学习增多,这是这次毕业设计最好的收获。

最后,在整个系统开发过程中,我周围的同学和朋友给了我很多意见,所以我很快就确认了系统的商业思想。在次,我由衷的向他们表示感激。

关注+点赞+收藏+私信博主,免费领取项目源码
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1201587.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS 滚动捕获 scroll-snap-type

scroll-snap-type 语法实例 捕获轴 y 捕获严格程度 mandatory捕获轴 y 捕获严格程度 proximity同理看下捕获轴 x 一些注意事项兼容性 scroll-snap-type 用来指定一个滚动容器(scroll container)是否是滚动捕获容器(scroll snap container)、捕获的严格程度以及在什么方向上执行…

【数据结构与算法】JavaScript实现单向链表

文章目录 一、单向链表简介二、封装单向链表类2.0.创建单向链表类2.1.append(element)2.2.toString()2.3.insert(position,element)2.4.get(position)2.5.indexOf(element)2.6.update(position,element)2.7.removeAt(position)2.8.其他方法2.9.完整实现 一、单向链表简介 链表…

租用服务器带宽类型应用

服务器带宽类型多样&#xff0c;以满足不同行业的需求。本文将介绍香港常见的服务器带宽类型及其应用领域。 1. 共享带宽 共享带宽是指多个用户共同使用同一台服务器的带宽资源。这种带宽类型适用于小型企业或个人网站&#xff0c;因为其成本较低。由于多个用户共享带宽资源&…

【C语言】解开指针|编址内存解引用指针产量|

&#x1f308;write in front :&#x1f50d;个人主页 &#xff1a; &#x1f60a;啊森要自信的主页 ✨ 作者寄语 &#x1f308;&#xff1a; 小菜鸟的力量不在于它的体型&#xff0c;而在于它内心的勇气和无限的潜能&#xff0c;只要你有决心&#xff0c;就没有什么事情是不可…

Linux操作系统使用及C高级编程-D3Linux shell命令(权限、输入输出)

Shell 是一种应用程序&#xff0c;用以完成用户与内核之间的交互 一个功能强大的编程语言&#xff08;C语言&#xff09; 一个解释执行的脚本语言&#xff0c;不需要编译&#xff0c;写完直接执行 目前Linux 乌班图的Shell默认是bash 查看当前提供的Shell&#xff1a;cat /…

Vue.js中的路由(router)和Vue Router的作用?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

2.8 CE修改器:寻找共享代码

本关我们将学习共享代码&#xff0c;在C语言中角色属性都是以结构体的方式进行存储的&#xff0c;而结构体所存储的信息都是连续性的&#xff0c;这一关我们将会解释如何处理游戏中的共用代码&#xff0c;这种代码是通用在除了自己以外的其他同类型对像上的常常你在修改游戏的时…

在Vue.js中,什么是mixins?它们的作用是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

Linux基础环境开发工具的使用(三):gdb调试器

Linux基础环境开发工具的使用[三]:gdb调试器 一.调试命令的应用场景1.为什么要介绍调试命令的应用场景呢?2.调试命令的应用场景1.找到问题1.不借助调试2.调试 2.解决问题1.不借助调试2.借助调试 二.调试命令1.gdb使用的前置说明2.基础指令3.断点相关指令4.范围查找相关操作5.局…

通信原理板块——线性分组码之循环码

微信公众号上线&#xff0c;搜索公众号小灰灰的FPGA,关注可获取相关源码&#xff0c;定期更新有关FPGA的项目以及开源项目源码&#xff0c;包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 1、循环码原理 循环码(cycle code)…

C# Onnx LSTR 基于Transformer的端到端实时车道线检测

目录 效果 模型信息 项目 代码 下载 效果 模型信息 lstr_360x640.onnx Inputs ------------------------- name&#xff1a;input_rgb tensor&#xff1a;Float[1, 3, 360, 640] name&#xff1a;input_mask tensor&#xff1a;Float[1, 1, 360, 640] -----------------…

罕见!阿里云全系产品崩了。。

作者&#xff1a;苍何&#xff0c;前大厂高级 Java 工程师&#xff0c;阿里云专家博主&#xff0c;CSDN 2023 年 实力新星&#xff0c;土木转码&#xff0c;现任部门技术 leader&#xff0c;专注于互联网技术分享&#xff0c;职场经验分享。 &#x1f525;热门文章推荐&#xf…

安全认证框架Shrio学习,入门到深度学习,SpringBoot整合Shiro小案例,含代码

权限概述 什么是权限 什么是权限 权限管理&#xff0c;一般指根据系统设置的安全策略或者安全规则&#xff0c;用户可以访问而且只能访问自己被授权的资源&#xff0c;不多不少。权限管理几乎出现在任何系统里面&#xff0c;只要有用户和密码的系统。 权限管理再系统中一般分…

两个序列(数论)

两个序列 Problem:B Time Limit:1000ms Memory Limit:65535K Description Gugu 有两个长度无限长的序列A,BA0a^0/0!,A1a^1/1!,A2a^2/2!,A3a^3/3!…. B00, B1b^1/1!,B20,B3b^3/3!,B40, B5b^5/5! … Douge 看到这道这两个序列很觉得很麻烦&#xff0c;所以他想到一个好点子&…

【LeetCode刷题-二分查找】--704.二分查找

704.二分查找 class Solution {public int search(int[] nums, int target) {if(nums.length 0){return -1;}int left 0,right nums.length - 1;while(left < right){int mid (right - left) / 2 left;if(nums[mid] target){return mid;}else if(nums[mid] < targe…

模拟信号数字化--低通抽样与带通抽样

模拟信号数字化 本文主要涉及模拟信号数字化的基本概念&#xff0c;以及对低通抽样与带通抽样以及其公式推导的详细介绍。关于通信原理还有其他文章可参考&#xff1a; 1、信息量、码元、比特、码元速率、信息速率详细解析——实例分析 2、模拟系统的AM信号的调制与频域分析 3、…

HCIE-Rainbow迁移工具

Rainbow迁移工具 Rainbow迁移工具支持p2v&#xff08;物理机到虚拟机的迁移&#xff09; v2v&#xff08;虚拟机到虚拟机的迁移&#xff09; Rainbow业务上云迁移&#xff1a; Rainbow迁移到公有云&#xff08;利用公有云SMS服务&#xff0c;付费&#xff09; Rainbow迁移到公…

【python】sys-path和模块搜索路径

我们在导入一个模块的时候&#xff0c;比如说&#xff1a; import math它必然是有搜索路径的&#xff0c;那到底是在哪个目录下面找呢&#xff1f;Python解释器去哪里找这个文件呢&#xff1f;只有找到这个文件才能读取、装载运行该模块文件。 它一般按照如下路径寻找模块文件…

matlab simulink PSO算法优化simulink的PID参数

1、内容简介 略 13-可以交流、咨询、答疑 PSO算法优化simulink的PID参数 2、内容说明 标准的PSO算法优化simulink的PID参数 PSO、粒子群算法、simulink参数优化 3、仿真分析 4、参考论文 略 链接&#xff1a;https://pan.baidu.com/s/1yQ1yDfk-_Qnq7tGpa23L7g 提取码&…

企业知识库建设指南:实用经验分享

企业知识库建设是提升内部协作和客户支持效率的重要举措。一个完善的知识库可以帮助企业集中管理和传播知识&#xff0c;提供便捷的自助服务和丰富的编辑工具&#xff0c;从而提升用户体验和品牌好感度。接下来就分享一些经验&#xff0c;关于该如何构建一个高效的企业知识库。…