房屋出租系统

  • 需求说明:实现基于文本界面的《房屋出租软件》
  • 能够实现对房屋信息的添加,修改,删除(用数组实现),能够打印房屋明细表

分层设计

为了理解业务逻辑和方便编写代码,可以将程序分成多个层面,理清思路后再进行编写代码

程序入口
HouseRentApp类:main方法{程序入口,创建HoeseView对象,调用对象显示主菜单}

界面层
HouseView类:1.显示界面 2.接收用户的输入3.调用HouseService类完成对房屋的操作

业务层
HouseService类:1.响应HouseView类的调用 2. 完成对房屋的增删改查CRUD
其他工具类:完成获取用户的各种输入:待会会使用老师写的Utiltty工具类

domain/模型model
House类:一个House类表示一个房屋信息

House类编写

  1. 首先定义好房屋的各个属性,编号 房主 电话 地址 月租 状态(已出租/未出租)
  2. 将属性编写到构造器中给出 对应的set get方法。
  3. 重写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菜单编写

  1. 显示菜单
  2. 根据用户的输入执行不同的操作
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);}
}

编写房屋列表功能

  1. 在Service类定义house数组且通过构造器确定数组大小
  2. 编写List方法,用于返回创建的数组
  3. 在View类菜单类,创建HouseList方法,接收list传过来的数组。且通过循环输出信息
  4. 将菜单中显示列表执行区域,变成调用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);}
}

编写新增房源

  1. 在Service类,编写add方法接收一个新的房源对象
  2. 在add方法中,创建比原数组空间大1的新数组,依次将前面的数组复制进去
  3. 复制完成后,将传进来的新房源对象信息给新数组的最后一个空间
  4. 最后将原数组的引用指向新数组
  5. 再回到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;}
}

删除房源

  1. 在View类编写HouseDle方法:接收用户要删除的ID,调用Del方法
  2. 在Service类编写Del方法,创建一个比当前数组小1空间的新数组,除了要删除的元素,其他都依次赋值。
  3. 最后引用变更。
//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;}

编写退出功能

  1. 直接在View类中编写一个是否确认退出的方法,调用即可
//View类
public void exit(){char key = Utils.readConfirmSelection();if (key == 'Y'){loop = false;}}

编写查找功能

  1. 在View类中编写houseFind方法:接收用户要查找的ID
  2. 在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;}

编写修改功能

  1. 在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
退出
已退出房屋系统


项目练习:房屋出租系统相关推荐

  1. java渡劫期(32)----java进阶(ssm整合项目实战----房屋出租系统(渡劫失败))

    需求分析 增 1.发布出租房信息 2.用户的注册 删 自己发布的房屋信息可删除 查 用户可以根据自己的需求对房屋进行模糊查询(也可以发布自己房屋的信息) 查询后的显示效果 查询显示详细信息(即单击选择 ...

  2. Java项目:公寓房屋出租系统(java+SSM+JSP+EasyUI+Echarts+Mysql)

    源码获取:俺的博客首页 "资源" 里下载! 项目介绍 该项目分为前后台,分为普通用户与管理员两种角色. 前台主要功能包括: 普通用户的注册.登录,房屋列表展示,租房,我的订单.用户 ...

  3. 基于jsp+servlet的房屋出租系统

    项目名称 房屋出租系统 编程语言 Java语言 主要技术 jsp+servlet 开发工具 eclipse 服务器 tomcat 7.0及以上 数据库 MySQL5.5/5.7/8.0 +C3P0连接 ...

  4. java学习笔记(9) 第9章 Java项目-房屋出租系统

    Java项目-房屋出租系统 代码打包--百度网盘链接: 9.1 房屋出租系统-需求 9.1.1 项目需求说明 9.2 房屋出租系统-界面 9.3 房屋出租系统-设计(!!) 9.4 房屋出租系统-实现 ...

  5. B站韩顺平java学习笔记(八)-- 房屋出租系统(项目)章节

    目录 一 项目需求说明 1 项目界面 二  房屋租赁程序框架图 ​三  系统实现 1  完成House类 2  显示主菜单和完成退出软件的功能 3  完成显示房屋列表的功能 4  添加房屋信息的功能 ...

  6. Java小项目——房屋出租系统

    程序入口 public class HouseRent {public static void main(String[] args) {new HouseView().Menu();} } 用户界面 ...

  7. Java/java程序设计:房屋出租系统:要求实现:新增房源,查找房屋信息,修改房屋信息,删除房屋信息,显示所有房屋列表,退出房屋管理系统;

    Java/java程序设计:房屋出租系统: 一.前言: 一.1. 框架图 二.各类包下的代码实现: 1. 主文件(运行文件HouseApp.java) 2. 房屋类文件(House.java) 3. ...

  8. 基于javaweb的公寓房屋出租系统(java+ssm+jsp+easyui+echarts+mysql)

    基于javaweb的公寓房屋出租系统(java+ssm+jsp+easyui+echarts+mysql) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/id ...

  9. 房屋出租系统(初级)

    前言 本项目是根据[零基础 快速学Java]韩顺平 零基础30天学会Java_哔哩哔哩_bilibili 课程进行的.项目的主要目的是巩固一下以前学习的 Java基础 知识. 需求 ​ 实现基于文本界 ...

最新文章

  1. HTML--HTML入门篇(我想10分钟入门HTML,可以,交给我吧)
  2. 微信又添新表情,“我裂开了”!
  3. 关于ping与tracert网络命令详解
  4. 心理学入门必读好物,《亲密关系》精华版
  5. QGraphicsObject Error: Class declarations lacks Q_OBJECT macro.
  6. matlab加性高斯白噪声方差
  7. xpwifi热点设置android,笔记本xp系统wifi热点设置教程(图文)
  8. 其实特简单,Python 做一个漂亮女孩词云跳舞的视频
  9. passw、shadow、group文件详解
  10. 定时任务与系统定时任务
  11. 关于制作赛车游戏的一些入门知识
  12. Python程序运行结束后发出提示音
  13. linux 限速命令,Linux路由器限速设置进程
  14. HTML5期末大作业:服装商城网站设计——2021凡客服装商城(1页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web前端设计与开发期末作品_期末大作业
  15. python实现q-learning算法
  16. signature=839c980ea2bb48be66699d26946b8c01,3922张仅包含车牌的图片,图片名字表示车牌号码...
  17. 铁路牵引变电所智能运维研究
  18. 大环境不好,多个行业大裁员,失业待业人员该何去何从?
  19. html中text的maxlength,详解maxlength属性在textarea里奇怪的表现
  20. ZWeily的小品文(五)C++入门教程(4)

热门文章

  1. ubuntu 20使用kubeadm安装k8s 1.26
  2. 再增加一些英语学习网址
  3. 机器学习基石(林轩田)第七章 笔记与感悟总结
  4. 【SA系列】解决方案架构师专家岗位招聘参考标准
  5. 链家网php技术笔试题,链家网 18秋招技术岗模拟测试
  6. [附源码]java毕业设计旅游景点管理系统
  7. matlab中数据导入,怎样将数据导入到matlab中
  8. 字面常量_从字面上看,“打印屏幕”按钮是否可以打印屏幕(并且可以再次打印)吗?
  9. Cocos实战案例:高手解析《捕鱼达人3》怎样玩3D VR
  10. 玩转云端 | 天翼云电脑的百变玩法