Skip to content

S01-11 JavaSE-项目:房屋出租系统

[TOC]

房屋出租系统-需求

项目需求说明

实现基于文本界面的《房屋出租软件》,功能:

  • 房屋信息的添加、修改、删除(数组实现)
  • 打印房屋明细表
  • 查找房屋

房屋出租系统-界面

主菜单

-----房屋出租系统--
1 新增房源
2 查找房屋
3 删除房屋
4 修改房屋信息
5 房屋列表
6 退 出
请选择(1-6):

新增房源

-添加房屋-
姓名:king
电话:112
地址:朝阳区
月租:2000
状态(未出租/已出租):未出租
---添加完成---

查找房源

------查找房屋----
请输入你要查找id:1
1 jack 118 海淀区 3000 未出租

删除房源

----删除房屋-------
请选择待删除房屋编号(-1退出):1
确认是否删除(Y/N):y
-----删除完成-----

修改房源

------修改房屋------
请选择待修改房屋编号(-1退出):1
姓名(jack): mary
电话(118):116
地址(海淀区):昌平区
租金(3000):5000
状态(未出租):已出租
--修改完成--

房屋列表

-----房屋列表----
编号 房主 电话 地址 月租 状态(未出租/已出租)
2 none 116 昌平区 5000 已出租
3 mary 111 海淀区 9000 未出租
----房屋列表完成-----------

退出系统

请选择(1-6):6
确认是否退出(Y/N):y
你退出了程序~~

房屋出租系统-设计(分层模式)

程序框架图

HouseRentApp.java(程序入口)

HouseView.java(界面层):显示菜单、接收用户输入、调用业务层

HouseService.java(业务层):处理增删改查逻辑

House.java(数据层):封装房屋信息

Utility.java(工具类):获取用户输入

各模块职责

  1. HouseRentApp.java:程序入口,创建 HouseView 对象并调用主菜单方法
  2. HouseView.java
    • 显示主菜单(mainMenu()
    • 接收用户输入
    • 调用 HouseService 完成功能(addHouse()delHouse()findHouse()updateHouse()listHouses()
  3. HouseService.java
    • 定义 House 数组存储房屋对象
    • 实现增删改查方法:
      • add(House house):添加房屋
      • list():返回所有房屋信息
      • del(int id):删除房屋
      • findById(int id):根据ID查找房屋
      • update(House house):修改房屋信息
  4. House.java
    • 属性:编号、房主、电话、地址、月租、状态
    • 构造器、getter/setter、toString()
  5. Utility.java:提供输入工具方法(获取字符串、整数、浮点数等)

房屋出租系统-实现

准备工具类 Utility

提供获取用户输入的方法,提高开发效率(公司常用工具类模式)。

实现 House 类

封装房屋信息:

java
public class House {
    private int id; // 编号(自增长)
    private String name; // 房主
    private String phone; // 电话
    private String address; // 地址
    private double rent; // 月租
    private String status; // 状态(未出租/已出租)

    // 构造器、getter/setter、toString()
}

实现主菜单和退出功能(HouseView.java)

java
public class HouseView {
    private HouseService houseService = new HouseService(10); // 初始化数组容量10
    private boolean loop = true; // 控制菜单循环
    private char key = ' '; // 接收用户输入

    // 主菜单
    public void mainMenu() {
        while (loop) {
            System.out.println("-----房屋出租系统--");
            System.out.println("1 新增房源");
            System.out.println("2 查找房屋");
            System.out.println("3 删除房屋");
            System.out.println("4 修改房屋信息");
            System.out.println("5 房屋列表");
            System.out.println("6 退 出");
            System.out.print("请选择(1-6):");
            key = Utility.readChar(); // 工具类方法
            switch (key) {
                case '1':
                    addHouse();
                    break;
                case '2':
                    findHouse();
                    break;
                case '3':
                    delHouse();
                    break;
                case '4':
                    updateHouse();
                    break;
                case '5':
                    listHouses();
                    break;
                case '6':
                    exit();
                    break;
                default:
                    System.out.println("选择错误,请重新输入!");
            }
        }
    }

    // 退出功能
    private void exit() {
        char c = Utility.readConfirmSelection(); // 确认退出(y/n)
        if (c == 'Y') {
            loop = false;
            System.out.println("你退出了程序~~");
        }
    }

    // 其他方法(addHouse、findHouse等)后续实现
}

实现房屋列表功能

java
// HouseView.java
private void listHouses() {
    System.out.println("-----房屋列表----");
    System.out.println("编号 房主 电话 地址 月租 状态(未出租/已出租)");
    House[] houses = houseService.list(); // 调用业务层获取所有房屋
    for (House house : houses) {
        if (house != null) {
            System.out.println(house); // 依赖 House 的 toString()
        }
    }
    System.out.println("----房屋列表完成-----------");
}

// HouseService.java
public House[] list() {
    return houses; // 返回房屋数组
}

实现添加房屋功能

java
// HouseView.java
private void addHouse() {
    System.out.println("-添加房屋-");
    System.out.print("姓名:");
    String name = Utility.readString(8);
    System.out.print("电话:");
    String phone = Utility.readString(12);
    System.out.print("地址:");
    String address = Utility.readString(16);
    System.out.print("月租:");
    double rent = Utility.readDouble();
    System.out.print("状态(未出租/已出租):");
    String status = Utility.readString(4);
    // 创建 House 对象(id 自增长,由业务层处理)
    House house = new House(0, name, phone, address, rent, status);
    if (houseService.add(house)) {
        System.out.println("---添加完成---");
    } else {
        System.out.println("---添加失败---");
    }
}

// HouseService.java
private int houseNum = 0; // 已添加的房屋数量
private House[] houses;

public HouseService(int size) {
    houses = new House[size]; // 初始化数组
}

public boolean add(House house) {
    if (houseNum >= houses.length) {
        System.out.println("数组已满,无法添加!");
        return false;
    }
    // 自增id
    house.setId(houseNum + 1);
    houses[houseNum++] = house;
    return true;
}

实现删除房屋功能

java
// HouseView.java
private void delHouse() {
    System.out.println("----删除房屋-------");
    System.out.print("请选择待删除房屋编号(-1退出):");
    int id = Utility.readInt();
    if (id == -1) {
        System.out.println("取消删除");
        return;
    }
    char c = Utility.readConfirmSelection();
    if (c == 'Y') {
        if (houseService.del(id)) {
            System.out.println("-----删除完成-----");
        } else {
            System.out.println("删除失败,编号不存在!");
        }
    } else {
        System.out.println("取消删除");
    }
}

// HouseService.java
public boolean del(int id) {
    // 查找要删除的房屋索引
    int index = -1;
    for (int i = 0; i < houseNum; i++) {
        if (houses[i].getId() == id) {
            index = i;
            break;
        }
    }
    if (index == -1) {
        return false;
    }
    // 数组移位(删除逻辑)
    for (int i = index; i < houseNum - 1; i++) {
        houses[i] = houses[i + 1];
    }
    houses[--houseNum] = null; // 最后一个元素置空
    return true;
}

课堂作业:完善退出确认功能

已整合到 9.4.3 的 exit() 方法中。

课后作业:实现查找房屋功能

根据ID查找房屋并显示信息。

课后作业:实现修改房屋功能

根据ID修改房屋的姓名、电话、地址、月租、状态。