334,零钱通

思路:

(1) 先完成显示菜单,并可以选择菜单,给出对应提示

(2) 完成零钱通明细,简单的话可以使用String拼接

(3)完成收益入账   完成功能驱动程序员增加新的变化和代码

(4)消费

(5)退出

(6)用户输入4退出时,给出提示"你确定要退出吗?y/n",必须输入正确的y/n,否则循环输入指令,直到输入y或者n

(7)在收益入账和消费时,判断金额是否合理,并给出相应的提示

代码:

  1. package com.extend_.smallchange;
  2.  
  3. import java.text.SimpleDateFormat;
  4. import java.util.Date;
  5. import java.util.Scanner;
  6.  
  7. public class SmallChangeSys {
  8. public static void main(String[] args) {
  9. //定义相关的变量
  10. boolean loop = true;
  11. Scanner scanner = new Scanner(System.in);
  12. double money = 0;
  13. double balance = 0;
  14. Date date = null;//date是java.util.Date类型,表示日期
  15. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");//可以用于日期格式化
  16. //定义新变量,保存消费的原因
  17. String note = "";
  18. String detail = "------------零钱通明细----------";
  19. int key = 0;
  20. do{
  21. System.out.println("============零钱通菜单===========");
  22. System.out.println("\t\t\t1 零钱通明细");
  23. System.out.println("\t\t\t2 收益入账");
  24. System.out.println("\t\t\t3 消费");
  25. System.out.println("\t\t\t4 退 出");
  26. System.out.println("请选择(1-4):");
  27. key = scanner.nextInt();
  28. //使用switch分支控制
  29. switch (key)
  30. {
  31. case 1:
  32. System.out.println(detail);
  33. System.out.println();
  34. break;
  35. case 2:
  36. System.out.println("收益入账金额:");
  37. money = scanner.nextDouble();
  38. //找出不正确的金额条件,然后给出提示,直接break,退出菜单
  39. if(money <= 0)
  40. {
  41. System.out.println("收益入账金额 需要 大于 0");
  42. break;
  43. }
  44. balance += money;
  45. date = new Date();//获取当前日期
  46. //拼接收益入账信息到 details
  47. detail += "\n收益入账\t+" + money + "\t" + sdf.format(date) + "\t" + balance;
  48. break;
  49. case 3:
  50. System.out.println("消费金额:");
  51. money = scanner.nextDouble();
  52. if(money <= 0 || money > balance)
  53. {
  54. System.out.println("你的消费金额 应该在 0-" + balance);
  55. break;
  56. }
  57. System.out.println("消费说明:");
  58. note = scanner.next();
  59. balance -= money;
  60. date = new Date();
  61. detail += "\n" + note + "\t-" + money + "\t" + sdf.format(date) + "\t" + balance;
  62. break;
  63. case 4:
  64. //用户输入4退出时,给出提示"你确定要退出吗?y/n",必须输入正确的y/n,否则循环输入指令,直到输入y或者n
  65. //(1),定义一个变量choice,接收用户的输入
  66. //(2),使用while + break,来处理接收到的输入时 y或者n
  67. //(3),退出while后,再判断choice是y还是n,就可以决定是否退出
  68. //(4),建议一段代码,完成一个小功能,尽量不要混在一起
  69. String choice = "";
  70. while(true)//要求用户必须输入y/n,否则就一直循环
  71. {
  72. System.out.println("你确定要退出吗?y/n");
  73. choice = scanner.next();
  74. if("y".equals(choice) || "n".equals(choice))
  75. {
  76. break;
  77. }
  78. }
  79. //当用户退出while,进行判断
  80. if(choice.equals("y"))
  81. {
  82. loop = false;
  83. }
  84. break;
  85. default:
  86. System.out.println("选择有误,请重新选择");
  87. }
  88.  
  89. }while(loop);
  90. System.out.println("---------退出了零钱通项目---------");
  91. }
  92. }

运行结果:

341,零钱通OOP版

SmallChangeSysOOP类代码

  1. package com.extend_.smallchange.oop;
  2.  
  3. import java.text.SimpleDateFormat;
  4. import java.util.Date;
  5. import java.util.Scanner;
  6.  
  7. /**
  8. *该类是完成零钱通的各个功能的类
  9. * 使用OOP(面向对象编程)
  10. * 将各个功能对应一个方法
  11. */
  12. public class SmallChangeSysOOP {
  13. //定义相关的变量
  14. boolean loop = true;
  15. Scanner scanner = new Scanner(System.in);
  16. double money = 0;
  17. double balance = 0;
  18. Date date = null;//date是java.util.Date类型,表示日期
  19. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");//可以用于日期格式化
  20. //定义新变量,保存消费的原因
  21. String note = "";
  22. String detail = "------------零钱通明细----------";
  23. int key = 0;
  24.  
  25. //先完成显式菜单,并可以选择
  26. public void mainMenu()
  27. {
  28. System.out.println("显示零钱通菜单...");
  29. do{
  30. System.out.println("============选择零钱通菜单===========");
  31. System.out.println("\t\t\t1 零钱通明细");
  32. System.out.println("\t\t\t2 收益入账");
  33. System.out.println("\t\t\t3 消费");
  34. System.out.println("\t\t\t4 退 出");
  35. System.out.println("请选择(1-4):");
  36. key = scanner.nextInt();
  37. //使用switch分支控制
  38. switch (key)
  39. {
  40. case 1:
  41. this.detail();
  42. System.out.println();
  43. break;
  44. case 2:
  45. this.income();
  46. break;
  47. case 3:
  48. this.pay();
  49. break;
  50. case 4:
  51. this.exit();
  52. break;
  53. default:
  54. System.out.println("选择有误,请重新选择");
  55. }
  56.  
  57. }while(loop);
  58. }
  59.  
  60. //完成零钱通明细
  61. public void detail()
  62. {
  63. System.out.println(detail);
  64. }
  65. //完成收益入账
  66. public void income()
  67. {
  68. System.out.println("收益入账金额:");
  69. money = scanner.nextDouble();
  70. //找出不正确的金额条件,然后给出提示,直接return,退出菜单
  71. if(money <= 0)
  72. {
  73. System.out.println("收益入账金额 需要 大于 0");
  74. return;//退出方法,不再执行后面的代码
  75. }
  76. balance += money;
  77. date = new Date();//获取当前日期
  78. //拼接收益入账信息到 details
  79. detail += "\n收益入账\t+" + money + "\t" + sdf.format(date) + "\t" + balance;
  80. }
  81. //消费
  82. public void pay()
  83. {
  84. System.out.println("消费金额:");
  85. money = scanner.nextDouble();
  86. if(money <= 0 || money > balance)
  87. {
  88. System.out.println("你的消费金额 应该在 0-" + balance);
  89. return;
  90. }
  91. System.out.println("消费说明:");
  92. note = scanner.next();
  93. balance -= money;
  94. date = new Date();
  95. detail += "\n" + note + "\t-" + money + "\t" + sdf.format(date) + "\t" + balance;
  96. }
  97. //退出
  98. public void exit()
  99. {
  100. //用户输入4退出时,给出提示"你确定要退出吗?y/n",必须输入正确的y/n,否则循环输入指令,直到输入y或者n
  101. //(1),定义一个变量choice,接收用户的输入
  102. //(2),使用while + break,来处理接收到的输入时 y或者n
  103. //(3),退出while后,再判断choice是y还是n,就可以决定是否退出
  104. //(4),建议一段代码,完成一个小功能,尽量不要混在一起
  105. String choice = "";
  106. while(true)//要求用户必须输入y/n,否则就一直循环
  107. {
  108. System.out.println("你确定要退出吗?y/n");
  109. choice = scanner.next();
  110. if("y".equals(choice) || "n".equals(choice))
  111. {
  112. break;
  113. }
  114. }
  115. //当用户退出while,进行判断
  116. if(choice.equals("y"))
  117. {
  118. loop = false;
  119. }
  120. }
  121. }

SmallChangeSysApp类代码

  1. package com.extend_.smallchange.oop;
  2. /*
  3. * 这里我们直接调用SmallChangeSysOOP 对象,显示主菜单即可
  4. */
  5.  
  6. public class SmallChangeSysApp {
  7. public static void main(String[] args) {
  8. new SmallChangeSysOOP().mainMenu();
  9. }
  10. }

运行结果和334结果一样。

362,房屋出租设计

1,程序框架。

2,House类代码

按Alt + 7可以看到 House类的结构

  1. package com.hspedu.houserent.domain;
  2.  
  3. /*
  4. * House的对象表示一个房屋信息
  5. * */
  6. public class House {
  7. //编号 房主 电话 地址 月租 状态(未出租/已出租)
  8. private int id;//编号
  9. private String name;//房主
  10. private String phone;//电话
  11. private String address;//地址
  12. private int rent;//月租
  13. private String state;//状态(未出租/已出租)
  14. //构造器和setter,getter
  15. public House(int id, String name, String phone, String address, int rent, String state) {
  16. this.id = id;
  17. this.name = name;
  18. this.phone = phone;
  19. this.address = address;
  20. this.rent = rent;
  21. this.state = state;
  22. }
  23.  
  24. public int getId() {
  25. return id;
  26. }
  27.  
  28. public void setId(int id) {
  29. this.id = id;
  30. }
  31.  
  32. public String getName() {
  33. return name;
  34. }
  35.  
  36. public void setName(String name) {
  37. this.name = name;
  38. }
  39.  
  40. public String getPhone() {
  41. return phone;
  42. }
  43.  
  44. public void setPhone(String phone) {
  45. this.phone = phone;
  46. }
  47.  
  48. public String getAddress() {
  49. return address;
  50. }
  51.  
  52. public void setAddress(String address) {
  53. this.address = address;
  54. }
  55.  
  56. public int getRent() {
  57. return rent;
  58. }
  59.  
  60. public void setRent(int rent) {
  61. this.rent = rent;
  62. }
  63.  
  64. public String getState() {
  65. return state;
  66. }
  67.  
  68. public void setState(String state) {
  69. this.state = state;
  70. }
  71. //为了方便的输出对象信息,我们实现toString
  72. //编号 房主 电话 地址 月租 状态(未出租/已出租)
  73. @Override
  74. public String toString() {
  75. return id +
  76. "\t\t" + name +
  77. "\t" + phone +
  78. "\t\t" + address +
  79. "\t" + rent +
  80. "\t" + state ;
  81.  
  82. }
  83. }

3,HouseService类代码

  1. package com.hspedu.houserent.service;
  2.  
  3. import com.hspedu.houserent.domain.House;
  4.  
  5. /*
  6. * HouseService.java ----(业务层)
  7. * 定义House[],保存House对象
  8. * 1,响应HouseView的调用
  9. * 2,完成对房屋信息的各种操作(增删改查crud)
  10. * */
  11. public class HouseService {
  12. private House[] houses;//保存House对象
  13. private int houseNums = 1;//记录当前有多少个房屋信息
  14. private int idCounter = 1;//记录当前的id增长到哪个值
  15. //构造器
  16. public HouseService(int size)
  17. {
  18. //new houses
  19. houses = new House[size];//当创建HouseService对象,指定数组大小
  20. //为了配合测试列表信息,这里初始化一个House对象
  21. houses[0] = new House(1,"jack","112","海淀区",2000,"未出租");
  22. }
  23.  
  24. //find方法,返回House对象或者null
  25. public House findById(int findId)
  26. {
  27. //遍历数组
  28. for(int i = 0; i < houseNums; i++)
  29. {
  30. if(findId == houses[i].getId())
  31. {
  32. return houses[i];
  33. }
  34. }
  35. return null;
  36. }
  37.  
  38. //del方法,删除一个房屋信息
  39. public boolean del(int delId)
  40. {
  41. //应当先找到要删除的房屋信息对应的下标
  42. //老韩强调,一定要搞清楚 下标和房屋的编号不是一回事
  43. int index = -1;
  44. for(int i = 0; i < houseNums; i++)
  45. {
  46. if(delId == houses[i].getId())//要删除的房屋(id),是数组下标为i的元素,元素的getId方法和delId对应
  47. {
  48. index = i;//就使用index记录i
  49. }
  50. }
  51. if(index == -1)//说明delId在数组中不存在,没找到
  52. {
  53. return false;
  54. }
  55.  
  56. //如果数组有3个元素,houseNums-1=2,那下面的i+1=3,就刚好把最后一个元素移到前一个位置上去
  57. for(int i = index; i < houseNums - 1; i++)
  58. {
  59. houses[i] = houses[i+1];
  60. }
  61. houses[--houseNums] = null;//把当前存在的房屋信息的最后一个 设置null,先减1,再置空
  62. return true;
  63. }
  64.  
  65. //add方法,添加新对象,返回boolean
  66. public boolean add(House newHouse)
  67. {
  68. //判断是否还可以继续添加(我们暂时不考虑数组扩容的问题)
  69. if(houseNums == houses.length)
  70. {
  71. System.out.println("数组已满,不能再添加了...");
  72. return false;
  73. }
  74. //把newHouse对象加入到,新增加了一个房屋
  75. houses[houseNums++] = newHouse;
  76. //我们程序员需要设计一个id自增长的机制,然后更新newhHouse的id
  77. newHouse.setId(++idCounter);
  78. return true;
  79. }
  80. //list方法,返回houses
  81. public House[] list()
  82. {
  83. return houses;
  84. }
  85.  
  86. }

