Java 使用面向对象实现房屋租赁

245 阅读5分钟

项目需求:

  1. 我们需要有一个这样的主菜单,供用户来选择: image.png

  2. 需要实现的功能有:新增房屋、查找房屋、删除房屋、修改房屋信息、显示所有房屋、退出系统:

代码实现

  1. 首先我们创建一个HouseRentAppde的项目,然后再 src 目录下分别创建 com.hspedu.houserent.domaincom.hspedu.houserent.servicecom.hspedu.houserent.uitlscom.hspedu.houserent.view和一个 项目主文件 com.hspedu.houserent.HouseRentApp
  2. 我们再 domain包下创建 House类,编写如下程序:
package com.hspedu.houserent.domain;

/*
 * House的对象表示一个房屋信息
 * */
public class House {
  // 编号 房主 电话 地址 月租 状态(未出租/已出租)
  private int id;
  private String name;
  private String phone;
  private String address;
  private int rent;
  private String state;

  // 构造器

  public House(int id, String name, String phone, String address, int rent, String state) {
    this.id = id;
    this.name = name;
    this.phone = phone;
    this.address = address;
    this.rent = rent;
    this.state = state;
  }

  // get和set方法

  public int getId() {
    return id;
  }

  public void setId(int id) {
    this.id = id;
  }

  public 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;
  }

  // 方便输出对象信息,实现toString

  @Override
  public String toString() {
    return id +
            "\t\t" + name +
            "\t\t" + phone +
            "\t\t" + address +
            "\t\t" + rent +
            "\t\t" + state;
  }
}

3.我们再viewHouseView类,编写如下程序:

package com.hspedu.houserent.view;

import com.hspedu.houserent.domain.House;
import com.hspedu.houserent.service.HouseService;
import com.hspedu.houserent.utils.Utility;

/*
 * 1. 显示 界面
 * 2. 接收用户输入
 * 3. 调用HouseService完成对房屋信息的各种操作
 * */
public class HouseView {

  private boolean loop = true; // 控制显示主菜单
  private char key = ' '; // 接收用户输入的指令
  private HouseService houseService = new HouseService(10);

  // 显示主菜单
  public void mainMenu() {
    do {
      System.out.println("================ 房屋出租系统菜单 ================");
      System.out.println("\t\t\t\t 1 新 增 房 屋 \t\t\t\t");
      System.out.println("\t\t\t\t 2 查 找 房 屋 \t\t\t\t");
      System.out.println("\t\t\t\t 3 删 除 房 屋 信 息 \t\t\t\t");
      System.out.println("\t\t\t\t 4 修 改 房 屋 信 息 \t\t\t\t");
      System.out.println("\t\t\t\t 5 房 屋 列 表 \t\t\t\t");
      System.out.println("\t\t\t\t 6 退      出 \t\t\t\t");
      System.out.println("请输入您的选择(1-6):");
      key = Utility.readChar();

      switch (key) {
        case '1':
          addHouse();
          break;
        case '2':
          searchHouse();
          break;
        case '3':
          delHouse();
          break;
        case '4':
          updateHouse();
          break;
        case '5':
          listHouse();
          break;
        case '6':
          exit();
          break;

      }

    } while (loop);
  }

  // 编写listHouse方法,显示房屋列表
  public void listHouse() {
    System.out.println("================ 房屋    列表 ================");
    System.out.println("编号\t\t房主\t\t\t电话\t\t地址\t\t\t月租\t\t\t状态");
    House[] list = houseService.list();
    for (int i = 0; i < list.length; i++) {
      if(list[i] == null) break;  // 如果为null就不显示
      System.out.println(list[i]);
    }
    System.out.println("================ 房屋列表显示完毕 ================");

  }

  // 编写addHouse方法,新增房屋
  public void addHouse() {
    System.out.println("================ 添加     房屋 ================");
    System.out.println("姓名:");
    String name = Utility.readString(8);
    System.out.println("电话:");
    String phone = Utility.readString(11);
    System.out.println("地址:");
    String address = Utility.readString(16);
    System.out.println("月租:");
    int rent = Utility.readInt();
    System.out.println("状态:");
    String state = Utility.readString(3);
    // 创建一个house对象,注意id是系统自动分配的
    House newHouse = new House(0, name, phone, address, rent, state);
    if(houseService.add(newHouse)){
      System.out.println("房屋添加成功");
    } else {
      System.out.println("房屋添加失败");
    }
  }

  // 编写delHouse方法,删除房屋
  public void delHouse() {
    System.out.println("================ 删除     房屋 ================");
    System.out.println("请输入要删除的房屋id(-1表示退出):");
    int delId = Utility.readInt();

    if (delId == -1) {
      System.out.println("放弃了删除");
      return;
    }
    char choice = Utility.readConfirmSelection(); //该方法本身就有循环判断的逻辑
    if(choice == 'Y'){
      if(houseService.delete(delId)){
        System.out.println("================ 成功  删除 房屋 ================");
      } else {
        System.out.println("================ 房屋编号不存在,删除失败 ================");
      }
    } else {
      System.out.println("================ 放弃  删除 房屋 ================");
    }
  }

