记录学习过程,有不足请指出

  • 跟韩顺平老师学该项目
    • 项目需求
    • 项目界面
      • 主菜单
      • 新增房源
      • 查找房源
      • 删除房源
      • 修改房源
      • 房源列表
      • 退出系统
    • 项目设计
    • 项目实现
      • 准备工具类Utility,提高开发效率
      • 完成House类
      • 显示主菜单和完成退出软件功能
      • 完成显示房源列表的功能
      • 完成添加房源信息的功能
      • 完成删除房源信息的功能
      • 完成退出确认功能
      • 完成根据id查找房屋信息的功能
      • 完成修改房屋信息的功能
  • 完整代码见houserent包

跟韩顺平老师学该项目

项目需求

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


项目界面

主菜单

新增房源

查找房源

删除房源

修改房源

房源列表

退出系统


项目设计

当软件比较复杂,需要分层管理


项目实现

明确功能 -> 思路分析 -> 代码实现

准备工具类Utility,提高开发效率

在学习资料中

  • 在实际开发中,公司都会提供相应的工具类和开发库,可以提高开发效率,程序员也需要能看懂别人写的代码,并能够正确的调用。

完成House类

  • 房源属性:编号 姓名 电话 地址 租金 出租情况(已出租/未出租)
/*** House的对象表示一个房源*/
public class House {private String name;private String phone;private String address;private int rent;private String state;private int id;//构造器public House(String name, String phone, String address, int rent, String state, int id) {this.name = name;this.phone = phone;this.address = address;this.rent = rent;this.state = state;this.id = id;}//重写toString,返回房源信息@Overridepublic String toString() {return id + "\t\t"+ name + "\t"+ phone + "\t\t"+ address + "\t"+ rent + "\t"+ state;}//setter && getterpublic String getName() {return name;}public void setName(String name) {this.name = name;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public int getRent() {return rent;}public void setRent(int rent) {this.rent = rent;}public String getState() {return state;}public void setState(String state) {this.state = state;}public int getId() {return id;}public void setId(int id) {this.id = id;}
}

显示主菜单和完成退出软件功能

  • 在HouseView类中,编写一个方法mainMenu显示菜单
private boolean loop = true;
private char key;
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.print("请操作(1-6):");key = Utility.readChar();//调用Utility工具类的方法输入并判断switch (key) {case '1':addHouse();break;case '2':searchHouse();break;case '3':deleteHouse();break;case '4':modifyHouse();break;case '5':listHouses();break;case '6':exit();break;default:System.out.println("输入错误,请输入(1-6)");break;}} while (loop);}

完成显示房源列表的功能

  • 在HouseService类编写方法list返回房源数组
//编写list()返回房源数组public House[] list() {return houses;//返回houses数组对象,即所有房源}
  • 在HouseView类编写方法listHouses(),接收返回的数组,遍历打印有效的房源列表
//编写listHouses()显示房源列表public void listHouses() {System.out.println("================房源列表================");System.out.println("编号\t姓名\t电话\t\t地址\t租金\t出租情况(已出租/未出租)");House[] houses = houseService.list();//新的对象名指向房源数组对象for (int i = 0; i < houses.length; i++) {if (houses[i] == null) {//如果没有房源了即为null,那么就breakbreak;}System.out.println(houses[i]);}System.out.println("========================================");}

完成添加房源信息的功能

  • 在HouseService类中编写add()方法,完成房源数组中对象的添加,数组扩容,返回一个布尔值
