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


package com.houserent;import com.houserent.view.HouseView;public class HouseRentApp {public static void main(String[] args) {//创建HouseView对象,并且显示主菜单,是整个程序的入口byte b1 = 123;b1 += 100000; //如果 b1 = b1 + 100000;//编译都不能过System.out.println(b1);byte b2 = 123;b2 = (byte)(b2 + 100000);System.out.println(b2);//创建HouseView对象,并且显示主菜单,是整个程序的入口new HouseView().mainMenu();System.out.println("===你退出房屋出租系统==");}
}
---------------------------------------------------------------------------------------------------------------------
package 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(2);//设置数组的大小为2//显示主菜单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);}//编写listHouses()显示房屋列表public 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) {//如果为null,就不用再显示了break;}System.out .println(houses[i]);}System.out.println("=============房屋列表显示完毕============");}//编写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 newHouse = new House(0, name, phone, address, rent, state);//创建一个新的House对象, 注意id是系统分配的,if (houseService.add(newHouse)) {System.out.println("=============添加房屋成功============");} else {System.out.println("=============添加房屋失败============");}}//编写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;//表示结束这个方法}char choice = Utility.readConfirmSelection(); //注意该方法本身就有循环判断的逻辑,必须输出Y/Nif (choice == 'Y') {//真的删除if (houseService.del(delId)) {System.out.println("=============删除房屋信息成功============");} else {System.out.println("=============房屋编号不存在,删除失败============");}} else {System.out.println("=============放弃删除房屋信息============");}}//完成退出确认public void exit() {//这里我们使用Utility提供方法,完成确认char c = Utility.readConfirmSelection();if (c == 'Y') {loop = false;}}//根据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不存在============");}}//根据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("=============修改房屋信息成功============");}
}
---------------------------------------------------------------------------------------------------------------------
package com.houserent.service;import com.houserent.domain.House;/*** HouseService.java<=>类 [业务层]* //定义House[] ,保存House对象* 1. 响应HouseView的调用* 2. 完成对房屋信息的各种操作(增删改查c[create]r[read]u[update]d[delete])*/
public class HouseService {private House[] houses; //保存House对象private int houseNums = 1; //记录当前有多少个房屋信息private int idCounter = 1; //记录当前的id增长到哪个值//构造器public HouseService(int size) {//new houseshouses = new House[size];//当创建HouseService对象,指定数组大小//为了配合测试列表信息,初始化一个House对象houses[0] = new House(1,"jack","112", "海淀区", 2000, "未出租");}//list方法,返回housespublic House[] list() {return houses;}//add方法,添加新对象,返回booleanpublic boolean add(House newHouse){//判断是否还可以继续添加(暂时不考虑数组扩容的问题) => 能否自己加入数组扩容机制if(houseNums == houses.length) {//不能再添加System.out.println("数组已满,不能再添加...");return false;}//把newHouse对象加入到,新增加了一个房屋,houseNums++,后++houses[houseNums++] = newHouse;//程序员需要设计一个id自增长的机制, 然后更新newHouse的idnewHouse.setId(++idCounter);return true;}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) {//说明delId在数组中不存在return false;}//如果找到,for(int i = index; i < houseNums - 1; i++) {houses[i] = houses[i+1];}houses[--houseNums] = null; //把当有存在的房屋信息的最后一个,设置null/*上一行也可以写成:houses[houseNums - 1] = null;houseNums--;//删除一个,即是少一个*/return true;}//findById方法,返回House对象或者nullpublic House findById(int findId) {//遍历数组for(int i = 0; i < houseNums; i++) {if(findId == houses[i].getId()) {return houses[i];}}return null;}
}
---------------------------------------------------------------------------------------------------------------------
package com.houserent.utils;public class TestUtility {public static void main(String[] args) {//这是一个测试类,使用完毕,就可以删除//要求输入一个字符串,长度最大为3String s = Utility.readString(3);System.out.println("s=" + s);//要求输入一个字符串,长度最大为10, 如果用户直接回车,就给一个默认值//老师提示:就把该方法当做一个api使用即可System.out.println("请输入字符串:");String s2 = Utility.readString(10, "触发");System.out.println("s2=" + s2);//这里是直接使用 类.方法() => 因为当一个方法是static时,就是一个静态方法//注意:静态方法可以直接通过类名调用. => 具体细节老师后面再说.A.cry();}
}class A{public void hi(){}public static void cry(){}}
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;}
}

