目录

  • 一、项目需求说明
  • 二、界面说明
    • 1.主界面
    • 2.新增房源界面
    • 3.查找房源界面
    • 4.删除房源界面
    • 5.修改房源界面
    • 6.房源列表界面
    • 7.退出界面
  • 三、程序框架图设计
  • 四、工具类的说明
  • 五、房屋出租系统-代码实现
    • 1.Utility工具类
    • 2.类的代码实现
      • (1)HouseRentApp类
      • (2)House类
      • (3)HouseService类
      • (4)HouseView类

一、项目需求说明

能够实现对房屋信息的添加、修改和删除(用数组实现),并能够打印房屋明细表,用户的所有输入均可以使用Utility工具类(比较综合的案例,对前面所学进行复习)

二、界面说明

1.主界面

2.新增房源界面

3.查找房源界面

需要输入查找房源的ID

显示房屋的基本信息

4.删除房源界面

需要输入的删除房源的ID编号,如果不想删除 则输入-1退出

是否需要删除(y/n)?

请输入你的选择(y/n)?

5.修改房源界面

需要输入的修改房屋的ID编号,如果不想修改 则输入-1退出;在修改过程中如果不想修改某一项,则直接回车即可,这里可以使用Utility工具类中readString方法

6.房源列表界面

7.退出界面

是否退出(Y/N),如果输入的不是Y/N,则重新输入,这里的输入利用工具类即可

三、程序框架图设计

四、工具类的说明

工具类的主要目的是提高开发的效率,使用别人写好的代码,完成一些简单常用的逻辑;在实际开发中,公司都会提供相应的工具类和开发库,程序员也需要能够看懂别人写的代码, 并能够正确的调用。

五、房屋出租系统-代码实现

1.Utility工具类

主要用于获取用户的各种输入

package com.houserent.utils;/**工具类的作用:处理各种情况的用户输入,并且能够按照程序员的需求,得到用户的控制台输入。*/import java.util.*;
/***/
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=>NString 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;}
}

2.类的代码实现

(1)HouseRentApp类