4,HouseView类代码

  1. package com.hspedu.houserent.view;
  2.  
  3. import com.hspedu.houserent.domain.House;
  4. import com.hspedu.houserent.service.HouseService;
  5. import com.hspedu.houserent.utils.Utility;
  6.  
  7. /*
  8. * 1,显示界面
  9. * 2,接收用户的输入
  10. * 3,调用HouseService完成对房屋信息的各种操作
  11. * */
  12. public class HouseView {
  13. private boolean loop = true;//控制显示菜单
  14. private char key = ' ';//接收用户选择
  15. private HouseService houseService = new HouseService(10);//设置数组的大小为10
  16.  
  17. //根据id修改房屋信息
  18. public void update()
  19. {
  20. System.out.println("==============修改房屋信息==============");
  21. System.out.println("请选择待修改房屋编号(-1表示退出)");
  22. int updateId = Utility.readInt();
  23. if(updateId == -1)
  24. {
  25. System.out.println("==============你放弃修改房屋信息==============");
  26. return;
  27. }
  28.  
  29. //根据输入得到updateId,查找对象
  30. //返回的是引用类型[即:就是数组的元素]
  31. //因此老师在后面对house.setXxx(),就会修改HouseService中数组的元素!
  32. House house = houseService.findById(updateId);
  33. if(house == null)
  34. {
  35. System.out.println("==============修改房屋信息编号不存在==============");
  36. return;
  37. }
  38. System.out.print("姓名(" + house.getName() + "):");
  39. String name = Utility.readString(8, "");//这里如果用户直接回车,表示不修改信息,默认""
  40. if(!"".equals(name))//如果输入的name不是空串的话,就修改
  41. {
  42. house.setName(name);
  43. }
  44.  
  45. System.out.print("电话(" + house.getPhone() + "):");
  46. String phone = Utility.readString(12);
  47. if(!"".equals(phone))
  48. {
  49. house.setPhone(phone);
  50. }
  51.  
  52. System.out.print("地址(" + house.getAddress() + "):");
  53. String address = Utility.readString(18);
  54. if(!"".equals(address))
  55. {
  56. house.setAddress(address);
  57. }
  58.  
  59. System.out.print("租金(" + house.getRent() + "):");
  60. int rent = Utility.readInt(-1);
  61. if(rent != -1)
  62. {
  63. house.setRent(rent);
  64. }
  65.  
  66. System.out.print("状态(" + house.getState() + "):");
  67. String state = Utility.readString(3,"");
  68. if(!"".equals(state))
  69. {
  70. house.setAddress(state);
  71. }
  72. System.out.println("==============修改房屋信息成功==============");
  73. }
  74. //根据id查找房屋信息
  75. public void findHouse()
  76. {
  77. System.out.println("==============查找房屋信息==============");
  78. System.out.println("请输入要查找的id:");
  79. int findId = Utility.readInt();
  80. //调用方法
  81. House house = houseService.findById(findId);
  82. if(house != null)
  83. {
  84. System.out.println(house);
  85. }
  86. else
  87. {
  88. System.out.println("==============查找房屋信息id不存在==============");
  89. }
  90. }
  91.  
  92. //完成退出确认
  93. public void exit()
  94. {
  95. //这里我们使用Utility提供方法,完成确认
  96. char c = Utility.readConfirmSelection();
  97. if(c == 'Y')
  98. {
  99. loop = false;
  100. }
  101. }
  102. //编写delHouse() 接收输入的id,调用Service的del方法
  103. public void delHouse()
  104. {
  105. System.out.println("==============删除房屋信息==============");
  106. System.out.println("请输入待删除房屋的编号(-1退出):");
  107. int delId = Utility.readInt();
  108. if(delId == -1)
  109. {
  110. System.out.println("==============放弃删除房屋信息==============");
  111. return;
  112. }
  113. //注意该方法本身就有循环判断的逻辑,必须输出Y/N
  114. char choice = Utility.readConfirmSelection();
  115. if(choice == 'Y')//真的删除
  116. {
  117. if(houseService.del(delId))
  118. {
  119. System.out.println("==============删除房屋信息成功==============");
  120. }
  121. else
  122. {
  123. System.out.println("==============房屋编号不存在,删除失败==============");
  124. }
  125. }
  126. else
  127. {
  128. System.out.println("==============放弃删除房屋信息==============");
  129. }
  130. }
  131.  
  132. //编写addHouse() 接收输入,创建House对象,调用add方法
  133. public void addHouse()
  134. {
  135. System.out.println("==============添加房屋==============");
  136. System.out.println("姓名:");
  137. String name = Utility.readString(8);
  138. System.out.println("电话:");
  139. String phone = Utility.readString(12);
  140. System.out.println("地址:");
  141. String address = Utility.readString(16);
  142. System.out.println("月租:");
  143. int rent = Utility.readInt();
  144. System.out.println("状态:");
  145. String state = Utility.readString(3);
  146. //创建一个新的House对象,注意id是系统分配的
  147. House newHouse = new House(0, name, phone, address, rent, state);
  148. if(houseService.add(newHouse))
  149. {
  150. System.out.println("==============添加房屋成功==============");
  151. }
  152. else
  153. {
  154. System.out.println("==============添加房屋失败==============");
  155. }
  156. }
  157. //编写listHouses()显示房屋列表
  158. public void listHouses()
  159. {
  160. System.out.println("==============房屋出租系统菜单==============");
  161. System.out.println("编号\t\t房主\t\t电话\t\t地址\t\t月租\t\t状态(未出租/已出租)");
  162. House[] houses = houseService.list();//得到所有房屋信息
  163. for(int i = 0; i < houses.length; i++)
  164. {
  165. if(houses[i] == null)
  166. {
  167. break;
  168. }
  169. System.out.println(houses[i]);
  170. }
  171. System.out.println("==============房屋列表显示完毕==============");
  172. }
  173. //显示主菜单
  174. public void mainMenu()
  175. {
  176. do{
  177. System.out.println("\n==============房屋出租系统菜单==============");
  178. System.out.println("\t\t\t1 新 增 房 源");
  179. System.out.println("\t\t\t2 查 找 房 屋");
  180. System.out.println("\t\t\t3 删 除 房 屋 信 息");
  181. System.out.println("\t\t\t4 修 改 房 屋 信 息");
  182. System.out.println("\t\t\t5 房 屋 列 表");
  183. System.out.println("\t\t\t6 退 出");
  184. System.out.println("请输入你的选择(1-6):");
  185. key = Utility.readChar();//输入一个字符
  186. switch(key){
  187. case '1':
  188. addHouse();
  189. break;
  190. case '2':
  191. findHouse();
  192. break;
  193. case '3':
  194. delHouse();
  195. break;
  196. case '4':
  197. update();
  198. break;
  199. case '5':
  200. listHouses();
  201. break;
  202. case '6':
  203. exit();
  204. break;
  205.  
  206. }
  207. }while(loop);
  208. }
  209. }

