房屋出租系统

房屋出租系统项目

一、项目需求

  1. 项目界面–主菜单
  2. 房屋列表
  3. 新增房源(姓名、电话、地址、月租、状态)
  4. 查找房源
  5. 删除房源
  6. 修改房源
  7. 退出系统

二、项目框架图(分层模式)

HouseRentApp.java
main(){//程序入口
//创建HouseView对象
//调用该对象显示主菜单}

工具类
完成获取用户各种输入

HouseView.java <=> 类 [ 界面 ]
1.显示界面
2.接收用户输入
3.调用HouseService完成对房屋信息的各种操作

HouseService.java <=> 类 [ 业务层 ]
1.响应HouseView的调用
2.完成对房屋信息的各种操作(crud)

House.java <=> 类 [ domain / model 数据层]
1.一个House对象表示一个房屋信息

三、代码部分

1
2
3
4
5
6
7
8
9
//HouseRentApp启动类
import View.HouseView;
public class HouseRentApp {
public static void main(String[] args) {
//程序入口
new HouseView().start();
System.out.println("=============你已退出系统=============");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
//Utiliy工具类
package Utils;
import java.util.*;
//工具类的作用:
//处理各种情况的用户输入,并且能够按照程序员的需求,得到用户的控制台输入。
public class Utility {
//静态属性。。。
private static Scanner scanner = new Scanner(System.in);

/**
* 功能:读取键盘输入的一个字符,如果直接按回车,则返回指定的默认值;否则返回输入的那个字符
*
* @param defaultValue 指定的默认值
* @return 默认值或输入的字符
*/

public static char readChar(char defaultValue) {
String str = readKeyBoard(1, true);//要么是空字符串,要么是一个字符
return (str.length() == 0) ? defaultValue : str.charAt(0);
}

/**
* 功能:读取键盘输入的整型,长度小于2位
*
* @return 整数
*/
public static int readInt() {
int n;
for (; ; ) {
String str = readKeyBoard(10, false);//一个整数,长度<=10位
try {
n = Integer.parseInt(str);//将字符串转换成整数
break;
} catch (NumberFormatException e) {
System.out.print("数字输入错误,请重新输入:");
}
}
return n;
}

/**
* 功能:读取键盘输入的 整数或默认值,如果直接回车,则返回默认值,否则返回输入的整数
*
* @param defaultValue 指定的默认值
* @return 整数或默认值
*/
public static int readInt(int defaultValue) {
int n;
for (; ; ) {
String str = readKeyBoard(10, true);
if (str.equals("")) {
return defaultValue;
}

//异常处理...
try {
n = Integer.parseInt(str);
break;
} catch (NumberFormatException e) {
System.out.print("数字输入错误,请重新输入:");
}
}
return n;
}

/**
* 功能:读取键盘输入的指定长度的字符串
*
* @param limit 限制的长度
* @return 指定长度的字符串
*/

public static String readString(int limit) {
return readKeyBoard(limit, false);
}

/**
* 功能:读取键盘输入的指定长度的字符串或默认值,如果直接回车,返回默认值,否则返回字符串
*
* @param limit 限制的长度
* @param defaultValue 指定的默认值
* @return 指定长度的字符串
*/

public static String readString(int limit, String defaultValue) {
String str = readKeyBoard(limit, true);
return str.equals("") ? defaultValue : str;
}


/**
* 功能:读取键盘输入的确认选项,Y或N
* 将小的功能,封装到一个方法中.
*
* @return Y或N
*/
public static char readConfirmSelection() {
System.out.println("请输入你的选择(Y/N): 请小心选择");
char c;
for (; ; ) {//无限循环
//在这里,将接受到字符,转成了大写字母
//y => Y n=>N
String str = readKeyBoard(1, false).toUpperCase();
c = str.charAt(0);
if (c == 'Y' || c == 'N') {
break;
} else {
System.out.print("选择错误,请重新输入:");
}
}
return c;
}

/**
* 功能: 读取一个字符串
*
* @param limit 读取的长度
* @param blankReturn 如果为true ,表示 可以读空字符串。
* 如果为false表示 不能读空字符串。
* <p>
* 如果输入为空,或者输入大于limit的长度,就会提示重新输入。
* @return
*/
private static String readKeyBoard(int limit, boolean blankReturn) {

//定义了字符串
String line = "";

//scanner.hasNextLine() 判断有没有下一行
while (scanner.hasNextLine()) {
line = scanner.nextLine();//读取这一行

//如果line.length=0, 即用户没有输入任何内容,直接回车
if (line.length() == 0) {
if (blankReturn) return line;//如果blankReturn=true,可以返回空串
else continue; //如果blankReturn=false,不接受空串,必须输入内容
}

//如果用户输入的内容大于了 limit,就提示重写输入
//如果用户如的内容 >0 <= limit ,我就接受
if (line.length() < 1 || line.length() > limit) {
System.out.print("输入长度(不能大于" + limit + ")错误,请重新输入:");
continue;
}
break;
}

return line;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
//HouseView界面层
package View;

import Service.HouseService;
import java.util.*;

public class HouseView {
private final HouseService houseService = new HouseService();
private final Scanner scanner = new Scanner(System.in);

public void start() {
boolean running = true;
while (running) {
menu();
running = choice();
}
}

public void menu() {
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.println("-请输入你的选择:");
}

public boolean choice() {
switch (scanner.next()) {
case "1":
houseService.addHouse();
break;
case "2":
houseService.findHouse();
break;
case "3":
houseService.deleteHouse();
break;
case "4":
houseService.changeHouse();
break;
case "5":
houseService.listHouse();
break;
case "6":
return houseService.exit();
default:
System.out.println("无效操作,重新输入:");
}
return true;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
//HouseService业务层
package Service;

import Domain.House;
import Utils.Utility;
import java.util.*;

public class HouseService {
private final Scanner scanner = new Scanner(System.in);
private final ArrayList<House> houses = new ArrayList<>();

//新增房屋
public void addHouse() {
//需要加入合理性判断
System.out.println("----------------添加房屋-----------------");
System.out.println("输入id:");
String id = scanner.next();
System.out.println("输入姓名:");
String name = Utility.readString(8);
System.out.println("输入电话:");
String phone = Utility.readString(11);
System.out.println("输入地址:");
String address = scanner.next();
System.out.println("输入月租:");
int pay = Utility.readInt();
System.out.println("输入状态(未出租/已出租):");
String status = Utility.readString(3);
House house = new House(id, name, phone, address, pay, status);
houses.add(house);
System.out.println("----------------添加完成-----------------");
}

//查找房屋
public void findHouse() {
System.out.println("----------------查找房屋-----------------");
System.out.println("输入你要查找的房屋id:");
findID(scanner.next());
}

//删除房屋
public void deleteHouse() {
System.out.println("----------------删除房屋-----------------");
System.out.println("输入你要删除的房屋id:");
int ID = findID(scanner.next());
if (ID == -1)
return;
System.out.println("确认是否删除:");
if (isOK())
houses.remove(ID);
}

//修改信息
public void changeHouse() {
System.out.println("----------------修改信息-----------------");
System.out.println("输入你要修改的房屋id:(-1退出)");
String input=scanner.next();
if("-1".equals(input))
return;
int ID = findID(input);
if (ID == -1)
return;
System.out.println("确认是否修改:");
if (isOK()) {
House house = houses.get(ID);
System.out.println("修改id:" + "( " + house.getId() + " )");
house.setId(scanner.next());
System.out.println("修改姓名:" + "( " + house.getName() + " )");
house.setName(Utility.readString(8));
System.out.println("修改电话:" + "( " + house.getPhone() + " )");
house.setPhone(Utility.readString(11));
System.out.println("修改地址:" + "( " + house.getAddress() + " )");
house.setAddress(scanner.next());
System.out.println("修改月租:" + "( " + house.getRent() + " )");
house.setRent(Utility.readInt());
System.out.println("修改状态(未出租/已出租):" + "( " + house.getStatus() + " )");
house.setStatus(Utility.readString(3));
System.out.println("----------------修改完成-----------------");
}
}

//房屋列表
public void listHouse() {
System.out.println("----------------房屋列表-----------------");
if (houses.isEmpty()) {
System.out.println("当前列表为空,请先添加");
}
for (House house : houses) {
System.out.println(house);
}
}

//退出
public boolean exit() {
System.out.println("----------------退 出-----------------");
System.out.println("确认退出?");
return !isOK();
}

///查找id并返回索引并显示房屋信息
public int findID(String ID) {
for (int i = 0; i < houses.size(); i++) {
House house = houses.get(i);
if (ID.equals(house.getId())) {
System.out.println(house);
return i;
}
}
System.out.println("当前ID不存在!");
return -1;
}

///用户确认输入
public boolean isOK() {
while (true) {
System.out.println("输入你的选择y/n");
String s = scanner.next();
if ("y".equals(s))
return true;
else if ("n".equals(s))
return false;
else
System.out.println("输入不合规范");
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
//House数据层
package Domain;

public class House {
private String id;
private String name;
private String phone;
private String address;
private int rent;
private String status;

public House() {
}

public House(String id, String name, String phone, String address, int pay, String status) {
this.id = id;
this.name = name;
this.phone = phone;
this.address = address;
this.rent = pay;
this.status = status;
}

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 getStatus() {
return status;
}

public void setStatus(String status) {
this.status = status;
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

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