项目需求:
-
我们需要有一个这样的主菜单,供用户来选择:
-
需要实现的功能有:新增房屋、查找房屋、删除房屋、修改房屋信息、显示所有房屋、退出系统:
代码实现
- 首先我们创建一个HouseRentAppde的项目,然后再
src目录下分别创建com.hspedu.houserent.domain、com.hspedu.houserent.service、com.hspedu.houserent.uitls、com.hspedu.houserent.view和一个 项目主文件com.hspedu.houserent.HouseRentApp。 - 我们再
domain包下创建House类,编写如下程序:
package com.hspedu.houserent.domain;
/*
* House的对象表示一个房屋信息
* */
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;
}
// get和set方法
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;
}
}
3.我们再view 包 HouseView类,编写如下程序:
package com.hspedu.houserent.view;
import com.hspedu.houserent.domain.House;
import com.hspedu.houserent.service.HouseService;
import com.hspedu.houserent.utils.Utility;
/*
* 1. 显示 界面
* 2. 接收用户输入
* 3. 调用HouseService完成对房屋信息的各种操作
* */
public class HouseView {
private boolean loop = true; // 控制显示主菜单
private char key = ' '; // 接收用户输入的指令
private HouseService houseService = new HouseService(10);
// 显示主菜单
public void mainMenu() {
do {
System.out.println("================ 房屋出租系统菜单 ================");
System.out.println("\t\t\t\t 1 新 增 房 屋 \t\t\t\t");
System.out.println("\t\t\t\t 2 查 找 房 屋 \t\t\t\t");
System.out.println("\t\t\t\t 3 删 除 房 屋 信 息 \t\t\t\t");
System.out.println("\t\t\t\t 4 修 改 房 屋 信 息 \t\t\t\t");
System.out.println("\t\t\t\t 5 房 屋 列 表 \t\t\t\t");
System.out.println("\t\t\t\t 6 退 出 \t\t\t\t");
System.out.println("请输入您的选择(1-6):");
key = Utility.readChar();
switch (key) {
case '1':
addHouse();
break;
case '2':
searchHouse();
break;
case '3':
delHouse();
break;
case '4':
updateHouse();
break;
case '5':
listHouse();
break;
case '6':
exit();
break;
}
} while (loop);
}
// 编写listHouse方法,显示房屋列表
public void listHouse() {
System.out.println("================ 房屋 列表 ================");
System.out.println("编号\t\t房主\t\t\t电话\t\t地址\t\t\t月租\t\t\t状态");
House[] list = houseService.list();
for (int i = 0; i < list.length; i++) {
if(list[i] == null) break; // 如果为null就不显示
System.out.println(list[i]);
}
System.out.println("================ 房屋列表显示完毕 ================");
}
// 编写addHouse方法,新增房屋
public void addHouse() {
System.out.println("================ 添加 房屋 ================");
System.out.println("姓名:");
String name = Utility.readString(8);
System.out.println("电话:");
String phone = Utility.readString(11);
System.out.println("地址:");
String address = Utility.readString(16);
System.out.println("月租:");
int rent = Utility.readInt();
System.out.println("状态:");
String state = Utility.readString(3);
// 创建一个house对象,注意id是系统自动分配的
House newHouse = new House(0, name, phone, address, rent, state);
if(houseService.add(newHouse)){
System.out.println("房屋添加成功");
} else {
System.out.println("房屋添加失败");
}
}
// 编写delHouse方法,删除房屋
public void delHouse() {
System.out.println("================ 删除 房屋 ================");
System.out.println("请输入要删除的房屋id(-1表示退出):");
int delId = Utility.readInt();
if (delId == -1) {
System.out.println("放弃了删除");
return;
}
char choice = Utility.readConfirmSelection(); //该方法本身就有循环判断的逻辑
if(choice == 'Y'){
if(houseService.delete(delId)){
System.out.println("================ 成功 删除 房屋 ================");
} else {
System.out.println("================ 房屋编号不存在,删除失败 ================");
}
} else {
System.out.println("================ 放弃 删除 房屋 ================");
}
}
// 编写searchHouse方法,查找房屋
public void searchHouse() {
System.out.println("================ 查找 房屋 ================");
System.out.println("请输入要查找的房屋id(-1表示退出):");
int searchId = Utility.readInt();
if (searchId == -1) {
System.out.println("放弃了查询");
return;
}
if(houseService.search(searchId) == null) {
System.out.println("没有找到该编号对应的房屋,请确认您的编号");
return;
}
System.out.println("================ 查询 房屋 列表 ================");
System.out.println("编号\t\t房主\t\t\t电话\t\t地址\t\t\t月租\t\t\t状态");
System.out.println(houseService.search(searchId));
}
// 编写updateHouse,修改房屋信息
public void updateHouse(){
System.out.println("================ 修改 房屋 信息 ================");
System.out.println("================ 请选择要修改房屋编号(-1表示退出) ================");
int updateId = Utility.readInt();
if(updateId == -1){
System.out.println("================ 你放弃修改房屋信息 ================");
return;
}
// 根据输入得到updateId,查找对象
House house = houseService.search(updateId);
if(house == null) {
System.out.println("================ 修改的房屋信息不存在 ================");
}
//编号 房主 电话 地址 月租 状态
System.out.print("姓名(" + house.getName() + "):");
String name = Utility.readString(8, "");
if(name != "") house.setName(name);
System.out.print("电话(" + house.getPhone() + "):");
String phone = Utility.readString(11, "");
if(phone != "") house.setPhone(phone);
System.out.print("地址(" + house.getAddress() + "):");
String address = Utility.readString(16, "");
if(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(state != "") house.setState(state);
System.out.println("修改成功");
}
// 完成退出确认
public void exit() {
char c = Utility.readConfirmSelection();
if(c == 'Y') loop = false;
}
}
4.在service包下创建HouseService类,编写如下代码:
package com.hspedu.houserent.service;
import com.hspedu.houserent.domain.House;
/*
* HouseService类
* 定义House[]。保存House对象
* 响应HouseView的调用
* 完成对房屋信息的各种操作
* */
public class HouseService {
private House[] houses; // 保存House对象
private int houseNums = 1; // 记录当前有多少个房屋信息
private int idCounter = 1; // 记录当前的is增长到那个值
// 构造器
public HouseService(int size) {
// new house
houses = new House[size]; // 当创建HouseService对象,指定数组大小
// 初始化一个house对象
houses[0] = new House(1, "jack", "112", "海淀区", 2000, "未出租");
}
// list方法,返回房屋信息
public House[] list() {
return houses;
}
// add方法,添加新对象,返回Boolean
public boolean add(House newHouse) {
// 判断 是否可以继续添加(不考虑数组扩容的问题)
if(houseNums == houses.length) {
System.out.println("数组已满,不能再添加了....");
return false;
}
// 添加房屋信息
houses[houseNums++] = newHouse;
// 设计一个id自增长方法
newHouse.setId(++idCounter);
return true;
}
// delete方法,根据id删除房屋,返回Boolean
public boolean delete(int delId) {
// 找到要删除的房屋对应的下标
int delIndex = -1;
for (int i = 0; i < houseNums; i++) {
if(delId == houses[i].getId()){
delIndex = i;
}
}
if(delIndex == -1) return false; // 说明delId再数组中不存在
// 找到了
for (int i = delIndex; i < houseNums - 1; i++) {
houses[i] = houses[i+1];
}
houses[--houseNums] = null; // 把当前存在房屋最后一个置空
return true;
}
// search方法,根据id查找房屋,返回房屋信息
public House search(int searchId) {
for (int i = 0; i < houseNums; i++) {
if(searchId == houses[i].getId()){
return houses[i];
}
}
return null;
}
}
- 最后我们在
HouseRentApp主入口里面,编写如下代码:
package com.hspedu.houserent;
import com.hspedu.houserent.view.HouseView;
public class HouseRentApp {
public static void main(String[] args) {
// 创建HouseView对象,并且显示主菜单,是整个程序的入口
new HouseView().mainMenu();
System.out.println("您退出了房屋租赁系统");
}
}
运行效果
-
显示主菜单:
-
新增房屋:
-
查找房屋:
-
删除房屋:
-
修改房屋信息:
-
查看房屋列表:
-
退出系统: