摘 要
随着城市化进程的加快,公寓租赁市场需求日益增长,对高效管理工具的需求也愈发明显。在这样的背景下,“Spring Boot公寓租赁管理系统”应运而生,基于Java语言开发,利用其跨平台特性和强大的生态系统,构建了一个高效、稳定的在线租赁管理平台。系统采用Spring Boot框架,简化了后端开发流程,结合MySQL数据库实现数据存储与管理,设计支持前后端分离,提升了系统的灵活性和响应速度。该系统为房东提供了从房源信息发布到租赁合同管理等一系列功能,包括处理看房预约和退租请求等;租客则能够便捷地进行看房预约、租赁订单管理以及在线签署合同等操作。管理员模块涵盖用户管理、房屋分类审核、公告发布等功能,确保系统稳定运行。通过这一技术架构,系统实现了租赁流程的自动化与规范化,显著提升了用户体验和服务效率,为现代公寓租赁市场提供了一套全面且高效的解决方案。
关键词:公寓租赁系统;SpringBoot;Java语言
Abstract
With With the acceleration of urbanization, the demand for apartment rental is growing, and the need for efficient management tools is becoming more and more obvious. In this context, "Spring Boot Apartment Rental Management System" came into being, developed based on Java language, using its cross-platform characteristics and strong ecosystem to build an efficient and stable online rental management platform. The system adopts the Spring Boot framework, which simplifies the back-end development process, combines with MySQL database to achieve data storage and management, and is designed to support front-end and back-end separation, which improves the flexibility and response speed of the system. The system provides landlords with a range of functions from listing information to lease contract management, including processing viewing appointments and cancellation requests. Tenants can easily make appointments for viewings, manage rental orders, and sign contracts online. The administrator module covers functions such as user management, housing classification review, and announcement release to ensure the stable operation of the system. Through this technical architecture, the system realizes the automation and standardization of the leasing process, significantly improves the user experience and service efficiency, and provides a comprehensive and efficient solution for the modern apartment rental market.
Keywords: apartment rental system; SpringBoot; Java language
目 录
1 绪 论
1.1 研究背景
1.2 研究意义
1.3 研究现状
1.3.1 国内研究现状
1.3.2 国外研究现状
1.4 论文结构与章节安排
2 相关技术介绍
2.1 SpringBoot框架介绍
2.2 MySQL数据库
2.3 Java语言
3 系统分析
3.1 可行性分析
3.1.1 技术可行性
3.1.2 经济可行性
3.1.3 操作可行性
3.2 系统需求分析
3.2.1 功能性需求分析
3.2.2 非功能性需求分析
3.3 系统流程分析
3.3.1 程序操作流程
3.3.2 登录流程
3.3.3 注册流程
3.4 本章小结
4 系统设计
4.1 系统架构设计
4.2 系统整体功能模块设计
4.3 数据库设计
4.3.1 数据库实体设计
4.3.2 数据库表设计
4.4 本章小结
5 系统实现
5.1 注册用户功能实现
5.1.1 房东用户注册
5.1.2 用户登录
5.1.3 首页界面
5.1.4 个人中心
5.1.5 评论管理
5.2 租客用户功能实现
5.2.1
5.2.2 个人中心
5.2.3 看房预约
5.2.4 租赁合同
5.3 管理员功能实现
5.3.1 系统用户
5.3.2 房屋分类管理
5.3.3 房屋信息管理
5.3.4 租赁订单管理
5.3.5 系统管理
5.3.6 公告信息管理
5.3.7 资源管理
6 系统测试
6.1 系统测试目标
6.2 系统功能测试
6.3 测试结果总结
7总结
参考文献
致 谢
附 录
1 绪 论
随着城市化进程的加速和人口流动性的增加,公寓租赁市场正经历着前所未有的变革。传统的租赁管理模式由于依赖于纸质文件、人工协调等手段,效率低下且容易出错,难以满足现代租赁市场的需求。特别是在信息不对称、交易透明度低等问题上,传统方式显得尤为不足。为应对这些挑战并提高租赁市场的运行效率和服务质量,“Spring Boot公寓租赁管理系统”被开发出来。
该系统采用Java作为开发语言,这是一种广泛应用于企业级应用开发的语言,因其卓越的性能、稳定性和强大的生态系统而著称。数据库方面选择了MySQL,它是一个开源的关系型数据库管理系统,以其可靠性、稳定性和易用性受到开发者们的青睐。系统架构基于Spring + SpringMVC + Spring Boot + MyBatis框架组合构建,这种技术选型不仅利用了Spring框架的依赖注入和面向切面编程的优势,还结合了SpringMVC用于构建Web层的强大功能。Spring Boot通过自动配置和简化设置加快了开发速度,并提高了生产效率;MyBatis则提供了便捷的数据持久化解决方案,使得与MySQL数据库的交互更加简单高效。
这套集成化的在线平台旨在通过提供全面的功能支持,包括房源信息发布、预约管理、订单处理、合同签署等,来提升房东、租客以及管理员之间的交互效率和服务质量。这不仅有助于改善用户体验,还能促进租赁市场的健康发展,实现租赁流程的自动化与规范化,显著提升服务效率和市场透明度。
Spring Boot公寓租赁管理系统”具有重要的研究和实践意义,尤其是在当前城市化进程加快、人口流动性增强的背景下。以下是该系统的主要研究意义:
提升管理效率:通过采用Java语言以及Spring + SpringMVC + Spring Boot + MyBatis框架组合,系统能够高效处理大量数据和复杂业务逻辑,大大简化了房东、租客及管理员的操作流程,提高了整个租赁过程的管理效率。
增强市场透明度:该系统提供了一个集中化的平台,所有房源信息、租赁合同、看房预约等都可以在线查看和管理,减少了信息不对称的问题,增强了租赁市场的透明度和公平性。
促进资源优化配置:通过高效的线上平台,租客可以更快找到合适的房源,房东也能更迅速地完成租赁交易,从而实现资源的优化配置,减少空置率,提高房产使用效率。
推动行业数字化转型:在传统租赁管理模式面临挑战的今天,“Spring Boot公寓租赁管理系统”的开发与应用为行业提供了数字化转型的范例,展示了如何利用现代信息技术改进传统业务流程,为其他类似领域提供了宝贵的经验。
改善用户体验:系统设计充分考虑到了用户需求,无论是房东还是租客,都能在这个平台上享受到便捷的服务,如在线签署合同、提交退租申请、评价房源等,极大地提升了用户的满意度和忠诚度。
支持决策制定:对于管理员而言,系统的数据分析功能可以帮助他们更好地理解市场需求、用户行为等,从而做出更加科学合理的决策,进一步优化服务内容和质量。
综上所述,“Spring Boot公寓租赁管理系统”的开发不仅有助于解决当前租赁市场面临的实际问题,还对推动行业进步、实现资源优化配置等方面具有重要意义。
在国内,在国内,随着高校信息化建设的不断推进以及后勤管理改革的深入发展,越来越多的高校和企业开始重视学生公寓管理系统和房屋租赁管理系统的开发与应用。目前市场上已经存在一些商业化的学生公寓管理系统和房屋租赁平台,这些系统通常具有较为完善的功能和良好的用户体验。同时,也有不少开源或自行开发的系统,在灵活性和定制性方面具有一定优势。然而,现有的系统在数据处理效率、安全性、智能化等方面仍有待进一步提升。国内的研究者们正在积极探索如何将物联网、大数据等新技术应用于这些系统中,以提供更加智能化和个性化的服务。
在国外,尤其是在欧美等发达国家,学生公寓管理和房屋租赁管理系统的起步较早且发展较为成熟。这些系统通常采用先进的技术架构和设计理念,注重系统的可扩展性和可维护性。例如,一些系统支持在线提交报修申请、查询维修进度等功能;还有一些集成了智能门锁、智能水电表等设备,实现了对学生行为的实时监控和智能化管理。此外,国外的高校和企业在学生公寓管理系统建设过程中更注重与其他后勤管理系统(如餐饮管理系统、校车管理系统等)的集成与协同工作,实现信息共享和资源优化配置。国外的研究者也在持续关注并探索新的技术趋势和管理模式,旨在为用户提供更加优质、便捷的服务体验。
综上所述,无论是国内还是国外,对于基于Java语言及Spring Boot框架组合的公寓租赁管理系统的研究和应用都在不断发展之中。国内外的研究均强调提高管理效率、增强用户体验、保障数据安全以及利用最新技术进行系统优化。不过,国外在系统集成和智能化应用方面似乎走得更远,而国内则更加关注于快速响应市场需求和技术创新的应用。
1.4论文结构与章节安排
本文共分为七章,章节内容安排如下:
第一章:绪论,主要介绍公寓租赁系统领域研究的背景、目的和意义,概述研究的现状。
第二章:相关技术介绍,主要探讨和说明实现公寓租赁系统的相关技术。
第三章:系统分析,主要从公寓租赁系统的可行性、功能性需求、非功能性能等方面进行分析,为后续系统设计提供理论支持。
第四章:系统设计,主要对公寓租赁系统功能模块、数据库进行功能设计。
第五章:系统实现,主要介绍了公寓租赁系统各个用户的功能、系统界面的实现。
第六章:系统测试,主要对公寓租赁系统进行测试,验证功能完整性、稳定性和安全性,评估系统在实际运行中的性能表现。
第七章:总结。主要对系统的开发设计工作进行总结。
2 相关技术介绍
SpringBoot是Spring家族中的一个重要成员,它简化了Spring应用的初始搭建和开发过程[1]。通过提供一系列默认配置和自动装配机制,SpringBoot使得开发者能够更快地构建出生产级别的Spring应用。它支持多种开发工具和框架,如Maven、Gradle等,并且可以与多种数据库和缓存技术无缝集成[2]。SpringBoot的简洁性和高效性使其成为开发企业级应用的首选框架之一。在本次毕业设计中,SpringBoot框架为新能源汽车销售系统的后端开发提供了强大的支持。
MySQL是一款开源的关系型数据库管理系统,它以其高性能、高可靠性和易用性而著称。MySQL支持多种存储引擎,如InnoDB、MyISAM等,能够满足不同应用场景的需求[3]。它提供了丰富的SQL语法和函数,使得开发者能够方便地进行数据查询、更新和删除操作。MySQL还支持事务处理、索引优化和复制等高级功能,为数据的完整性和安全性提供了有力保障。在本次毕业设计中,MySQL数据库作为新能源汽车销售系统的数据存储核心,承担着存储和管理资料信息、用户信息等重要数据的任务。而且通过合理的数据库设计和优化,确保了系统的数据访问效率和数据安全性[4]。
JAVA是一种广泛使用的编程语言,具有跨平台、面向对象、安全性高等特点。JAVA语言提供了丰富的类库和API,使得开发者能够轻松进行网络编程、数据库操作、图形界面开发等任务[4]。JAVA还支持多线程编程和分布式计算,为开发高性能和可扩展的应用提供了有力支持[5]。所以本次毕设选择了JAVA作为新能源汽车销售系统的开发语言。通过利用JAVA的面向对象特性和丰富的类库资源,成功实现系统的各个功能模块,并保证系统的稳定性和可扩展性。而且JAVA的跨平台特性也使得此次毕业设计能够在不同的操作系统和硬件平台上运行,为用户提供更加便捷的使用体验。
3 系统分析
系统分析是对系统开发的可行性进行研究,分析功能需求以确保系统满足用户期望。系统用例设计将明确定义系统与外部用户的交互场景,系统流程规划则细化系统内部功能流程,确保系统各模块协调工作。通过系统分析,可以建立清晰的系统框架,明确系统目标和功能,为系统开发和实施奠定基础。
3.1可行性分析
3.1.1技术可行性
开发SpringBoot公寓租赁管理系统在技术上是完全可行的。Java作为一种成熟、稳定的编程语言,具备强大的跨平台能力和丰富的开源库支持,能够高效实现系统的各种功能需求。现代数据库技术(如MySQL)可以确保数据的安全性和高效管理。此外,前端技术与后端服务的良好集成,能够提供流畅的用户体验。云计算和微服务架构的应用进一步增强了系统的可扩展性和灵活性,使得平台能够轻松应对未来业务增长的需求。整体而言,现有的技术条件完全可以支持该平台的开发与部署,并保障其稳定运行。
该系统开发成本相对较低,主要投入在于人力与硬件资源。Spring Boot及MySQL均为开源技术,无需额外购买软件许可,降低了开发成本。如果系统上线可通过提供便捷、透明的服务,可吸引大量用户,进而通过广告、增值服务等方式实现盈利,具有良好的经济回报预期。此外,系统维护成本适中,便于长期运营与迭代升级。
操作可行性体现在技术的稳定性和易实现性上。Java是一种广泛应用的编程语言,具备良好的兼容性和高效的运行能力,能够支持大量用户访问。Spring Boot框架能简化开发,提高系统的维护性,数据库可以使用MySQL来存储和管理数据,同时结合Redis缓存加快访问速度。前端采用Vue.js或React,提供流畅的操作体验,确保页面加载快速。用户数据安全通过JWT身份验证和数据加密来保护,避免信息泄露。服务器部署可以选择云端或本地,结合CDN优化访问速度,让系统在高并发情况下依然保持稳定。整体来看,平台的开发技术成熟,能够长期稳定运行,并且支持后续升级和扩展。
Spring Boot公寓租赁管理系统"通过一个集成化的平台,简化房东、租客及管理员之间的交互流程,提供高效便捷的公寓租赁服务。以下是针对三个主要角色的功能分析:
3.2.1.1房东用户功能
- 注册登录:新用户可以通过注册成为系统用户,注册后后可以用账号密码登录系统。
- 首页:用户可以查看首页展示的轮播图,包括公告信息、新闻资讯、房源信息。
- 个人中心
- 个人首页:展示个人信息概览。
- 房源信息:管理自己的房源列表。
- 看房预约:查看租客预约看房的时间安排,并进行确认或拒绝操作。
- 租赁订单:跟踪所有与自己房源相关的租赁订单状态。
- 租赁合同:查看和下载与租客签订的电子合同。
- 退租信息:处理租客提出的退租请求。
- 收藏:保存感兴趣的房源或其他信息。
- 评论管理:查看并回复租客对房源的评价。
注册用户角色用例如下图所示。

图3.1房东用户用例图
3.2.1.2.租客用户功能
(1)个人首页:显示租客用户个人信息,及近期活动。
(2)看房预约:租客用户可以选择心仪的房源并预约看房时间。
(3)租赁订单:租客用户可以管理自己的租赁订单,包括下单、支付等操作。
(4)租赁合同:租客用户可以在线签署或下载租赁合同。
(5)退租信息:租客用户通过提交退租申请,经房东和管理员审核同意后可以在线办理退租,并查询办理进度。
(6)收藏:租客用户可以保存喜欢的房源以便日后参考。
(7)评论管理:租客用户可以对自己居住过的房源进行评价,便于其他用户参考。
租客用户角色用例如下图所示。

图3.2租客用户用例图
3.2.1.3管理员功能
- 后台首页:管理员可以根据后台首页展示的功能列表进行一系列管理。
- 系统用户管理:对房东用户、租客用户以及管理员账号进行增删改查操作。
- 房屋分类管理,在该模块管理员可以对房屋分类列表进行管理和进行房屋分类添加。如点击“房屋分类列表”进入页面可以查看列表中某个房屋分类的详情。
- 房屋分类列表:管理和维护房屋分类目录。
- 房屋分类添加:新增房屋类别。
- 房源信息管理:在该模块管理员可以对房源信息列表进行管理和进行房源信息添加。如点击“房源信息列表”进入页面可以查看列表中某个房源信息的详情和评论。
- 房屋信息列表:审核和管理所有房源信息。
- 房屋信息添加:直接添加房源信息(通常用于特殊情况)
- 看房预约管理:监控和协调所有用户的看房预约情况。
- 租赁订单管理:审查和处理租赁交易记录。
- 租赁合同管理:存储和检索租赁协议文档。
- 退租信息管理:处理并记录所有退租事宜。
- 系统管理
- 轮播图管理:更新首页轮播广告内容。
- 公告信息管理:发布公告和重要通知给所有用户。
- 资源管理
- 新闻资讯:发布行业新闻或政策变动信息。
- 资讯分类:为不同类型的信息创建分类标签。
管理员功能用例如下图所示。

