项目练习:房屋出租系统
房屋出租系统
- 需求说明:实现基于文本界面的《房屋出租软件》
- 能够实现对房屋信息的添加,修改,删除(用数组实现),能够打印房屋明细表
分层设计
为了理解业务逻辑和方便编写代码,可以将程序分成多个层面,理清思路后再进行编写代码
程序入口
HouseRentApp类:main方法{程序入口,创建HoeseView对象,调用对象显示主菜单}
界面层
HouseView类:1.显示界面 2.接收用户的输入3.调用HouseService类完成对房屋的操作
业务层
HouseService类:1.响应HouseView类的调用 2. 完成对房屋的增删改查CRUD
其他工具类:完成获取用户的各种输入:待会会使用老师写的Utiltty工具类
domain/模型model
House类:一个House类表示一个房屋信息
House类编写
- 首先定义好房屋的各个属性,编号 房主 电话 地址 月租 状态(已出租/未出租)
- 将属性编写到构造器中给出 对应的set get方法。
- 重写toString方法,根据菜单界面编辑好格式
public class House {private int id;private String name;private int phone;private String address;private double rent;private String state;public House(int id, String name, int phone, String address, double rent, String state) {this.id = id;this.name = name;this.phone = phone;this.address = address;this.rent = rent;this.state = state;}
//set get.....@Overridepublic String toString() {return "id=" + id +"\t" + name +"\t" + phone +"\t" + address +"\t" + rent +"\t" + state ;}
}
HouseView菜单编写
- 显示菜单
- 根据用户的输入执行不同的操作
public class HouseView {public void mainMenu(){boolean loop = true;//菜单显示控制char key = ' ';//用户选择do {System.out.println("==========房屋出租系统==========");System.out.println("\t\t\t1. 新 增 房 源");System.out.println("\t\t\t2. 查 找 房 屋");System.out.println("\t\t\t3. 删 除 房 屋 信 息");System.out.println("\t\t\t4. 修 改 房 屋 信 息");System.out.println("\t\t\t5. 房 屋 列 表");System.out.println("\t\t\t6. 退 出");System.out.println("请输入你的选择(1-6):");key = Utils.readChar();switch(key){case '1':System.out.println("新增");break;case '2':System.out.println("查找");break;case '3':System.out.println("删除");break;case '4':System.out.println("修改");break;case '5':System.out.println("列表");break;case '6':System.out.println("退出");loop = false;break;}}while(loop);}
}
编写房屋列表功能
- 在Service类定义house数组且通过构造器确定数组大小
- 编写List方法,用于返回创建的数组
- 在View类菜单类,创建HouseList方法,接收list传过来的数组。且通过循环输出信息
- 将菜单中显示列表执行区域,变成调用Houselist方法
//Service类
public class HouseService {private House[] houses;//声明一个House类的数组,用于保存对象public HouseService(int size) {//构造器创建数组空间houses = new House[size];//使创建Service对象时,指定数组大小//先测试赋值一个数组houses[0] = new House(1,"李三",1867925,"比尔吉沃特",5000,"未出租");}//list方法返回前面创建的数组public House[] list(){return houses;}
}
//菜单类
public class HouseView {boolean loop = true;//菜单显示控制char key = ' ';//用户选择private HouseService houseService = new HouseService(5);//实例化Service对象,设置数组大小public void houseList(){System.out.println("===========房屋出租列表=================");System.out.println("编号\t\t房主\t\t电话\t\t地址\t\t月租\t\t状态");House[] houses = houseService.list();//将创建好的数组给housefor (int i = 0; i < houses.length; i++) {if (houses [i] == null){break;}System.out.println(houses[i]);//自动调用toString方法输出}}public void mainMenu(){do {System.out.println("==========房屋出租系统==========");System.out.println("\t\t\t1. 新 增 房 源");System.out.println("\t\t\t2. 查 找 房 屋");System.out.println("\t\t\t3. 删 除 房 屋 信 息");System.out.println("\t\t\t4. 修 改 房 屋 信 息");System.out.println("\t\t\t5. 房 屋 列 表");System.out.println("\t\t\t6. 退 出");System.out.println("请输入你的选择(1-6):");key = Utils.readChar();switch(key){case '1':System.out.println("新增");break;case '2':System.out.println("查找");break;case '3':System.out.println("删除");break;case '4':System.out.println("修改");break;case '5':houseList();break;case '6':System.out.println("退出");loop = false;break;}}while(loop);}
}
编写新增房源
- 在Service类,编写add方法接收一个新的房源对象
- 在add方法中,创建比原数组空间大1的新数组,依次将前面的数组复制进去
- 复制完成后,将传进来的新房源对象信息给新数组的最后一个空间
- 最后将原数组的引用指向新数组
- 再回到View类定义HouseAdd方法,让用户输入新房源的信息,实例化成新的House类,调用add方法将新对象传入
注意点:id的自增 和 对象数组的复制方法
难点:对象数组扩容
//View类public void addHouse(){System.out.println("========添加房屋======");System.out.println("姓名");String name = Utils.readString(4);System.out.println("电话");int phone = Utils.readInt();System.out.println("地址");String ress = Utils.readString(16);System.out.println("月租");int rent = Utils.readInt();System.out.println("状态");String state = Utils.readString(3);House newHouse = new House(0,name,phone,ress,rent,state);houseService.add(newHouse);}
//Service类public House[] add(House newHouse){House [] houses1 = new House[houses.length+1];int idcount = 1;for (int i = 0; i < houses.length; i++) {//依次赋值给新对象数组houses1[i] = new House(idcount++,houses[i].getName(),houses[i].getPhone(),houses[i].getAddress(),houses[i].getRent(),houses[i].getState());}//把最新的也给扩容的数组houses1[houses1.length-1] = new House(idcount,newHouse.getName(),newHouse.getPhone(),newHouse.getAddress(),newHouse.getRent(),newHouse.getState());houses = houses1;//将原数组的引用指向扩容后的数组houses1 = null;return houses;}
}
删除房源
- 在View类编写HouseDle方法:接收用户要删除的ID,调用Del方法
- 在Service类编写Del方法,创建一个比当前数组小1空间的新数组,除了要删除的元素,其他都依次赋值。
- 最后引用变更。
//View类
public void delHouse(){System.out.println("========删除房屋======");System.out.println("请输入要删除的ID(-1退出):");int delID = Utils.readInt();if (delID == -1){System.out.println("已退出删除信息");return;}char choice = Utils.readConfirmSelection();//只有输入Y或者N才能出来if (choice == 'Y'){//调用del方法houseService.del(delID);}else{System.out.println("已退出删除信息");}}
//Service类
public void del(int delID){int indx = -1;House[] houses2 = new House[houses.length-1];//创建一个比原数组小一个空间的数组for (int i = 0; i < houses.length; i++) {if (delID == houses[i].getId()){//得到要删除的下标indx = i;}}for (int i = 0; i < indx ; i++) {//前面的元素正常赋值houses2 [i] = houses [i] ;}for (int i = indx; i < houses.length-1; i++) {//将后面的元素前移houses2 [i] = houses[i+1];}houses = houses2;houses2 = null;}
编写退出功能
- 直接在View类中编写一个是否确认退出的方法,调用即可
//View类
public void exit(){char key = Utils.readConfirmSelection();if (key == 'Y'){loop = false;}}
编写查找功能
- 在View类中编写houseFind方法:接收用户要查找的ID
- 在Service类中编写find方法:根据传入的ID对数组进行匹配,匹配成功则返回这这个对象
//View类
public void findHouse(){System.out.println("请输入要查找的ID:");int findID = Utils.readInt();System.out.println("查找信息如下:");System.out.println(houseService.find(findID));}
//Service类
public House find(int findID){for (int i = 0; i < houses.length; i++) {if (findID == houses[i].getId()){return houses[i];}}System.out.println("没有找到此ID");return null;}
编写修改功能
- 在View类中借用之前写过的find方法,查找到对应的元素,将新的引用指向这个元素。然后输出信息,使用set方法修改
注意点:动态绑定机制。回车是不修改if(!” “.equals(name)){set方法}。表示如果是输入为空,就跳过,不为空就进入就修改。!取反符号
//View类
public void date(){System.out.println("请输入要修改的ID:");int findID = Utils.readInt();House house = houseService.find(findID);System.out.println("房主("+house.getName()+"):");String name = Utils.readString(4,"");if (!"".equals(name)){//如果不为空就修改house.setName(name);}System.out.println("电话("+house.getPhone()+"):");int phone = Utils.readInt(-1);if (phone != -1){//如果不为-1就修改house.setPhone(phone);}System.out.println("地址("+house.getAddress()+"):");String ress = Utils.readString(4,"");if (!"".equals(ress)){//如果不为空就修改house.setName(ress);}System.out.println("租金("+house.getRent()+"):");int rent = Utils.readInt(-1);if (rent != -1){//如果不为-1就修改house.setRent(rent);}System.out.println("状态("+house.getState()+"):");String state = Utils.readString(4,"");if (!"".equals(name)){//如果不为空就修改house.setState(state);}}
大概框架
运行检验
---------------房屋出租系统---------------
1. 新 增 房 源
2. 查 找 房 屋
3. 删 除 房 屋 信 息
4. 修 改 房 屋 信 息
5. 房 屋 列 表
6. 退 出
请输入你的选择(1-6):
5
---------------房屋出租系统---------------
编号 房主 电话 地址 月租 状态
1 李三 1867925 比尔吉沃特 5000.0 未出租
---------------房屋出租系统---------------
1. 新 增 房 源
2. 查 找 房 屋
3. 删 除 房 屋 信 息
4. 修 改 房 屋 信 息
5. 房 屋 列 表
6. 退 出
请输入你的选择(1-6):
1
---------------添加房屋---------------
姓名
李五
电话
112
地址
海定区
月租
1800
状态
未出租
添加成功
---------------房屋出租系统---------------
1. 新 增 房 源
2. 查 找 房 屋
3. 删 除 房 屋 信 息
4. 修 改 房 屋 信 息
5. 房 屋 列 表
6. 退 出
请输入你的选择(1-6):
1
---------------添加房屋---------------
姓名
王思
电话
900
地址
新洲区
月租
1000
状态
已出租
添加成功
---------------房屋出租系统---------------
1. 新 增 房 源
2. 查 找 房 屋
3. 删 除 房 屋 信 息
4. 修 改 房 屋 信 息
5. 房 屋 列 表
6. 退 出
请输入你的选择(1-6):
3
---------------删除房屋---------------
请输入要删除的ID(-1退出):
2
请输入你的选择(Y/N): 请小心选择
Y
删除完成
---------------房屋出租系统---------------
1. 新 增 房 源
2. 查 找 房 屋
3. 删 除 房 屋 信 息
4. 修 改 房 屋 信 息
5. 房 屋 列 表
6. 退 出
请输入你的选择(1-6):
5
---------------房屋出租系统---------------
编号 房主 电话 地址 月租 状态
1 李三 1867925 比尔吉沃特 5000.0 未出租
3 王思 900 新洲区 1000.0 已出租
---------------房屋出租系统---------------
1. 新 增 房 源
2. 查 找 房 屋
3. 删 除 房 屋 信 息
4. 修 改 房 屋 信 息
5. 房 屋 列 表
6. 退 出
请输入你的选择(1-6):
2
请输入要查找的ID:
2
查找信息如下:
没有找到此ID
null
---------------房屋出租系统---------------
1. 新 增 房 源
2. 查 找 房 屋
3. 删 除 房 屋 信 息
4. 修 改 房 屋 信 息
5. 房 屋 列 表
6. 退 出
请输入你的选择(1-6):
2
请输入要查找的ID:
1
查找信息如下:
1 李三 1867925 比尔吉沃特 5000.0 未出租
---------------房屋出租系统---------------
1. 新 增 房 源
2. 查 找 房 屋
3. 删 除 房 屋 信 息
4. 修 改 房 屋 信 息
5. 房 屋 列 表
6. 退 出
请输入你的选择(1-6):
4
请输入要修改的ID:
3
房主(王思):万斯
电话(900):100
地址(新洲区):
租金(1000.0):1200
状态(已出租):
修改完成
---------------房屋出租系统---------------
1. 新 增 房 源
2. 查 找 房 屋
3. 删 除 房 屋 信 息
4. 修 改 房 屋 信 息
5. 房 屋 列 表
6. 退 出
请输入你的选择(1-6):
5
---------------房屋出租列表---------------
编号 房主 电话 地址 月租 状态
1 李三 1867925 比尔吉沃特 5000.0 未出租
3 万斯 100 新洲区 1200.0
---------------房屋出租系统---------------
1. 新 增 房 源
2. 查 找 房 屋
3. 删 除 房 屋 信 息
4. 修 改 房 屋 信 息
5. 房 屋 列 表
6. 退 出
请输入你的选择(1-6):
6
请输入你的选择(Y/N): 请小心选择
Y
退出
已退出房屋系统
项目练习:房屋出租系统相关推荐
- java渡劫期(32)----java进阶(ssm整合项目实战----房屋出租系统(渡劫失败))
需求分析 增 1.发布出租房信息 2.用户的注册 删 自己发布的房屋信息可删除 查 用户可以根据自己的需求对房屋进行模糊查询(也可以发布自己房屋的信息) 查询后的显示效果 查询显示详细信息(即单击选择 ...
- Java项目:公寓房屋出租系统(java+SSM+JSP+EasyUI+Echarts+Mysql)
源码获取:俺的博客首页 "资源" 里下载! 项目介绍 该项目分为前后台,分为普通用户与管理员两种角色. 前台主要功能包括: 普通用户的注册.登录,房屋列表展示,租房,我的订单.用户 ...
- 基于jsp+servlet的房屋出租系统
项目名称 房屋出租系统 编程语言 Java语言 主要技术 jsp+servlet 开发工具 eclipse 服务器 tomcat 7.0及以上 数据库 MySQL5.5/5.7/8.0 +C3P0连接 ...
- java学习笔记(9) 第9章 Java项目-房屋出租系统
Java项目-房屋出租系统 代码打包--百度网盘链接: 9.1 房屋出租系统-需求 9.1.1 项目需求说明 9.2 房屋出租系统-界面 9.3 房屋出租系统-设计(!!) 9.4 房屋出租系统-实现 ...
- B站韩顺平java学习笔记(八)-- 房屋出租系统(项目)章节
目录 一 项目需求说明 1 项目界面 二 房屋租赁程序框架图 三 系统实现 1 完成House类 2 显示主菜单和完成退出软件的功能 3 完成显示房屋列表的功能 4 添加房屋信息的功能 ...
- Java小项目——房屋出租系统
程序入口 public class HouseRent {public static void main(String[] args) {new HouseView().Menu();} } 用户界面 ...
- Java/java程序设计:房屋出租系统:要求实现:新增房源,查找房屋信息,修改房屋信息,删除房屋信息,显示所有房屋列表,退出房屋管理系统;
Java/java程序设计:房屋出租系统: 一.前言: 一.1. 框架图 二.各类包下的代码实现: 1. 主文件(运行文件HouseApp.java) 2. 房屋类文件(House.java) 3. ...
- 基于javaweb的公寓房屋出租系统(java+ssm+jsp+easyui+echarts+mysql)
基于javaweb的公寓房屋出租系统(java+ssm+jsp+easyui+echarts+mysql) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/id ...
- 房屋出租系统(初级)
前言 本项目是根据[零基础 快速学Java]韩顺平 零基础30天学会Java_哔哩哔哩_bilibili 课程进行的.项目的主要目的是巩固一下以前学习的 Java基础 知识. 需求 实现基于文本界 ...
最新文章
- HTML--HTML入门篇(我想10分钟入门HTML,可以,交给我吧)
- 微信又添新表情,“我裂开了”!
- 关于ping与tracert网络命令详解
- 心理学入门必读好物,《亲密关系》精华版
- QGraphicsObject Error: Class declarations lacks Q_OBJECT macro.
- matlab加性高斯白噪声方差
- xpwifi热点设置android,笔记本xp系统wifi热点设置教程(图文)
- 其实特简单,Python 做一个漂亮女孩词云跳舞的视频
- passw、shadow、group文件详解
- 定时任务与系统定时任务
- 关于制作赛车游戏的一些入门知识
- Python程序运行结束后发出提示音
- linux 限速命令,Linux路由器限速设置进程
- HTML5期末大作业:服装商城网站设计——2021凡客服装商城(1页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web前端设计与开发期末作品_期末大作业
- python实现q-learning算法
- signature=839c980ea2bb48be66699d26946b8c01,3922张仅包含车牌的图片,图片名字表示车牌号码...
- 铁路牵引变电所智能运维研究
- 大环境不好,多个行业大裁员,失业待业人员该何去何从?
- html中text的maxlength,详解maxlength属性在textarea里奇怪的表现
- ZWeily的小品文(五)C++入门教程(4)
热门文章
- ubuntu 20使用kubeadm安装k8s 1.26
- 再增加一些英语学习网址
- 机器学习基石(林轩田)第七章 笔记与感悟总结
- 【SA系列】解决方案架构师专家岗位招聘参考标准
- 链家网php技术笔试题,链家网 18秋招技术岗模拟测试
- [附源码]java毕业设计旅游景点管理系统
- matlab中数据导入,怎样将数据导入到matlab中
- 字面常量_从字面上看,“打印屏幕”按钮是否可以打印屏幕(并且可以再次打印)吗?
- Cocos实战案例:高手解析《捕鱼达人3》怎样玩3D VR
- 玩转云端 | 天翼云电脑的百变玩法