使用技术
前端:
- HTML
- CSS
- JavaScript(Ajax,Jquery)
- Bootstrap
后端:
- SpringMVC
- Sping
- MyBatis
- JSP
项目已上传码云仓库:
https://gitee.com/lkfi/xinyuan-rental-system
各功能实现
登陆功能
1,提交方式:使用基本的表单提交方式,使用name属性与Model数据进行匹配
2,登陆验证逻辑:根据用户提交的数据对数据库进行查找操作,如果有匹配的数据则表示账号密码正确,返回用户信息并存入session域对象,方便后续数据复用
3,登陆拦截器:没有登陆的情况下不允许访问租房主页,拦截器逻辑是判断session域内是否存在用户信息对象,存在则允许访问,不存在则跳转到登录页
注册功能
1,提交方式:使用基本的表单提交方式,使用name属性与Model数据进行匹配
2,注册验证逻辑:根据用户提供的表单对数据库进行增加操作,增加之前会在后端判断输入的账号是否已经在数据库中存在,如果已存在则不允许注册成功
租房主页
1,用户访问时:会从数据库获取所有可租借(包括已被预约的)的房间存入sesion域对象,之后使用EL表达式+JSTL标签库的for循环将其全部显示在页面
2,根据房间类型显示房间:与主页面(shop.jsp)并不是同一个页面,访问该页面时会先触发后端业务:根据指定的房间类型查找数据库相应的房间,并存储在新的session下,最终返回到新页面后利用EL表达式+JSTL标签库的for循环将其全部显示在页面
3,查看自己预约的房间与已经入住的房间:依然分别是独立的jsp文件,根据在登陆功能中提到的存储在session域对象的信息来查询预约的房间和已经入住的房间
预约与入住/退房
1,预约功能:
使用Ajax进行提交,提交信息是指定的房间的编号(number),后端首先会查看该房间的状态是否为0(未出租),再通过该房间的编号信息获取其预约者的信息(获取预约者的rank(等级)信息),之后再获取当前用户的数据信息(获得该用户的rank(等级)信息),判断当状态等于0或者该用户等级高于预约者,则预约成功,否则预约失败,提示该房间已经被预定
逻辑或||,我使用的是短路或,并将判断该房间状态的逻辑放在了前面,否则当状态为0继续比较用户等级可能会引起报错,因为获取到的预约者对象是空的
如果是通过抢房的方式,则会给被抢者的表数据变成1,当该用户登陆时,会进行一次判断,如果那个字段为1,则提示用户被抢房,并将数据变成0
原本这个逻辑可以也可以是让信息提示直接存入到数据表中,并且总体上更能让人理解
预约成功后会将用户的账号和名称信息写入该房间的表字段,以此来连接房间与租房人的关系,同时也会改变房间的状态(除非是抢来的)
2,入住与退房功能:
入住与退房的前提要求是预约,因此该程序前端入口只在预约页面显示,入住的逻辑并不多,只是将房间的状态改成2而言,相对的退房则是将房间的状态改成0并将该用户的表字段数据清空即可,但是入住时,其实还需要记录此次交易记录,因此入住时还需要写支付记录的业务逻辑:入住时,将交易人,交易时间,交易金额,交易人的id(当时考虑的不成熟,应该记录交易人的账号的)和房间的编号记录到数据库
后台管理员功能
1,登陆与页面显示:
1,没有注册程序,因为登陆使用的统一密码,不需要账号,反正我直接在后台设置的10086(小声bb),显示方面的逻辑与租房主页的业务逻辑差不多,管理员可以看到所有用户和房间以及交易记录,首先显示的是所有房间,然后我没有写分页功能(卑微.jpg)
2,关于显示,比如我在表数据中存储的房间的状态是数字,但我不希望他显示数字,而是显示为未出租或者洽谈中之类的,那么则只需要使用JSTL表达式中的if判断,状态分别是1,2,3时,应该显示的不同的信息即可
,2,切换查看的信息类型(房间,用户,交易记录):
页面都是互相独立的,并不是同一个页面,业务逻辑的实现与租房首页下的根据房间类型显示房间类似,只不过房间,用户,交易记录所使用的数据表并不是同一张,所以业务逻辑会更简单
3,添加新房间:
管理员可以添加新房间,业务逻辑就是类似于用户的注册的表添加功能,同时新房间的编号不允许已经存在,添加之前会使用提交的编号去数据表上匹配,没有匹配的编号才允许注册
4,修改与删除用户/房间:
1,通过表单提交的数据进行修改,虽然提交表单时没有提交该用户或房间的编号,但在单击修改时,会记录该用户/房间的编号到sesion域对象,因此才能精确指定
2,无法对已经出租的房间进行修改或删除,因此在执行对房间的修改或删除时,会首先判断该房间是否小于2
3,交易记录信息只读,不允许修改
5,查询功能:
只编写了用户与房间的查询功能,用户的查询使用的是账号查询,房间查询使用的是编号查询,业务逻辑是根据用户输入在表单上的值对数据库进行查询
其他
1,修改数据库后页面刷新:
预约,入住,退房以及管理员的对数据库进行更新的一系列的操作,都无法立即返回到页面上,JSP没有那么乖,因此如果需要得到立即的页面反馈,则需要在这类操作后重新从数据库get数据,并刷新页面
2,用户的退出功能:
用户退出后会删除sesion域内数据并进入登陆页面,此刻需要重新登陆,否则无法访问租房页面
总结
实现了基本的功能,但基本上没有功能扩展,项目文件的内部结构有点混乱,代码和实现有点臃肿,有很大的优化空间,功能实现可能存在BUG(大家就当无事发生 )。前端页面写的跟十几年前的似的(看到其他人写的前端页面,我直接就卑微了)…
反正,前端页面是真的做的没眼看