【Java复健指南09】项目练习全解--房屋出租系统( 四 )


trick2对象数组也可以初始化
trick3删除数组中元素的技巧:覆盖删除【来着业务方法del()】
//待删除元素(使用下标确定)的后一个元素前移,覆盖待删除元素//然后最后一位,置为null,重复上述操作for (int i = index; i < houseNums - 1; i++) {house[i] = house[i+1];}trick4"后++"对于精简代码的实际应用【业务方法add()】
//house[houseNums] = newHouse;//houseNums ++;//新增一个房屋//上述代码可以利用"后++"的特性整合//houseNums++的值是运行一次之后才会自增的//例如,当前houseNums为1,数组设定为10,新增房屋信息肯定是可以的//因此 , 在数组索引为1的地方加入newHouse , 之后houseNums自增为2house[houseNums++] = newHouse;//后++完整代码HouseView.javapackage com./.../.houserent.view;import com./.../.houserent.domain.House;import com./.../.houserent.service.HouseService;import com./.../.houserent.utils.Utility;/** * 1.显示界面 * 2.接收用户的输入 * 3.调用HouseService完成对房屋信息的各种操作 */public class HouseView {private boolean loop = true;//控制显示菜单private char key = ' ';//接受用户选择private HouseService houseService = new HouseService(10);//数组大小10//根据id修改房屋信息//调findById就行,不用在HouseService中添加新业务功能public void update(){System.out.println("=============修改房屋信息============");System.out.println("请选择待修改房屋编号(-1退出):");int updateId = Utility.readInt();if(updateId == -1){System.out.println("=============已放弃修改============");return;}//根据输入的ID查找对象//因为这里是引用对象,所以原数组是会被同步改动的House house = houseService.findById(updateId);if(house==null){System.out.println("=============房屋信息不存在 。。。=============");return;}//若房屋存在System.out.print("姓名("+house.getName()+"):");String name = Utility.readString(10,"");//若用户直接回车则默认""if (!"".equals(name)) {//如果不是空的就用get方法修改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("=============修改房屋信息成功============");}//根据id查找房屋(改进 , 通过地址查询)public void findHouse(){System.out.println("=============查询房屋信息============");System.out.println("请输入想查询的房屋ID: ");int findId = Utility.readInt();House houses = houseService.findById(findId);//返回所有房屋信息,保存在houses数组中if(houses != null){System.out.println(houses);}else {System.out.println("无查询结果,请输入正确的房屋ID");}}//完成退出确认public void exit() {//这里我们使用Utility提供方法,完成确认char c = Utility.readConfirmSelection();if (c == 'Y') {loop = false;}}//编写delHouse() 接收输入的id号//与addHouse()类似,最终的删除逻辑在业务类中实现,这边只是调用相关方法public void delHouse(){System.out.println("=============删除房屋信息============");System.out.print("请输入待删除的房屋编号或输入-1退出: ");int delId = Utility.readInt();if(delId == -1){System.out.println("=============放弃删除房屋信息============");return;}//该方法本身就有循环判断逻辑 , 必须输入Y/N才能退出char choice = Utility.readConfirmSelection();if(choice=='Y'){//真的删除if(houseService.del(delId)){System.out.println("=============删除房屋信息成功============");}else {System.out.println("=============房屋编号不存在 , 删除失败============");}}else {System.out.println("=============放弃删除房屋信息============");}}//编写addHouse()接受输入,创建House对象,调用add方法//addHouse()仅负责在界面层面的添加,实际去操控House对象数组完成添加的方法属于具体的业务功能//即add()方法应该在HouseService.java中定义,在HouseView.java的addHouse()调用,遵循之前的类关系图设计public void addHouse(){System.out.println("=============添加房屋============");System.out.print("姓名: ");String name = Utility.readString(8);System.out.print("电话: ");String phone = Utility.readString(12);System.out.print("地址: ");String address = Utility.readString(16);System.out.print("月租: ");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("=============添加房屋失败============");}}//编写listHouses()显示房屋列表//其中实例化调用了房屋对象House,并使用了对象数组//因此需要先对House进行定义public void listHouses(){System.out.println("=============房屋列表============");System.out.println("编号\t\t房主\t\t电话\t\t地址\t\t月租\t\t状态(未出租/已出租)");House[] houses = houseService.list();//返回所有房屋信息,保存在houses数组中for (int i = 0; i < houses.length; i++) {if (houses[i] == null) {break;}System.out.println(houses[i]);}System.out.println("=============房屋列表显示完毕============");}//显示主菜单//仍然是用之前提到的do-while循环实现显示,loop标志位控制是否结束(退出系统)显示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):");key = Utility.readChar();switch (key) {case '1':addHouse();break;case '2':findHouse();break;case '3':delHouse();break;case '4':update();break;case '5':listHouses();break;case '6':exit();loop = false;break;}}while (loop);}}

推荐阅读