//添加房源,House对象的传递public boolean add(House house) {//思考,数组扩容//判断当前房源数是否等于给定的数组长度,如果等于,那么想要添加房源就需要对数组扩容if (houseNums == houses.length) {House[] newHouses = new House[houses.length + 1];//一个新的房源数组对象for (int i = 0; i < houses.length; i++) {//克隆对象,将新的数组中的对象指向原来的数组的对象newHouses[i] = houses[i];}houses = newHouses;//旧数组对象名指向新数组对象newHouses[houseNums++] = house;//新数组的最后一个元素指向添加的对象house,并且房源数加一house.setId(++idCounter);//添加的对象house的id加一并赋值return true;}//如果不扩容就把数组中下标为房源数的对象指向添加的对象house,并且房源数加一,id加一后赋值houses[houseNums++] = house;house.setId(++idCounter);return true;}
 public boolean add(House house) {//不需要扩容,仅需要判断数组是否已满if (houseNums == houses.length) {System.out.println("房源已满...");return false;}//如果没满就把数组中下标为房源数的对象指向添加的对象house,并且房源数加一,id加一后赋值houses[houseNums++] = house;house.setId(++idCounter);return true;}
  • 在HouseService类中编写addHouse()方法,用Utility工具类中的方法完成属性的输入,创建要添加的House对象,调用add()方法,根据接收返回的布尔值打印信息
//编写addHouse(),创建要添加的House对象,调用add()方法public void addHouse() {System.out.println("================添加房源================");System.out.print("姓名:");String name = Utility.readString(4);System.out.print("电话:");String phone = Utility.readString(11);System.out.print("地址:");String address = Utility.readString(16);System.out.print("月租:");int rent = Utility.readInt(6);System.out.print("状态(已出租/未出租):");String state = Utility.readString(3);House newHouse = new House(name, phone, address, rent, state, 0);//需要添加的房源if (houseService.add(newHouse)) {//newhouse作为参数传递到add方法,根据返回的布尔值判断是否添加成功System.out.println("================添加成功================");} else {System.out.println("================添加失败================");}}

完成删除房源信息的功能

  • 在HouseService类中编写delete方法
    //删除房源,删除房源的id作为参数传递public boolean delete(int delId) {int index = -1;//初始化一个下标为-1for (int i = 0; i < houseNums; i++) {if (delId == houses[i].getId()) {//当形参delId和数组中某个对象的id一样时,把这个对象的下标赋值给indexindex = i;break;//跳出循环}}if (index == -1) {//根据index的值判断是否找到这个要删除的房源,没找到index还是-1.返回一个falsereturn false;}//找到了怎么办?//自己想的方法,不太行
//        House[] newHouse = new House[houses.length];
//        for (int i = 0, j = 0; i < houses.length - 1; i++, j++) {//            if (i == index) {//                j++;
//            }
//            newHouse[i] = houses[j];
//        }
//        houses = newHouse;
//        houseNums--;//老师的方法for (int i = index; i < houseNums - 1; i++) {//从找到的元素下标开始到小于房源数减一遍历houses[i] = houses[i+1];//把要删除的房源对象后的每个对象在数组中向前移一位}houses[--houseNums] = null;//最后一个房源指向null,房源数减一return true;}
}
  • 在HouseView中编写deleteHouse() ,调用Service的delete方法,根据返回的布尔值打印信息
