100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > B站韩顺平java学习笔记(八)-- 房屋出租系统(项目)章节

B站韩顺平java学习笔记(八)-- 房屋出租系统(项目)章节

时间:2019-05-23 08:24:54

相关推荐

B站韩顺平java学习笔记(八)-- 房屋出租系统(项目)章节

目录

一 项目需求说明

1 项目界面

二 房屋租赁程序框架图

​三 系统实现

1 完成House类

2 显示主菜单和完成退出软件的功能

3 完成显示房屋列表的功能

4 添加房屋信息的功能

5 完成删除房屋信息的功能

6 完善退出确认功能

7 查找房屋信息功能

8 完成房屋修改的功能

知识点

1 静态方法的调用

一 项目需求说明

实现基于文本界面的《房屋出租软件》。

能够实现对房屋信息的添加、修改和删除(用数组实现),并能够打印房屋明细表。

1 项目界面

(1)主界面

(2)新增房源

(3)查找房源

(4)删除房屋

(5) 修改房屋信息

(6)房屋列表

(7)退出

二 房屋租赁程序框架图

三 系统实现

1 完成House类

编号 房主 电话 地址 月租 状态(未出租/出租)

/*** House对象表示一个房屋信息*/public class House {//编号 房主 电话 地址 月租 状态(未出租/出租)private int id;private String name;private String tel;private String address;private int rent;private String state;//构造器 和 getter、setterpublic House(int id, String name, String tel,String address, int rent, String state) {this.id = id;this.name = name;this.tel = tel;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 getTel() {return tel;}public void setTel(String tel) {this.tel = tel;}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@Overridepublic String toString() {return id + "\t" + name + "\t" + tel + "\t"+ address + "\t" + rent + "\t" + state;}}

2 显示主菜单和完成退出软件的功能

化繁为简(一个一个的实现功能)

在HouseView类中编写mainMenu方法,显示主菜单。

public class HouseView {private boolean loop = true; //控制显示菜单private char key = ' ';//接受用户选择public void mainMenu(){do {System.out.println("-------------房屋出租系统-------------");System.out.println("\t\t1 新 增 房 源");System.out.println("\t\t2 查 找 房 屋");System.out.println("\t\t3 删 除 房 屋");System.out.println("\t\t4 修 改 房 屋 信 息");System.out.println("\t\t5 房 屋 列 表");System.out.println("\t\t6 退 出");System.out.println("请输入你的选择(1-6)");key = Utility.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);}}

3 完成显示房屋列表的功能

在HouseService添加:

① 添加House数组(用于存放房屋信息);

② 添加构造方法

③ 添加list方法,返回House数组

private House[] houses;public HouseService(int size){//new houseshouses = new House[size];//测试新建house对象houses[0] = new House(1,"li","123","hebei",2000,"weichuzhu");}//list方法,返回houses数组public House[] list() {return houses;}

在HouseView添加:

① 添加listHouses方法,显示房屋信息;

② 将listHouses方法写在循环当中。

//编写listHouses()显示房屋列表public void listHouses(){System.out.println("-------------------房屋列表--------------------");System.out.println("编号\t房主\t电话\t地址\t月租\t状态(未出租/出租)");House[] houseList = houseService.list();for (int i = 0; i < houseList.length ; i++) {if (houseList[i] == null) {//如果空(没信息),不进行输出break;}System.out.println(houseList[i]);}System.out.println();}

4 添加房屋信息的功能

在HouseService添加:

① 添加add方法;

② 添加houseNums和idCounter属性

private int houseNums = 1;//记录当前有几个房屋信息private int idCounter = 1;//记录当前的id增长到哪个值public boolean add(House newHouse){//考虑是否可以继续添加(暂不考虑数组扩容)if (houseNums == houses.length){//房屋信息满了System.out.println("房屋信息已满,无法再进行添加"); return false;}houses[houseNums++] = newHouse;//先加房屋元素,再自增newHouse.setId(++idCounter);//先自增,再修改idreturn true;}

private int houseNums = 1;//记录当前有几个房屋信息private int idCounter = 1;//记录当前的id增长到哪个值public boolean add(House newHouse){//扩容版本//考虑是否可以继续添加(暂不考虑数组扩容)if (houseNums == houses.length){//房屋信息满了System.out.println("房屋信息已满,无法再进行添加,进行扩容");House[] newHouses = new House[houseNums];for (int i = 0; i < houses.length; i++) {newHouses[i] = houses[i];}houses = new House[houseNums + 1];for (int i = 0; i < newHouses.length; i++) {houses[i] = newHouses[i];}houses[houseNums++] = newHouse;//先加房屋元素,再自增newHouse.setId(++idCounter);//先自增,再修改idreturn false;}houses[houseNums++] = newHouse;//先加房屋元素,再自增newHouse.setId(++idCounter);//先自增,再修改idreturn true;}

在HouseView添加:

① 添加addHouse方法

public void addHouse(){System.out.println("-------------------添加房屋--------------------");System.out.print("姓名:");String name = Utility.readString(8);System.out.print("电话:");String tel = 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 newHouse =new House(0,name,tel,address,rent,state);if (houseService.add(newHouse)){System.out.println("-------------------添加房屋成功--------------------");}else {System.out.println("-------------------添加房屋失败--------------------");}}

5 完成删除房屋信息的功能

在HouseService添加:

① del(int delId);完成真正的删除任务,返回一个boolean

//del方法,删除一个房屋信息public boolean del(int delId) {//应当先找到要删除的房屋信息对应的下标//要搞清楚 下标和房屋的编号不是一回事int index = -1;for(int i = 0; i < houseNums; i++) {if(delId == 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];}//把当有存在的房屋信息的最后一个 设置nullhouses[--houseNums] = null;return true;}

在HouseView添加:

① delHouse();接受用户输入id

//编写delHouse类,接受用户输入idpublic void delHouse(){System.out.println("-------------------删除房屋--------------------");System.out.print("请选择待删除房屋编号(-1退出)");int delId = Utility.readInt();if (delId == -1){System.out.println("-----------------放弃删除房屋------------------");return;}System.out.println("确认是否删除(Y/N),请小心选择:");//该方法本身就有循环逻辑,不输入Y/N就出不来char choice = Utility.readConfirmSelection();if (choice == 'Y'){houseService.del(delId);}else {System.out.println("-----------------放弃删除房屋------------------");return;}if (houseService.del(delId)){System.out.println("-----------------成功删除房屋------------------");}else {System.out.println("--------------未找到该房屋,删除失败-------------");}}

6 完善退出确认功能

在HouseView添加:

① 添加exit方法

//完成退出确认public void exit() {//这里我们使用Utility提供方法,完成确认char c = Utility.readConfirmSelection();if (c == 'Y') {loop = false;}}

7 查找房屋信息功能

在HouseView添加:

① 添加findHouse方法

//根据id查找房屋信息public void findHouse() {System.out.println("=============查找房屋信息============");System.out.print("请输入要查找的id: ");int findId = Utility.readInt();//调用方法House house = houseService.findById(findId);if (house != null) {System.out.println(house);} else {System.out.println("=============查找房屋信息id不存在============");}}

在HouseView添加:

① 添加findById方法

//findById方法,返回House对象或者nullpublic House findById(int findId) {//遍历数组for(int i = 0; i < houseNums; i++) {if(findId == houses[i].getId()) {return houses[i];}}return null;}

8 完成房屋修改的功能

在HouseView添加:

① 添加updateHouse方法

//根据id修改房屋信息public void update() {System.out.println("=============修改房屋信息============");System.out.println("请选择待修改房屋编号(-1表示退出)");int updateId = Utility.readInt();if (updateId == -1) {System.out.println("=============你放弃修改房屋信息============");return;}//根据输入得到updateId,查找对象//返回的是引用类型[即:就是数组的元素]//因此在后面对house.setXxx() ,就会修改HouseService中houses数组的元素!!!!!!!!!!House house = houseService.findById(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("=============修改房屋信息成功============");}

知识点

1 静态方法的调用

静态方法可以直接通过类名调用

其中cry()方法可以直接A.cry()调用,而hi方法只能通过创建对象来调用。

class A{public void hi(){ }public static void cry(){ }//静态方法}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。