图3.3管理员用例图
非功能性需求分析主要是分析本系统的安全性怎么样(是否会泄露用户个人信息),可靠性怎么样(用户操作的时候是不是能够根据实际操作显示信息),性能怎么样(运行是否操作流畅),可拓展性怎么样(功能能否继续拓展)等。具体可以表示在如下3-1表格中:
表3-1公寓租赁系统非功能性需求表
|
需求类型 |
描述 |
|
性能 |
系统应具有高性能,能够快速响应用户请求,保持稳定的性能水平,支持高并发访问和大规模数据处理。 |
|
可靠性 |
系统应具有高可靠性,确保系统稳定运行,防止系统故障和数据丢失,提供数据备份和恢复机制。 |
|
安全性 |
系统应具有高安全性,保护用户隐私信息和数据安全,采用加密传输技术、访问控制和身份验证机制。 |
|
可用性 |
系统应具有高可用性,保证系统全天候运行,最大限度减少系统故障和维护时间,提供灾备和故障转移功能。 |
|
易用性 |
系统应具有良好的易用性,用户界面设计友好,操作简单直观,提供清晰的指导和帮助文档。 |
|
可维护性 |
系统应具有良好的可维护性,易于维护和升级,提供模块化和结构化代码,方便开发人员进行维护和修改。 |
|
可扩展性 |
系统应具有良好的可扩展性,支持新增功能和模块的集成,具备良好的架构设计和扩展性能。 |
用户访问系统,可以选择进行注册或登录操作。注册成功后,用户可以使用注册的账号登录平台。登录后的用户可以进入系统功能界面,使用自己权限内的功能操作。程序操作流程图如下图所示。

图3.4程序操作流程图
用户访问系统,进入登录页面页面,入其用户名和密码,后端服务接收登录请求,验证用户提供的用户名和密码是否匹配数据库中存储的信息,验证通过即可登录成功。登录流程图如下图所示。

图3.5登录流程图
未有账号的用户可进入注册界面进行注册操作,填写注册表格,包括用户名、密码、邮箱等必要信息。后台系统验证并保存用户提交的信息。分配唯一用户标识符。注册成功后,用户可以使用账号密码进行登录。用户注册流程图如下图所示。

图3.6注册流程图
3.4本章小结
本章主要通过对公寓租赁系统的可行性分析、功能分析、系统用例分析、流程分析,确定整个系统要实现的功能。同时也为系统的代码实现和测试提供了标准。
4 系统设计
本章主要介绍公寓租赁系统的架构设计、功能模块设计和数据库系统设计。
在系统架构设计中,我将确定系统的整体结构和组件之间的关系。这包括选择适当的架构风格,划分系统的层次结构,并定义各个模块的职责和交互方式。架构图如下图所示。

图4.1系统架构设计图
表示层(Presentation Layer):负责与用户进行交互,将系统的功能和数据以易于理解和操作的方式展示给用户。通常包括用户界面、页面设计和用户输入验证等。
业务逻辑层(Business Logic Layer):处理系统的核心业务逻辑,包括对用户请求的处理、业务规则的执行以及数据的处理和转换。它独立于表现层和数据层,实现了业务逻辑的封装和复用。
数据层(Data Layer):负责数据的存储、访问和管理,包括数据库和持久化机制。数据层提供了对数据的增删改查操作,并与业务逻辑层进行交互,使系统能够有效地存储和检索数据。
这三个层次相互独立,通过明确的接口和协议进行通信,实现了系统的模块化和可扩展性。表现层负责将用户的请求传递给业务逻辑层,业务逻辑层处理请求并返回结果,最后数据层负责与数据库交互并提供数据支持。这种分层架构有助于实现系统的可维护性、灵活性和可测试性。
功能模块设计是系统开发过程中的重要阶段,它旨在将系统划分为不同的模块,每个模块负责完成特定的功能或任务。公寓租赁系统由多个功能模块组成,每个模块下又包含具体的功能操作。功能整体功能结果图如下图所示。

图4.2系统整体功能结构图
数据库设计是系统开发中至关重要的环节,为系统提供高效、规范的数据存储和管理方案。设计过程包括需求分析、实体设计、表设计和逻辑结构设计。首先,通过分析业务需求,确定系统的核心实体及其属性,同时明确实体间的关系。接着,将实体抽象为具体的数据库表,为每张表定义字段名、数据类型、主键和外键,通过主外键关系和关联表设计,保证数据的完整性和一致性。最后,数据库逻辑设计进一步优化表之间的关系,通过索引、视图和存储过程提升查询效率和操作性能。整个设计需严格遵循规范,避免数据冗余和冲突,确保系统在高并发访问和复杂数据处理场景下的稳定性和高效性。
数据库实体设计是数据库设计的关键步骤,对实际业务逻辑中涉及的实体及其属性进行抽象建模,明确系统中的主要信息对象及其关系[9]。在实体设计中,根据需求分析确定系统的核心实体,如用户、角色、权限等,提取实体的主要属性,如用户的ID、姓名、性别、联系方式等,同时定义各实体之间的关系,包括一对一、一对多、多对多等。在设计过程中,注重实体的完整性、规范性和唯一性,确保设计能够满足系统功能需求,并为后续的表设计提供清晰的结构框架。实体设计需遵循数据库设计的标准化要求,避免数据冗余和不必要的复杂度。以下将展示系统的全局E-R图。系统全局E-R图如图4.3所示。