5,Utility类代码(工具类,老韩给的)

  1. package com.hspedu.houserent.utils;
  2.  
  3. /**
  4. 工具类的作用:
  5. 处理各种情况的用户输入,并且能够按照程序员的需求,得到用户的控制台输入。
  6. */
  7.  
  8. import java.util.*;
  9. /**
  10.  
  11. */
  12. public class Utility {
  13. //静态属性。。。
  14. private static Scanner scanner = new Scanner(System.in);
  15.  
  16. /**
  17. * 功能:读取键盘输入的一个菜单选项,值:1——5的范围
  18. * @return 1——5
  19. */
  20. public static char readMenuSelection() {
  21. char c;
  22. for (; ; ) {
  23. String str = readKeyBoard(1, false);//包含一个字符的字符串
  24. c = str.charAt(0);//将字符串转换成字符char类型
  25. if (c != '1' && c != '2' &&
  26. c != '3' && c != '4' && c != '5') {
  27. System.out.print("选择错误,请重新输入:");
  28. } else break;
  29. }
  30. return c;
  31. }
  32.  
  33. /**
  34. * 功能:读取键盘输入的一个字符
  35. * @return 一个字符
  36. */
  37. public static char readChar() {
  38. String str = readKeyBoard(1, false);//就是一个字符
  39. return str.charAt(0);
  40. }
  41. /**
  42. * 功能:读取键盘输入的一个字符,如果直接按回车,则返回指定的默认值;否则返回输入的那个字符
  43. * @param defaultValue 指定的默认值
  44. * @return 默认值或输入的字符
  45. */
  46.  
  47. public static char readChar(char defaultValue) {
  48. String str = readKeyBoard(1, true);//要么是空字符串,要么是一个字符
  49. return (str.length() == 0) ? defaultValue : str.charAt(0);
  50. }
  51.  
  52. /**
  53. * 功能:读取键盘输入的整型,长度小于2位
  54. * @return 整数
  55. */
  56. public static int readInt() {
  57. int n;
  58. for (; ; ) {
  59. String str = readKeyBoard(10, false);//一个整数,长度<=10位
  60. try {
  61. n = Integer.parseInt(str);//将字符串转换成整数
  62. break;
  63. } catch (NumberFormatException e) {
  64. System.out.print("数字输入错误,请重新输入:");
  65. }
  66. }
  67. return n;
  68. }
  69. /**
  70. * 功能:读取键盘输入的 整数或默认值,如果直接回车,则返回默认值,否则返回输入的整数
  71. * @param defaultValue 指定的默认值
  72. * @return 整数或默认值
  73. */
  74. public static int readInt(int defaultValue) {
  75. int n;
  76. for (; ; ) {
  77. String str = readKeyBoard(10, true);
  78. if (str.equals("")) {
  79. return defaultValue;
  80. }
  81.  
  82. //异常处理...
  83. try {
  84. n = Integer.parseInt(str);
  85. break;
  86. } catch (NumberFormatException e) {
  87. System.out.print("数字输入错误,请重新输入:");
  88. }
  89. }
  90. return n;
  91. }
  92.  
  93. /**
  94. * 功能:读取键盘输入的指定长度的字符串
  95. * @param limit 限制的长度
  96. * @return 指定长度的字符串
  97. */
  98.  
  99. public static String readString(int limit) {
  100. return readKeyBoard(limit, false);
  101. }
  102.  
  103. /**
  104. * 功能:读取键盘输入的指定长度的字符串或默认值,如果直接回车,返回默认值,否则返回字符串
  105. * @param limit 限制的长度
  106. * @param defaultValue 指定的默认值
  107. * @return 指定长度的字符串
  108. */
  109.  
  110. public static String readString(int limit, String defaultValue) {
  111. String str = readKeyBoard(limit, true);
  112. return str.equals("")? defaultValue : str;
  113. }
  114.  
  115. /**
  116. * 功能:读取键盘输入的确认选项,Y或N
  117. * 将小的功能,封装到一个方法中.
  118. * @return Y或N
  119. */
  120. public static char readConfirmSelection() {
  121. System.out.println("请输入你的选择(Y/N): 请小心选择");
  122. char c;
  123. for (; ; ) {//无限循环
  124. //在这里,将接受到字符,转成了大写字母
  125. //y => Y n=>N
  126. String str = readKeyBoard(1, false).toUpperCase();
  127. c = str.charAt(0);
  128. if (c == 'Y' || c == 'N') {
  129. break;
  130. } else {
  131. System.out.print("选择错误,请重新输入:");
  132. }
  133. }
  134. return c;
  135. }
  136.  
  137. /**
  138. * 功能: 读取一个字符串
  139. * @param limit 读取的长度
  140. * @param blankReturn 如果为true ,表示 可以读空字符串。
  141. * 如果为false表示 不能读空字符串。
  142. *
  143. * 如果输入为空,或者输入大于limit的长度,就会提示重新输入。
  144. * @return
  145. */
  146. private static String readKeyBoard(int limit, boolean blankReturn) {
  147.  
  148. //定义了字符串
  149. String line = "";
  150.  
  151. //scanner.hasNextLine() 判断有没有下一行
  152. while (scanner.hasNextLine()) {
  153. line = scanner.nextLine();//读取这一行
  154.  
  155. //如果line.length=0, 即用户没有输入任何内容,直接回车
  156. if (line.length() == 0) {
  157. if (blankReturn) return line;//如果blankReturn=true,可以返回空串
  158. else continue; //如果blankReturn=false,不接受空串,必须输入内容
  159. }
  160.  
  161. //如果用户输入的内容大于了 limit,就提示重写输入
  162. //如果用户如的内容 >0 <= limit ,我就接受
  163. if (line.length() < 1 || line.length() > limit) {
  164. System.out.print("输入长度(不能大于" + limit + ")错误,请重新输入:");
  165. continue;
  166. }
  167. break;
  168. }
  169.  
  170. return line;
  171. }
  172. }

