博主介绍:专注于Java(springboot ssm 等开发框架) vue .net php phython node.js uniapp 微信小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作
☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟
我的博客空间发布了2000+毕设题目 方便大家学习使用
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人
文末下方有源码获取地址
springboot007大学生租房平台的设计与实现录像(含源码文档)
4.2 功能结构设计
在前面分析的管理员功能的基础上,进行接下来的设计工作,最终展示设计的管理员结构图(见下图)。管理员管理房东和用户,对房东提交的信息审批信息进行审核,审核房东发布的房源信息。
图4.1 管理员功能结构图
在前面分析的房东功能的基础上,进行接下来的设计工作,最终展示设计的房东结构图(见下图)。房东提交信息审批信息,发布房源信息,审核用户租房订单。
图4.2 房东功能结构图
在前面分析的用户功能的基础上,进行接下来的设计工作,最终展示设计的用户结构图(见下图)。用户收藏房屋,租用房屋,支付租房订单。
图4.3 用户功能结构图
4.3 数据库设计
开发一个系统也需要提前设计数据库。这里的数据库是相关数据的集合,存储在一起的这些数据也是按照一定的组织方式进行的。目前,数据库能够服务于多种应用程序,则是源于它存储方式最佳,具备数据冗余率低的优势。虽然数据库为程序提供信息存储服务,但它与程序之间也可以保持较高的独立性。总而言之,数据库经历了很长一段时间的发展,从最初的不为人知,到现在的人尽皆知,其相关技术也越发成熟,同时也拥有着坚实的理论基础。
4.3.1 数据库概念设计
这部分内容需要借助数据库关系图来完成,也需要使用专门绘制数据库关系图的工具,比如Visio工具就可以设计E-R图(数据库关系图)。设计数据库,也需要按照设计的流程进行,首先还是要根据需求完成实体的确定,分析实体具有的特征,还有对实体间的关联关系进行确定。最后才是使用E-R模型的表示方法,绘制本系统的E-R图。不管是使用亿图软件,还是Visio工具,对于E-R模型的表示符号都一样,通常矩形代表实体,实体间存在的关系用菱形符号表示,实体的属性也就是实体的特征用符号椭圆表示。最后使用直线将矩形,菱形和椭圆等符号连接起来。接下来就开始对本系统的E-R图进行绘制。
(
- 下图为上述各实体间相互之间的关系。
图4.8 实体间关系E-R图
4.3.2 数据库物理设计
本数据库是关系型数据库,因此对二维表的结构设计也比较关键。毕竟二维表格模型就是关系型数据库中的关系模型。而一些常用的关系模型中的概念也需要了解,才可以对关系模型进行设计。下面就简单介绍关系,元组,属性,域,关键字等常用概念的含义。
关系:关系就是数据库中的一张数据表,每张数据表都有命名,也就是每个关系也有名字,那就是数据表名;
元组:元组就是数据表中的一行记录;
属性:属性就是数据表中的字段,也就是数据表中的一列;
域:域就是对数据表中属性的取值进行限定;
关键字:关键字就是数据表中的主键;
在了解了表结构设计的常用概念后,接下来就需要使用前面绘制的E-R模型完成表结构的设计工作,并在数据库中创建数据表,并为各个数据表进行命名。以下就对设计的结果通过表格形式进行展示。
表4.1 订单信息表
字段 |
类型 |
空 |
默认 |
注释 |
id (主键) |
bigint(20) |
否 |
主键 |
|
addtime |
timestamp |
否 |
CURRENT_TIMESTAMP |
创建时间 |
fangyuanbianhao |
varchar(200) |
是 |
NULL |
房源编号 |
fangyuanmingcheng |
varchar(200) |
是 |
NULL |
房源名称 |
huxing |
varchar(200) |
是 |
NULL |
户型 |
pingfangshu |
varchar(200) |
是 |
NULL |
平方数 |
weizhi |
varchar(200) |
是 |
NULL |
位置 |
xiangguantupian |
varchar(200) |
是 |
NULL |
相关图片 |
chuzuleixing |
varchar(200) |
是 |
NULL |
出租类型 |
zujin |
int(11) |
是 |
NULL |
租金 |
fangdongzhanghao |
varchar(200) |
是 |
NULL |
房东账号 |
fangdongxingming |
varchar(200) |
是 |
NULL |
房东姓名 |
faburiqi |
varchar(200) |
是 |
NULL |
发布日期 |
lianxidianhua |
varchar(200) |
是 |
NULL |
联系电话 |
gerenzhanghao |
varchar(200) |
是 |
NULL |
个人账号 |
xingming |
varchar(200) |
是 |
NULL |
姓名 |
shenqingriqi |
date |
是 |
NULL |
申请日期 |
sfsh |
varchar(200) |
是 |
否 |
是否审核 |
shhf |
longtext |
是 |
NULL |
审核回复 |
ispay |
varchar(200) |
是 |
未支付 |
是否支付 |
表4.2 房东信息表
字段 |
类型 |
空 |
默认 |
注释 |
id (主键) |
bigint(20) |
否 |
主键 |
|
addtime |
timestamp |
否 |
CURRENT_TIMESTAMP |
创建时间 |
fangdongzhanghao |
varchar(200) |
否 |
房东账号 |
|
mima |
varchar(200) |
否 |
密码 |
|
fangdongxingming |
varchar(200) |
否 |
房东姓名 |
|
xingbie |
varchar(200) |
是 |
NULL |
性别 |
nianling |
int(11) |
是 |
NULL |
年龄 |
shenfenzhenghaoma |
varchar(200) |
是 |
NULL |
身份证号码 |
lianxidianhua |
varchar(200) |
是 |
NULL |
联系电话 |
xiangpian |
varchar(200) |
是 |
NULL |
相片 |
表4.3 房源信息表
字段 |
类型 |
空 |
默认 |
注释 |
id (主键) |
bigint(20) |
否 |
主键 |
|
addtime |
timestamp |
否 |
CURRENT_TIMESTAMP |
创建时间 |
fangyuanbianhao |
varchar(200) |
否 |
房源编号 |
|
fangyuanmingcheng |
varchar(200) |
否 |
房源名称 |
|
huxing |
varchar(200) |
是 |
NULL |
户型 |
pingfangshu |
varchar(200) |
是 |
NULL |
平方数 |
weizhi |
varchar(200) |
是 |
NULL |
位置 |
jianjie |
longtext |
是 |
NULL |
简介 |
xiangguantupian |
varchar(200) |
是 |
NULL |
相关图片 |
chuzuleixing |
varchar(200) |
是 |
NULL |
出租类型 |
zujin |
int(11) |
是 |
NULL |
租金 |
zhuangxiuqingkuang |
varchar(200) |
是 |
NULL |
装修情况 |
qitaxinxi |
longtext |
是 |
NULL |
其它信息 |
fangdongzhanghao |
varchar(200) |
是 |
NULL |
房东账号 |
fangdongxingming |
varchar(200) |
是 |
NULL |
房东姓名 |
lianxidianhua |
varchar(200) |
是 |
NULL |
联系电话 |
faburiqi |
date |
是 |
NULL |
发布日期 |
sfsh |
varchar(200) |
是 |
否 |
是否审核 |
shhf |
longtext |
是 |
NULL |
审核回复 |
表4.4 收藏信息表
字段 |
类型 |
空 |
默认 |
注释 |
id (主键) |
bigint(20) |
否 |
主键 |
|
addtime |
timestamp |
否 |
CURRENT_TIMESTAMP |
创建时间 |
userid |
bigint(20) |
否 |
用户id |
|
refid |
bigint(20) |
是 |
NULL |
收藏id |
tablename |
varchar(200) |
是 |
NULL |
表名 |
name |
varchar(200) |
否 |
收藏名称 |
|
picture |
varchar(200) |
否 |
收藏图片 |
表4.5 管理员信息表
字段 |
类型 |
空 |
默认 |
注释 |
id (主键) |
bigint(20) |
否 |
主键 |
|
username |
varchar(100) |
否 |
用户名 |
|
password |
varchar(100) |
否 |
密码 |
|
role |
varchar(100) |
是 |
管理员 |
角色 |
addtime |
timestamp |
否 |
CURRENT_TIMESTAMP |
新增时间 |
表4.6 信息审批信息表
字段 |
类型 |
空 |
默认 |
注释 |
id (主键) |
bigint(20) |
否 |
主键 |
|
addtime |
timestamp |
否 |
CURRENT_TIMESTAMP |
创建时间 |
fangdongzhanghao |
varchar(200) |
是 |
NULL |
房东账号 |
fangdongxingming |
varchar(200) |
是 |
NULL |
房东姓名 |
shenfenzhenghaoma |
varchar(200) |
是 |
NULL |
身份证号码 |
lianxidianhua |
varchar(200) |
是 |
NULL |
联系电话 |
fangchanzheng |
varchar(200) |
是 |
NULL |
房产证 |
shenfenzheng |
varchar(200) |
是 |
NULL |
身份证 |
shenqingriqi |
date |
是 |
NULL |
申请日期 |
sfsh |
varchar(200) |
是 |
否 |
是否审核 |
shhf |
longtext |
是 |
NULL |
审核回复 |
表4.7 用户信息表
字段 |
类型 |
空 |
默认 |
注释 |
id (主键) |
bigint(20) |
否 |
主键 |
|
addtime |
timestamp |
否 |
CURRENT_TIMESTAMP |
创建时间 |
gerenzhanghao |
varchar(200) |
否 |
个人账号 |
|
mima |
varchar(200) |
否 |
密码 |
|
xingming |
varchar(200) |
否 |
姓名 |
|
xingbie |
varchar(200) |
是 |
NULL |
性别 |
nianling |
int(11) |
是 |
NULL |
年龄 |
shenfenzhenghaoma |
varchar(200) |
是 |
NULL |
身份证号码 |
shoujihaoma |
varchar(200) |
是 |
NULL |
手机号码 |
xiangpian |
varchar(200) |
是 |
NULL |
相片 |
第5章 系统实现
进入到这个环节,也就可以及时检查出前面设计的需求是否可靠了。一个设计良好的方案在运用于系统实现中,是会帮助系统编制人员节省时间,并提升开发效率的。所以在系统的编程阶段,也就是系统实现阶段,对于一些不合理的设计需求,也是可以及时发现。因为设计的方案是完全指导系统的编码过程的。
5.1 管理员功能实现
5.1.1 房东管理
管理员进入指定功能操作区之后可以管理房东。其页面见下图。房东的资料需要管理员负责管理,包括修改,新增,删除等操作。
图5.1 房东管理页面
5.1.2 信息审批管理
管理员进入指定功能操作区之后可以管理信息审批信息。其页面见下图。房东上传房产证和身份证信息,管理员查看后进行审批,审批通过之后,房东才可以发布房源信息。
图5.2 信息审批管理页面
5.1.3 房源信息管理
管理员进入指定功能操作区之后可以管理房源信息。其页面见下图。房东发布的房源信息需要先通过管理员的审核,然后才能展示在前台进行出租。
5.2 房东功能实现
5.2.1 信息审批管理
房东进入指定功能操作区之后可以管理信息审批信息。其页面见下图。房东查看信息审批信息是否通过审核,只有通过审核之后,房东才可以发布房源信息。
图5.4 信息审批管理页面
5.2.2 房源信息管理
房东进入指定功能操作区之后可以管理房源信息。其页面见下图。房东发布的房源信息在进行正式出租前,也需要通过管理员的审核。
图5.5 房源信息管理页面
package com.controller;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;
import com.entity.FangyuanxinxiEntity;
import com.entity.view.FangyuanxinxiView;
import com.service.FangyuanxinxiService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;
/**
* 房源信息
* 后端接口
* @author
* @email
* @date 2021-04-22 15:05:37
*/
@RestController
@RequestMapping("/fangyuanxinxi")
public class FangyuanxinxiController {
@Autowired
private FangyuanxinxiService fangyuanxinxiService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,FangyuanxinxiEntity fangyuanxinxi,
HttpServletRequest request){
String tableName = request.getSession().getAttribute("tableName").toString();
if(tableName.equals("fangdong")) {
fangyuanxinxi.setFangdongzhanghao((String)request.getSession().getAttribute("username"));
}
EntityWrapper<FangyuanxinxiEntity> ew = new EntityWrapper<FangyuanxinxiEntity>();
PageUtils page = fangyuanxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, fangyuanxinxi), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,FangyuanxinxiEntity fangyuanxinxi,
HttpServletRequest request){
EntityWrapper<FangyuanxinxiEntity> ew = new EntityWrapper<FangyuanxinxiEntity>();
PageUtils page = fangyuanxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, fangyuanxinxi), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( FangyuanxinxiEntity fangyuanxinxi){
EntityWrapper<FangyuanxinxiEntity> ew = new EntityWrapper<FangyuanxinxiEntity>();
ew.allEq(MPUtil.allEQMapPre( fangyuanxinxi, "fangyuanxinxi"));
return R.ok().put("data", fangyuanxinxiService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(FangyuanxinxiEntity fangyuanxinxi){
EntityWrapper< FangyuanxinxiEntity> ew = new EntityWrapper< FangyuanxinxiEntity>();
ew.allEq(MPUtil.allEQMapPre( fangyuanxinxi, "fangyuanxinxi"));
FangyuanxinxiView fangyuanxinxiView = fangyuanxinxiService.selectView(ew);
return R.ok("查询房源信息成功").put("data", fangyuanxinxiView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
FangyuanxinxiEntity fangyuanxinxi = fangyuanxinxiService.selectById(id);
return R.ok().put("data", fangyuanxinxi);
}
/**
* 前端详情
*/
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
FangyuanxinxiEntity fangyuanxinxi = fangyuanxinxiService.selectById(id);
return R.ok().put("data", fangyuanxinxi);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody FangyuanxinxiEntity fangyuanxinxi, HttpServletRequest request){
fangyuanxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(fangyuanxinxi);
fangyuanxinxiService.insert(fangyuanxinxi);
return R.ok();
}
/**
* 前端保存
*/
@IgnoreAuth
@RequestMapping("/add")
public R add(@RequestBody FangyuanxinxiEntity fangyuanxinxi, HttpServletRequest request){
fangyuanxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(fangyuanxinxi);
fangyuanxinxiService.insert(fangyuanxinxi);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody FangyuanxinxiEntity fangyuanxinxi, HttpServletRequest request){
//ValidatorUtils.validateEntity(fangyuanxinxi);
fangyuanxinxiService.updateById(fangyuanxinxi);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
fangyuanxinxiService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 提醒接口
*/
@RequestMapping("/remind/{columnName}/{type}")
public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
@PathVariable("type") String type,@RequestParam Map<String, Object> map) {
map.put("column", columnName);
map.put("type", type);
if(type.equals("2")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
Date remindStartDate = null;
Date remindEndDate = null;
if(map.get("remindstart")!=null) {
Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindStart);
remindStartDate = c.getTime();
map.put("remindstart", sdf.format(remindStartDate));
}
if(map.get("remindend")!=null) {
Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindEnd);
remindEndDate = c.getTime();
map.put("remindend", sdf.format(remindEndDate));
}
}
Wrapper<FangyuanxinxiEntity> wrapper = new EntityWrapper<FangyuanxinxiEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
String tableName = request.getSession().getAttribute("tableName").toString();
if(tableName.equals("fangdong")) {
wrapper.eq("fangdongzhanghao", (String)request.getSession().getAttribute("username"));
}
int count = fangyuanxinxiService.selectCount(wrapper);
return R.ok().put("count", count);
}
}
5.2.3 订单信息管理
房东进入指定功能操作区之后可以管理订单信息。其页面见下图。用户租房后,房东需要查看用户是否支付,而且还要审核用户的租房订单。
图5.6 订单信息管理页面
5.3 用户功能实现
5.3.1 房源信息
用户进入前台之后可以查看房源信息。其页面见下图。本页面显示所有要出租的房源信息,用户可以根据房源名称,户型,出租类型等字段查询所需房源信息。
图5.7 房源信息页面
大家点赞、收藏、关注、评论啦 其他的定制服务 商务合作 下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 或者私信作者