房屋出租系统(Java实现-命令行练习版)
需求
实现基于文本界面的房屋出租系统
能够实现对房屋信息的添加、修改和删除(数组),并能够展示房屋明细
设计
项目设计-程序框架图(分层模式-->当软件比较复杂,需要模式管理)逐渐理解设计模式
(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实现-命令行练习版)相关推荐
- 基于javaweb的公寓房屋出租系统(java+ssm+jsp+easyui+echarts+mysql)
基于javaweb的公寓房屋出租系统(java+ssm+jsp+easyui+echarts+mysql) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/id ...
- Java项目:公寓房屋出租系统(java+SSM+JSP+EasyUI+Echarts+Mysql)
源码获取:俺的博客首页 "资源" 里下载! 项目介绍 该项目分为前后台,分为普通用户与管理员两种角色. 前台主要功能包括: 普通用户的注册.登录,房屋列表展示,租房,我的订单.用户 ...
- 零钱通项目(Java实现-命令行练习版)
前言 适合初学者理解面向对象以及初步建立系统概念,体会面向对象OOP优点 需求 使用 Java 开发零钱通项目 , 可以完成收益入账,消费,查看明细,退出系统等功能. 界面 项目实现 过程实现 imp ...
- 房屋出租系统(链表实现)
因为做期末课设必须要用到数据结构 就把原来数组实现的房屋出租系统改成了用链表实现,删减了原先的一部分内容 原文章:房屋出租系统(java)_m0_55997161的博客-CSDN博客_java 房屋出 ...
- Java/java程序设计:房屋出租系统:要求实现:新增房源,查找房屋信息,修改房屋信息,删除房屋信息,显示所有房屋列表,退出房屋管理系统;
Java/java程序设计:房屋出租系统: 一.前言: 一.1. 框架图 二.各类包下的代码实现: 1. 主文件(运行文件HouseApp.java) 2. 房屋类文件(House.java) 3. ...
- 【韩顺平JAVA】房屋出租系统
程序整体分析 示例代码 package houserent;import java.util.Scanner;public class HouseRentSYS {public static void ...
- java学习笔记(9) 第9章 Java项目-房屋出租系统
Java项目-房屋出租系统 代码打包--百度网盘链接: 9.1 房屋出租系统-需求 9.1.1 项目需求说明 9.2 房屋出租系统-界面 9.3 房屋出租系统-设计(!!) 9.4 房屋出租系统-实现 ...
- 【Java房屋出租系统】韩顺平java学习房屋出租系统
房屋出租系统效果图示 房屋出租系统主类 package hspedu.houseRent;import java.util.Map;public class HouseRentSys {public ...
- Java 第一阶段建立编程思想 【房屋出租系统】
Java 第一阶段建立编程思想 [房屋出租系统] 1. 项目需求说明 2. 项目界面 1. 主菜单 2. 新增房源 3. 查找房源 4. 删除房源 5. 修改房源 6. 房屋列表 7. 退出系统 3. ...
- Java笔记之房屋出租系统(十一)
目录 一.项目需求说明 二.界面说明 1.主界面 2.新增房源界面 3.查找房源界面 4.删除房源界面 5.修改房源界面 6.房源列表界面 7.退出界面 三.程序框架图设计 四.工具类的说明 五.房屋 ...
最新文章
- java jdwp如何关闭_蚀-本机方法中的致命错误:JDWP没有初始化传输,jvmtiError = AGENT_ERROR_TRANSPORT_INIT(197)...
- 【Android 应用开发】Canvas 绘制文字 ( 文字尺寸测量 | 基线绘制 )
- Scratch第四十九讲:完美的下落和反弹
- 照片尺寸大小对照表_贴片led灯珠型号对照表在手,贴片灯珠选型从此不愁!
- wire 和 reg_Wire和Launchkit开源,水流监控系统以及更多新闻
- 黑客新技术在ATM钻洞就让其吐钱
- spring boot小说网站系统 毕业设计源码论文+答辩PPT
- 机器学习必须要会的:方差、标准差、相对标准偏差、正态分布的概念
- PTA:7-32 计算天数
- 写得太好了,大约《越狱》批评(发布)
- 国家电网公司电力系统设备无源无线测温需求分析
- Shell(Bash)输入一个IP 判断是否可用并进行ping 测试
- hive自定义函数过滤emoj表情符
- 第二次热带近岸出海记录
- 《使命召唤》手游滑铲怎么释放?什么时候使用滑铲更好?
- 牛客算法周周练11 A.切题之路 签到题
- 决定迭代次数的两种效应
- python爬取携程网旅游_爬虫之携程网旅游信息爬取
- java socket demo及其缺点
- Sci论文常见的格式问题
热门文章
- android 评论发表情,安卓微信朋友圈怎么评论发表情包 微信朋友圈评论发表情包方法...
- 计算机无法安装新字体,如何解决XP系统中无法安装新字体
- HarmonyOS笔记
- 用PS抽出滤镜让头发溶于背景nbsp;简单…
- 使运行的窗口不在任务栏显示
- 基于SVP的格密码计算复杂性问题
- SVP——一种用于深度学习的高效数据选择方法
- eclipse编译Duet固件的完整过程
- 安全电子签章密码技术规范_《密码法》中的“密码”,你真的了解吗?
- Mac下实现Word文档批量转换为PDF