图4.3总E-R图
数据库表设计基于实体设计,将抽象的实体映射为具体的表结构。设计过程中,为每个实体定义表名、字段名及数据类型 [10]。根据业务需求,合理定义主键、外键及约束条件,确保表之间的关联性,例如通过外键建立用户表和角色表之间的关系。表设计时注重数据存储的完整性、一致性,并通过索引优化查询效率,最终确保数据库结构能够支持系统的功能需求。以下是系统的主要数据库表设计展示。
表 4-1-access_token(登陆访问时长)
|
编号 |
字段名 |
类型 |
长度 |
是否非空 |
是否主键 |
注释 |
|
1 |
token_id |
int |
是 |
是 |
临时访问牌ID | |
|
2 |
token |
varchar |
64 |
否 |
否 |
临时访问牌 |
|
3 |
info |
text |
65535 |
否 |
否 |
信息 |
|
4 |
maxage |
int |
是 |
否 |
最大寿命:默认2小时 | |
|
5 |
create_time |
timestamp |
是 |
否 |
创建时间 | |
|
6 |
update_time |
timestamp |
是 |
否 |
更新时间 | |
|
7 |
user_id |
int |
是 |
否 |
用户编号 |
表 4-2-article(文章)
|
编号 |
字段名 |
类型 |
长度 |
是否非空 |
是否主键 |
注释 |
|
1 |
article_id |
mediumint |
是 |
是 |
文章id | |
|
2 |
title |
varchar |
125 |
是 |
是 |
标题 |
|
3 |
type |
varchar |
64 |
是 |
否 |
文章分类 |
|
4 |
hits |
int |
是 |
否 |
点击数 | |
|
5 |
praise_len |
int |
是 |
否 |
点赞数 | |
|
6 |
create_time |
timestamp |
是 |
否 |
创建时间 | |
|
7 |
update_time |
timestamp |
是 |
否 |
更新时间 | |
|
8 |
source |
varchar |
255 |
否 |
否 |
来源 |
|
9 |
url |
varchar |
255 |
否 |
否 |
来源地址 |
|
10 |
tag |
varchar |
255 |
否 |
否 |
标签 |
|
11 |
content |
longtext |
4294967295 |
否 |
否 |
正文 |
|
12 |
img |
varchar |
255 |
否 |
否 |
封面图 |
|
13 |
description |
text |
65535 |
否 |
否 |
文章描述 |
表 4-3-article_type(文章分类)
|
编号 |
字段名 |
类型 |
长度 |
是否非空 |
是否主键 |
注释 |
|
1 |
type_id |
smallint |
是 |
是 |
分类ID | |
|
2 |
display |
smallint |
是 |
否 |
显示顺序 | |
|
3 |
name |
varchar |
16 |
是 |
否 |
分类名称 |
|
4 |
father_id |
smallint |
是 |
否 |
上级分类ID | |
|
5 |
description |
varchar |
255 |
否 |
否 |
描述 |
|
6 |
icon |
text |
65535 |
否 |
否 |
分类图标 |
|
7 |
url |
varchar |
255 |
否 |
否 |
外链地址 |
|
8 |
create_time |
timestamp |
是 |
否 |
创建时间 | |
|
9 |
update_time |
timestamp |
是 |
否 |
更新时间 |
表 4-4-auth(用户权限管理)
|
编号 |
字段名 |
类型 |
长度 |
是否非空 |
是否主键 |
注释 |
|
1 |
auth_id |
int |
是 |
是 |
授权ID | |
|
2 |
user_group |
varchar |
64 |
否 |
否 |
用户组 |
|
3 |
mod_name |
varchar |
64 |
否 |
否 |
模块名 |
|
4 |
table_name |
varchar |
64 |
否 |
否 |
表名 |
|
5 |
page_title |
varchar |
255 |
否 |
否 |
页面标题 |
|
6 |
path |
varchar |
255 |
否 |
否 |
路由路径 |
|
7 |
parent |
varchar |
64 |
否 |
否 |
父级菜单 |
|
8 |
parent_sort |
int |
是 |
否 |
父级菜单排序 | |
|
9 |
position |
varchar |
32 |
否 |
否 |
位置 |
|
10 |
mode |
varchar |
32 |
是 |
否 |
跳转方式 |
|
11 |
add |
tinyint |
是 |
否 |
是否可增加 | |
|
12 |
del |
tinyint |
是 |
否 |
是否可删除 | |
|
13 |
set |
tinyint |
是 |
否 |
是否可修改 | |
|
14 |
get |
tinyint |
是 |
否 |
是否可查看 | |
|
15 |
field_add |
text |
65535 |
否 |
否 |
添加字段 |
|
16 |
field_set |
text |
65535 |
否 |
否 |
修改字段 |
|
17 |
field_get |
text |
65535 |
否 |
否 |
查询字段 |
|
18 |
table_nav_name |
varchar |
500 |
否 |
否 |
跨表导航名称 |
|
19 |
table_nav |
varchar |
500 |
否 |
否 |
跨表导航 |
|
20 |
option |
text |
65535 |
否 |
否 |
配置 |
|
21 |
create_time |
timestamp |
是 |
否 |
创建时间 | |
|
22 |
update_time |
timestamp |
是 |
否 |
更新时间 |
表 4-5-code_token(验证码)
|
编号 |
字段名 |
类型 |
长度 |
是否非空 |
是否主键 |
注释 |
|
1 |
code_token_id |
int |
是 |
是 |
验证码ID | |
|
2 |
token |
varchar |
255 |
否 |
否 |
令牌 |
|
3 |
code |
varchar |
255 |
否 |
否 |
验证码 |
|
4 |
expire_time |
timestamp |
是 |
否 |
失效时间 | |
|
5 |
create_time |
timestamp |
是 |
否 |
创建时间 | |
|
6 |
update_time |
timestamp |
是 |
否 |
更新时间 |
表 4-6-collect(收藏)
|
编号 |
字段名 |
类型 |
长度 |
是否非空 |
是否主键 |
注释 |
|
1 |
collect_id |
int |
是 |
是 |
收藏ID | |
|
2 |
user_id |
int |
是 |
是 |
收藏人ID | |
|
3 |
source_table |
varchar |
255 |
否 |
否 |
来源表 |
|
4 |
source_field |
varchar |
255 |
否 |
否 |
来源字段 |
|
5 |
source_id |
int |
是 |
否 |
来源ID | |
|
6 |
title |
varchar |
255 |
否 |
否 |
标题 |
|
7 |
img |
varchar |
255 |
否 |
否 |
封面 |
|
8 |
create_time |
timestamp |
是 |
否 |
创建时间 | |
|
9 |
update_time |
timestamp |
是 |
否 |
更新时间 |
表 4-7-comment(评论)
|
编号 |
字段名 |
类型 |
长度 |
是否非空 |
是否主键 |
注释 |
|
1 |
comment_id |
int |
是 |
是 |
评论ID | |
|
2 |
user_id |
int |
是 |
是 |
评论人ID | |
|
3 |
reply_to_id |
int |
是 |
否 |
回复评论ID | |
|
4 |
content |
longtext |
4294967295 |
否 |
否 |
内容 |
|
5 |
nickname |
varchar |
255 |
否 |
否 |
昵称 |
|
6 |
avatar |
varchar |
255 |
否 |
否 |
头像地址 |
|
7 |
create_time |
timestamp |
是 |
否 |
创建时间 | |
|
8 |
update_time |
timestamp |
是 |
否 |
更新时间 | |
|
9 |
source_table |
varchar |
255 |
否 |
否 |
来源表 |
|
10 |
source_field |
varchar |
255 |
否 |
否 |
来源字段 |
|
11 |
source_id |
int |
是 |
否 |
来源ID |
表 4-8-hits(用户点击)
|
编号 |
字段名 |
类型 |
长度 |
是否非空 |
是否主键 |
注释 |
|
1 |
hits_id |
int |
是 |
是 |
点赞ID | |
|
2 |
user_id |
int |
是 |
否 |
点赞人 | |
|
3 |
create_time |
timestamp |
是 |
否 |
创建时间 | |
|
4 |
update_time |
timestamp |
是 |
否 |
更新时间 | |
|
5 |
source_table |
varchar |
255 |
否 |
否 |
来源表 |
|
6 |
source_field |
varchar |
255 |
否 |
否 |
来源字段 |
|
7 |
source_id |
int |
是 |
否 |
来源ID |
表 4-9-house_appointment(看房预约)
|
编号 |
字段名 |
类型 |
长度 |
是否非空 |
是否主键 |
注释 |
|
1 |
house_appointment_id |
int |
是 |
是 |
看房预约ID | |
|
2 |
tenant_user |
int |
否 |
否 |
租客用户 | |
|
3 |
landlord_user |
int |
否 |
否 |
房东用户 | |
|
4 |
user_name |
varchar |
64 |
否 |
否 |
用户姓名 |
|
5 |
user_gender |
varchar |
64 |
否 |
否 |
用户性别 |
|
6 |
user_phone |
varchar |
64 |
否 |
否 |
用户电话 |
|
7 |
house_no |
varchar |
64 |
是 |
是 |
房屋编号 |
|
8 |
house_name |
varchar |
64 |
否 |
否 |
房屋名称 |
|
9 |
type_of_house |
varchar |
64 |
否 |
否 |
房屋类型 |
|
10 |
city |
varchar |
64 |
否 |
否 |
所在城市 |
|
11 |
street |
varchar |
64 |
否 |
否 |
所在街道 |
|
12 |
community |
varchar |
64 |
否 |
否 |
所在小区 |
|
13 |
house_floor |
varchar |
64 |
否 |
否 |
房屋楼层 |
|
14 |
appointment_date |
date |
否 |
否 |
预约日期 | |
|
15 |
appointment_details |
text |
65535 |
否 |
否 |
预约详情 |
|
16 |
examine_state |
varchar |
16 |
是 |
否 |
审核状态 |
|
17 |
examine_reply |
varchar |
16 |
否 |
否 |
审核回复 |
|
18 |
create_time |
datetime |
是 |
否 |
创建时间 | |
|
19 |
update_time |
timestamp |
是 |
否 |
更新时间 | |
|
20 |
source_table |
varchar |
255 |
否 |
否 |
来源表 |
|
21 |
source_id |
int |
否 |
否 |
来源ID | |
|
22 |
source_user_id |
int |
否 |
否 |
来源用户 |
表 4-10-house_classification(房屋分类)
|
编号 |
字段名 |
类型 |
长度 |
是否非空 |
是否主键 |
注释 |
|
1 |
house_classification_id |
int |
是 |
是 |
房屋分类ID | |
|
2 |
type_of_house |
varchar |
64 |
否 |
否 |
房屋类型 |
|
3 |
create_time |
datetime |
是 |
否 |
创建时间 | |
|
4 |
update_time |
timestamp |
是 |
否 |
更新时间 |
表 4-11-housing_information(房源信息)
|
编号 |
字段名 |
类型 |
长度 |
是否非空 |
是否主键 |
注释 |
|
1 |
housing_information_id |
int |
是 |
是 |
房源信息ID | |
|
2 |
landlord_user |
int |
否 |
否 |
房东用户 | |
|
3 |
house_no |
varchar |
64 |
是 |
是 |
房屋编号 |
|
4 |
house_name |
varchar |
64 |
否 |
否 |
房屋名称 |
|
5 |
type_of_house |
varchar |
64 |
否 |
否 |
房屋类型 |
|
6 |
city |
varchar |
64 |
否 |
否 |
所在城市 |
|
7 |
street |
varchar |
64 |
否 |
否 |
所在街道 |
|
8 |
community |
varchar |
64 |
否 |
否 |
所在小区 |
|
9 |
house_floor |
varchar |
64 |
否 |
否 |
房屋楼层 |
|
10 |
description_of_house |
varchar |
64 |
否 |
否 |
房屋描述 |
|
11 |
supporting_facilities |
varchar |
64 |
否 |
否 |
配套设施 |
|
12 |
house_status |
varchar |
64 |
否 |
否 |
房屋状态 |
|
13 |
monthly_rent |
double |
否 |
否 |
每月租金 | |
|
14 |
house_cover |
varchar |
255 |
否 |
否 |
房屋封面 |
|
15 |
house_remarks |
longtext |
4294967295 |
否 |
否 |
房屋备注 |
|
16 |
praise_len |
int |
是 |
否 |
点赞数 | |
|
17 |
collect_len |
int |
是 |
否 |
收藏数 | |
|
18 |
comment_len |
int |
是 |
否 |
评论数 | |
|
19 |
examine_state |
varchar |
16 |
是 |
否 |
审核状态 |
|
20 |
house_appointment_limit_times |
int |
是 |
否 |
看房限制次数 | |
|
21 |
lease_order_limit_times |
int |
是 |
否 |
租赁限制次数 | |
|
22 |
create_time |
datetime |
是 |
否 |
创建时间 | |
|
23 |
update_time |
timestamp |
是 |
否 |
更新时间 |
表 4-12-landlord_user(房东用户)
|
编号 |
字段名 |
类型 |
长度 |
是否非空 |
是否主键 |
注释 |
|
1 |
landlord_user_id |
int |
是 |
是 |
房东用户ID | |
|
2 |
landlords_name |
varchar |
64 |
否 |
否 |
房东姓名 |
|
3 |
landlord_phone |
varchar |
16 |
否 |
否 |
房东电话 |
|
4 |
landlord_gender |
varchar |
64 |
否 |
否 |
房东性别 |
|
5 |
examine_state |
varchar |
16 |
是 |
否 |
审核状态 |
|
6 |
user_id |
int |
是 |
否 |
用户ID | |
|
7 |
create_time |
datetime |
是 |
否 |
创建时间 | |
|
8 |
update_time |
timestamp |
是 |
否 |
更新时间 |
表 4-13-lease_contract(租赁合同)
|
编号 |
字段名 |
类型 |
长度 |
是否非空 |
是否主键 |
注释 |
|
1 |
lease_contract_id |
int |
是 |
是 |
租赁合同ID | |
|
2 |
landlord_user |
int |
否 |
否 |
房东用户 | |
|
3 |
tenant_user |
int |
否 |
否 |
租客用户 | |
|
4 |
user_name |
varchar |
64 |
否 |
否 |
用户姓名 |
|
5 |
user_gender |
varchar |
64 |
否 |
否 |
用户性别 |
|
6 |
user_phone |
varchar |
64 |
否 |
否 |
用户电话 |
|
7 |
house_no |
varchar |
64 |
否 |
否 |
房屋编号 |
|
8 |
house_name |
varchar |
64 |
否 |
否 |
房屋名称 |
|
9 |
type_of_house |
varchar |
64 |
否 |
否 |
房屋类型 |
|
10 |
monthly_rent |
varchar |
64 |
否 |
否 |
每月租金 |
|
11 |
contract_no |
varchar |
64 |
否 |
否 |
合同编号 |
|
12 |
contract_documents |
varchar |
255 |
否 |
否 |
合同文件 |
|
13 |
effective_date |
date |
否 |
否 |
生效日期 | |
|
14 |
contract_status |
varchar |
64 |
否 |
否 |
合同状态 |
|
15 |
contract_remarks |
text |
65535 |
否 |
否 |
合同备注 |
|
16 |
create_time |
datetime |
是 |
否 |
创建时间 | |
|
17 |
update_time |
timestamp |
是 |
否 |
更新时间 | |
|
18 |
source_table |
varchar |
255 |
否 |
否 |
来源表 |
|
19 |
source_id |
int |
否 |
否 |
来源ID | |
|
20 |
source_user_id |
int |
否 |
否 |
来源用户 |
表 4-14-lease_order(租赁订单)
|
编号 |
字段名 |
类型 |
长度 |
是否非空 |
是否主键 |
注释 |
|
1 |
lease_order_id |
int |
是 |
是 |
租赁订单ID | |
|
2 |
order_number |
varchar |
64 |
否 |
否 |
订单编号 |
|
3 |
landlord_user |
int |
否 |
否 |
房东用户 | |
|
4 |
tenant_user |
int |
否 |
否 |
租客用户 | |
|
5 |
user_name |
varchar |
64 |
否 |
否 |
用户姓名 |
|
6 |
user_gender |
varchar |
64 |
否 |
否 |
用户性别 |
|
7 |
user_phone |
varchar |
64 |
否 |
否 |
用户电话 |
|
8 |
house_no |
varchar |
64 |
否 |
否 |
房屋编号 |
|
9 |
house_name |
varchar |
64 |
否 |
否 |
房屋名称 |
|
10 |
type_of_house |
varchar |
64 |
否 |
否 |
房屋类型 |
|
11 |
monthly_rent |
varchar |
64 |
否 |
否 |
每月租金 |
|
12 |
lease_date |
date |
否 |
否 |
租赁日期 | |
|
13 |
lease_remarks |
text |
65535 |
否 |
否 |
租赁备注 |
|
14 |
examine_state |
varchar |
16 |
是 |
否 |
审核状态 |
|
15 |
pay_state |
varchar |
16 |
是 |
否 |
支付状态 |
|
16 |
pay_type |
varchar |
16 |
否 |
否 |
支付类型: 微信、支付宝、网银 |
|
17 |
lease_contract_limit_times |
int |
是 |
否 |
合同发送限制次数 | |
|
18 |
lease_withdraw_information_limit_times |
int |
是 |
否 |
退租限制次数 | |
|
19 |
create_time |
datetime |
是 |
否 |
创建时间 | |
|
20 |
update_time |
timestamp |
是 |
否 |
更新时间 | |
|
21 |
source_table |
varchar |
255 |
否 |
否 |
来源表 |
|
22 |
source_id |
int |
否 |
否 |
来源ID | |
|
23 |
source_user_id |
int |
否 |
否 |
来源用户 |
表 4-15-lease_withdraw_information(退租信息)
|
编号 |
字段名 |
类型 |
长度 |
是否非空 |
是否主键 |
注释 |
|
1 |
lease_withdraw_information_id |
int |
是 |
是 |
退租信息ID | |
|
2 |
order_number |
varchar |
64 |
否 |
否 |
订单编号 |
|
3 |
tenant_user |
int |
否 |
否 |
租客用户 | |
|
4 |
landlord_user |
int |
否 |
否 |
房东用户 | |
|
5 |
user_name |
varchar |
64 |
否 |
否 |
用户姓名 |
|
6 |
user_gender |
varchar |
64 |
否 |
否 |
用户性别 |
|
7 |
user_phone |
varchar |
64 |
否 |
否 |
用户电话 |
|
8 |
house_no |
varchar |
64 |
否 |
否 |
房屋编号 |
|
9 |
house_name |
varchar |
64 |
否 |
否 |
房屋名称 |
|
10 |
type_of_house |
varchar |
64 |
否 |
否 |
房屋类型 |
|
11 |
monthly_rent |
varchar |
64 |
否 |
否 |
每月租金 |
|
12 |
lease_surrender_date |
date |
否 |
否 |
退租日期 | |
|
13 |
reason_for_lease_surrender |
varchar |
64 |
否 |
否 |
退租原因 |
|
14 |
refund_details |
text |
65535 |
否 |
否 |
退租详情 |
|
15 |
examine_state |
varchar |
16 |
是 |
否 |
审核状态 |
|
16 |
create_time |
datetime |
是 |
否 |
创建时间 | |
|
17 |
update_time |
timestamp |
是 |
否 |
更新时间 | |
|
18 |
source_table |
varchar |
255 |
否 |
否 |
来源表 |
|
19 |
source_id |
int |
否 |
否 |
来源ID | |
|
20 |
source_user_id |
int |
否 |
否 |
来源用户 |
表 4-16-notice(公告)
|
编号 |
字段名 |
类型 |
长度 |
是否非空 |
是否主键 |
注释 |
|
1 |
notice_id |
mediumint |
是 |
是 |
公告ID | |
|
2 |
title |
varchar |
125 |
是 |
否 |
标题 |
|
3 |
content |
longtext |
4294967295 |
否 |
否 |
正文 |
|
4 |
create_time |
timestamp |
是 |
否 |
创建时间 | |
|
5 |
update_time |
timestamp |
是 |
否 |
更新时间 |
表 4-17-praise(点赞)
|
编号 |
字段名 |
类型 |
长度 |
是否非空 |
是否主键 |
注释 |
|
1 |
praise_id |
int |
是 |
是 |
点赞ID | |
|
2 |
user_id |
int |
是 |
是 |
点赞人 | |
|
3 |
create_time |
timestamp |
是 |
否 |
创建时间 | |
|
4 |
update_time |
timestamp |
是 |
否 |
更新时间 | |
|
5 |
source_table |
varchar |
255 |
否 |
否 |
来源表 |
|
6 |
source_field |
varchar |
255 |
否 |
否 |
来源字段 |
|
7 |
source_id |
int |
是 |
否 |
来源ID | |
|
8 |
status |
tinyint |
是 |
否 |
点赞状态:1为点赞,0已取消 |
表 4-18-score(评分)
|
编号 |
字段名 |
类型 |
长度 |
是否非空 |
是否主键 |
注释 |
|
1 |
score_id |
int |
是 |
是 |
评分ID | |
|
2 |
user_id |
int |
是 |
否 |
评分人 | |
|
3 |
nickname |
varchar |
64 |
否 |
否 |
昵称 |
|
4 |
score_num |
double |
是 |
否 |
评分 | |
|
5 |
create_time |
timestamp |
是 |
否 |
创建时间 | |
|
6 |
update_time |
timestamp |
是 |
否 |
更新时间 | |
|
7 |
source_table |
varchar |
255 |
否 |
否 |
来源表 |
|
8 |
source_field |
varchar |
255 |
否 |
否 |
来源字段 |
|
9 |
source_id |
int |
是 |
否 |
来源ID |
表 4-19-slides(轮播图)
|
编号 |
字段名 |
类型 |
长度 |
是否非空 |
是否主键 |
注释 |
|
1 |
slides_id |
int |
是 |
是 |
轮播图ID | |
|
2 |
title |
varchar |
64 |
否 |
否 |
标题 |
|
3 |
content |
varchar |
255 |
否 |
否 |
内容 |
|
4 |
url |
varchar |
255 |
否 |
否 |
链接 |
|
5 |
img |
varchar |
255 |
否 |
否 |
轮播图 |
|
6 |
hits |
int |
是 |
否 |
点击量 | |
|
7 |
create_time |
timestamp |
是 |
否 |
创建时间 | |
|
8 |
update_time |
timestamp |
是 |
否 |
更新时间 |
表 4-20-tenant_user(租客用户)
|
编号 |
字段名 |
类型 |
长度 |
是否非空 |
是否主键 |
注释 |
|
1 |
tenant_user_id |
int |
是 |
是 |
租客用户ID | |
|
2 |
user_name |
varchar |
64 |
否 |
否 |
用户姓名 |
|
3 |
user_gender |
varchar |
64 |
否 |
否 |
用户性别 |
|
4 |
user_phone |
varchar |
16 |
否 |
否 |
用户电话 |
|
5 |
examine_state |
varchar |
16 |
是 |
否 |
审核状态 |
|
6 |
user_id |
int |
是 |
否 |
用户ID | |
|
7 |
create_time |
datetime |
是 |
否 |
创建时间 | |
|
8 |
update_time |
timestamp |
是 |
否 |
更新时间 |
表 4-21-upload(文件上传)
|
编号 |
字段名 |
类型 |
长度 |
是否非空 |
是否主键 |
注释 |
|
1 |
upload_id |
int |
是 |
是 |
上传ID | |
|
2 |
name |
varchar |
64 |
否 |
否 |
文件名 |
|
3 |
path |
varchar |
255 |
否 |
否 |
访问路径 |
|
4 |
file |
varchar |
255 |
否 |
否 |
文件路径 |
|
5 |
display |
varchar |
255 |
否 |
否 |
显示顺序 |
|
6 |
father_id |
int |
否 |
否 |
父级ID | |
|
7 |
dir |
varchar |
255 |
否 |
否 |
文件夹 |
|
8 |
type |
varchar |
32 |
否 |
否 |
文件类型 |
表 4-22-user(用户账户)
|
编号 |
字段名 |
类型 |
长度 |
是否非空 |
是否主键 |
注释 |
|
1 |
user_id |
int |
是 |
是 |
用户ID | |
|
2 |
state |
smallint |
是 |
否 |
账户状态:(1可用|2异常|3已冻结|4已注销) | |
|
3 |
user_group |
varchar |
32 |
否 |
否 |
所在用户组 |
|
4 |
login_time |
timestamp |
是 |
否 |
上次登录时间 | |
|
5 |
phone |
varchar |
11 |
否 |
否 |
手机号码 |
|
6 |
phone_state |
smallint |
是 |
否 |
手机认证:(0未认证|1审核中|2已认证) | |
|
7 |
username |
varchar |
16 |
是 |
否 |
用户名 |
|
8 |
nickname |
varchar |
16 |
否 |
否 |
昵称 |
|
9 |
password |
varchar |
64 |
是 |
否 |
密码 |
|
10 |
|
varchar |
64 |
否 |
否 |
邮箱 |
|
11 |
email_state |
smallint |
是 |
否 |
邮箱认证:(0未认证|1审核中|2已认证) | |
|
12 |
avatar |
varchar |
255 |
否 |
否 |
头像地址 |
|
13 |
open_id |
varchar |
255 |
否 |
否 |
针对获取用户信息字段 |
|
14 |
create_time |
timestamp |
是 |
否 |
创建时间 |
表 4-23-user_group(用户组)
|
编号 |
字段名 |
类型 |
长度 |
是否非空 |
是否主键 |
注释 |
|
1 |
group_id |
mediumint |
是 |
是 |
用户组ID | |
|
2 |
display |
smallint |
是 |
否 |
显示顺序 | |
|
3 |
name |
varchar |
16 |
是 |
否 |
名称 |
|
4 |
description |
varchar |
255 |
否 |
否 |
描述 |
|
5 |
source_table |
varchar |
255 |
否 |
否 |
来源表 |
|
6 |
source_field |
varchar |
255 |
否 |
否 |
来源字段 |
|
7 |
source_id |
int |
是 |
否 |
来源ID | |
|
8 |
register |
smallint |
否 |
否 |
注册位置 | |
|
9 |
create_time |
timestamp |
是 |
否 |
创建时间 | |
|
10 |
update_time |
timestamp |
是 |
否 |
更新时间 |
4.4本章小结
整个公寓租赁系统的需求分析主要对系统架构以及功能模块的设计,通过建立数据库实体和数据库表设计完成了数据库系统设计。
5 系统实现
本系统的实现主要是根据前面的系统需求分析和系统总体设计来设计页面并实现业务逻辑。主要从公寓租赁系统界面实现、业务逻辑实现这两部分进行介绍。
用户注册:输入账号、设置密码、确认密码、昵称、邮箱、选择用户身份、填写用户姓名、性别等个人信息,点击“注册”按钮,待管理员后台审核通过即可完成注册。其界面如下图5.1所示。

