摘 要
近年来随着我国经济的高速发展,房地产业也随之蓬勃发展,尤其是最近国家新出台的房改政策。鼓励居民购房,这对房产公司无疑是一个极好的发展势头。尤为重要的是,近几年随着信息技术和电子商务的快速发展,许多企业都开发了自己房产信息软件。
智能购房推荐系统主要针对房屋购买推荐业务的应用特点,涉及房屋信息管理、地区管理、房型管理、用户需求以及房源推荐的全面系统。本设计主要实现集人性化、高效率、便捷等优点于一身的智能购房推荐系统,系统通过浏览器与服务器进行通信,实现数据的交互与变更。只需通过一台电脑,动动手指就可以操作系统,实现数据通信管理。整个系统的设计过程都充分考虑了数据的安全、稳定及可靠等问题,而且操作过程简单。本系统通过科学的管理方式、便捷的服务提高了工作效率,减少了数据存储上的错误和遗漏。
关键词:智能购房推荐系统;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 选题背景及意义
当今时代,随着信息技术的发展,某些传统的方式在处理庞大的信息量时已经显的极不适应,人们对于运用计算机来辅助协调和管理自身工作的需求正逐步提高,人们希望能借助计算机技术实现某些方面的自动化管理。
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)房源推荐管理功能需求:房源推荐管理主要实现了对用户的不同需求进行合适房源的推荐等功能,管理员可以进行添加,编辑,删除操作。
智能购房推荐系统中的用户主要负责了如下功能操作。
(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智能购房推荐系统的房源信息界面
房源信息界面的关键的代码如下。
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用户需求界面
用户需求的关键代码如下。
@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房源信息管理界面
房源信息管理关键代码如下。
@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个方面,教师认真负责的工作姿态,谨慎的教学精神厚重的理论水准都使我获益匪浅。他勤恳谨慎的教学育人学习姿态也给我留下了特别特别深的感觉。我从老师那里学到了很多东西。在理论和实践中,我的技能得到了特别大的提高。在此,特向教师表示由衷的感激。
经过对该毕业设计的全部研究和开发,我的系统研发经历了从需求分析到实现详细功能,再到最终测试和维护的特殊进展。让我对系统研发有了更深层次的认识。如今我的动手本领单独处理疑惑的本领也获取到了特别大的演练学习增多,这是这次毕业设计最好的收获。
最后,在整个系统开发过程中,我周围的同学和朋友给了我很多意见,所以我很快就确认了系统的商业思想。在次,我由衷的向他们表示感激。