房屋出租系统

35 篇文章 0 订阅

模拟一个房屋出租系统。
分了四个包去装不同功能的实现类
在这里插入图片描述

视图类(HouseView)用来存放每一个功能界面
工具类(Tool)用来存放普通的底层工具方法
功能服务(Service)用来存放每一个界面的主要功能代码
主类(domain)用来构建一个系统对象
HouseRent是测试类

1、在写这个系统的时候,我们应该要先显示系统的主界面(包含有些什么功能),只需要在视图包里面去构建就行
在这里插入图片描述
代码:

public void Menu(){//菜单显示方法
        do {
            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("\t\t\t请输入你的选择:");
            //接收用户所选择的字符,下面是功能方法已经写好直接调用实现
            key = DetailedTool.readChar();//调用了Tool工具的方法,因为在Tool里面定义为了static属性。所以可以直接进行调用
             switch (key){
            case '1':
                addHouses();
                break;
            case '2':
                findHouse();
                break;
            case '3':
                delHouses();
                break;
            case '4':
                updateHouse();
                break;
            case '5':
                listHouses();
                break;
            case '6':
                closeHouse();
        }
        }while (loop);
    }

2、新增房源功能,界面如下
在这里插入图片描述
服务功能层代码:

//添加一个add方法去添加新对象,返回bool值
    public boolean add(House newHouse){
        //得先判断还能不能添加,因为有可能满了,还未考虑扩容问题
        if(houseNum == houses.length){
            System.out.println("信息已满,不能添加。");
            return false;
        }
        //相当于将添加的信息添加到数组首位空的地址
        houses[houseNum++]=newHouse;
        //id是系统自增长的,设计一个自增长的id,系统就可以自动添加id序号了
        newHouse.setId(++idCount);
        return true;
    }

视图层代码:

//新增房源功能
    public void addHouses(){
        System.out.println("--------------添加房屋---------------");
        System.out.print("姓名:");
        String name = DetailedTool.readString();
        System.out.print("电话:");
        String phone = DetailedTool.readString();
        System.out.print("地址:");
        String address =DetailedTool.readString();
        System.out.print("月租:");
        int rent = DetailedTool.readInt();
        System.out.print("状态:");
        String state = DetailedTool.readString();
        //创建一个house对象来接收房屋信息,系统id是系统自增长来确定的
        House newHouse = new House(0,name, phone, address, rent, state);
        if (houseService.add(newHouse)){
            System.out.println("--------------添加成功---------------");
        }else {
            System.out.println("--------------添加失败---------------");
        }
    }

3、查找房屋信息功能,界面如下:
在这里插入图片描述
在这里插入图片描述

服务功能层代码:

//查找房屋信息
    public House find(int findId){
        //遍历一遍数组,去判断id和输入的findId一不一样
        for (int i = 0; i <houseNum ; i++) {
            if (findId == houses[i].getId()){
                return houses[i];
            }
        }
        return null;
    }

视图层代码:

//查找房屋信息
    public void findHouse(){
        System.out.println("--------------查找房屋---------------");
        System.out.println("请输入你要查找的id:");
        int findId =DetailedTool.readInt();
        House house = houseService.find(findId);
        if (house !=null){
            System.out.println(house);
        }else{
            System.out.println("--------------没有该房屋---------------");
        }
    }

4、删除房屋功能,界面如下:
在这里插入图片描述
在这里插入图片描述
服务功能层代码:

//删除一个房屋信息
    public boolean del(int delId){
        //应当先找到要删除的房屋信息对应的下标,下标和房屋编号不一样
        int index =-1 ;//用来记录所要删除的房屋下标
        for (int i = 0; i < houseNum; i++) {
            if (delId == houses[i].getId()){
                index = i;
            }
        }
        if (index == -1){//说明房屋列表中没有要删除的这个信息
            return false;
        }
        //如果找到则删除,删除的话可以用后面一个对象信息去覆盖当前对象信息
        for (int i = index; i <houseNum-1; i++) {
            houses[i]=houses[i+1];
            houses[i].setId(houses[i].getId()-1);//前面一个对象被删除后,后面的对象向前移动,其id肯定也会变化
        }
        // houses[--houseNum] = null; 和下面两句话的功能一样
        houses[houseNum-1] = null;//因为被删除后,后面对象依次往前移动,则原本的最后一个对象被置空
        houseNum--;//少了一个对象指定要对象数少一
        return true;

    }

视图层代码:

//删除房屋功能
    public void delHouses(){
        System.out.println("--------------删除房屋信息---------------");
        System.out.println("请选择待删除房屋编号(-1退出):");
        int delId = DetailedTool.readInt();
        if (delId == -1){
            System.out.println("--------------放弃删除房屋信息-------------");
        }
        //调用工具中的删除方法,其中已经包含循环,所以这里不需要再循环
        char choice = DetailedTool.readConfirmSelection();
        if (choice == 'Y' || choice =='y' ){
            if (houseService.del(delId)){
                System.out.println("--------------删除房屋信息成功-------------");
            }else {
                System.out.println("--------------房屋编号不正确,删除失败-------------");
            }
        }else {
            System.out.println("--------------放弃删除房屋信息-------------");
        }
    }

5、修改房屋信息功能,界面如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
服务功能层代码:

因为在查找房屋信息的时候就已经有功能去判断房屋是否存在了,所以直接调用findHouse()方法然后再视图层去修改房屋信息就行,同样也可以自己再去写一个修改方法。

视图层代码:

//修改房屋信息
    public void updateHouse(){
        System.out.println("--------------修改房屋---------------");
        System.out.print("请选择要修改的房屋编号(-1退出):");
        int updateId =DetailedTool.readInt();
        if (updateId == -1){
            System.out.println("--------------放弃修改房屋-------------");
            return;
        }
        House house = houseService.find(updateId);
        if (house != null){
            System.out.print("姓名("+house.getName()+"):");
            house.setName(DetailedTool.readString());

            System.out.print("电话("+house.getPhone()+"):");
            house.setPhone(DetailedTool.readString());

            System.out.print("地址("+house.getAddress()+"):");
            house.setAddress(DetailedTool.readString());

            System.out.print("租金("+house.getRent()+"):");
            house.setRent(DetailedTool.readInt());

            System.out.print("状态("+house.getState()+"):");
            house.setState(DetailedTool.readString());

            System.out.println(house);
        } else {
            System.out.println("------------房屋不存在,修改失败-----------");
        }
    }

6、房屋列表查看功能,界面如下:
在这里插入图片描述
这里不需要哟特俗的功能所以直接视图层可以搞定
视图层代码:

//显示信息列表
    public void listHouses(){
        System.out.println("--------------房屋列表---------------");
        System.out.println("编号\t\t房主\t\t电话\t\t地址\t\t月租\t\t状态(为出租/已出租)");
        House[] houses = houseService.list();//调用方法获取房屋信息
        for (int i = 0; i < houses.length; i++) {
            if (houses[i] == null){
                break;
            }
            System.out.println(houses[i]);//输出房屋信息。因为前面有toString方法,所以直接可以输出
        }
        System.out.println("--------------房屋信息显示完毕--------------");
    }

7、退出功能,界面如下在这里插入图片描述

在这里插入图片描述


视图层代码:

//退出系统功能
    public void closeHouse(){
        char c = DetailedTool.readConfirmSelection();
                if (c == 'Y' || c == 'y'){
                    loop = false;
                }else {
                    System.out.println("------------放弃退出系统-----------");
                }
    }

综合代码:

所有基础工具(Tool)有:

package com.xiaowang.HouseRent.Tool;

import java.util.Scanner;

public class DetailedTool {
    private static Scanner  scanner = new Scanner(System.in);
    public static char readChar(){
        char number = scanner.next().charAt(0);
        return number;
    }
    public static int readInt(){
        int number = scanner.nextInt();
        return number;
    }
    public static String readString(){
        String name = scanner.next();
        return name;
    }
        //判断工具
    public static char readConfirmSelection(){
        System.out.println("请输入你的选择(Y/N): 请小心选择");
        char c;
        for (;;){//无限循环
            //将接收的字符转换成大写字母
            String str = readKeyBoard(1,false).toUpperCase();//使用toUpperCase()字符转换的时候要记得接收类型是String
            c= str.charAt(0);
            if (c =='Y' || c=='N'){
                break;
            }else {
                System.out.println("选择错误,请重新输入:");
            }
        }
        return c;
    }


    private static String  readKeyBoard(int i, boolean b) {
            String line = "";
            while (scanner.hasNextLine()) {
                line = scanner.nextLine();
                if(line.length() == 0) {
                    if(b)
                        return line;
                    else continue; }
                if (line.length() < 1 || line.length() > i) {
                    System.out.print("输入长度(不大于" + i + ")错误,请重新输入:");
                    continue;
                } break;
            } return line;
        }
        //判断输入的字符串是不是空串
        public static String readString(int limit,String defaultValue){
        String str = readKeyBoard(limit,true);
        return str.equals("") ? defaultValue : str;
            }

}