//编写deleteHouse
public void deleteHouse() {System.out.println("请输入你要删除的房源id(-1退出):");int delId = Utility.readInt();//Utility类的方法if (delId == -1) {//放弃删除System.out.println("===========你放弃了删除房源===========");return;}char choice = Utility.readConfirmSelection();//Utility的方法,提示是否删除y/n,判断输入的是否为y/nif (choice == 'N') {//放弃删除System.out.println("===========你放弃了删除房源===========");return;}if (houseService.delete(delId)) {//传递要删除的房源的id到delete(),根据返回的布尔值打印信息System.out.println("================删除成功================");} else {System.out.println("==============该房源不存在==============");}}

完成退出确认功能

  • 在HouseView类里编写exit方法,要求在退出时提示确定是否退出y/n,必须输入y/n,否则循环提示。
public void exit() {//这里我们使用Utility提供的方法,完成确认char c = Utility.readConfirmSelection();if (c == 'Y') {loop = false;}}

完成根据id查找房屋信息的功能

  • 在HosueService类里编写search方法,用此方法来根据id返回房源对象
//根据id查找房源的方法,返回一个house对象public House search(int sId) {//注意:这里i < houses.length 当房源数组元素全部为null,即没有房源时,//   所有元素都指向null,没有分配内存,只有其名,没有实质内容,//   取长度时会抛出NullPointerException 空指针异常,//   先排除数组全部元素为空的情况,就不会抛出异常//   方法1:换成 i < houseNums 因为没有房源时, houseNums = 0 ,不会抛出异常for (int i = 0; i < houseNums; i++) {if (sId == houses[i].getId()) {return houses[i];}}return null;//   方法2://   如果房源数组的第一个元素为null,相当于没有房源,//   就直接返回null,不会继续遍历数组for (int i = 0; i < houses.length; i++) {if (houses[i] == null) {return null;}if (sId == houses[i].getId()) {return houses[i];}}return null;}
  • 在HouseView里编写searchHouse方法
//根据id查找房源信息方法
public void searchHouse() {System.out.println("请输入你要查找的房源id:");int sId = Utility.readInt();House house = houseService.search(sId);//传递sId给search,引用一个House对象名指向返回的房源对象if (house == null) {//返回的是null,说明sId对应的房源不存在System.out.println("--------------找不到该房源--------------");return;}//不是null,就打印信息System.out.println("============你要找的房源信息============");System.out.println("编号\t姓名\t电话\t\t地址\t租金\t出租情况(已出租/未出租)");System.out.println(house);}

完成修改房屋信息的功能

  • 用到search方法根据id返回要修改信息的房源对象
  • 在HouseView里编写modifyHouse方法
public void modifyHouse() {System.out.println("==============修改房源信息==============");System.out.println("请输入你要修改的房源id(-1退出):");int mId = Utility.readInt();if (mId == -1){System.out.println("============退出修改房源信息============");return;}House house = houseService.search(mId);//传递sId给search,引用一个House对象名指向返回的房源对象if (house == null) {//对象为null,找不到System.out.println("--------------找不到该房源--------------");return;}//能找到就修改信息//这里用到Utility的方法,如果键盘输入的是回车,那么不修改信息,否则修改成输入的信息System.out.print("姓名(" + house.getName() + "):");house.setName(Utility.readString(4, house.getName()));System.out.print("电话(" + house.getPhone() + "):");house.setPhone(Utility.readString(11,house.getPhone()));System.out.print("地址(" + house.getAddress() + "):");house.setAddress(Utility.readString(10, house.getAddress()));System.out.print("月租(" + house.getRent() + "):");house.setRent(Utility.readInt(house.getRent()));System.out.print("状态(" + house.getState() + "):");house.setState(Utility.readString(3,house.getState()));System.out.println("================修改房源完成================");}

完整代码见houserent包

java小项目-房屋出租系统相关推荐

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

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

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

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

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

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

  4. Java笔记之房屋出租系统(十一)

    目录 一.项目需求说明 二.界面说明 1.主界面 2.新增房源界面 3.查找房源界面 4.删除房源界面 5.修改房源界面 6.房源列表界面 7.退出界面 三.程序框架图设计 四.工具类的说明 五.房屋 ...

  5. Java笔记——11.房屋出租系统

    11.房屋出租系统 项目需求说明 实现基于文本界面的"房屋出租系统" 能够实现对房屋信息的添加.修改和删除(用数组实现),并且能够打印房屋明细表 主菜单页面: 新增房源页面: 查找 ...

  6. java小项目租车系统_Java学习笔记三十:Java小项目之租车系统

    Java小项目之租车系统 一:项目背景介绍: 根据所学知识,编写一个控制台版的"呱呱租车系统" 功能: 1.展示所有可租车辆: 2.选择车型.租车量: 3.展示租车清单,包含:总金 ...

  7. java小项目租车系统_Java小作业--嘻嘻租车小系统

    Java作业–租车小系统 项目介绍: 根据所学知识,编写一个控制台版的"嘻嘻租车系统" 功能: 展示所有可租车辆 选择车型.租车天数 展示租车清单,包括:总金额.总载货量及其车型 ...

  8. java小项目鲜花销售系统

    项目:七彩鲜花销售系统 一.练习目标 1.体会数组的作用 2.找到分层开发的感觉 3.收获分层开发的兴趣 4.作出效果,找到自信 5.学会调试错误 6.掌握数组的增删改查方法 全部讲解和练习时间控制在 ...

  9. JAVA小项目之影院系统和员工管理系统

    员工管理系统(部门员工类) import java.util.ArrayList;public class Dept {private int dno;private String dname;pri ...

  10. java小项目——点餐系统

    package bilibili_project.Meau; import java.util.ArrayList; import java.util.List; import java.util.S ...

最新文章

  1. 传统方法的点云分割以及PCL中分割模块
  2. 致远oa系统报价_OA办公系统报价:企业内OA协同办公系统价格在多少比较合适?...
  3. 使用python和树莓派实现远程监控
  4. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1108:向量点积计算
  5. Svchost.exe进程详解及Svchost.exe病毒清除方法
  6. shell最大出现和连续出现次数_shell脚本分析 nginx日志访问次数最多及最耗时的页面(慢查询)...
  7. redis集群3种模式
  8. 下载开发证书步骤(自用备忘)
  9. 面试必问题:JS防抖与节流
  10. 《JavaScript忍者秘籍》——1.3 跨浏览器注意事项
  11. pytorch 实现RBF网络
  12. dos2unix命令详解
  13. Algorithm Analysis: common functions, asymptotic notation
  14. 金鹰dreamweaver视频教程下载地址
  15. 直播间卡人气小秘诀,快速增加直播间人气
  16. 微信订阅号简单开发指引
  17. 冯 诺依曼体系结构是现代计算机的基础,作为现代计算机基本结构的冯·诺依曼体系包括______。...
  18. 史上第一张黑洞真身照片终于问世——原来黑洞不是黑的...
  19. 华强北的AirPods耳机谁家比较靠谱?
  20. 在危机中乘风破浪,砥砺前行

热门文章

  1. Packet Tracer 思科模拟器入门教程 实验报告1
  2. 2018java程序员面试题整理
  3. idea 常用快捷键(windows键盘映射)
  4. 求大佬帮帮忙 ubuntu 安装完成vsftpd后用windows10的上安装的cutftp连接出现下面的情况 远程主机主动拒绝了对其进行的连接尝试
  5. 数据结构试卷及答案(四)
  6. 硬核桌面美化,让Windows电脑像Mac一样充满高级感!
  7. 向量对矩阵列空间的投影_向量(阵列)处理和超标量处理器
  8. Cloudera迁移scm数据库
  9. java小球反弹_java实现小球碰撞反弹(示例代码)
  10. 数据库索引类型介绍及其优缺点、区别、适用场景