需求

实现基于文本界面的房屋出租系统

能够实现对房屋信息的添加、修改和删除(数组),并能够展示房屋明细

设计

项目设计-程序框架图(分层模式-->当软件比较复杂,需要模式管理)逐渐理解设计模式

(1,系统有哪些类【文件】 2,明确类与类的调用关系)

实现

准备1:工具类Utility.java

便于获取输入,提高开发效率

在实际开发中,公司都会提供相应的工具类和开发库,可以提高开发效率,程序员也需要看懂别人写的代码,并能够正确使用。

准备2:对象类House.java

生成setter和getter方法、构造器,重写toString()方法,便于使用


/*** House的对象表示一个房屋信息*/
public class House {//编号  房主  电话  地址  月租  状态(未出租/已出租)private int id;private String name;private String phone;private String address;private int rent;private String state;//构造器和setter,getter,可自动生成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方法//编号  房主  电话  地址  月租  状态(未出租/已出租)@Overridepublic String toString() {return  id +"\t\t" + name +"\t" + phone +"\t\t" + address +"\t" + rent +"\t" + state ;}
}

技巧1:化繁为简,逐步实现

技巧2:实现功能三部曲:明确功能【需求】->思路分析【确定需求细节】->代码实现

实现1-显示主菜单和完成退出软件功能

需求:用户打开软件,可以看到主菜单,退出软件

思路:在HouseView.java类中,编写一个方法mainMenu(),显示菜单,并有退出选项

代码:

 //显示主菜单public 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 = 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();break;}} while (loop);}

实现2-完成显示房屋列表的功能

需求:用户可以以列表的形式查看房屋信息,编号 房主 电话 地址 月租 状态(未出租/已出租)

思路:在HouseView.java类中,编写展示房屋列表信息界面的方法,在HouseService.java类中,编写返回房屋信息的方法

代码:

//HouseView.java//编写listHouses()显示房屋列表public void listHouses() {System.out.println("=============房屋列表============");System.out.println("编号\t房主\t电话\t地址\t月租\t状态(未出租/已出租)");House[] houses = houseService.list();//调用houseService类的list()方法,获取所有房屋信息for (int i = 0; i < houses.length; i++) {if (houses[i] == null) {//过滤空信息,展示已有全部房屋信息break;}System.out.println(houses[i]);}System.out.println("=============房屋列表显示完毕============");}
//HouseService.java
//list方法,返回housespublic House[] list() {return houses;}

实现3-添加房屋信息的功能

需求:用户可以添加房屋信息至系统

思路:在HouseView.java类中,编写展示添加房屋信息界面的方法,在HouseService.java类中,编写添加房屋信息至House对象数组的方法。(注意:新添加的房屋的id以自增长方式增加;增加了数组扩容机制)

代码:

//HouseView.java//编写addHouse() 接收输入,创建House对象,调用add方法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.print("状态: ");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("=============添加房屋失败============");}}
//HouseService.java//add方法,添加新对象,返回booleanpublic boolean add(House newHouse) {//判断是否还可以继续添加(我们暂时不考虑数组扩容的问题) => 能否自己加入数组扩容机制(~~)if(houseNums == houses.length) {//不能再添加houses = addLengthArray(houses);//作者增加了数组扩容机制houses[houseNums++] = newHouse;newHouse.setId(++idCounter);return true;}else {//把newHouse对象加入到,新增加了一个房屋houses[houseNums++] = newHouse;//我们程序员需要设计一个id自增长的机制, 然后更新newHouse的idnewHouse.setId(++idCounter);return true;}}//数组动态扩容机制,可以将数组类型修改应用到其他类型的数组动态扩容public static House[] addLengthArray(House[] house){House [] newHouse = new House [house.length*2];//以原数组的二倍扩容System.arraycopy(house,0,newHouse,0,house.length);//复制house数组从0位置至house.length位置到newHouse数组0位置到array.length位置return newHouse;}

实现4-完成删除房屋信息功能