视图(HouseView)
在这里插入图片描述
所有代码:

package com.xiaowang.HouseRent.HouseView;

import com.xiaowang.HouseRent.Service.HouseService;
import com.xiaowang.HouseRent.Tool.DetailedTool;
import com.xiaowang.HouseRent.domain.House;

import javax.tools.Tool;
import java.util.IllegalFormatCodePointException;
import java.util.Scanner;


//显示系统主界面菜单
public class HouseMenu {
    boolean loop = true;
    private char key = ' ';
    private HouseService houseService = new HouseService(10);//定义一个对象数组并初始化大小

    //修改房屋信息
    public void updateHouse(){
        System.out.println("--------------修改房屋---------------");
        System.out.print("请选择要修改的房屋编号(-1退出):");
        int updateId =DetailedTool.readInt();
        if (updateId == -1){
            System.out.println("--------------放弃修改房屋-------------");
            return;
        }
        House house = houseService.find(updateId);
        if (house != null){
            System.out.print("姓名("+house.getName()+"):");
            house.setName(DetailedTool.readString());

            System.out.print("电话("+house.getPhone()+"):");
            house.setPhone(DetailedTool.readString());

            System.out.print("地址("+house.getAddress()+"):");
            house.setAddress(DetailedTool.readString());

            System.out.print("租金("+house.getRent()+"):");
            house.setRent(DetailedTool.readInt());

            System.out.print("状态("+house.getState()+"):");
            house.setState(DetailedTool.readString());

            System.out.println(house);
        } else {
            System.out.println("------------房屋不存在,修改失败-----------");
        }
    }

   //退出系统功能
    public void closeHouse(){
        char c = DetailedTool.readConfirmSelection();
                if (c == 'Y' || c == 'y'){
                    loop = false;
                }else {
                    System.out.println("------------放弃退出系统-----------");
                }
    }
    //查找房屋信息
    public void findHouse(){
        System.out.println("--------------查找房屋---------------");
        System.out.println("请输入你要查找的id:");
        int findId =DetailedTool.readInt();
        House house = houseService.find(findId);
        if (house !=null){
            System.out.println(house);
        }else{
            System.out.println("--------------没有该房屋---------------");
        }
    }

    //删除房屋功能
    public void delHouses(){
        System.out.println("--------------删除房屋信息---------------");
        System.out.println("请选择待删除房屋编号(-1退出):");
        int delId = DetailedTool.readInt();
        if (delId == -1){
            System.out.println("--------------放弃删除房屋信息-------------");
        }
        //调用工具中的删除方法,其中已经包含循环,所以这里不需要再循环
        char choice = DetailedTool.readConfirmSelection();
        if (choice == 'Y' || choice =='y' ){
            if (houseService.del(delId)){
                System.out.println("--------------删除房屋信息成功-------------");
            }else {
                System.out.println("--------------房屋编号不正确,删除失败-------------");
            }
        }else {
            System.out.println("--------------放弃删除房屋信息-------------");
        }
    }

    //新增房源功能
    public void addHouses(){
        System.out.println("--------------添加房屋---------------");
        System.out.print("姓名:");
        String name = DetailedTool.readString();
        System.out.print("电话:");
        String phone = DetailedTool.readString();
        System.out.print("地址:");
        String address =DetailedTool.readString();
        System.out.print("月租:");
        int rent = DetailedTool.readInt();
        System.out.print("状态:");
        String state = DetailedTool.readString();
        //创建一个house对象来接收房屋信息,系统id是系统自增长来确定的
        House newHouse = new House(0,name, phone, address, rent, state);
        if (houseService.add(newHouse)){
            System.out.println("--------------添加成功---------------");
        }else {
            System.out.println("--------------添加失败---------------");
        }
    }

    //显示信息列表
    public void listHouses(){
        System.out.println("--------------房屋列表---------------");
        System.out.println("编号\t\t房主\t\t电话\t\t地址\t\t月租\t\t状态(为出租/已出租)");
        House[] houses = houseService.list();//调用方法获取房屋信息
        for (int i = 0; i < houses.length; i++) {
            if (houses[i] == null){
                break;
            }
            System.out.println(houses[i]);//输出房屋信息。因为前面有toString方法,所以直接可以输出
        }
        System.out.println("--------------房屋信息显示完毕--------------");
    }

