项目练习:房屋出租系统

房屋出租系统

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

分层设计

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

程序入口
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.....
    @Override
    public 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();//将创建好的数组给house
        for (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
退出
已退出房屋系统


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
系统集成项目管理练习app是一种用于帮助用户学习和实践系统集成项目管理技能的应用程序。它提供了一系列的练习和模拟场景,让用户可以在虚拟环境中进行项目管理的实践。 这种练习app通常包含以下功能和特点: 1. 项目模拟:用户可以在虚拟环境中创建和管理项目,包括项目计划、资源分配、进度跟踪等。 2. 风险管理:用户可以学习和实践如何识别、评估和应对项目风险。 3. 质量管理:用户可以学习和实践如何制定和执行项目质量管理计划,包括质量控制和质量保证。 4. 沟通与协作:用户可以学习和实践如何与团队成员、利益相关者进行有效的沟通和协作。 5. 进度管理:用户可以学习和实践如何制定和跟踪项目进度,包括使用甘特图、里程碑等工具。 6. 成本管理:用户可以学习和实践如何制定和控制项目成本,包括预算编制、成本估算、成本控制等。 7. 资源管理:用户可以学习和实践如何有效地管理项目资源,包括人力资源、物资资源等。 8. 报告与分析:用户可以学习和实践如何生成项目报告,并进行数据分析和决策支持。 通过使用系统集成项目管理练习app,用户可以在实践中学习项目管理的各个方面,提升自己的技能和经验。同时,这种app还可以提供反馈和评估功能,帮助用户了解自己的优势和改进的方向。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值