图5.1房东用户注册界面设计
用户登录:输入用户名、密码和验证码后点击“登录”按钮,校验通过后即可登录,同时提供找回密码的选项。其界面如下图5.2所示。

图5.2用户登录界面设计
首页界面是用户访问系统的入口页面,它展示系统的主要功能和特色。用户可以查看首页展示的轮播图、公告信息、新闻资讯、房源等信息并进行相关操作。其界面图如下图5.3所示。

图5.3首页界面设计
用户点击我的头像下拉菜单“个人中心”可以查看个人首页、房源信息、房屋评分、收藏和评论管理并进行相关操作。例如,点击“房源信息”可以添加房源信息,可以对已有的房源信息进行查询、重置和删除操作。个人中心界面图如下图5.4所示。

图5.4个人中心界面设计
房东用户可以在评论管理功能查看并回复租客对房源的评价。界面图如下所示。

图5.5评论管理界面设计
首页:显示个人信息摘要及近期活动,界面图如下图5.5所示。

图5.6租客首页界面设计
租客用户个人中心功能涵盖看房预约、租赁订单、租赁合同、退租信息、收藏、评论管理等功能。界面图如下图所示。

图5.7租客个人中心界面设计
租客用户可以选择心仪的房源并预约看房时间,提交申请,待房东通过审核即可看房。界面图如下图所示。