Java基础 DAY15相关推荐

  1. Java基础day15

    Java基础day15 Java基础day15-集合2 1.Set集合 1.1Set集合概述和特点 1.2哈希值 1.3HashSet集合概述和特点 1.4HashSet集合保证元素唯一性源码分析 1 ...

  2. 小汤学编程之JAVA基础day15——枚举、注解和Properties

    一.枚举 1.枚举的来由     2.枚举的作用     3.枚举的特点     4.扩展:switch里可以传入哪些类型的值 二.注解 1.作用     2.注解的种类     3.自定义注解    ...

  3. Java基础入门语法和安装

    1. Java概述 1.1 Java语言背景介绍(了解) 语言:人与人交流沟通的表达方式 计算机语言:人与计算机之间进行信息交流沟通的一种特殊语言 Java语言是美国Sun公司(Stanford Un ...

  4. Java笔记整理-02.Java基础语法

    1,标识符 由英文字母.数字._(下划线)和$组成,长度不限.其中英文字母包含大写字母(A-Z)和小写字母(a-z),数字包含0到9. 标识符的第一个字符不能是数字(即标识符不能以数字开头). 标识符 ...

  5. java基础(十三)-----详解内部类——Java高级开发必须懂的

    java基础(十三)-----详解内部类--Java高级开发必须懂的 目录 为什么要使用内部类 内部类基础 静态内部类 成员内部类 成员内部类的对象创建 继承成员内部类 局部内部类 推荐博客 匿名内部 ...

  6. Java基础概念性的知识总结

    属于个人的所学的知识总结,不是全面的 1.JDK.JRE和JVM三者的区别 01.JDK:(Java Development ToolKit)Java开发工具包,是整个Java的核心.包括了Java的 ...

  7. 我的面试标准:第一能干活,第二Java基础要好,第三最好熟悉些分布式框架!...

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:hsm_computer www.cnblogs.com/J ...

  8. 叮!您收到一份超值Java基础入门资料!

    摘要:Java语言有什么特点?如何最大效率的学习?深浅拷贝到底有何区别?阿里巴巴高级开发工程师为大家带来Java系统解读,带你掌握Java技术要领,突破重点难点,入门面向对象编程,以详细示例带领大家J ...

  9. java重要基础知识点_必看 | 新人必看的Java基础知识点大梳理

    原标题:必看 | 新人必看的Java基础知识点大梳理 各位正在认真苦学Java的准大神,在这烈日炎炎的夏季里,老九君准备给大家带来一个超级大的"冰镇西瓜,"给大家清凉一下,压压惊. ...

最新文章

  1. UVA 10041 Vito's Family
  2. 随机分配效果在task中的应用,公司内部代码片
  3. 用XLRD批处理Excel
  4. 使用word完成毕业论文的所有详细步骤
  5. boost::gil::threshold_truncate用法的测试程序
  6. C++学习攻略,怎样学好C++语言?
  7. 双精度数举例_c语言中,常量,变量,浮点,单精度,双精度是什么意思?举例...
  8. Javascript学习数据结构--集合(Set实现)
  9. 《时代周刊》四份NFT杂志封面拍卖结束,总售价为276 ETH
  10. php104.tmp,首页-kaka窝论坛-综合管理-细说PHP-kaka窝 - Powered by Discuz!
  11. 【python】Tkinter可视化窗口(三)
  12. ●BZOJ 2393 Cirno的完美算数教室
  13. STM32官方标准固件库下载及介绍
  14. 新浪微博产品分析报告
  15. LICEcap--小巧而精致的GIF录屏工具
  16. 判断一个时间点是否在一个时间段的方法
  17. CRAPS又称花旗骰,是美国拉斯维加斯非常受欢迎的一种的桌上赌博游戏。该游戏使用两粒骰子,玩家通过摇两粒骰子得出的点数进行游戏。
  18. 赛博僵尸道长 v1.2
  19. 一键禁用Win10自动更新,联想官方出品!!
  20. 网络传输(个人整理 多网站)

热门文章

  1. Day 05- Vue3 Vue2响应式原理
  2. 计网PPT 第九章 无线网络和移动网络
  3. KOF97简易过关法
  4. PaPerPass V3.0使用教程
  5. mysql添加字段及备注_MySQL字段的说明和备注信息
  6. 瓦力部署系统部署java_Walle瓦力部署系统
  7. 安全狗云原生安全能力守护中国联通安全发展
  8. NavicatforMySQL_繁星漫天_新浪博客
  9. 云服务器1M带宽是什么意思,怎么选择服务器带宽?
  10. [分享] 新书推荐 -《黑莓(BlackBerry)开发从入门到精通》 | 黑莓时光