package com.houserent;import com.houserent.view.HouseView;public class HouseRentApp {public static void main(String[] args) {//用于代码测试new HouseView().mainMenu();System.out.println("你退出了房屋出租系统");}
}

(2)House类

package com.houserent.domain;public class House {//属性:编号、房主、电话、地址、月租、状态(出租/未出租)private int id;private String name;private String phone;private String address;private int rent;private String state;//构造方法和get、set方法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方法,当输出该对象时,则会默认调用toString方法@Overridepublic String toString() {return id +"\t" + name +"\t" + phone +"\t" + address +"\t" + rent +"\t" + state;}
}

(3)HouseService类

package com.houserent.service;import com.houserent.domain.House;public class HouseService {private House[] houses;     //保存House对象private int houseNums = 1;  //记录当前有多少个房屋信息private int idCount = 1;    //记录当前的ID增长到哪个值了//构造器,初始值public HouseService(int size){houses = new House[size];   //创建HouseService对象,指定数组大小houses[0] = new House(1,"张三","128","海定区",2000,"未出租");}//查找findById方法,返回House对象或者nullpublic House findById(int id){for (int i = 0; i < houseNums; i++) {if (id == houses[i].getId()) return houses[i];  //如果查找id存在,则返回调用House对象从而自动调用toSting方法}return null;}//删除房屋信息,返回值为boolean类型public boolean del(int delId){int index = -1;//判断要删除的ID编号是否存在,如果存在则index记录该编号for (int i = 0; i < houseNums; i++) {if (delId == houses[i].getId()){index = i;}}//如果不存在则返回false,为什么不直接写在上面代码里面(高内聚低耦合的编程思想)if (index == -1){return false;}//从删除的下标往后的信息,往前移动for (int i = index; i < houseNums - 1 ; i++) {houses[i] = houses[i+1];}//移动完成之后,将最后一个信息置空,并且把长度减1houses[--houseNums] = null;return true;}//添加新对象,返回值为boolean类型public boolean add(House newHouse){if (houseNums == houses.length){System.out.println("房屋信息已满,不能再添加了...");return false;}//把newHouse对象加入到,数组中,新增加了一个房屋houses[houseNums++] = newHouse;//设置id自增长机制,然后更新newHouse的idnewHouse.setId(++idCount);return true;}//返回houses数组public House[] list(){return houses;}
}

(4)HouseView类

package com.houserent.view;import com.houserent.domain.House;
import com.houserent.service.HouseService;
import com.houserent.utils.Utility;public class HouseView {private boolean loop = true;    //控制显示菜单private char key = ' ';     //接收用户选择private HouseService houseService = new HouseService(10);   //设置数组大小为10//修改方法updateHousepublic void updateHouse(){System.out.println("============修改信息============");System.out.println("请输入的修改房屋的ID编号输入-1退出");int id = Utility.readInt();  //调用工具类输入idif (id == -1 ){System.out.println("============放弃修改============");return; //退出方法}House house = houseService.findById(id);if (house == null){System.out.println("修改房屋信息不存在!");return;}System.out.println("姓名("+house.getName()+"): ");String newName = Utility.readString(10, ""); //如果用户不修改直接回车,则会有一个默认值""if (!"".equals(newName)){house.setName(newName);}System.out.println("电话("+house.getPhone()+"): ");String newPhone = Utility.readString(12, "");if (!"".equals(newPhone)){house.setPhone(newPhone);}System.out.println("地址("+house.getAddress()+"): ");String newAddress = Utility.readString(12, "");if (!"".equals(newAddress)){house.setAddress(newAddress);}System.out.println("租金("+house.getRent()+"): ");int newRent = Utility.readInt(-1);if (newRent != -1){house.setRent(newRent);}System.out.println("地址("+house.getState()+"): ");String newState = Utility.readString(12, "");if (!"".equals(newState)){house.setState(newState);}System.out.println("修改房屋信息成功");}//查询方法findHousepublic void findHouse(){System.out.println("============查找信息============");System.out.println("请输入的查找房屋的ID编号输入-1退出");int id = Utility.readInt();  //调用工具类输入idif (id == -1 ){System.out.println("============放弃查找============");return; //退出方法}House house = houseService.findById(id);if (house !=null){System.out.println("============查找成功============");System.out.println("编号\t\t房主\t\t电话\t\t地址\t\t月租\t\t状态(已出租/未出租)");System.out.println(house);}else {System.out.println("==========查找信息不存在==========");}}//退出方法public void exit(){char c = Utility.readConfirmSelection();if (c == 'Y'){System.out.println("成功退出");loop = false;}else if (c == 'N'){System.out.println("暂不退出");}}//编写delHouse() 接收输入的ID,并且调用Service中的del方法public void delHouse(){System.out.println("============删除信息============");System.out.println("请输入的修改房屋的ID编号输入-1退出");int id = Utility.readInt();  //调用工具类输入idif (id == -1 ){System.out.println("============放弃删除============");return; //退出方法}//调用工具类 该方法必须输入Y/N,否则一直提示char c = Utility.readConfirmSelection();if (c == 'Y'){if (houseService.del(id)){System.out.println("============删除成功============");}else {System.out.println("==========删除信息不存在==========");}}else {System.out.println("============放弃删除============");}}//编写listHouses()显示房屋列表public void listHouses(){System.out.println("============房屋列表============");System.out.println("编号\t\t房主\t\t电话\t\t地址\t\t月租\t\t状态(已出租/未出租)");//得到所有房屋信息House[] list = houseService.list();for (int i = 0; i < list.length; i++) {if (list[i] == null) break;     //如果为空则不用显示System.out.println(list[i]);    //会自动调用House类中的toString方法}}//编写addHouses()增加房屋信息,并且调用Service中的add方法public void addHouses(){System.out.println("============增加信息============");System.out.println("姓名:");String name = Utility.readString(16);System.out.println("电话:");String phone = Utility.readString(16);System.out.println("地址:");String address = Utility.readString(16);System.out.println("月租:");int rent = Utility.readInt();   //这里需要修改一下工具类 把长度改为10System.out.println("状态:");String state = Utility.readString(6);House newHouse = new House(0, name, phone, address, rent, state);if (houseService.add(newHouse)){System.out.println("添加房屋成功!");}else {System.out.println("添加房屋失败!");}}//显示主菜单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.println("请输入你的选择(1-6):");key = Utility.readChar();   //调用了工具类switch (key){case '1':addHouses();break;case '2':findHouse();break;case '3':delHouse();break;case '4':updateHouse();break;case '5':listHouses();break;case '6':exit();break;default:System.out.println("输入有误,请重新输入");}}while (loop);}
}

Java笔记之房屋出租系统(十一)相关推荐

  1. Java笔记——11.房屋出租系统

    11.房屋出租系统 项目需求说明 实现基于文本界面的"房屋出租系统" 能够实现对房屋信息的添加.修改和删除(用数组实现),并且能够打印房屋明细表 主菜单页面: 新增房源页面: 查找 ...

  2. Java/java程序设计:房屋出租系统:要求实现:新增房源,查找房屋信息,修改房屋信息,删除房屋信息,显示所有房屋列表,退出房屋管理系统;

    Java/java程序设计:房屋出租系统: 一.前言: 一.1. 框架图 二.各类包下的代码实现: 1. 主文件(运行文件HouseApp.java) 2. 房屋类文件(House.java) 3. ...

  3. Java笔记016-房屋出租系统

    目录 项目-房屋出租系统 项目需求说明 房屋出租系统-界面 项目界面-主菜单 项目界面-新增房源 项目界面-查找房源 项目界面-删除房源 项目界面-修改房源 项目界面-房屋列表 项目界面-退出系统 房 ...

  4. Java小项目——房屋出租系统

    程序入口 public class HouseRent {public static void main(String[] args) {new HouseView().Menu();} } 用户界面 ...

  5. Java项目:公寓房屋出租系统(java+SSM+JSP+EasyUI+Echarts+Mysql)

    源码获取:俺的博客首页 "资源" 里下载! 项目介绍 该项目分为前后台,分为普通用户与管理员两种角色. 前台主要功能包括: 普通用户的注册.登录,房屋列表展示,租房,我的订单.用户 ...

  6. java学习笔记(9) 第9章 Java项目-房屋出租系统

    Java项目-房屋出租系统 代码打包--百度网盘链接: 9.1 房屋出租系统-需求 9.1.1 项目需求说明 9.2 房屋出租系统-界面 9.3 房屋出租系统-设计(!!) 9.4 房屋出租系统-实现 ...

  7. B站韩顺平java学习笔记(八)-- 房屋出租系统(项目)章节

    目录 一 项目需求说明 1 项目界面 二  房屋租赁程序框架图 ​三  系统实现 1  完成House类 2  显示主菜单和完成退出软件的功能 3  完成显示房屋列表的功能 4  添加房屋信息的功能 ...

  8. 基于javaweb的公寓房屋出租系统(java+ssm+jsp+easyui+echarts+mysql)

    基于javaweb的公寓房屋出租系统(java+ssm+jsp+easyui+echarts+mysql) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/id ...

  9. 【韩顺平JAVA】房屋出租系统

    程序整体分析 示例代码 package houserent;import java.util.Scanner;public class HouseRentSYS {public static void ...

最新文章

  1. LeetCode实战:LRU缓存机制
  2. 厉害了!Antiilatency推出移动位置追踪器!
  3. 【ajax+php】动态展示4级单位(省、市、县、镇)
  4. C++回调函数是什么?
  5. 新云网站管理系统最新版注入漏洞
  6. UE3 移动设备主页
  7. php同步邮件,php – 使用同步驱动程序在Laravel 4中排队电子邮件
  8. k8s架构及服务详解
  9. 观察者模式-对象行为型
  10. 【软件工程】第一次阅读作业
  11. spring Assert
  12. select不能触发change_SQL之警觉触发
  13. VS2010 快捷键设置,快速编码1
  14. Java Thread 多线程 操作线程
  15. Java是否存在内存泄露
  16. 神州数码web登录方式
  17. Python3之牛吃草问题
  18. 解决IE没有响应、卡死现象
  19. IONIC扫描二维码和一维码(条形码)
  20. 收藏下Android手机驱动

热门文章

  1. jmeter设置中文
  2. 亚马逊首次亮相中性原子量子计算机Aquila
  3. 找出JS数组中最大的数字
  4. cookiecutter工具
  5. Simplify the Usage of Lexicon in Chinese NER阅读笔记
  6. Direct3D 10教程3:Shaders和Effect系统
  7. dubbo 协议层【Protocol】分析
  8. Unity报错之 No Sprite Editor Window registered. Please download 2D Sprite package from Package Manager.
  9. oem7f7激活win7时出现Cannot open file C:/OEMSF
  10. 解决MAC系统观看虎牙直播,发热卡顿问题。