    public void Menu(){//菜单显示方法
        do {
            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("\t\t\t请输入你的选择:");
            //接收用户所选择的字符
            key = DetailedTool.readChar();//调用了Tool工具的方法,因为在Tool里面定义为了static属性。所以可以直接进行调用
             switch (key){
            case '1':
                addHouses();
                break;
            case '2':
                findHouse();
                break;
            case '3':
                delHouses();
                break;
            case '4':
                updateHouse();
                break;
            case '5':
                listHouses();
                break;
            case '6':
                closeHouse();
        }
        }while (loop);
    }
}

服务功能(Service):
在这里插入图片描述
所有代码:

package com.xiaowang.HouseRent.Service;

import com.xiaowang.HouseRent.domain.House;


/*
定义House[],保存House对象
1.响应HouseView的调用
2.完成对房屋信息的各种操作(crud增删改查)
* * */
public class HouseService {
    private House[] houses;//用来存放house对象
    private int houseNum = 1;//用来统计有多少个房屋信息,以防满了装不下,因为有一个初始化的对象所以值为1
    private int idCount = 1;//id的值从1开始,后面使用++去自增,因为有默认的对象所以初始值为1
    public HouseService(int size){//用一个构造器来指定数组的大小
        houses = new House[size];
        //为了配合测试。初始化一个House对象
        houses[0]=new House(1,"wang","1918","本庄",5200,"未出租");
    }

    //查找房屋信息
    public House find(int findId){
        //遍历一遍数组,去判断id和输入的findId一不一样
        for (int i = 0; i <houseNum ; i++) {
            if (findId == houses[i].getId()){
                return houses[i];
            }
        }
        return null;
    }
    //删除一个房屋信息
    public boolean del(int delId){
        //应当先找到要删除的房屋信息对应的下标,下标和房屋编号不一样
        int index =-1 ;//用来记录所要删除的房屋下标
        for (int i = 0; i < houseNum; i++) {
            if (delId == houses[i].getId()){
                index = i;
            }
        }
        if (index == -1){//说明房屋列表中没有要删除的这个信息
            return false;
        }
        //如果找到则删除,删除的话可以用后面一个对象信息去覆盖当前对象信息
        for (int i = index; i <houseNum-1; i++) {
            houses[i]=houses[i+1];
            houses[i].setId(houses[i].getId()-1);//前面一个对象被删除后,后面的对象向前移动,其id肯定也会变化
        }
        // houses[--houseNum] = null; 和下面两句话的功能一样
        houses[houseNum-1] = null;//因为被删除后,后面对象依次往前移动,则原本的最后一个对象被置空
        houseNum--;//少了一个对象指定要对象数少一
        return true;

    }

    //添加一个add方法去添加新对象,返回bool值
    public boolean add(House newHouse){
        //得先判断还能不能添加,因为有可能满了,还未考虑扩容问题
        if(houseNum == houses.length){
            System.out.println("信息已满,不能添加。");
            return false;
        }
        //相当于将添加的信息添加到数组首位空的地址
        houses[houseNum++]=newHouse;
        //id是系统自增长的,设计一个自增长的id,系统就可以自动添加id序号了
        newHouse.setId(++idCount);
        return true;
    }

    //定义一个list方法去返回house信息
    public House[] list() {
        return houses;
    }
}

主功能(domain)主要是创建对象,里面就是简单的属性、构造器、getter、setter方法等,就不截图了,挺多的
直接上代码:’

package com.xiaowang.HouseRent.domain;

//编号 房主  电话 地址 月租 状态(为出租/已出租)
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;
    }

    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;
    }
    //输出房屋的基本信息,输出格式:
    // 编号 房主  电话 地址 月租 状态(为出租/已出租)
    @Override
    public String toString() {
        return  id +
                "\t\t" + name +
                "\t" + phone +
                "\t" + address +
                "\t\t" + rent +
                "\t" + state +
                '}';
    }
}

最后就是测试类的主方法了
代码:

package com.xiaowang.HouseRent;

import com.xiaowang.HouseRent.HouseView.HouseMenu;
import com.xiaowang.HouseRent.domain.House;

public class HouseRentApp {
    public static void main(String[] args) {
        new HouseMenu().Menu();//匿名创建一个房屋对象
        System.out.println("你已退出房屋出租系统!");

    }
}

ending~~~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值