需求:用户可以选择删除房屋,以标号为依据,为防止用户误删,系统提示是否确认删除

思路:在HouseView.java类中,编写展示删除房屋信息的方法,在HouseService.java类中,编写删除Houses对象数组中房屋信息的方法。

代码:

//HouseView.java
//编写delHouse() 接收输入的id,调用Service 的del方法public void delHouse() {System.out.println("=============删除房屋信息============");System.out.print("请输入待删除房屋的编号(-1退出):");int delId = Utility.readInt();if (delId == -1) {System.out.println("=============放弃删除房屋信息============");return;}//注意该方法本身就有循环判断的逻辑,必须输出Y/Nchar choice = Utility.readConfirmSelection();if (choice == 'Y') {//用户确认删除if (houseService.del(delId)) {System.out.println("=============删除房屋信息成功============");} else {System.out.println("=============房屋编号不存在,删除失败============");}} else {System.out.println("=============放弃删除房屋信息============");}}
//HouseService.java//del方法,根据用户输入的id,删除该id房屋信息public boolean del(int delId) {//首先找到要删除的房屋信息对应的下标int index = -1;for(int i = 0; i < houseNums; i++) {if(delId == houses[i].getId()) {//要删除的房屋(id),是数组下标为i的元素index = i;//使用index记录i}}if(index == -1) {//index依然是初始值,说明delId在数组中不存在return false;}for(int i = index; i < houseNums - 1; i++) {//找到指定id对应的数组下标 index ,将index后的每个数组值覆盖到该数组值的前一位,以达到删除下标为index的数组值的目的houses[i] = houses[i+1];}houses[--houseNums] = null;//覆盖之后,数组存储的最后一个房屋信息多余,所以把当下存在的房屋信息的最后一个置为nullreturn true;}

实现5-完善退出确认功能

需求:用户在退出时提示“确认是否退出(Y/N):”,必须输入y/n,否则循环提示

思路:在HouseView.java类中,编写退出确认方法

代码:

 //完成退出确认public void exit() {//这里我们使用Utility提供方法,完成确认char c = Utility.readConfirmSelection();if (c == 'Y') {loop = false;}}

实现6-完成根据id查找房屋信息的功能

需求:用户输入房屋id,查找房屋信息

思路:在HouseView.java类中,编写展示查找房屋信息的方法,获取房屋id,在HouseService.java类中,编写查找并返回Houses对象数组中房屋信息的方法。

代码:

//HouseView.java
//根据id查找房屋信息public void findHouse() {System.out.println("=============查找房屋信息============");System.out.print("请输入要查找的id: ");int findId = Utility.readInt();//调用方法House house = houseService.findById(findId);if (house != null) {System.out.println(house);} else {System.out.println("=============查找房屋信息id不存在============");}}
//HouseService.java
//findById方法,返回House对象或者nullpublic House findById(int findId) {//遍历数组for(int i = 0; i < houseNums; i++) {if(findId == houses[i].getId()) {return houses[i];}}return null;}

实现-完成修改房屋信息的功能

需求:用户输入房屋id,修改房屋信息

思路:在HouseView.java类中,编写展示修改房屋信息的方法,获取用户输入的id,根据id调用findById()方法,查找到House对象,修改指定属性。

代码:

//HouseView.java
//根据id修改房屋信息public void update() {System.out.println("=============修改房屋信息============");System.out.println("请选择待修改房屋编号(-1表示退出)");int updateId = Utility.readInt();if (updateId == -1) {System.out.println("=============你放弃修改房屋信息============");return;}//根据输入得到updateId,查找对象//老师特别提示:返回的是引用类型[即:就是数组的元素]//因此老师在后面对house.setXxx() ,就会修改HouseService中houses数组的元素!!!!!!!!!!House house = houseService.findById(updateId);if (house == null) {System.out.println("=============修改房屋信息编号不存在..============");return;}System.out.print("姓名(" + house.getName() + "): ");String name = Utility.readString(8, "");//这里如果用户直接回车表示不修改该信息,默认""if (!"".equals(name)) {//修改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("=============修改房屋信息成功============");}

项目源码

项目免费源码,关注微信公众号:Java烂笔头,回复:房屋出租


鸣谢韩顺平老师

房屋出租系统(Java实现-命令行练习版)相关推荐

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

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

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

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

  3. 零钱通项目(Java实现-命令行练习版)

    前言 适合初学者理解面向对象以及初步建立系统概念,体会面向对象OOP优点 需求 使用 Java 开发零钱通项目 , 可以完成收益入账,消费,查看明细,退出系统等功能. 界面 项目实现 过程实现 imp ...

  4. 房屋出租系统(链表实现)

    因为做期末课设必须要用到数据结构 就把原来数组实现的房屋出租系统改成了用链表实现,删减了原先的一部分内容 原文章:房屋出租系统(java)_m0_55997161的博客-CSDN博客_java 房屋出 ...

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

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

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

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

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

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

  8. 【Java房屋出租系统】韩顺平java学习房屋出租系统

    房屋出租系统效果图示 房屋出租系统主类 package hspedu.houseRent;import java.util.Map;public class HouseRentSys {public ...

  9. Java 第一阶段建立编程思想 【房屋出租系统】

    Java 第一阶段建立编程思想 [房屋出租系统] 1. 项目需求说明 2. 项目界面 1. 主菜单 2. 新增房源 3. 查找房源 4. 删除房源 5. 修改房源 6. 房屋列表 7. 退出系统 3. ...

  10. Java笔记之房屋出租系统(十一)

    目录 一.项目需求说明 二.界面说明 1.主界面 2.新增房源界面 3.查找房源界面 4.删除房源界面 5.修改房源界面 6.房源列表界面 7.退出界面 三.程序框架图设计 四.工具类的说明 五.房屋 ...

最新文章

  1. java jdwp如何关闭_蚀-本机方法中的致命错误:JDWP没有初始化传输,jvmtiError = AGENT_ERROR_TRANSPORT_INIT(197)...
  2. 【Android 应用开发】Canvas 绘制文字 ( 文字尺寸测量 | 基线绘制 )
  3. Scratch第四十九讲:完美的下落和反弹
  4. 照片尺寸大小对照表_贴片led灯珠型号对照表在手,贴片灯珠选型从此不愁!
  5. wire 和 reg_Wire和Launchkit开源,水流监控系统以及更多新闻
  6. 黑客新技术在ATM钻洞就让其吐钱
  7. spring boot小说网站系统 毕业设计源码论文+答辩PPT
  8. 机器学习必须要会的:方差、标准差、相对标准偏差、正态分布的概念
  9. PTA:7-32 计算天数
  10. 写得太好了,大约《越狱》批评(发布)
  11. 国家电网公司电力系统设备无源无线测温需求分析
  12. Shell(Bash)输入一个IP 判断是否可用并进行ping 测试
  13. hive自定义函数过滤emoj表情符
  14. 第二次热带近岸出海记录
  15. 《使命召唤》手游滑铲怎么释放?什么时候使用滑铲更好?
  16. 牛客算法周周练11 A.切题之路 签到题
  17. 决定迭代次数的两种效应
  18. python爬取携程网旅游_爬虫之携程网旅游信息爬取
  19. java socket demo及其缺点
  20. Sci论文常见的格式问题

热门文章

  1. android 评论发表情,安卓微信朋友圈怎么评论发表情包 微信朋友圈评论发表情包方法...
  2. 计算机无法安装新字体,如何解决XP系统中无法安装新字体
  3. HarmonyOS笔记
  4. 用PS抽出滤镜让头发溶于背景nbsp;简单…
  5. 使运行的窗口不在任务栏显示
  6. 基于SVP的格密码计算复杂性问题
  7. SVP——一种用于深度学习的高效数据选择方法
  8. eclipse编译Duet固件的完整过程
  9. 安全电子签章密码技术规范_《密码法》中的“密码”,你真的了解吗?
  10. Mac下实现Word文档批量转换为PDF