项目编号:BS-PT-105
一,环境介绍
语言环境:Java: jdk1.8
数据库:Mysql: mysql5.7
应用服务器:Tomcat: tomcat8.5.31
开发工具:IDEA或eclipse
后台开发技术:Springboot+Mybatis
前后台开发技术:Vue+ElementUI+Nodejs
二,项目简介
社会的发展和科学技术的进步,互联网技术越来越受欢迎。网络计算机的生活方式逐渐受到广大人民群众的喜爱,也逐渐进入了每个用户的使用。互联网具有便利性,速度快,效率高,成本低等优点。 因此,构建符合自己要求的操作系统是非常有意义的。
本文从用户的功能要求出发,建立了房屋租赁系统,系统中的功能模块主要是实现人中心、房屋类型管理、房屋信息、预约看房管理、合同信息管理、房屋报修管理、房屋评价管理、我要当房东管理、留言板管理、系统管理等功能部分;经过认真细致的研究,精心准备和规划,最后测试成功,系统可以正常使用。分析功能调整与房屋租赁系统实现的实际需求相结合,讨论了JSP开发房屋租赁系统的使用。
2.1背景及意义
本论文房屋租赁系统主要牵扯到的程序,数据库与计算机技术等。覆盖知识面大,可以大大的提高系统人员工作效率。
2.2研究意义
由于现在的用户的工作越来越多,所以涉及到的数据也是相应增多。传统的房源信息查询管理模式面对大量数据信息,再给用户提供数据的时候效率会慢,而且用户等待的时间也相应的比较长,所以这样既不能满足用户的需求,不能给用户提供更有效的数据信息的同时,对于管理者的工作效率低,所以开发校房屋租赁系统可以改变这些缺憾。
目前,房屋租赁系统是吸引很多人的注意,通过互联网来搭建房屋租赁系统可以给用户提供更好的服务而且对于工作人员可以更好的提高工作效率。也可以更好的为我们建造更多区域及数据信息。
2.3研究内容
目前许多人仍将传统的纸质工具作为信息管理的主要工具,而网络技术的应用只是起到辅助作用。在对网络工具的认知程度上,较为传统的office软件等仍是人们使用的主要工具,而相对全面且专业的信息管理软件仍没有得到大多数人的了解或认可。本选题则旨在通过标签分类管理等方式,实现房屋租赁系统的各种功能,从而达到对房屋租赁系统的系统。
详细内容介绍,将在以下六章中详细阐述:
第一章、绪论,介绍了研究课题选择的背景及意义、研究现状,简要介绍了本文的章节内容。
第二章、引入技术知识,通过引入关键技术进行开发,向系统中涉及直观表达的技术知识。
第三章、重点分析了系统的分析,从系统强大的供需市场出发,对系统开发的可行性,系统流程以及系统性能和功能进行了探讨。
第四章、介绍了系统的详细设计方案,包括系统结构设计和数据库设计。
第五章、系统设计的实现,通过对系统功能设计的详细说明,论证了系统的结构。
第六章、系统的整体测试,评判系统是否可以上线运行。
房屋租赁系统的设计主要是为了满足用户的实际需求。 因此,它需要通过Internet实现,因此它必须具备硬件和软件基础。该平台最终可以通过科学技术和各种方式达到支持智能化的信息管理的目的。因此,它必须具备网络学习平台管理所需的环境和各种资料,并保证实现开放性,模块性和实用性三个原则。
房屋租赁系统的结构,系统实现的功能模块如下图1所示。
将数据库概念设计的E-R图转换为关系数据库。在关系数据库中,数据关系由数据表组成,但是表的结构表现在表的字段上。
表4.1 config信息表
列名 |
数据类型 |
长度 |
约束 |
id |
bigint |
20 |
PRIMARY KEY |
name |
varchar |
100 |
DEFAULT NULL |
value |
varchar |
100 |
DEFAULT NULL |
表4.2 discussfangwuxinxi信息表
列名 |
数据类型 |
长度 |
约束 |
id |
bigint |
20 |
PRIMARY KEY |
refid |
bigint |
20 |
DEFAULT NULL |
userid |
bigint |
20 |
DEFAULT NULL |
表4.3 discusswoyaodangfangzhu信息表
列名 |
数据类型 |
长度 |
约束 |
id |
bigint |
20 |
PRIMARY KEY |
refid |
bigint |
20 |
DEFAULT NULL |
userid |
bigint |
20 |
DEFAULT NULL |
表4.4 fangwubaoxiu信息表
列名 |
数据类型 |
长度 |
约束 |
id |
bigint |
20 |
PRIMARY KEY |
hetongbianhao |
varchar |
200 |
DEFAULT NULL |
fangwumingcheng |
varchar |
200 |
DEFAULT NULL |
fangwuleixing |
varchar |
200 |
DEFAULT NULL |
xiaoqu |
varchar |
200 |
DEFAULT NULL |
baoxiumingcheng` |
varchar |
200 |
DEFAULT NULL |
leixing |
varchar |
200 |
DEFAULT NULL |
baoxiuneirong |
varchar |
200 |
DEFAULT NULL |
tupian |
varchar |
200 |
DEFAULT NULL |
fangzhuzhanghao |
varchar |
200 |
DEFAULT NULL |
fangzhuxingming |
varchar |
200 |
DEFAULT NULL |
yonghuming |
varchar |
200 |
DEFAULT NULL |
lianxidianhua |
varchar |
200 |
DEFAULT NULL |
sfsh |
varchar |
200 |
DEFAULT NULL |
表4.5 fangwuleixing信息表
列名 |
数据类型 |
长度 |
约束 |
id |
bigint |
20 |
PRIMARY KEY |
fangwuleixing |
bigint |
20 |
DEFAULT NULL |
表4.6 fangwupingjia信息表
列名 |
数据类型 |
长度 |
约束 |
hetongbianhao |
varchar |
11 |
DEFAULT NULL |
fangwumingcheng |
varchar |
200 |
DEFAULT NULL |
fangwuleixing |
varchar |
200 |
DEFAULT NULL |
xiaoqu |
varchar |
200 |
DEFAULT NULL |
pingfen |
varchar |
200 |
DEFAULT NULL |
fangzhuzhanghao |
varchar |
200 |
DEFAULT NULL |
yonghuming |
varchar |
200 |
DEFAULT NULL |
lianxidianhua |
varchar |
200 |
DEFAULT NULL |
sfsh |
varchar |
200 |
DEFAULT NULL |
表4.7 fangzhu信息表
列名 |
数据类型 |
长度 |
约束 |
id |
bigint |
200 |
PRIMARY KEY |
fangzhuzhanghao |
varchar |
200 |
DEFAULT NULL |
mima |
varchar |
200 |
DEFAULT NULL |
fangzhuxingming |
varchar |
200 |
DEFAULT NULL |
xingbie |
varchar |
200 |
DEFAULT NULL |
touxiang |
varchar |
200 |
DEFAULT NULL |
shouji |
varchar |
200 |
DEFAULT NULL |
shenfenzheng |
varchar |
200 |
DEFAULT NULL |
表4.8 messages信息表
列名 |
数据类型 |
长度 |
约束 |
id |
bigint |
11 |
DEFAULT NULL |
userid |
username |
200 |
DEFAULT NULL |
username |
varchar |
200 |
DEFAULT NULL |
表4.9 news信息表
列名 |
数据类型 |
长度 |
约束 |
id |
bigint |
20 |
PRIMARY KEY |
title |
varchar |
200 |
DEFAULT NULL |
picture |
varchar |
200 |
DEFAULT NULL |
三,系统展示
用户登录
管理员登录成功后,进入后台页面,可以进行查看个人中心、房屋类型管理、房屋信息、预约看房管理、合同信息管理、房屋报修管理、房屋评价管理、我要当房东管理、留言板管理、系统管理等功能模块,进行相对应操作。
房主管理:通过列表可以获取用户名、密码、姓名、头像、性别、职业、联系方式、身份证号、进行查看用户信息或修改删除操作还可以通过新增进行添加用户信息操作,如图所示。
房屋类型管理:通过列表可以进行查看房屋类型,进行查看详情或修改、删除操作,并通过新增进行添加类型信息,如图所示
房屋信息管理:通过房屋信息列表可以查看房屋名称、房屋类型、房屋图片、出租方式、朝向楼层、面积、房屋状态、小区、详细地址、月租价格、押金、房屋设施、发布日期、房住帐号、房主姓名、等信息进行查看详细或修改或删除操作,并且可以通过查看评论进行在线回复信息或进行新增房屋信息,操作,如图所示。
公告信息管理:通过列表可以获取公告信息的标题、简介、图片等详细信息进行修改或删除操作,并且可以通过新增公告信息进行添加公告信息,如图所示。
预约看房管理:通过列表可以获取预约编号、房屋名称、房屋类型、房屋状态、小区、月租价格、押金、租用月数、预约时间、用户名、姓名、身份证、联系电话、房主账号、房主姓名、审核回复、审核状态等信息,进行审核或删除操作,如图所示。
我要当房东信息:通过列表可以查看房屋名称、房屋类型、图片、租赁方式、小区、月租价格、用户名、房屋详情、朝向楼层、面积、发布日期、联系电话等信息,进行查看详情或修改、删除操作或进行审核操作,如图所示。
房主登录后的主要功能:不再一 一展示
租房用户注册登录后的主要功能:不再一 一展示
个人中心操作界面:
四,核心代码展示
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.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.FangwubaoxiuEntity; import com.entity.view.FangwubaoxiuView; import com.service.FangwubaoxiuService; 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 2023-03-04 18:46:21 */ @RestController @RequestMapping("/fangwubaoxiu") public class FangwubaoxiuController { @Autowired private FangwubaoxiuService fangwubaoxiuService; /** * 后端列表 */ @RequestMapping("/page") public R page(@RequestParam Map<String, Object> params,FangwubaoxiuEntity fangwubaoxiu, HttpServletRequest request){ String tableName = request.getSession().getAttribute("tableName").toString(); if(tableName.equals("fangzhu")) { fangwubaoxiu.setFangzhuzhanghao((String)request.getSession().getAttribute("username")); } if(tableName.equals("yonghu")) { fangwubaoxiu.setYonghuming((String)request.getSession().getAttribute("username")); } EntityWrapper<FangwubaoxiuEntity> ew = new EntityWrapper<FangwubaoxiuEntity>(); PageUtils page = fangwubaoxiuService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, fangwubaoxiu), params), params)); return R.ok().put("data", page); } /** * 前端列表 */ @RequestMapping("/list") public R list(@RequestParam Map<String, Object> params,FangwubaoxiuEntity fangwubaoxiu, HttpServletRequest request){ EntityWrapper<FangwubaoxiuEntity> ew = new EntityWrapper<FangwubaoxiuEntity>(); PageUtils page = fangwubaoxiuService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, fangwubaoxiu), params), params)); return R.ok().put("data", page); } /** * 列表 */ @RequestMapping("/lists") public R list( FangwubaoxiuEntity fangwubaoxiu){ EntityWrapper<FangwubaoxiuEntity> ew = new EntityWrapper<FangwubaoxiuEntity>(); ew.allEq(MPUtil.allEQMapPre( fangwubaoxiu, "fangwubaoxiu")); return R.ok().put("data", fangwubaoxiuService.selectListView(ew)); } /** * 查询 */ @RequestMapping("/query") public R query(FangwubaoxiuEntity fangwubaoxiu){ EntityWrapper< FangwubaoxiuEntity> ew = new EntityWrapper< FangwubaoxiuEntity>(); ew.allEq(MPUtil.allEQMapPre( fangwubaoxiu, "fangwubaoxiu")); FangwubaoxiuView fangwubaoxiuView = fangwubaoxiuService.selectView(ew); return R.ok("查询房屋报修成功").put("data", fangwubaoxiuView); } /** * 后端详情 */ @RequestMapping("/info/{id}") public R info(@PathVariable("id") Long id){ FangwubaoxiuEntity fangwubaoxiu = fangwubaoxiuService.selectById(id); return R.ok().put("data", fangwubaoxiu); } /** * 前端详情 */ @RequestMapping("/detail/{id}") public R detail(@PathVariable("id") Long id){ FangwubaoxiuEntity fangwubaoxiu = fangwubaoxiuService.selectById(id); return R.ok().put("data", fangwubaoxiu); } /** * 后端保存 */ @RequestMapping("/save") public R save(@RequestBody FangwubaoxiuEntity fangwubaoxiu, HttpServletRequest request){ fangwubaoxiu.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue()); //ValidatorUtils.validateEntity(fangwubaoxiu); fangwubaoxiuService.insert(fangwubaoxiu); return R.ok(); } /** * 前端保存 */ @RequestMapping("/add") public R add(@RequestBody FangwubaoxiuEntity fangwubaoxiu, HttpServletRequest request){ fangwubaoxiu.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue()); //ValidatorUtils.validateEntity(fangwubaoxiu); fangwubaoxiuService.insert(fangwubaoxiu); return R.ok(); } /** * 修改 */ @RequestMapping("/update") public R update(@RequestBody FangwubaoxiuEntity fangwubaoxiu, HttpServletRequest request){ //ValidatorUtils.validateEntity(fangwubaoxiu); fangwubaoxiuService.updateById(fangwubaoxiu);//全部更新 return R.ok(); } /** * 删除 */ @RequestMapping("/delete") public R delete(@RequestBody Long[] ids){ fangwubaoxiuService.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<FangwubaoxiuEntity> wrapper = new EntityWrapper<FangwubaoxiuEntity>(); 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("fangzhu")) { wrapper.eq("fangzhuzhanghao", (String)request.getSession().getAttribute("username")); } if(tableName.equals("yonghu")) { wrapper.eq("yonghuming", (String)request.getSession().getAttribute("username")); } int count = fangwubaoxiuService.selectCount(wrapper); return R.ok().put("count", count); } }
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.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.HetongxinxiEntity; import com.entity.view.HetongxinxiView; import com.service.HetongxinxiService; 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 2023-03-04 18:46:21 */ @RestController @RequestMapping("/hetongxinxi") public class HetongxinxiController { @Autowired private HetongxinxiService hetongxinxiService; /** * 后端列表 */ @RequestMapping("/page") public R page(@RequestParam Map<String, Object> params,HetongxinxiEntity hetongxinxi, HttpServletRequest request){ String tableName = request.getSession().getAttribute("tableName").toString(); if(tableName.equals("yonghu")) { hetongxinxi.setYonghuming((String)request.getSession().getAttribute("username")); } if(tableName.equals("fangzhu")) { hetongxinxi.setFangzhuzhanghao((String)request.getSession().getAttribute("username")); } EntityWrapper<HetongxinxiEntity> ew = new EntityWrapper<HetongxinxiEntity>(); PageUtils page = hetongxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, hetongxinxi), params), params)); return R.ok().put("data", page); } /** * 前端列表 */ @RequestMapping("/list") public R list(@RequestParam Map<String, Object> params,HetongxinxiEntity hetongxinxi, HttpServletRequest request){ EntityWrapper<HetongxinxiEntity> ew = new EntityWrapper<HetongxinxiEntity>(); PageUtils page = hetongxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, hetongxinxi), params), params)); return R.ok().put("data", page); } /** * 列表 */ @RequestMapping("/lists") public R list( HetongxinxiEntity hetongxinxi){ EntityWrapper<HetongxinxiEntity> ew = new EntityWrapper<HetongxinxiEntity>(); ew.allEq(MPUtil.allEQMapPre( hetongxinxi, "hetongxinxi")); return R.ok().put("data", hetongxinxiService.selectListView(ew)); } /** * 查询 */ @RequestMapping("/query") public R query(HetongxinxiEntity hetongxinxi){ EntityWrapper< HetongxinxiEntity> ew = new EntityWrapper< HetongxinxiEntity>(); ew.allEq(MPUtil.allEQMapPre( hetongxinxi, "hetongxinxi")); HetongxinxiView hetongxinxiView = hetongxinxiService.selectView(ew); return R.ok("查询合同信息成功").put("data", hetongxinxiView); } /** * 后端详情 */ @RequestMapping("/info/{id}") public R info(@PathVariable("id") Long id){ HetongxinxiEntity hetongxinxi = hetongxinxiService.selectById(id); return R.ok().put("data", hetongxinxi); } /** * 前端详情 */ @RequestMapping("/detail/{id}") public R detail(@PathVariable("id") Long id){ HetongxinxiEntity hetongxinxi = hetongxinxiService.selectById(id); return R.ok().put("data", hetongxinxi); } /** * 后端保存 */ @RequestMapping("/save") public R save(@RequestBody HetongxinxiEntity hetongxinxi, HttpServletRequest request){ hetongxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue()); //ValidatorUtils.validateEntity(hetongxinxi); hetongxinxiService.insert(hetongxinxi); return R.ok(); } /** * 前端保存 */ @RequestMapping("/add") public R add(@RequestBody HetongxinxiEntity hetongxinxi, HttpServletRequest request){ hetongxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue()); //ValidatorUtils.validateEntity(hetongxinxi); hetongxinxiService.insert(hetongxinxi); return R.ok(); } /** * 修改 */ @RequestMapping("/update") public R update(@RequestBody HetongxinxiEntity hetongxinxi, HttpServletRequest request){ //ValidatorUtils.validateEntity(hetongxinxi); hetongxinxiService.updateById(hetongxinxi);//全部更新 return R.ok(); } /** * 删除 */ @RequestMapping("/delete") public R delete(@RequestBody Long[] ids){ hetongxinxiService.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<HetongxinxiEntity> wrapper = new EntityWrapper<HetongxinxiEntity>(); 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("yonghu")) { wrapper.eq("yonghuming", (String)request.getSession().getAttribute("username")); } if(tableName.equals("fangzhu")) { wrapper.eq("fangzhuzhanghao", (String)request.getSession().getAttribute("username")); } int count = hetongxinxiService.selectCount(wrapper); return R.ok().put("count", count); } }
五,项目总结
房屋租赁系统的整体功能模块的实现,主要是对自己在大学这几年时间所学内容的一个测试,对于系统,主要是通过现在智能化的房屋租赁系统进行开始系统的实现,管理员根据问题信息进行科研成果信息及留言信息管理等操作,并且可以根据需求进行数据信息的增加修改删除等操作,完美的解决了当下房屋租赁系统中所遇到的问题。
经过一个学期的毕业设计的实现完成已接近尾声,到目前为止,当我回想起整个学期的系统开发日,收获颇丰。毕业设计的主要任务是建立一个智能化的房屋租赁系统的信息系统,主要使用JSP和Mysql数据库的开发工具,对系统的每个功能模块进行相对应的操作,最后,系统调试结果表明系统基本可以满足功能要求。
房屋租赁系统的开发对我大学学习的改进有很大帮助。它使我能够学习计算机知识的相关技术方面问题及与人交往的沟通交流方面,让我意识到无论我们做什么,我们都需要坚持不懈,努力工作,只有这样尝试了并且坚持去做了,我们才可以成功,才可以获得成功的喜悦,如果没有尝试,只是想,那连成功的机会都没有,实际操作进行做了,才会越来越近的靠近成功,随着道路一路向前,未来的路是美好的。
对于房屋租赁系统的实现,是自己第一次完成的设计一个管理系统。在项目的设计过程中,我克服了各种困难,并且在面对这些困难,我积极的面对,想办法解决问题,并且更好的掌握了理论知识和动手操作实践能力,从系统的开发到设计完成,我完成了一个更全面、更完善、更安全的平台管理系统,这也让我取得了很大的成就感,也使我对未来的生活更有信心。