当前位置: 首页 > news >正文

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

程序整体分析

在这里插入图片描述

示例代码

package houserent;import java.util.Scanner;public class HouseRentSYS {public static void main(String[] args) {new HouseRentSYS().MainMenu();  //调用显示操作界面的方法}private boolean loop = true;    //控制菜单private char key = ' ';    //输入的选项private HouseService houseService = new HouseService(5); //设置最大存储五个房屋信息//显示操作界面private void MainMenu() {do {System.out.println("\n=============房屋出租系统菜单============");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 = Util.readChar();  //获取控制台输入的选择switch (key) {case '1':this.addHouse();break;case '2':this.findHouse();break;case '3':this.delHouse();break;case '4':this.update();break;case '5':this.listHouses();break;case '6':this.exit();break;default:}} while (loop);}//添加房屋信息private void addHouse() {System.out.println("=============添加房屋============");System.out.print("姓名:");String name = Util.readString(8);System.out.print("电话:");String phone = Util.readString(12);System.out.print("地址:");String address = Util.readString(16);System.out.print("月租:");int rent = Util.readInt();System.out.print("状态:");String state = Util.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("=============添加房屋失败============");}}//查找房屋信息private void findHouse() {System.out.println("=============查找房屋信息============");System.out.printf("请输入要查找的id:");int findId = Util.readInt();//查询房屋信息House house = houseService.findByID(findId);if (house != null) System.out.println(house.toString());else System.out.println("=============查找房屋信息id不存在============");}//删除房屋信息private void delHouse() {System.out.println("=============删除房屋信息============");System.out.printf("请输入要删除的房屋id(-1退出):");int delId = Util.readInt();if (delId == -1) {System.out.println("放弃删除房屋信息");return; //-1退出}//确认删除 (Y/N)char choice = Util.readConfirmSelection();if (choice == 'Y') {if (houseService.del(delId)) {System.out.println("=============删除房屋信息成功============");} else {System.out.println("=============房屋编号不存在,删除失败============");}} else {System.out.println("=============放弃删除房屋信息============");}}//更新房屋信息private void update() {System.out.println("=============修改房屋信息============");System.out.println("请选择待修改房屋编号(-1表示退出):");int updateId = Util.readInt();if (updateId == -1) {System.out.println("放弃修改房屋信息");return; //-1退出}//查找要修改的房屋对象 根据idHouse house = houseService.findByID(updateId);if (house == null) {System.out.println("房屋信息不存在");return;}System.out.print("姓名(" + house.getName() + "):");String name = Util.readString(8, "");    //获取要修改的内容 ,不修改默认为空//修改内容不为空则修改if (!name.equals("")) {house.setName(name);}System.out.print("电话(" + house.getPhone() + "):");String phone = Util.readString(12, "");    //获取要修改的内容 ,不修改默认为空//修改内容不为空则修改if (!phone.equals("")) {house.setPhone(phone);}System.out.print("地址(" + house.getAddress() + "):");String address = Util.readString(18, "");    //获取要修改的内容 ,不修改默认为空//修改内容不为空则修改if (!address.equals("")) {house.setAddress(address);}System.out.print("租金(" + house.getRent() + "):");int rent = Util.readInt(-1);//修改内容不为空则修改if (rent != -1) {house.setRent(rent);}System.out.print("状态(" + house.getState() + "):");String state = Util.readString(3, "");    //获取要修改的内容 ,不修改默认为空//修改内容不为空则修改if (!state.equals("")) {house.setState(state);}System.out.println("房屋信息修改成功");}//显示房屋信息列表private void listHouses() {System.out.println("=============房屋列表============");System.out.println("编号\t\t房主\t\t电话\t\t地址\t\t月租\t\t状态(未出租/已出租)");House[] houses = houseService.list();   //获取所有的房屋信息//遍历输出所有房屋信息for (int i = 0; i < houses.length; i++) {if (houses[i] == null) break;    //空信息跳出循环System.out.println(houses[i]);}System.out.println("房屋列表显示完成");}//退出private void exit() {char c = Util.readConfirmSelection();   //确认退出 (Y/N)if (c == 'Y') {loop = false;      //修改循环条件}}
}//House 对象
class House {private int id;         //idprivate String name;    //姓名private String phone;   //电话private String address; //地址private int rent;       //月租private String state;   //状态(已出租/未出租)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 void setId(int id) {this.id = id;}@Overridepublic String toString() {return id +"\t\t" + name +"\t" + phone +"\t\t" + address +"\t" + rent +"\t" + state;}public void setName(String name) {this.name = name;}public void setPhone(String phone) {this.phone = phone;}public void setAddress(String address) {this.address = address;}public void setRent(int rent) {this.rent = rent;}public void setState(String state) {this.state = state;}public int getId() {return id;}public String getName() {return name;}public String getPhone() {return phone;}public String getAddress() {return address;}public int getRent() {return rent;}public String getState() {return state;}
}//用于存储House对象 并对存储的house对象进行操作
class HouseService {private House[] houses; //保存house对象private int houseNums = 1; //当前记录的房屋信息数量private int idCounter = 1; //记录当前的id增长到哪个值//构造器public HouseService(int size) {houses = new House[size];   //开辟数组空间//初始化一个测试House对象houses[0] = new House(1, "张三", "112", "朝阳区", 2600, "未出租");}//公有的通过id查找房屋信息的方法public House findByID(int findId) {//遍历房屋信息for (int i = 0; i < houseNums; i++) {if (findId == houses[i].getId()) {return houses[i];}}return null;}//公有的用于删除一个房屋信息的方法public boolean del(int delId) {int index = -1;     //用于定位要删除房屋信息的idfor (int i = 0; i < houseNums; i++) {if (delId == houses[i].getId()) {index = i;  //获取要删除房屋的信息}}if (index == -1) return false;   //没有该房屋 返回false//存在该房屋信息,则把该下标后面的所有房屋信息往前移for (int i = index; i < houseNums - 1; i++) {houses[i] = houses[i + 1];}//将最后一个房屋信息置为空,房屋数量-1houses[--houseNums] = null;return true;}//公有的用于添加房屋信息的方法public boolean add(House newHouse) {//判断是否可以继续添加if (houseNums == houses.length) {System.out.println("数组已满,不能在添加了..");return false;}//将newhouse对象追加到数组后面,房屋数量+1houses[houseNums++] = newHouse;//id自增,修改当前房屋信息的idnewHouse.setId(++idCounter);return true;}//公有的用于返回当前房屋信息数组的方法public House[] list() {return houses;}
}/*** 工具类的作用:* 处理各种情况的用户输入,并且能够按照程序员的需求,得到用户的控制台输入。*/
class Util {//私有的静态的用于输入数据的属性private static Scanner scanner = new Scanner(System.in);/*** 功能:读取键盘输入的一个菜单选项,值:1——6的范围** @return 1——5*/public static char readMenuSelection() {char c;while (true) {String str = readKeyBoard(1, false); //读取包含一个字符的字符串c = str.charAt(0);//将字符串第一个字符赋给cif (c != '1' && c != '2' && c != '3' && c != '4' && c != '5' && c != '6') {System.out.println("选择错误,重新输入:");} else {break;}}return c;}/*** 功能:读取键盘输入的确认选项,Y或N* 将小的功能,封装到一个方法中.** @return Y或N*/public static char readConfirmSelection() {System.out.println("请输入你的选择(Y/N):");char c;while (true) {//获取一个字符 并转为大写字母String str = readKeyBoard(1, false).toUpperCase();c = str.charAt(0);if (c == 'Y' || c == 'N') {break;} else {System.out.println("输入的不是(Y/N),请重新输入:");}}return c;}/*** 功能:读取键盘输入的一个字符** @return 一个字符*/public static char readChar() {String str = readKeyBoard(1, false); //读取字符串return str.charAt(0);   //返回读取到的第一个字符}/*** 功能:读取键盘输入的指定长度的字符串** @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;}/*** 功能:读取键盘输入的整型,长度小于2位** @return 整数*/public static int readInt() {int n;while (true) {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;while (true) {String str = readKeyBoard(10, true); //读取一个字符串长度最大为10  允许为空if (str.equals("")) { //判断str是否为空return defaultValue;    //返回指定的默认值}try {n = Integer.parseInt(str);  //将字符串转换为intbreak;  //跳出} catch (NumberFormatException e) {System.out.print("数据输入错误,请重新输入:");}}return n;   //返回}/*** 功能: 读取一个字符串** @param limit       读取的长度* @param blankReturn 如果为true ,表示 可以读空字符串。*                    如果为false表示 不能读空字符串。*                    <p>*                    如果输入为空,或者输入大于limit的长度,就会提示重新输入。* @return*/private static String readKeyBoard(int limit, boolean blankReturn) {String line = ""; //定义一个空字符串//方法hasNextLine()用于判断是否由下一行while (scanner.hasNextLine()) {line = scanner.nextLine();  //读取一行数据//判断读取的这一行数据是否为空if (line.length() == 0) {//判断是否允许返回空值,允许则之间返回,不允许则重新执行循环if (blankReturn) return line;else continue;}break;}return line;    //返回读取到的字符串}
}

样例输出

在这里插入图片描述


http://www.taodudu.cc/news/show-4752376.html

相关文章:

  • 【Linux】信号
  • Sysmon初探
  • mplab ide中使用c语言编程,PIC单片机的C语言使用——在MPLAB-IDE中使用HitechC编译器.doc...
  • 【轮转数组】力扣python
  • 软链接(Symbolic link)和硬链接(Hard link)有什么区别:
  • 富格林:梳理可信经验保障安全
  • 日本九州攻略
  • 已知分布函数求概率密度例题_【考研数学】考试重点、难点和常考题型:?随机变量及其分布...
  • 【概率论】作业三
  • 贝叶斯课后习题(零)常用分布
  • 【概率论与数理统计】猴博士 笔记 p29-32 均匀分布、泊松分布、指数分布、几何分布
  • 怎样用matlab产生泊松分布随机数
  • 模拟台球运动
  • 【算法修炼】台球碰撞 C
  • c语言写台球游戏,OpenGL版 3D台球 (原创,Basic实现) 申精!
  • 网站快照被劫持怎么办?
  • 网站快照被篡改劫持怎么办
  • recv_contxt = std::string( (char*)recv_buffer+sizeof(Req),pReq->context_len-86);
  • typedef int(*P)(int )
  • BLE 协议栈之 主机透传
  • 安装LR11 时,安装Microsoft Visual c++2005 sp1运行时组件,就会提示命令行选项语法错误,键入“命令/?”可获取帮肋信息...
  • HTTP 代理原理及实现(一)
  • ST17H66低功耗蓝牙SOC开发(7)—— simpleBleCentral工程讲解(下)
  • 面试集锦-------LRU,LFU手撕算法
  • 若干个进阶SQL 进阶技巧
  • 【小知识】linux hash命令
  • oracle中的flag,MMT 表中的 Cost_Flag=E,如何解决?
  • rc.conf中 cpu_preq的设定
  • 有什么免费软件可以替代几何画板?
  • 怎么在Word中插入几何画板图形
  • 如何用几何画板作正方体的动态展开图
  • 几何画板动画制作教程,一看就会。
  • 用户中心登录注册整理
  • UC浏览器不让访问网站的解决办法
  • EventBus如何使用及一些常见场景
  • Blender 3D环境场景创建教程