图5.8看房预约界面设计
租客用户可以在此功能管理自己的租赁订单,包括下单、支付等操作。界面图如下图所示。

图5.9租赁合同界面设计
管理员可以查看所有用户(房东用户、租客用户、管理员)信息并进行增删改查操作。例如,点击某个用户后面的“详情”可以查看该用户的信息详情并可以对用户状态等信息进行修改。其界面图如下图5.9所示。

图5.10系统用户界面设计
在该模块管理员可以对房屋分类列表进行管理和进行房屋分类添加。如点击“房屋分类列表”进入页面可以查看列表中某个房屋分类的详情;点击“房屋分类添加”进入页面填写分类名称后点击“提交”即可完成房屋分类的添加。以房屋分类列表为例,其界面图如下图5.10所示。

图5.11房屋分类管理界面设计
管理员可以在房屋信息管理功能查看房屋审核和管理所有房源信息;直接添加房源信息。其界面图如下图5.11所示。

图5.12房屋信息管理界面设计
在该模块管理员可以审查和处理租赁交易记录,其界面图如下图5.12所示。

图5.13租赁订单管理界面设计
在该模块管理员可以对系统轮播图信息进行增删改查操作。点击“添加”进入页面上传轮播图图片和填写标题、链接后点击“提交”即可完成轮播图的添加。其界面图如下图5.13所示。

图5.14系统管理界面设计
5.3.6公告信息管理
该模块是管理员用来管理系统中的公告信息的界面。管理员可以通过该界面进行公告信息的创建、编辑、发布和删除等操作,以便向用户传达各种重要信息、公告、更新或事件等内容。其界面图如下图5.14所示。

图5.15公告信息管理界面设计
在该模块管理员可以对新闻资讯和资讯分类信息进行增删改查操作。例如,点击“新闻资讯”可以查看资讯列表中某个资讯的详情和评论,勾选某个或多个资讯信息点击“删除”并确认删除即可删除资讯信息。以新闻资讯为例,其界面图如下图5.15所示。

图5.16资源管理界面设计
6 系统测试
6.1系统测试目标
为了保证“公寓租赁系统 ”的质量,使其能够稳定的运行,并排除其可能存在的未知隐患,解除软件可能存在的故障,理清楚测试与纠错的关系,如图6-1所示。

图6-1测试与纠错信息流程
6.2系统功能测试
通过对系统中所含的主要实体对象及其功能操作进行测试用例设计。系统功能测试包括:用户注册登录功能测试、用户发表评论功能测试,用户在线评分功能测试、管理员添加轮播图功能测试、管理员删除房屋资讯功能测试,如表6-1、6-2、6-3、6-4、6-5所示:
表6-1用户注册登录测试表
用户注册登录测试用例:
|
用例说明 |
测试目的 |
测试步骤 |
预期结果 |
输出结果 |
通过情况 |
|
用户注册、登录 |
测试用户正确注册、登录 |
|
用户注册成功,登录成功 |
结果输出符合预期 |
通过 |
表6-2用户发表评论测试表
用户发表评论测试用例:
|
用例说明 |
测试目的 |
测试步骤 |
预期结果 |
输出结果 |
通过情况 |
|
用户发表评论 |
测试注册用户发表评论操作 |
|
用户发表评论成功,展示用户评论信息 |
结果输出符合预期 |
通过 |
表6-3用户在线评分测试表
房东用户评价管理测试用例:
|
用例说明 |
测试目的 |
测试步骤 |
预期结果 |
输出结果 |
通过情况 |
|
用户评价管理测试 |
测试注册用户评价管理功能 |
|
用户可以在线提交评价 |
结果输出符合预期 |
通过 |
表6-4管理员添加轮播图测试表
管理员添加轮播图测试用例:
|
用例说明 |
测试目的 |
测试步骤 |
预期结果 |
输出结果 |
通过情况 |
|
管理员添加轮播图测试 |
测试轮播图信息添加 |
|
轮播图信息添加成功,前端用户可以查看该轮播图信息 |
结果输出符合预期 |
通过 |
表6-5管理员删除房屋资讯测试表
管理员删除房屋资讯测试用例:
|
用例说明 |
测试目的 |
测试步骤 |
预期结果 |
输出结果 |
通过情况 |
|
管理员删除房屋资讯 |
测试管理员删除房屋资讯功能 |
|
房屋资讯信息删除成功,前端不在展示该房屋资讯信息 |
结果输出符合预期 |
通过 |
6.3测试结果总结
通过编写公寓租赁系统的功能测试用例,已经检测完毕系统测试,用户注册登录功能测试、用户发表评论功能测试,用户评论管理功能测试、管理员添加轮播图功能测试、管理员删除房屋资讯功能测试,通过这五大模块功能测试将为公寓租赁系统的后期推广运营提供了强力的技术支撑。
7总结
"Spring Boot公寓租赁管理系统"为房东、租客及管理员提供了全面的在线管理解决方案。房东可通过系统发布房源信息,处理看房预约、租赁订单及退租请求,同时还能管理评论和收藏。租客则能方便地预约看房、管理租赁订单、签署合同以及提交退租申请,并对居住体验进行评价。管理员角色功能丰富,包括用户管理、房源分类与信息审核、预约与订单处理等,确保系统的顺畅运行。此外,还负责公告信息发布、新闻资讯更新及轮播图管理,增强平台的信息传播能力。该系统通过集成化的管理平台,简化了租赁流程中的各个环节,提高了操作效率和服务质量,为用户提供便捷、透明且高效的公寓租赁体验。各角色的功能设计充分考虑到了实际需求,使得整个租赁过程更加规范化和自动化。
在开发本系统的过程中,我收获颇丰,学到了许多书本上学不到的知识。尽管系统已经基本完成,但由于个人专业知识的局限,系统仍有许多需要改进的地方,例如界面布局的优化、代码编写的规范性等。未来,我将继续努力学习,不断提升自己的技术水平,对系统进行进一步的完善。
参考文献
[1]韦珍娜,陈宇佳. 基于Springboot的服装租赁系统设计 [J]. 电脑编程技巧与维护, 2025, (01): 35-38. DOI:10.16184/j.cnki.comprg.2025.01.005.
[2]姚佰允,张豪,杜瑞庆. 基于SpringBoot与Vue的学院人员管理系统设计与实现 [J]. 无线互联科技, 2025, 22 (02): 78-83.
[3]谢海明,张佐中,林顺福.基于自动化技术的MySQL故障处理系统的设计与实现[J].电脑知识与技术,2024,20(33):73-75.DOI:10.14004/j.cnki.ckt.2024.1721.
[4]陈芳.基于MySQL数据库的数据录入系统设计研究[J].科技资讯,2024,22(20):35-37.DOI:10.16661/j.cnki.1672-3791.2405-5042-7194.
[5]谢帅虎.基于Java语言的翻页功能接口程序设计与实现[J].数字通信世界,2024,(11):92-94.
[6]贾琴.Java编程语言的应用策略分析[J].集成电路应用,2024,41(10):84-85.DOI:10.19339/j.issn.1674-2583.2024.10.034.
[7]张靖旭,曾晓晶,郭玉坤. 基于SpringBoot的校园植物信息网建设研究 [J]. 信息与电脑(理论版), 2024, 36 (22): 119-121.
[8]戴亚哲,李尤,赵利宏,等. 基于SpringBoot+Vue的文旅平台设计与研究 [J]. 无线互联科技, 2024, 21 (21): 70-72.
[9]朴明,邱翠花,苗子. 基于SpringBoot+小程序的信息采集系统设计与实现 [J]. 电子技术, 2024, 53 (10): 47-49.
[10]李巧玲.共享发展视角下档案资料管理信息化平台建设研究[J].参花,2025,(06):122-124.
[11]李俊萌.计算机软件测试技术与开发应用策略分析[J].信息记录材料,2023,24(03):50-52.
[12]安康.长租公寓模式中的合同风险与纠纷防范机制研究[D].西北师范大学,2024.DOI:10.27410/d.cnki.gxbfu.2024.002227.
[13]张玄梁.J公寓业务运营管理优化研究[D].华东师范大学,2023.DOI:10.27149/d.cnki.ghdsu.2023.004578.
[14]孙雪鹏.租赁住房建设运营经验分享[C]//中国房地产估价师与房地产经纪人学会,中国建设报社,建信住房服务有限责任公司.新发展模式下的住房租赁——2023中国住房租赁发展论坛论文集.华润置地(北京)股份有限公司;,2023:240-245.DOI:10.26914/c.cnkihy.2023.121526.
[15]李莎.新形势下集中式租赁社区运营管理研究[C]//中国房地产估价师与房地产经纪人学会,中国建设报社,建信住房服务有限责任公司.规范发展与最佳实践——中国住房租赁发展论坛论文集.之寓置业有限公司;,2023:653-658.DOI:10.26914/c.cnkihy.2023.037326.
[16]Karto I ,Christianto ,Grace M H .Property selling system with support for validation and verification process[J].Procedia Computer Science,2023,216186-193.
[17]王永红.A公司公寓租赁市场营销策略研究[D].重庆理工大学,2021.DOI:10.27753/d.cnki.gcqgx.2021.000414.
[18]Patents; Researchers Submit Patent Application, "System and Method for Facilitating Real Estate Sales", for Approval (USPTO 20150278971)[J].Computer Weekly News,2015,
[19]Manhattan Residential Real Estate Attorney Peter Zinkovetsky Releases Insightful Article on Apartment Lease Buyouts[J].M2 Presswire,2024,
[20]Engerstam S ,Warsame A ,Wilhelmsson M .Exploring the Effects of Municipal Land and Building Policies on Apartment Size in New Residential Construction in Sweden[J].Journal of Risk and Financial Management,2023,16(4):
致 谢
这次毕业设计能够完成,最重要的就是来自指导老师的帮助,老师不厌其烦的对我的论文及毕业设计提出非常有建设性的建议,我的毕设施能够完成离不开老师的帮助。我对老师由衷的表示感谢,
其次要感谢大学四年里学院里所有的任课老师的教导,老师们在我整个大学四年里给予了我丰富的知识,让我能够在大学中不虚度光阴,踏踏实实的学习,没有这些老师不辞辛劳的教诲,我无法完成这四年的学业。
最后,我要感谢我的家人和同学们。感谢父母在物质与精神上给予我无限的支持和鼓励。感谢我的同学们,在论文写作期间,你们给予了我许多宝贵的建议和帮助,让我在学术研究的道路上不再孤单。
再次感谢所有在我大学生活中给予我帮助和支持的人们。您们的关怀和鼓励将永远铭刻在我的心中,成为我未来前行的动力。
附 录
登录代码如下:
def Login(self, ctx):
print("===================登录=====================")
ret = {
"error": {
"code": 70000,
"message": "账户不存在",
}
}
body = ctx.body
password = md5hash(body["password"]) or ""
obj = service_select("user").Get_obj(
{"username": body["username"]}, {"like": False}
)
if obj:
user_group = service_select("user_group").Get_obj({'name': obj['user_group']}, {"like": False})
if user_group and user_group['source_table'] != '':
user_obj = service_select(user_group['source_table']).Get_obj({"user_id": obj['user_id']}, {"like": False})
if user_obj['examine_state'] == '未通过':
ret = {
"error": {
"code": 70000,
"message": "账户未通过审核",
}
}
return ret
if user_obj['examine_state'] == '未审核':
ret = {
"error": {
"code": 70000,
"message": "账户未审核",
}
}
return ret
if obj["state"] == 1:
if obj["password"] == password:
timeout = timezone.now()
timestamp = int(time.mktime(timeout.timetuple())) * 1000
token = md5hash(str(obj["user_id"]) + "_" + str(timestamp))
ctx.request.session[token] = obj["user_id"]
service_select("access_token").Add(
{"token": token, "user_id": obj["user_id"]}
)
obj["token"] = token
ret = {
"result": {"obj": obj}
}
else:
ret = {
"error": {
"code": 70000,
"message": "密码错误",
}
}
else:
ret = {
"error": {
"code": 70000,
"message": "用户账户不可用,请联系管理员",
}
}
return ctx.response(json.dumps(ret, ensure_ascii=False))
注册代码如下:
def Register(self, ctx):
print("===================注册=====================")
userService = service_select("user")
body = ctx.body
if "username" not in body and body["username"] == '':
return ctx.response(json.dumps({
"error": {
"code": 70000,
"message": "用户名不能为空",
}
}, ensure_ascii=False))
if "user_group" not in body and body["user_group"] == '':
return ctx.response(json.dumps({
"error": {
"code": 70000,
"message": "用户组不能为空",
}
}, ensure_ascii=False))
if "password" not in body and body["password"] == '':
return ctx.response(json.dumps({
"error": {
"code": 70000,
"message": "密码不能为空",
}
}, ensure_ascii=False))
post_param = body
post_param['nickname'] = body["nickname"] or ""
post_param['password'] = md5hash(body["password"])
obj = userService.Get_obj({"username": post_param['username']}, {"like": False})
if obj:
return ctx.response(json.dumps({
"error": {
"code": 70000,
"message": "用户名已存在",
}
}, ensure_ascii=False))
ret = {
"error": {
"code": 70000,
"message": "注册失败",
}
}
bl = userService.Add(post_param)
if bl:
ret = {
"result": {
"bl": True,
"message": "注册成功"
}
}
return ctx.response(json.dumps(ret, ensure_ascii=False))
找回密码代码如下:
def Forget_password(self, ctx):
print("===================修改密码=====================")
ret = {
"error": {
"code": 70000,
"message": "用户信息不能没有"
}
}
body = ctx.body
if not body["code"]:
return {
"error": {
"code": 70000,
"message": "验证码不存在或者错误"
}
}
obj = service_select("user").Get_obj(
{"username": body["username"]}, {"like": False}
)
if not obj:
return {
"error": {
"code": 70000,
"message": "用户名不存在或者错误"
}
}
password = md5hash(body["password"])
if not password:
return {
"error": {
"code": 70000,
"message": "密码不存在或者错误"
}
}
bl = service_select("user").Set({"user_id": obj["user_id"]}, {"password": password})
if bl:
ret = {"result": {"bl": True, "message": "修改成功"}}
else:
ret = {
"error": {
"code": 70000,
"message": "修改失败",
}
}
return ctx.response(json.dumps(ret, ensure_ascii=False))
修改密码代码如下:
def Change_password(self, ctx):
print("===================修改密码=====================")
ret = {
"error": {
"code": 70000,
"message": "账号未登录",
}
}
request = ctx.request
headers = request.headers
if ("x-auth-token" in headers) and headers["x-auth-token"]:
token = headers["x-auth-token"]
user_id = tokenGetUserId(token, request)
userService = service_select("user")
body = ctx.body
password = md5hash(body["o_password"])
obj = userService.Get_obj({"user_id": user_id, "password": password}, {"like": False})
if obj:
password = md5hash(body["password"])
bl = userService.Set({"user_id": user_id}, {"password": password})
if bl:
ret = {"result": {"bl": True, "message": "修改成功"}}
else:
ret = {
"error": {
"code": 70000,
"message": "修改失败",
}
}
else:
ret = {
"error": {
"code": 70000,
"message": "密码错误",
}
}
else:
ret = {
"error": {
"code": 70000,
"message": "账户未登录",
}
}
return ctx.response(json.dumps(ret, ensure_ascii=False))
增删查改代码如下:
增
def Add(self, ctx):
body = ctx.body
unique = self.config.get("unique")
obj = None
if unique:
qy = {}
for i in range(len(unique)):
key = unique[i]
qy[key] = body.get(key)
obj = self.service.Get_obj(qy)
if not obj:
error = self.Add_before(ctx)
if error["code"]:
return {"error": error}
error = self.Events("add_before", ctx, None)
if error["code"]:
return {"error": error}
result = self.service.Add(body, self.config)
if self.service.error:
return {"error": self.service.error}
res = self.Add_after(ctx, result)
if res:
result = res
res = self.Events("add_after", ctx, result)
if res:
result = res
return {"result": result}
else:
return {"error": {"code": 10000, "message": "已存在"}}
删
def Del(self, ctx):
if len(ctx.query) == 0:
errorMsg = {"code": 30000, "message": "删除条件不能为空!"}
return errorMsg
result = self.service.Del(ctx.query, self.config)
if self.service.error:
return {"error": self.service.error}
return {"result": result}
改
def Set(self, ctx):
error = self.Set_before(ctx)
if error["code"]:
return {"error": error}
error = self.Events("set_before", ctx, None)
if error["code"]:
return {"error": error}
query = ctx.query
if 'page' in query.keys():
del ctx.query['page']
if 'size' in query.keys():
del ctx.query['size']
if 'orderby' in query.keys():
del ctx.query['orderby']
result = self.service.Set(ctx.query, ctx.body, self.config)
if self.service.error:
return {"error": self.service.error}
res = self.Set_after(ctx, result)
if res:
result = res
res = self.Events("set_after", ctx, result)
if res:
result = res
return {"result": result}
查多条数据:
def Get_list(self, ctx):
query = dict(ctx.query)
config_plus = {}
if "field" in query:
field = query.pop("field")
config_plus["field"] = field
if "page" in query:
config_plus["page"] = query.pop("page")
if "size" in query:
config_plus["size"] = query.pop("size")
if "orderby" in query:
config_plus["orderby"] = query.pop("orderby")
if "like" in query:
config_plus["like"] = query.pop("like")
if "groupby" in query:
config_plus["groupby"] = query.pop("groupby")
count = self.service.Count(query)
lst = []
if self.service.error:
return {"error": self.service.error}
elif count:
lst = self.service.Get_list(query,
obj_update(self.config, config_plus))
if self.service.error:
return {"error": self.service.error}
self.interact_list(ctx, lst)
return {"result": {"list": lst, "count": count}}
查一条数据:
def Get_obj(self, ctx):
query = dict(ctx.query)
config_plus = {}
if "field" in query:
field = query.pop("field")
config_plus["field"] = field
obj = self.service.Get_obj(query, obj_update(self.config, config_plus))
if self.service.error:
return {"error": self.service.error}
if obj:
self.interact_obj(ctx, obj)
return {"result": {"obj": obj}}
免费领取项目源码,请关注❥点赞收藏并私信博主,谢谢~
1147

被折叠的 条评论
为什么被折叠?



