1.需求
实现基于文本界面的《房屋出租软件》。
能够实现对房屋信息的添加、修改和删除(用链表实现),并能够打印房屋明细表
2.框架(MVC)
3.实现
domain层
package com.xuge.domain;
import java.util.Objects;
/**
* @author yjx
* @version 1.0
*/
@SuppressWarnings("all")
public class House {
private int id;//编号
private String name;//姓名
private String number;//电话
private String address;//地址
private int money;//租金
private String status;//状态
public House(int money, String name, String number, String address, String status) {
this.money = money;
this.name = name;
this.number = number;
this.address = address;
this.status = status;
}
public String getStatus() {
return status;
}
public int getId() {
return id;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String isStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
@Override
public String toString() {
return "House{" +
"id=" + id +
", name='" + name + '\'' +
", number='" + number + '\'' +
", address='" + address + '\'' +
", status=" + status +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof House)) return false;
House house = (House) o;
return getId() == house.getId() &&
getMoney() == house.getMoney() &&
Objects.equals(getName(), house.getName()) &&
Objects.equals(getNumber(), house.getNumber()) &&
Objects.equals(getAddress(), house.getAddress()) &&
Objects.equals(getStatus(), house.getStatus());
}
@Override
public int hashCode() {
return Objects.hash(getId(), getName(), getNumber(), getAddress(), getMoney(), getStatus());
}
}
service层
package com.xuge.service;
import com.xuge.domain.House;
import java.util.ArrayList;
/**
* @author yjx
* @version 1.0
* @Description 对房屋信息进行crud的操作工具类
*/
public class HouseService {
ArrayList<House> houses = new ArrayList<>();
House house;
public void addDefault(){
House house1=new House(1000,"杨红","124234311","哈尔顿","未出租");
House house2=new House(3000,"徐工","124234311","犀牛液","未出租");
House house3=new House(4000,"我拿","124234311","犀牛液","未出租");
houses.add(house1);
houses.add(house2);
houses.add(house3);
}
/**
*
* @return 返回所有房屋信息
*/
public ArrayList<House> getHouses() {
return houses;
}
/**
*
* @param house 添加一个新的房屋对象
* @return 返回值是true ,添加成功 ,false ,添加失败
*/
public boolean add(House house){
return houses.add(house);
}
/**
*
* @param delId 删除指定id对应的房屋对象
* @return 返回值是true ,删除成功,返回值是false ,删除失败
*/
public boolean delete(int delId){
house = houses.get(delId);
return houses.remove(house);
}
public void set(int setId,House house){
houses.set(setId,house);
}
public House findById(int findId){
house = houses.get(findId);
return house;
}
}
utils工具类
package com.xuge.utils;
/*
工具类的作用:
处理各种情况的用户输入,并且能够按照程序员的需求,得到用户的控制台输入。
*/
import java.util.*;
/**
*/
@SuppressWarnings("all")
public class Utility {
//静态属性。。。
private static Scanner scanner = new Scanner(System.in);
/**
* 功能:读取键盘输入的一个菜单选项,值:1——5的范围
* @return 1——5
*/
public static char readMenuSelection() {
char c;
for (; ; ) {
String str = readKeyBoard(1, false);//包含一个字符的字符串
c = str.charAt(0);//将字符串转换成字符char类型
if (c != '1' && c != '2' &&
c != '3' && c != '4' && c != '5') {
System.out.print("选择错误,请重新输入:");
} else break;
}
return c;
}
/**
* 功能:读取键盘输入的一个字符
* @return 一个字符
*/
public static char readChar() {
String str = readKeyBoard(1, false);//就是一个字符
return str.charAt(0);
}
/**
* 功能:读取键盘输入的一个字符,如果直接按回车,则返回指定的默认值;否则返回输入的那个字符
* @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表示 不能读空字符串。
*
* 如果输入为空,或者输入大于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;
}
}
view 层
package com.xuge.view;
import com.xuge.domain.House;
import com.xuge.service.HouseService;
import com.xuge.utils.Utility;
import java.util.ArrayList;
import java.util.Iterator;
/**
* @author yjx
* @version 1.0
* @Description 主界面类
*/
@SuppressWarnings("all")
public class HouseView {
/**
* @Description 主菜单类,用于与用户交互
*/
boolean loop = true;
char key = ' ';
char a = ' ';
String name = "";
String number = "";
String address = "";
double money = 0.0;
String status = "";
House house = null;
int id = 1;
HouseService service = new HouseService();
String details = "编号\t房主\t电话\t地址\t月租\t状态(出租/未出租)";
public void mainView() {
service.addDefault();
while (loop) {
System.out.println("========================房屋出租系统===========================");
System.out.println("\t\t1.新\t增\t房\t屋");
System.out.println("\t\t2.查\t找\t房\t屋");
System.out.println("\t\t3.删\t除\t房\t屋");
System.out.println("\t\t4.修\t改\t房\t屋\t信\t息");
System.out.println("\t\t5.房\t屋\t列\t表");
System.out.println("\t\t6.退\t\t\t出");
System.out.println("\t\t请选择(1-6):");
key = Utility.readChar();
switch (key) {
case '1':
addHouse();
//新增房屋界面
break;
case '2':
System.out.print("请输入要查询的id号:");
id = Utility.readInt();
queryHouse(id - 1);
//查找房屋界面
break;
case '3':
System.out.print("请选择待删除房屋编号(-1)退出:");
id = Utility.readInt();
if(id==-1){
break;
}
System.out.println("确认是否删除(Y/N):请小心选择:");
char a = Utility.readConfirmSelection();
if (a == 'Y') {
deleHouse(id - 1);
}
//删除房屋界面
break;
case '4':
System.out.print("请选择待修改房屋编号(-1)退出:");
id = Utility.readInt();
if(id==-1){
break;
}
updateHouse(id-1);
//修改房屋界面
break;
case '5':
listHouse();
//房屋列表界面
break;
case '6':
//退出主界面
a = Utility.readConfirmSelection();
if (a == 'Y') {
loop = false;
}
break;
}
}
}
/**
* @Description 添加房屋
*/
public void addHouse() {
System.out.println("----------添加房屋---------");
System.out.print("姓名:");
name = Utility.readString(10);
System.out.print("电话:");
number = Utility.readString(10);
System.out.print("地址:");
address = Utility.readString(10);
System.out.print("租金:");
money = Utility.readInt();
System.out.print("状态(未出租/已出租):");
status = Utility.readString(10);
house = new House((int) money, name, number, address, status);
if (service.add(house)) {
System.out.println("----------添加完成------------");
} else {
System.out.println("----添加失败------");
}
}
/**
* @Description 查找房屋,通过id号查询
*/
public void queryHouse(int id) {
house = service.findById(id);
if (house == null) {
System.out.println("=============修改房屋信息编号不存在..============");
return;
}
String str = "";
if (house != null) {
str += ++id + "\t\t" + house.getName() + "\t\t" + house.getNumber()
+ "\t\t" + house.getAddress() + "\t\t" + house.getMoney() + "\t\t" + house.getStatus();
System.out.println(str);
}
}
/**
* @Description 通过id号进行删除
*/
public void deleHouse(int id) {
ArrayList<House> houses = service.getHouses();
service.delete(id);
System.out.println("-------删除完成-------");
}
/**
* @Description 通过id号进行修改
*/
public void updateHouse(int id) {
House house = service.findById(id);
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.getNumber() + "):");
String phone = Utility.readString(12, "");
if (!"".equals(phone)) {
house.setNumber(phone);
}
System.out.print("地址(" + house.getAddress() + "): ");
String address = Utility.readString(18, "");
if (!"".equals(address)) {
house.setAddress(address);
}
System.out.print("租金(" + house.getMoney() + "):");
int rent = Utility.readInt(-1);
if (rent != -1) {
house.setMoney(rent);
}
System.out.print("状态(" + house.getStatus() + "):");
String state = Utility.readString(3, "");
if (!"".equals(state)) {
house.setStatus(state);
}
System.out.println("=============修改房屋信息成功============");
}
/**
* @Description 列出所有房屋信息
*/
public void listHouse() {
System.out.println("----------------房屋列表-----------");
ArrayList<House> houses = service.getHouses();
Iterator<House> iterator = houses.iterator();
String details = "编号\t\t房主\t\t电话\t\t\t\t地址\t\t\t月租\t\t\t状态(出租/未出租)";
id = 0;
while (iterator.hasNext()) {
House next = iterator.next();
++id;
details += "\n" + id + "\t\t" + next.getName() + "\t\t" + next.getNumber() + "\t\t"
+ next.getAddress() + "\t\t" + next.getMoney() + "\t\t" + next.getStatus();
}
System.out.println(details);
System.out.println("-------房屋列表列出完成-------");
}
}
启动程序
package com.xuge;
import com.xuge.view.HouseView;
/**
* @author yjx
* @version 1.0
*/
public class HouseRent {
public static void main(String[] args) {
new HouseView().mainView();
}
}
演示
就不一一演示了