重学java----面向对象编程案例(房屋出租系统)

要实现的功能如下

来源于 跟着韩老师学java,https://www.bilibili.com/video/BV1fh411y7R8

  1. 实现基于文本界面的《房屋出租软件》。
  2. 能够实现对房屋信息的添加、修改和删除(用数组实现),并能够打印房屋明细表
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

系统设计

  1. 在系统设计阶段,需要从用户的角度去从上往下的分析
  2. 需要对复杂的项目进行分层管理
    在这里插入图片描述

系统实现

  1. 先编写数据层,设计房屋类,用于保存房屋信息
package com.zut.houseRent.domain;

/**
 * house的对象表示一个房屋信息
 *
 * @author wzl
 * @create 2021--09-07 17:33
 */
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;
    }
    //为了方便输入对象信息,使用tostring

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

    }
}
  1. 编写业务层,实现增删改查房屋信息的功能
package com.zut.houseRent.service;

import com.zut.houseRent.domain.House;

/**
 * 1.定义house【】保存house对象
 * 2.完成对house的各种操作,crud
 *
 * @author wzl
 * @create 2021--09-07 17:53
 */
public class HouseService {
    private House[] houses; //保存house对象
    private int houseNums = 1; //记录当前有多少个房屋信息
    private int idCounter=1; //记录id增长的值

    //构造器
    public HouseService(int sizes) {
        houses = new House[sizes];
        //为了配合测试,初始化一个house对象
        houses[0] = new House(1, "jack", "112", "北京市", 20000, "未出租");
    }

    //find方法
    public House findHouseById(int findId){
        //遍历数组
        for (int i = 0; i < houseNums; i++) {
            if(findId==houses[i].getId()){
                return houses[i];
            }
        }
        return null;
    }
    //del方法,删除房屋信息
    public boolean del(int deIId){
        //先找到删除房屋信息对应的下标
        int index=-1;
        for (int i = 0; i < houseNums; i++) {
            if(deIId==houses[i].getId()){//要删除的房屋id,是数组下表为i的元素
                index=i; //就是用index记录i
            }
        }
        if (index == -1) {//说明delid在数组中不存在
            return false;
        }
        //如果找到、
        for (int i = index; i < houseNums-1; i++) {
           houses[i] = houses[i+1];
        }
        //将最后一个房屋信息置null
        houses[--houseNums]=null;
        return true;
    }

    //list 方法,返回房屋列表

    public House[] list() {
        return houses;
    }

    //add方法
    public boolean add(House newHouse) {
        //判读是否还可以继续添加(暂时不考虑数组扩容问题)  需要当前房屋有多少个
        if (houseNums == houses.length) {
            System.out.println("房屋已满,不能添加。。。");
            return false;
        }
        //把房屋加入数组之后
        houses[houseNums++] = newHouse;
        //程序员设计id自增长
        newHouse.setId(++idCounter);
        return true;
    }
}
  1. 编写界面层,接受用户的输入,调用业务层不同的功能
package com.zut.houseRent.view;

import com.zut.houseRent.domain.House;
import com.zut.houseRent.service.HouseService;
import com.zut.houseRent.utils.Utility;

/**
 * //1.显示主菜单
 * //2.接受用户的输入
 * //3.调用相应的功能
 *
 * @author wzl
 * @create 2021--09-07 17:42
 */
public class HouseView {
    private boolean loop = true; //控制显示菜单
    private char key = ' '; //接受用户的输入
    private HouseService houseService = new HouseService(10); //设置数组大小为10

    //根据id修改房屋信息
    public void update(){
        System.out.println("===============修改房屋信息=================");
        System.out.println("请选择待修改房屋编号(-1表示退出)");
        int updateId = Utility.readInt();
        if (updateId == -1) {
            System.out.println("===========放弃修改房屋信息=============");
            return;
        }else {
            //根据updateid查找对象
            House house = houseService.findHouseById(updateId);
            if (house == null) {
                System.out.println("==============修改房屋信息编号不存在================");
                return;
            }
            System.out.print("姓名("+house.getName()+"):");
            String name = Utility.readString(8, ""); //这里如果用户直接回车表示不修改该信息,默认为""
            if(!"".equals(name)){ //如果输入的不是空,则修改姓名
                house.setName(name);
            }
            System.out.print("电话("+house.getPhone()+"):");
            String phone = Utility.readString(12, "");
            if (!"".equals(phone)) {
                house.setPhone(phone);
            }
            System.out.print("地址("+house.getAddress()+"):");
            String address = Utility.readString(18,"");
            if (!"".equals(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 (!"".equals(state)) {
                house.setState(state);
            }
            System.out.println("============修改房屋信息成功===============");
        }
    }
    //通过id查询房屋信息
    public void findHouseById(){
        System.out.println("==========查找房屋信息=========");
        System.out.println("请输入要查找的id");
        int findId = Utility.readInt();
        //调用方法
        House house = houseService.findHouseById(findId);
        if (house != null) {
            System.out.println(house);
        }else {
            System.out.println("============查找房屋的id不存在==============");
        }
    }
    //完成退出确认
    public void exit() {
        char confirmSelection = Utility.readConfirmSelection();
        if (confirmSelection == 'Y') {
            loop = false;
        }
    }

    //删除房屋delHouse()界面
    public void delHouse() {
        System.out.println("============删除房屋信息============");
        System.out.println("请输入待删除房屋的编号(-1退出):");
        int delId = Utility.readInt();
        if (delId == -1) {
            System.out.println("============放弃删除房屋信息============");
            return;
        }
        char choice = Utility.readConfirmSelection();
        if (choice == 'Y') {
            if (houseService.del(delId)) {
                System.out.println("============删除房屋信息成功=============");
            } else {
                System.out.println("============房屋编号不存在,删除房屋信息失败=============");
            }
        } else {
            System.out.println("=============放弃删除房屋信息==============");
        }
    }

    //添加房屋addHouse()界面
    public 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("月租:");
        int rent = Utility.readInt();
        System.out.print("状态(未出租/已出租)");
        String state = Utility.readString(3);
        //创建house对象,id是系统分配,自动增长
        House newHouse = new House(0, name, phone, address, rent, state);
        if (houseService.add(newHouse)) {
            System.out.println("==============添加房屋成功============");
        }
        System.out.println("============添加房屋失败===========");
    }

    //编写listHouses()界面
    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]);
        }
        System.out.println("======房屋显示完毕=======");
    }

    //显示主菜单
    public void mainMenu() {
        do {
            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': {
                    this.addHouse();
                    break;
                }
                case '2': {
                   findHouseById();
                    break;
                }
                case '3': {
                    this.delHouse();
                    break;
                }
                case '4': {
                   update();
                    break;
                }
                case '5': {
                    this.listHouses();
                    break;
                }
                case '6': {
                    exit();
                    break;
                }
            }
        } while (loop);
    }

}
  1. 编写测试类,调用界面层
package com.zut.houseRent;

import com.zut.houseRent.view.HouseView;

/**
 * @author wzl
 * @create 2021--09-07 17:24
 */
public class HouseRentApp {
    public static void main(String[] args) {
        //创建houseView对象,并且显示主菜单,是整个程序的入口
        new HouseView().mainMenu();
        System.out.println("====你退出房屋出租系统====");
    }
}

总结

  1. 需求分析从用户角度出发,从上往下分析业务功能,即采用分层设计模式,从界面层出发,通过界面层调用业务层的功能,业务层所使用的数据需要由数据层进行提供。
  2. 万物皆对象,每个业务功能就对应着一个方法,深刻体会到面向对象编程的内涵。
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜鸟逆袭之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值