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

实现房屋信息删除增删改查,那么现在应该实现房屋信息的删除
这里可以根据房屋信息的编号进行删除 , 也可以根据房屋的具体信息,例如:地址、姓名、电话等
以房屋编号为例
//编写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("=============放弃删除房屋信息============");}}业务方法del()需要在该业务方法中,按房屋编号实现对房屋对象数组元素的删除操作
//del方法,删除一个房屋信息public boolean del(int delId){//应先找到删除房屋的对应下标,房屋编号与下标不对应int index = -1;for (int i = 0; i < houseNums; i++) {if(delId == house[i].getId()){//要删除的房屋(id),是数组下标为i的元素index = i;//记录i}}if(index == -1){//说明delId在数组中不存在return false;}//如果找到应该怎么删除?//待删除元素(使用下标确定)的后一个元素前移 , 覆盖待删除元素//然后最后一位,置为null,重复上述操作for (int i = index; i < houseNums - 1; i++) {house[i] = house[i+1];}//置空最后一个元素//"前--"表示直接取用houseNums减一后的值,详见业务方法add()中对于"后++"的解释//house[houseNums - 1] = null;//houseNums--;//少一个元素house[--houseNums] = null;//把当前存在的房屋信息的最后一个置空return true;}实现房屋查找"增删改查"中的查询,依旧是先在界面类中给出功能findHouse(),调用业务方法实现房屋查询
//根据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");}}业务方法findById()查询的具体方式也是根据编号来,这样比较简单 。后续更新可以加入按其他属性查询的功能(摸了)
//findById()方法,根据id查找房屋 , 返回House对象或者nullpublic House findById(int findId){//遍历房屋数组for (int i = 0; i < houseNums; i++) {if(findId == house[i].getId()){return house[i];}}return null;}实现房屋信息更新更新房屋信息其实也包含着查询动作,先查出来才能更新,因此业务上不用写新的方法,复用findById()即可
//根据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("=============修改房屋信息成功============");}实现方式有点质朴,其实还可以优化的,下次再说
总结汇总一些用到的编程技巧
trick1在编写稍大一点的程序时,需要将页面和业务分离

推荐阅读