• 基于SSM的公寓房屋出租系统


    作者主页:夜未央5788

     简介:Java领域优质创作者、Java项目、学习资料、技术互助

    文末获取源码

    项目介绍

    该项目分为前后台,分为普通用户与管理员两种角色。
    前台主要功能包括:
    普通用户的注册、登录,房屋列表展示,租房,我的订单、用户中心等功能模块;

    后台主要功能包括:
    系统设置:菜单管理、角色管理、修改密码;
    用户管理:用户列表;
    系统日志:日志列表;
    房屋管理:房屋列表;

    租赁管理:租赁列表;

    环境需要

    1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。
    2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;
    3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可
    4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS; 
    5.数据库:MySql 5.7版本;

    6.是否Maven项目:否;

    技术栈

    1. 后端:Spring+SpringMVC+Mybatis

    2. 前端:JSP+EasyUI+Echarts+jQuery

    使用说明

    1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;

    2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;

    若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行;

    3. 将项目中db.properties配置文件中的数据库配置改为自己的配置;

    4. 运行项目,输入localhost:8080即可

    运行截图

    前台界面

     

     

     

     后台界面

     

     

     

    相关代码

    前台首页控制器

    1. /**
    2. * 前台首页控制器
    3. * @author Administrator
    4. *
    5. */
    6. @RequestMapping("/home")
    7. @Controller
    8. public class HomeController {
    9. @Autowired
    10. private RoomTypeService roomTypeService;
    11. @Autowired
    12. private AccountService accountService;
    13. /**
    14. * 前台首页
    15. * @param model
    16. * @param name
    17. * @return
    18. * @throws UnsupportedEncodingException
    19. */
    20. @RequestMapping(value="/index",method=RequestMethod.GET)
    21. public ModelAndView list(ModelAndView model,
    22. @RequestParam(name="name",defaultValue="") String names,HttpServletRequest request
    23. ) throws UnsupportedEncodingException{
    24. request.setCharacterEncoding("UTF-8");
    25. System.out.println("--前台首页--");
    26. System.out.println("name:"+names);
    27. // String name=new String(names.getBytes("ISO-8859-1"),"UTF-8");
    28. Map<String,Object> queryMap = new HashMap<String, Object>();
    29. queryMap.put("name", names);
    30. queryMap.put("offset", 0);
    31. queryMap.put("pageSize", 999);
    32. model.addObject("roomTypeList", roomTypeService.findList(queryMap));
    33. model.setViewName("home/index/index");
    34. // model.setViewName("home/index/home");
    35. model.addObject("kw", names);
    36. return model;
    37. }
    38. /**
    39. * 登录页面
    40. * @param model
    41. * @return
    42. */
    43. @RequestMapping(value="/login",method=RequestMethod.GET)
    44. public ModelAndView login(ModelAndView model
    45. ){
    46. System.out.println("---login---");
    47. model.setViewName("home/index/login");
    48. return model;
    49. }
    50. /**
    51. * 注册页面
    52. * @param model
    53. * @return
    54. */
    55. @RequestMapping(value="/reg",method=RequestMethod.GET)
    56. public ModelAndView reg(ModelAndView model
    57. ){
    58. model.setViewName("home/index/reg");
    59. return model;
    60. }
    61. /**
    62. * 登录信息提交
    63. * @param account
    64. * @return
    65. */
    66. @RequestMapping(value="/login",method=RequestMethod.POST)
    67. @ResponseBody
    68. public Map<String,String> loginAct(Account account,String vcode,HttpServletRequest request){
    69. Map<String,String> retMap = new HashMap<String, String>();
    70. if(account == null){
    71. retMap.put("type", "error");
    72. retMap.put("msg", "请填写正确的用户信息!");
    73. return retMap;
    74. }
    75. if(StringUtils.isEmpty(account.getName())){
    76. retMap.put("type", "error");
    77. retMap.put("msg", "用户名不能为空!");
    78. return retMap;
    79. }
    80. if(StringUtils.isEmpty(account.getPassword())){
    81. retMap.put("type", "error");
    82. retMap.put("msg", "密码不能为空!");
    83. return retMap;
    84. }
    85. if(StringUtils.isEmpty(vcode)){
    86. retMap.put("type", "error");
    87. retMap.put("msg", "验证码不能为空!");
    88. return retMap;
    89. }
    90. Object attribute = request.getSession().getAttribute("accountLoginCpacha");
    91. if(attribute == null){
    92. retMap.put("type", "error");
    93. retMap.put("msg", "验证码过期,请刷新!");
    94. return retMap;
    95. }
    96. if(!vcode.equalsIgnoreCase(attribute.toString())){
    97. retMap.put("type", "error");
    98. retMap.put("msg", "验证码错误!");
    99. return retMap;
    100. }
    101. Account findByName = accountService.findByName(account.getName());
    102. if(findByName == null){
    103. retMap.put("type", "error");
    104. retMap.put("msg", "用户名不存在!");
    105. return retMap;
    106. }
    107. if(!account.getPassword().equals(findByName.getPassword())){
    108. retMap.put("type", "error");
    109. retMap.put("msg", "密码错误!");
    110. return retMap;
    111. }
    112. if(findByName.getStatus() == -1){
    113. retMap.put("type", "error");
    114. retMap.put("msg", "该用户已被禁用,请联系管理员!");
    115. return retMap;
    116. }
    117. request.getSession().setAttribute("account", findByName);
    118. request.getSession().setAttribute("accountLoginCpacha", null);
    119. retMap.put("type", "success");
    120. retMap.put("msg", "登录成功!");
    121. return retMap;
    122. }
    123. /**
    124. * 注册信息提交
    125. * @param account
    126. * @return
    127. */
    128. @RequestMapping(value="/reg",method=RequestMethod.POST)
    129. @ResponseBody
    130. public Map<String,String> regAct(Account account){
    131. Map<String,String> retMap = new HashMap<String, String>();
    132. if(account == null){
    133. retMap.put("type", "error");
    134. retMap.put("msg", "请填写正确的用户信息!");
    135. return retMap;
    136. }
    137. if(StringUtils.isEmpty(account.getName())){
    138. retMap.put("type", "error");
    139. retMap.put("msg", "用户名不能为空!");
    140. return retMap;
    141. }
    142. if(StringUtils.isEmpty(account.getPassword())){
    143. retMap.put("type", "error");
    144. retMap.put("msg", "密码不能为空!");
    145. return retMap;
    146. }
    147. if(StringUtils.isEmpty(account.getMobile())){
    148. retMap.put("type", "error");
    149. retMap.put("msg", "手机号不能为空!");
    150. return retMap;
    151. }
    152. if(isExist(account.getName())){
    153. retMap.put("type", "error");
    154. retMap.put("msg", "该用户名已经存在!");
    155. return retMap;
    156. }
    157. if(accountService.add(account) <= 0){
    158. retMap.put("type", "error");
    159. retMap.put("msg", "注册失败,请联系管理员!");
    160. return retMap;
    161. }
    162. retMap.put("type", "success");
    163. retMap.put("msg", "注册成功!");
    164. return retMap;
    165. }
    166. /**
    167. * 退出登录
    168. * @param request
    169. * @return
    170. */
    171. @RequestMapping(value="/logout",method=RequestMethod.GET)
    172. public String logout(HttpServletRequest request){
    173. request.getSession().setAttribute("account", null);
    174. return "redirect:login";
    175. }
    176. private boolean isExist(String name){
    177. Account account = accountService.findByName(name);
    178. if(account == null)return false;
    179. return true;
    180. }
    181. }

    房间类型管理后台控制器

    1. /**
    2. * 房屋类型管理后台控制器
    3. * @author Administrator
    4. *
    5. */
    6. @RequestMapping("/admin/room_type")
    7. @Controller
    8. public class RoomTypeController {
    9. @Autowired
    10. private RoomTypeService roomTypeService;
    11. /**
    12. * 房屋类型管理列表页面
    13. * @param model
    14. * @return
    15. */
    16. @RequestMapping(value="/list",method=RequestMethod.GET)
    17. public ModelAndView list(ModelAndView model){
    18. model.setViewName("room_type/list");
    19. return model;
    20. }
    21. /**
    22. * 房屋类型信息添加操作
    23. * @param roomType
    24. * @return
    25. */
    26. @RequestMapping(value="/add",method=RequestMethod.POST)
    27. @ResponseBody
    28. public Map<String, String> add(RoomType roomType){
    29. Map<String, String> ret = new HashMap<String, String>();
    30. if(roomType == null){
    31. ret.put("type", "error");
    32. ret.put("msg", "请填写正确的房屋类型信息!");
    33. return ret;
    34. }
    35. if(StringUtils.isEmpty(roomType.getName())){
    36. ret.put("type", "error");
    37. ret.put("msg", "房屋类型名称不能为空!");
    38. return ret;
    39. }
    40. roomType.setAvilableNum(roomType.getRoomNum());//默认房屋数等于可用房屋数
    41. roomType.setBookNum(0);//设置预定数0
    42. roomType.setLivedNum(0);//设置已入住数0
    43. if(roomTypeService.add(roomType) <= 0){
    44. ret.put("type", "error");
    45. ret.put("msg", "添加失败,请联系管理员!");
    46. return ret;
    47. }
    48. ret.put("type", "success");
    49. ret.put("msg", "添加成功!");
    50. return ret;
    51. }
    52. /**
    53. * 房屋类型信息编辑操作
    54. * @param roomType
    55. * @return
    56. */
    57. @RequestMapping(value="/edit",method=RequestMethod.POST)
    58. @ResponseBody
    59. public Map<String, String> edit(RoomType roomType){
    60. Map<String, String> ret = new HashMap<String, String>();
    61. if(roomType == null){
    62. ret.put("type", "error");
    63. ret.put("msg", "请填写正确的房屋类型信息!");
    64. return ret;
    65. }
    66. if(StringUtils.isEmpty(roomType.getName())){
    67. ret.put("type", "error");
    68. ret.put("msg", "房屋类型名称不能为空!");
    69. return ret;
    70. }
    71. RoomType existRoomType = roomTypeService.find(roomType.getId());
    72. if(existRoomType == null){
    73. ret.put("type", "error");
    74. ret.put("msg", "未找到该数据!");
    75. return ret;
    76. }
    77. int offset = roomType.getRoomNum() - existRoomType.getRoomNum();
    78. roomType.setAvilableNum(existRoomType.getAvilableNum() + offset);
    79. if(roomType.getAvilableNum() <= 0){
    80. roomType.setAvilableNum(0);//没有可用房屋
    81. roomType.setStatus(0);//房型已满
    82. if(roomType.getAvilableNum() + existRoomType.getLivedNum() + existRoomType.getBookNum() > roomType.getRoomNum()){
    83. ret.put("type", "error");
    84. ret.put("msg", "房屋数设置不合理!");
    85. return ret;
    86. }
    87. }
    88. if(roomTypeService.edit(roomType) <= 0){
    89. ret.put("type", "error");
    90. ret.put("msg", "修改失败,请联系管理员!");
    91. return ret;
    92. }
    93. ret.put("type", "success");
    94. ret.put("msg", "修改成功!");
    95. return ret;
    96. }
    97. /**
    98. * 分页查询房屋类型信息
    99. * @param name
    100. * @param page
    101. * @return
    102. */
    103. @RequestMapping(value="/list",method=RequestMethod.POST)
    104. @ResponseBody
    105. public Map<String,Object> list(
    106. @RequestParam(name="name",defaultValue="") String name,
    107. @RequestParam(name="status",required=false) Integer status,
    108. Page page
    109. ){
    110. Map<String,Object> ret = new HashMap<String, Object>();
    111. Map<String,Object> queryMap = new HashMap<String, Object>();
    112. queryMap.put("name", name);
    113. queryMap.put("status", status);
    114. queryMap.put("offset", page.getOffset());
    115. queryMap.put("pageSize", page.getRows());
    116. ret.put("rows", roomTypeService.findList(queryMap));
    117. ret.put("total", roomTypeService.getTotal(queryMap));
    118. return ret;
    119. }
    120. /**
    121. * 房屋类型信息删除操作
    122. * @param id
    123. * @return
    124. */
    125. @RequestMapping(value="/delete",method=RequestMethod.POST)
    126. @ResponseBody
    127. public Map<String, String> delete(Long id){
    128. Map<String, String> ret = new HashMap<String, String>();
    129. if(id == null){
    130. ret.put("type", "error");
    131. ret.put("msg", "请选择要删除的信息!");
    132. return ret;
    133. }
    134. try {
    135. if(roomTypeService.delete(id) <= 0){
    136. ret.put("type", "error");
    137. ret.put("msg", "删除失败,请联系管理员!");
    138. return ret;
    139. }
    140. } catch (Exception e) {
    141. // TODO: handle exception
    142. ret.put("type", "error");
    143. ret.put("msg", "该房屋类型下存在房屋信息,请先删除该房屋类型下的所有房屋信息!");
    144. return ret;
    145. }
    146. ret.put("type", "success");
    147. ret.put("msg", "删除成功!");
    148. return ret;
    149. }
    150. }

    如果也想学习本系统,下面领取。回复:142ssm 

  • 相关阅读:
    在QML委托代理机制中使用C++数据模型
    Python实现视频转音频
    ES(Elasticsearch)的docker安装部署教程
    第3章_瑞萨MCU零基础入门系列教程之开发环境搭建与体验
    【C语言基础】那些必会的编程练习题-第一部分
    介绍下Java内存区域(运行时数据区)
    让我们进入面向对象的世界(一)
    如何使用OpenCV的随机森林(Python)
    uniapp-地区的四级联动
    LiveQing视频点播流媒体RTMP推流服务功能-支持视频点播分屏大屏展示视频轮巡分组播放RMP推流直播大屏展示
  • 原文地址:https://blog.csdn.net/hanyunlong1989/article/details/125469711