业务方法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在编写稍大一点的程序时,需要将页面和业务分离
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);}}
经验总结扩展阅读
- 【Bluetooth蓝牙开发】一、开篇词 | 打造全网最详细的Bluetooth开发教程
- 【Bluetooth|蓝牙开发】二、蓝牙开发入门
- 【深入浅出 Yarn 架构与实现】1-1 设计理念与基本架构
- 【Azure 事件中心】Event Hub 无法连接,出现 Did not observe any item or terminal signal within 60000ms in 'flatMapMany' 的错误消息
- 2023年9月15日是买鱼吉日吗 2023年9月15日买鱼行吗
- Java集合精选常见面试题
- 2023年农历正月初七宜买鸭吗 2023年1月28日买鸭好吗
- 很可爱奶凶奶凶的句子 可爱萌炸了的小情话
- 父亲刚去世的朋友圈心情短句 失去爸爸撕心裂肺感言
- 2023年1月28日适合装修屋顶吗 2023年1月28日装修屋顶行吗