房屋出租系统改动版
原创
©著作权归作者所有:来自51CTO博客作者进击的菜鸟子的原创作品,请联系作者获取转载授权,否则将追究法律责任
代码在com.stulzl.houserent.包中
测试HouseRentApp
package com.stulzl.houserent.house_rent_app;
import com.stulzl.houserent.domain.House;
import com.stulzl.houserent.view.HouseView;
public class HouseRentApp {//这是一个调用各个对象功能的类
public static void main(String[] args) {
//创建HouseView对象,并显示主菜单,是整个程序的入口
HouseView houseView = new HouseView();//创建一个房屋主页面的对象直接引用菜单
houseView. mainMenu();
}
}
House类
package com.stulzl.houserent.domain;
// House的对象表示一个房屋信息 364
public class House {
//编号 房主 电话 地址 月租 状态(未出租/已出租)
private int id;
private String name;
private String phone;
private String address;
private int rent;
private String state;
//构造器和set,get方法
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;
}
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" + phone +
"\t\t" + address +
"\t" + rent +
"\t" + state;
}
}
HouseService类,增删查改
package com.stulzl.houserent.service;
import com.stulzl.houserent.domain.House;
import java.util.Scanner;
//定义House[]数组 ,保存House对象
//1. 响应HouseView的调用
//2. 完成对房屋信息的各种操作(增删改查c[create]r[read]u[update]d[delete])
public class HouseService {//完成对各种房屋信息的各种操作和功能类
Scanner scanner = new Scanner(System.in);
private int houseNum=1;//记录房屋当前数量
private int idCounter=1;//记录当前id增长到哪个值
private House house[];//创建一个房屋数组用来存放每个房屋的信息,但是数组多大用构造器来赋值
//构造器
public HouseService(int size){
house = new House[size];//给房屋数组空间大小了
house[0]=new House(1,"jack","112","海淀区",2000,"未出租");//初始化
}
//查找id方法
public int find(int delId){
//应当先找到要删除的房屋信息对应的下标
int index1 = -1;//记录下标
for (int i = 0; i < houseNum; i++) {
if(delId==house[i].getId()){
index1=i;//记录下标
return i;
}
}
//说明要删除的房屋id不存在
return -1;
}
//循环判断输入,必须输出Y/N
public char readConfirmSelection(){
char choice=' ';
while(true){
System.out.print("您确认要删除吗?确认Y 否则N:");
choice = scanner.next().charAt(0);
if(choice=='Y'||choice=='N'){
break;
}else{
System.out.println("您的输入错误,请重新输入");
}
}
return choice;
}
//String类型,判断用户有没有输入回车
public String readString(){
String input = scanner.nextLine();//读取用户输入的一行信息,如果用户不输入
// 直接回车,则读取回车空信息
if(input.length()==0){//用户没输入
return input;//返回空信息
}
return input;//用户输入了信息,返回
}
//int类型,判断用户有没有输入回车
// public int readInt(){
// String input = scanner.nextLine();//nextLine()不能用int类型接收,我们只
//好用String类型接收在强转
// if(input.length()==0){//用户没输入,直接回车
// return -1;
// }
//用户输入了
// return Integer.parseInt(input);//将输入的String类型转换成为int类型
// }
//根据id修改房屋信息 371
public void update(){
System.out.println("=========修改房屋信息===========");
System.out.println("请选择待修改的房屋编号(-1退出)");
int updateId = scanner.nextInt();//用户输入id
if(updateId==-1){
System.out.println("==========放弃修改房屋信息===========");
return;
}
//根据输入得到updateId,查找对象
int index1 = find(updateId);
if(index1==-1){
System.out.println("=========修改的房屋信息不存在===========");
return;
}
//存在
System.out.print("姓名("+house[index1].getName()+"):");
String deteleEnter = scanner.nextLine();//注意!!!!!,重中之重
//以为之前接受用户输入id时,使用了"回车"结束了78行的输入语句,
// 但是我们第99行也就是下一行调用自己写的readString()时,这个方法里有nextLine()
//会把结束输入id时的回车读走,直接影响readString()方法后续的代码,产生错误,所以我们提前在
//二者之间写一个nextLine()读走那个留下来的回车,为readString()方法中的nextLine()
//清除障碍,保证其后续代码的正确
String name = readString();//这里如果用户直接回车表示不修改信息,默认为空""
//这里解释,即使name为空了,他也进不去if,所以修改不了信息
if(!"".equals(name)){//如果name不得空则修改,因为返回值是字符串类型所以不能用name!=""判断
house[index1].setName(name);//修改更新新信息
}
System.out.print("电话(" + house[index1].getPhone() + "):");
String phone = readString();
if (!"".equals(phone)) {
house[index1].setPhone(phone);
}
System.out.print("地址(" + house[index1].getAddress() + "): ");
String address = readString();
if (!"".equals(address)) {
house[index1].setAddress(address);
}
System.out.print("租金(" + house[index1].getRent() + "):");
String rent = readString();//这里虽然rent是int类型,但是我们就用String类型来操作
//等值传回来,我们将String类型通过Integer.parseInt(rent)方法
//强制转换为int类型
if (!"".equals(rent)) {
house[index1].setRent(Integer.parseInt(rent));
}
//如果理解不了强转,我还写了readInt()方法
// int rent = readInt();
// if(rent!=-1){
// house[index1].setRent(rent);
// }
System.out.print("状态(" + house[index1].getState() + "):");
String state = readString();
if (!"".equals(state)) {
house[index1].setState(state);
}
System.out.println("=============修改房屋信息成功============");
}
//根据id查找房屋信息 370
public void findHouse(){
System.out.println("=========查找房屋信息===========");
System.out.print("请输入要查找的房屋id:");
int findId = scanner.nextInt();
//调用方法
int index1 = find(findId);
if(index1==-1){//没找到
System.out.println("=========查找房屋信息id不存在===========");
}else{//找到了
System.out.println(house[index1]);
}
}
//完成退出确认 369
public boolean exit(){
char c = readConfirmSelection();
if(c=='Y'){
return false;
}
return true;
}
//编写delHouse() 接收输入的id,调用Service 的del方法 368
public void delHouse(){
System.out.println("=========删除房屋信息===========");
System.out.print("请输入待删除的房屋编号(-1退出):");
int delId = scanner.nextInt();
if(delId==-1){
System.out.println("=========放弃删除房屋信息===========");
return;//结束这个方法
}
//注意该方法本身就有循环判断的逻辑,必须输出Y/N
char choice = readConfirmSelection();
if(choice == 'Y'){
int index1 = find(delId);//查找id
if(index1==-1){
System.out.println("=============房屋编号不存在,删除失败============");
}else{
//删除,将后面的元素向前移
for (int i = index1; i < houseNum-1; i++) {
house[i]=house[i+1];
}
house[houseNum-1]=null;//把当前存在的元素最后面的位置置为空,因为元素都往前挪了,最后面那个位置肯定是空
houseNum--;//既然删除了,肯定当前数组中房屋数量减1啊
//序号也要减,后续id减1
for (int i = index1; i < houseNum; i++) {
int s = (house[i].getId())-1;
house[i].setId(s);
}
idCounter--;//当前数组中房屋id减1
System.out.println("=========删除房屋信息成功===========");
}
}else{
System.out.println("=========放弃删除房屋信息===========");
}
}
//增容
public void addCapacity(){
if(houseNum==house.length){//判断数组有没有满
//扩容
House houseNew[] = new House[house.length+2];//扩容创建一个新数组
for (int i = 0; i <house.length; i++) {
houseNew[i]=house[i];//将老数组信息拷贝到新数组
}
house=houseNew;//将扩容后的新数组指向老数组
//System.out.println("扩容成功~");
}
}
//编写addHouse() 接收输入,创建House对象,调用add方法 367
public void addHouse(){
System.out.println("=========添加房屋信息===========");
System.out.print("姓名:");
String name = scanner.next();
System.out.print("电话:");
String phone = scanner.next();
System.out.print("地址:");
String address = scanner.next();
System.out.print("月租:");
int rent = scanner.nextInt();
System.out.print("状态:");
String state = scanner.next();
//创建一个新的House对象, id 我们让系统分配
House newHouse = new House(0, name, phone, address, rent, state);
addCapacity();//判断是否增容
//添加newHouse对象,新增加一个房屋
house[houseNum]=newHouse;
houseNum++;//当前房屋数量++
System.out.println("=========添加房屋信息成功===========");
//设计一个id自增长机制,定义一个idCounter然后利用set方法设置id
idCounter++;//当前房屋id++
newHouse.setId(idCounter);
}
//编写listHouses()显示房屋列表 366
public void listHouse(){
System.out.println("=========房屋信息列表===========");
System.out.println("编号\t\t房主\t\t电话\t\t地址\t\t月租\t\t状态(未出租/已出租)");
for (int i = 0; i < house.length; i++) {//遍历数组返回信息
if(house[i]==null){
break;
}
System.out.println(house[i]);
}
System.out.println("=========房屋信息列表显示完成===========");
}
}
HouseView界面
package com.stulzl.houserent.view;
import com.stulzl.houserent.domain.House;
import com.stulzl.houserent.service.HouseService;
import java.util.Scanner;
//1. 显示界面 365
//2. 接收用户的输入
//3. 调用HouseService完成对房屋信息的各种操作
public class HouseView {//界面类,调用功能
private boolean loop=true;//控制菜单循环
private char key=' ';//接收用户输入
private HouseService houseService = new HouseService(2);//设置数组大小为10
public void mainMenu(){
//显示菜单
do{
System.out.println("==========房屋出租系统菜单============");
System.out.println("\t\t\t1 新 增 房 源");
System.out.println("\t\t\t2 查 找 房 屋");
System.out.println("\t\t\t3 删 除 房 屋 信 息");
System.out.println("\t\t\t4 修 改 房 屋 信 息");
System.out.println("\t\t\t5 房 屋 列 表");
System.out.println("\t\t\t6 退 出");
System.out.print("请输入你的选择(1-6): ");
Scanner scanner = new Scanner(System.in);
char key = scanner.next().charAt(0);
//key = Utility.readChar();//引入工具类,引入字符数输入
switch(key){
case '1':
houseService.addHouse();
break;
case '2':
houseService.findHouse();
break;
case '3':
houseService.delHouse();
break;
case '4':
houseService.update();
break;
case '5':
houseService.listHouse();
break;
case '6':
loop=houseService.exit();
break;
}
}while(loop);
System.out.println("=====您已经退出菜单系统=====");
}
}