6,主类 HouseRentApp类代码

  1. package com.hspedu.houserent;
  2.  
  3. import com.hspedu.houserent.view.HouseView;
  4.  
  5. public class HouseRentApp {
  6. public static void main(String[] args) {
  7. //创建HouseView对象,并且显示主菜单,是整个程序的入口
  8. new HouseView().mainMenu();
  9. System.out.println("====你退出了房屋出租系统====");
  10. }
  11. }

运行结果(演示部分截图):

java基础的项目的更多相关文章

  1. JAVA基础-----Maven项目的搭建

    Maven项目的搭建 一.前言 maven官网:http://maven.apache.org/, 文章简介:本文章从三个模块来了解Maven,分别是 Maven的基本概念~, Maven项目的安装和 ...

  2. Java基础-新建项目、包和类

    1,新建项目

  3. JAVA基础之项目分包

    个人理解: 项目分层分包适合多人开发合作的,最好一个界面设置一个view,同时注释一定设置好,按照顺序:从前向后进行传递参数,从后向前进行传递返回值来进行判断是否真正的执行了sql语句(可以不返回), ...

  4. java基础小项目练习之1----3天做出飞机大战

    Shoot射击游戏第一天一. 关键问题(理论):1. 简述FlyingObject.Enemy.Award.Airplane.Bee.Bullet.Hero之间的继承与实现关系2. 简述Hero类构造 ...

  5. Java基础学习笔记二十八 管家婆综合项目

    本项目为JAVA基础综合项目,主要包括: 熟练View层.Service层.Dao层之间的方法相互调用操作.熟练dbutils操作数据库表完成增删改查. 项目功能分析 查询账务 多条件组合查询账务 添 ...

  6. 自学转行JAVA,没有项目经历怎么找工作?

    应届生或者是刚参加工作的转行人员都有这样一个疑惑,刚学出来没有工作经验,但是企业又要求你必须要有工作经验,但是刚毕业找不到工作就不可能有工作经验,感觉陷入一个死循环.其实这种情况那些企业是不可能不知道 ...

  7. Java 教程整理:基础、项目全都有

    Java 在编程语言排行榜中一直位列前排,可知 Java 语言的受欢迎程度了. 网上有很多 Java 教程,无论是基础入门还是开发小项目的教程都比比皆是,可是系统的很少,对于Java 学习者来说找到系 ...

  8. Java基础学习总结(70)——开发Java项目常用的工具汇总

    要想全面了解java开发工具,我们首先需要先了解一下java程序的开发过程,通过这个过程我们能够了解到java开发都需要用到那些工具. 首先我们先了解完整项目开发过程,如图所示: 从上图中我们能看到一 ...

  9. 【Java基础 项目实例--Bank项目5】Account 和 customer 对象等 继承、多态、方法的重写

    延续 Java基础 项目实例--Bank项目4 实验要求 实验题目 5: 在银行项目中创建 Account 的两个子类:SavingAccount 和 CheckingAccount 实验目的: 继承 ...

  10. JavaSE 基础知识(常识概念 + 基础语法)问答总结/面试题 —— 讲给应届生的 Java 开源知识项目

    写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解.所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项 ...

