【零基础学Java知识梳理超详细版】第八章-项目:房屋出租系统

【零基础学Java知识梳理超详细版】第八章-项目:房屋出租系

crud: c[create] r[read] u[update] d[delete]

第一阶段项目

  • RentSystem.java(入口)

    package com.house_rent;
    
    public class RentSystem {
        public static void main(String[] args) {
            RentSysMenu rentSys = new RentSysMenu();
            rentSys.menu();
            System.out.println("再见~");
        }
    }
    
  • RentSysMenu.java

    package com.house_rent;
    
    import java.util.Scanner;
    
    public class RentSysMenu {
        Method method = new Method();
        private Scanner inp = new Scanner(System.in);
        //menu:这是出租系统的系统菜单界面。用户输入 1 - 6,并据此调用方法。该方法自身会无限循环。
        public void menu() {
            for (; ; ) {
                //这是系统菜单的显示页面
                System.out.print("\n---------------房屋出租系统---------------"
                        + "\n\t\t\t 1 新 增 房 屋"
                        + "\n\t\t\t 2 查 找 房 屋"
                        + "\n\t\t\t 3 删 除 房 屋"
                        + "\n\t\t\t 4 修 改 房 屋 信 息"
                        + "\n\t\t\t 5 房 屋 列 表"
                        + "\n\t\t\t 6 退       出"
                        + "\n请选择(1-6):");
                char inpChar = inp.next().charAt(0);
                System.out.println("----------------------------------------\n");
                switch (inpChar) {
                    case '1':
                        //输入 1 时,调用 创建房屋 方法
                        method.newHouse();
                        break;
                    case '2':
                        //输入 2 时,调用 搜索房屋 方法
                        method.searchAHouseFromMenu();
                        break;
                    case '3':
                        //输入 3 时,调用 删除房屋 方法
                        method.deleteSpecificHouse();
                        break;
                    case '4':
                        //输入 4 时,调用 修改信息 方法
                        method.changeHouseInfo();
                        break;
                    case '5':
                        //输入 5 时,调用 展示全部 方法
                        method.showAllHouseFromMenu();
                        break;
                    case '6':
                        //输入 6 时,进行二次确认。通过则退出系统。
                        System.out.println("确认退出吗?:(Y/N):");
                        //yesOrNo 方法,是可以判断用户输入的到底是 Y 还是 N 的方法。
                        if (method.yesOrNo(inp.next().charAt(0))) {
                            System.out.println("程序已退出。");
                            return;
                        }
                        break;
                    default:
                        //当用户输入了 1 - 6 以外的东西,提示一个错误信息
                        System.out.println("错误,请输入纯数字(1-6)");
                }
            }
        }
    }
    
  • Method.java

    package com.house_rent;
    
    import java.util.Scanner;
    
    class Method {
    
        //创建一个 数据数组。该数组将存放所有未来的房屋数据,每个房屋占用 1 个长度。目前,其长度为0
        Data[] houses = new Data[0];
        private Scanner inp = new Scanner(System.in);
    
        //newHouse:1 创建房屋 方法。由 menu 接入。
        public void newHouse() {
            System.out.print("=================添加房屋================="
                    + "\n请输入姓名:");
            String inName = inp.next();
            //如果名字太短,补长一些,方便排版
            if (inName.length() <= 2) {
                inName = inName + "   ";
            }
            System.out.print("请输入电话:");
            String inCall = inp.next();
            System.out.print("请输入地址:");
            String inLocation = inp.next();
            //如果地址太短,补长一些,方便排版
            if (inLocation.length() <= 2) {
                inLocation = inLocation + "   ";
            }
            System.out.print("请输入月租金:");
            double inPrice = inp.nextDouble();
            System.out.print("是否租出?(Y/N):");
            //yesOrNo 方法,是可以判断用户输入的到底是 Y 还是 N 的方法。
            boolean inIsRented = yesOrNo(inp.next().charAt(0));
            //调用 写入创建房屋 方法,将以上参数写入 数据数组
            creatData(inName, inCall, inLocation, inPrice, inIsRented);
            System.out.println("=================添加完成=================");
            //调用 真-搜索房屋 方法。为用户展示刚刚创建的房屋信息。
            searchAHouse(houses[houses.length - 1].getId());
            System.out.println("\n请牢记房屋 ID\n如果想要修改信息,请于主菜单选择[4 修改房屋信息]");
        }
    
        //searchAHouseFromMenu:2 搜索房屋 方法。由 menu 接入。
        public void searchAHouseFromMenu() {
            System.out.println("=================查找房屋=================");
            //调用 真-搜索房屋 方法
            searchAHouse();
            System.out.println("=================查找完毕=================");
        }
    
        //deleteSpecificHouse:3 删除房屋 方法。由 menu 接入。
        public void deleteSpecificHouse() {
            System.out.println("=================删除房屋=================");
            //首先,搜索并展示用户想要的房屋。
            //调用 真-搜索房屋 方法。如果找到,会返回该房屋的 数组编号;否则,返回 -100
            int num = searchAHouse();
            //如果找到房屋(返回值不为 -100),则进行二次确认。
            if (num != -100) {
                System.out.println("确定要删除该房屋信息吗?(Y/N):");
                //yesOrNo 方法,是可以判断用户输入的到底是 Y 还是 N 的方法。
                if (yesOrNo(inp.next().charAt(0))) {
                    System.out.println("一经删除无法恢复!请再次确认,是否删除!(Y/N):");
                    if (yesOrNo(inp.next().charAt(0))) {
                        //调用 注销房屋 方法。
                        deleteHouse(num);
                        System.out.println("===============房屋已删除===============");
                    }
                }
            }
        }
    
        //changeHouseInfo:4 修改信息 方法。由 menu 接入
        public void changeHouseInfo() {
            System.out.println("=================修改房屋=================");
            //首先,搜索并展示用户想要的房屋
            //调用 真-搜索房屋 方法。如果找到,会返回该房屋的 数组编号;否则,返回 -100
            int num = searchAHouse();
            //找到房屋的场合,逐项提示并进行修改
            if (num != -100) {
                System.out.println("姓名(" + houses[num].getName() + "):");
                String inName = inp.next();
                if (inName.length() <= 2) {
                    inName = inName + "   ";
                }
                houses[num].setName(inName);
                System.out.println("电话号码(" + houses[num].getCall() + "):");
                houses[num].setCall(inp.next());
                System.out.println("地址(" + houses[num].getLocation() + "):");
                String inLocation = inp.next();
                if (inLocation.length() <= 2) {
                    inLocation = inLocation + "   ";
                }
                houses[num].setLocation(inLocation);
                System.out.println("月租金(" + houses[num].getPrice() + "):");
                houses[num].setPrice(inp.nextDouble());
                System.out.println("是否租出(" + (houses[num].isRented() ? "已出租!" : "未出租。") + ")(Y/N):");
                houses[num].setRented(yesOrNo(inp.next().charAt(0)));
                //到这里就改完了
                //调用 真-搜索房屋 方法,展示房屋
                System.out.println("=================修改完成=================");
                searchAHouse(houses[num].getId());
            }
        }
    
        //showAllHouseFromMenu:5 展示全部 方法。由 menu 接入
        public void showAllHouseFromMenu() {
            System.out.println("===============所有房屋信息===============");
            //调用 展示全部房屋 方法
            showAllHouses();
            System.out.println("============以上是所有房屋信息=============");
        }
    
        //yesOrNo:这个方法用于判断用户输入的字符究竟表示 Yes 还是 No。
        //判断不了的情况,提示错误语句,并默认为 No
        public boolean yesOrNo(char cha) {
            switch (cha) {
                case 'y':
                case 'Y':
                case '是':
                case '对':
                case '已':
                    return true;
                case 'n':
                case 'N':
                case '否':
                case '没':
                case '不':
                case '未':
                    return false;
                default:
                    System.out.println("输入无效。");
                    return false;
            }
        }
    
        //searchAHouse:真-搜索房屋 方法(无参)。
        //如果调用的是这无参方法,会先提示用户输入一个 ID,然后调用有参方法
        private int searchAHouse() {
            System.out.println("请输入4位数房屋ID:");
            String id = inp.next();
            return searchAHouse(id);
        }
    
        //searchAHouse:真-搜索房屋 方法(有参)。输入房屋 ID,搜索该房屋。
        //找到房屋的场合,展示房屋 并返回其 数组坐标。如果没找到对应房屋,提示错误信息,并返回 -100。
        private int searchAHouse(String id) {
            for (int i = 0; i < houses.length; i++) {
                if (houses[i].getId().equals(id) && houses[i].isActive()) {
                    System.out.println("房屋ID\t姓名\t\t电话\t\t\t地址\t\t月租金\t出租状态");
                    houses[i].showThisData();
                    return i;
                }
            }
            System.out.println("没有找到房屋!");
            return -100;
        }
    
        //creatData:写入创建房屋 方法。需要的信息齐集的场合,将其写入 数据数组,并生成一个 ID
        private void creatData(String name, String call, String location, double price, boolean isRented) {
            Data[] tempData = new Data[houses.length + 1];
            for (int i = 0; i < houses.length; i++) {
                tempData[i] = houses[i];
            }
            tempData[tempData.length - 1] = new Data(tempData.length, name, call, location, price);
            tempData[tempData.length - 1].setRented(isRented);
            houses = tempData;
        }
    
        //showAllHouses:展示全部房屋 方法。由 展示全部(showAllHouseFromMenu)方法接入
        private void showAllHouses() {
            System.out.println("房屋ID\t姓名\t\t电话\t\t\t地址\t\t月租金\t出租状态");
            for (int i = 0; i < houses.length; i++) {
                if (houses[i].isActive()) {
                    houses[i].showThisData();
                }
            }
        }
    
        //deleteHouse:注销房屋 方法。将该房屋注销。数据其实保留在 数据数组,但注销使其无法被查到。
        private void deleteHouse(int num) {
            houses[num].setActive(false);
        }
    
    
    }
    
  • Data.java

    package com.house_rent;
    
    class Data {
        //房屋信息。包含:ID,名字,电话,地址,房租,是否租出。
        private String id;
        private String name;
        private String call;
        private String location;
        private double price;
        private boolean isRented = false;
        private boolean active = true;
    
        public Data(int id, String name, String call, String location, double price) {
            //将输入的数字 ID 转化成固定 4 位的 字符串 ID
            if (id < 10) {
                this.id = "000" + id;
            } else if (id < 100) {
                this.id = "00" + id;
            } else if (id < 1000) {
                this.id = "0" + id;
            } else {
                this.id = "" + id;
            }
            this.name = name;
            this.call = call;
            this.location = location;
            this.price = price;
        }
    
        public boolean isActive() {
            return active;
        }
    
        public void setActive(boolean active) {
            this.active = active;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getId() {
            return id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getCall() {
            return call;
        }
    
        public void setCall(String call) {
            this.call = call;
        }
    
        public String getLocation() {
            return location;
        }
    
        public void setLocation(String location) {
            this.location = location;
        }
    
        public double getPrice() {
            return price;
        }
    
        public void setPrice(double price) {
            this.price = price;
        }
    
        public boolean isRented() {
            return isRented;
        }
    
        public void setRented(boolean rented) {
            isRented = rented;
        }
    
        //展示信息
        public void showThisData() {
            System.out.println(id + "\t" + name + "\t" + call + "\t" + location + "\t" + price + "\t"
                    + (isRented ? "已出租!" : "未出租。"));
        }
    
    }
    
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Eric天哥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值