  // 编写searchHouse方法,查找房屋
  public void searchHouse() {
    System.out.println("================ 查找     房屋 ================");
    System.out.println("请输入要查找的房屋id(-1表示退出):");
    int searchId = Utility.readInt();

    if (searchId == -1) {
      System.out.println("放弃了查询");
      return;
    }
    if(houseService.search(searchId) == null) {
      System.out.println("没有找到该编号对应的房屋,请确认您的编号");
      return;
    }
    System.out.println("================ 查询  房屋  列表 ================");
    System.out.println("编号\t\t房主\t\t\t电话\t\t地址\t\t\t月租\t\t\t状态");
    System.out.println(houseService.search(searchId));

  }

  // 编写updateHouse,修改房屋信息
  public void updateHouse(){
    System.out.println("================ 修改  房屋  信息 ================");
    System.out.println("================ 请选择要修改房屋编号(-1表示退出) ================");
    int updateId = Utility.readInt();
    if(updateId == -1){
      System.out.println("================ 你放弃修改房屋信息 ================");
      return;
    }

    // 根据输入得到updateId,查找对象
    House house = houseService.search(updateId);
    if(house == null) {
      System.out.println("================ 修改的房屋信息不存在 ================");
    }
    //编号 房主 电话 地址 月租 状态
    System.out.print("姓名(" + house.getName() + "):");
    String name = Utility.readString(8, "");
    if(name != "") house.setName(name);
    System.out.print("电话(" + house.getPhone() + "):");
    String phone = Utility.readString(11, "");
    if(phone != "") house.setPhone(phone);
    System.out.print("地址(" + house.getAddress() + "):");
    String address = Utility.readString(16, "");
    if(address != "") house.setAddress(address);
    System.out.print("月租(" + house.getRent() + "):");
    int rent = Utility.readInt(-1);
    if(rent != -1) house.setRent(rent);
    System.out.print("状态(" + house.getState() + "):");
    String state = Utility.readString(3, "");
    if(state != "") house.setState(state);
    System.out.println("修改成功");
  }

  // 完成退出确认
  public void exit() {
    char c = Utility.readConfirmSelection();
    if(c == 'Y') loop = false;
  }


}

4.在service包下创建HouseService类,编写如下代码:

package com.hspedu.houserent.service;

import com.hspedu.houserent.domain.House;

/*
* HouseService类
* 定义House[]。保存House对象
* 响应HouseView的调用
* 完成对房屋信息的各种操作
* */
public class HouseService {
  private House[] houses; // 保存House对象
  private int houseNums  = 1; // 记录当前有多少个房屋信息
  private int idCounter = 1;  // 记录当前的is增长到那个值
  // 构造器
  public HouseService(int size) {
    // new house
    houses = new House[size]; // 当创建HouseService对象,指定数组大小
    // 初始化一个house对象
    houses[0] = new House(1, "jack", "112", "海淀区", 2000, "未出租");
  }

  // list方法,返回房屋信息
  public House[] list() {
    return houses;
  }

  // add方法,添加新对象,返回Boolean
  public boolean add(House newHouse) {
    // 判断 是否可以继续添加(不考虑数组扩容的问题)
    if(houseNums == houses.length) {
      System.out.println("数组已满,不能再添加了....");
      return false;
    }
    // 添加房屋信息
    houses[houseNums++] = newHouse;
    // 设计一个id自增长方法
    newHouse.setId(++idCounter);
    return true;
  }

  // delete方法,根据id删除房屋,返回Boolean
  public boolean delete(int delId) {
    // 找到要删除的房屋对应的下标
    int delIndex = -1;
    for (int i = 0; i < houseNums; i++) {
      if(delId == houses[i].getId()){
        delIndex = i;
      }
    }

    if(delIndex == -1) return false;  // 说明delId再数组中不存在

    // 找到了
    for (int i = delIndex; i < houseNums - 1; i++) {
      houses[i] = houses[i+1];
    }
    houses[--houseNums] = null; // 把当前存在房屋最后一个置空
    return true;
  }

  // search方法,根据id查找房屋,返回房屋信息
  public House search(int searchId) {
    for (int i = 0; i < houseNums; i++) {
      if(searchId == houses[i].getId()){
        return houses[i];
      }
    }
    return null;
  }


}
  1. 最后我们在HouseRentApp主入口里面,编写如下代码:
package com.hspedu.houserent;

import com.hspedu.houserent.view.HouseView;

public class HouseRentApp {
  public static void main(String[] args) {
    // 创建HouseView对象,并且显示主菜单,是整个程序的入口
    new HouseView().mainMenu();

    System.out.println("您退出了房屋租赁系统");

  }
}

运行效果

  • 显示主菜单:

    image.png

  • 新增房屋:

    image.png

  • 查找房屋:

    image.png

  • 删除房屋:

    image.png

  • 修改房屋信息:

    image.png

  • 查看房屋列表:

    image.png

  • 退出系统:

    image.png