随机推荐

  1. 《ASP.NET Core 微服务实战》-- 读书笔记(第6章)

    第 6 章 事件溯源与 CQRS 在本章,我们来了解一下随着云平台一同出现的设计模式 我们先探讨事件溯源和命令查询职责分离(CQRS)背后的动机与哲学 事件溯源简介 事实由事件溯源而来 我们大脑就是一 ...

  2. NC24416 [USACO 2013 Nov G]No Change

    题目链接 题目 题目描述 Farmer John is at the market to purchase supplies for his farm. He has in his pocket K ...

  3. image could not be accessed on a registry to record its digest

    问题说明: 在管理节点执行docker stack xxx 方式运行服务,报如题错误. 问题原因: docker swarm运行需要一个镜像仓库才行,所有节点都去这个仓库统一镜像. 来看下官方的解释: ...

  4. Go微服务框架go-kratos实战学习08:负载均衡基本使用

    微服务框架 go-kratos 中负载均衡使用 一.介绍 在前面这篇文章 负载均衡和它的算法介绍,讲了什么是负载均衡以及作用.算法介绍. go-kratos 的负载均衡主要接口是 Selector,它 ...

  5. 万字Java进阶笔记总结

    JavaApi 字符串 String 注意:Java中"=="操作符的作用: 基本数据类型:比较的是内容. 引用数据类型比较的是对象的内存地址. StringBuffer/Stri ...

  6. java图书管理系统(桌面版本)

    运行效果: 注册登陆界面 注册存在的账户时 ​ 登陆之后主界面如下 点击图书管理-图书更新界面如下 图书列表 项目说明: 由于平时工作比较忙,也没时间写,可是我在公众号后台看见好多小伙伴讨论,我就抽时 ...

  7. ASP.NET Core 微信支付(三)【查询订单 APIV3】

    官方参考资料 查询订单 理论实战 官方提供两种查询订单的方式,一种是根据商户自己生成的订单号查询,一种方式是根据微信生成的订单号查询.而我使用的就是第一种方式. 调用微信支付的查询订单,需要生成签名, ...

  8. 第131篇:如何上传一个npm包

    好家伙, NPM的全称是Node Package Manager,是一个NodeJS包管理和分发工具,已经成为了非官方的发布Node模块(包)的标准.  NPM是世界上最大的软件注册表. 1.首先我们 ...

  9. 了解 Docker 网络

    本章将会简单地讲述 Docker 中的网络,对于 CNM.Libnetwork 这些,限于笔者个人水平,将不会包含在内. Docker 的四种网络模式 Docker 有 bridge.none.hos ...

  10. Java static 关键字的使用 小练习

    1 package com.bytezreo.statictest2; 2 3 /** 4 * 5 * @Description static 关键字的使用 小练习 6 * @author Bytez ...