(1)化繁为简
1.先完成显示菜单,并可以选择菜单,给出对应提示
2.完成零钱通明细
3.完成收益入账
4.消费
5.退出
6.优化一 用户输入4退出时,给出提示“你确定要退出吗? y/n”, 必须
输入正确的y/n, 否则循环输入指令, 直到输入y 或者 n
7.优化二 在收益入账和消费时,判断金额是否合理,并给出相应的提示
//(1)定义一个变量choice , 接收用户的输入
String choice = "";
// (2)使用 while + break, 来处理接收到的输入时 y 或者 n
while (true) {
System.out.println("你确定要退出吗? y/n");
choice = scanner.next();
if ("y".equals(choice)) {
loop = false;
break;
} else if ("n".equals(choice)) {
break;
} 方法二(不是很好,跟white混着使用,代码的阅读性变差)
}
(3) 退出while后 , 再判断choice是y 还是n ,就可以决定是否退出
当用户退出while, 进行判断
if ("y".equals(choice) || "n".equals(choice)) {
break;
}if (choice.equals("y")) {
loop = false; //loop控制显示菜单的,loop = false退出零钱通系统
} //方法一(一段代码,完成一个小功能)
(3)收益入账和消费时,判断金额是否合理,找出不正确的金额的条件,如果仍然有不正确的,则可以过关斩将一般设立关卡
项目所用代码技巧if (money <= 0) { System.out.println("收益入账金额 需要 大于 0"); break; }if (money <= 0 || money > balance) { System.out.println("你的消费金额 应该在 0-" + balance); break; }
1.boolean loop = true; //是否还要循环显示(菜单),默认为true
2.完成零钱通明细
(1)可以把收益入账和消费,保存到数组
(2)可以使用对象
(3)简单的话可以使用String拼接 String details = "-------------零钱通明细-------------"; 收益明细 就是在details 后面进行拼接(叠加)
3.设置现在日期
import java.util.Date; //引入包,表示当前的日期 import java.text.SimpleDateFormat;//SimpleDateFormat可以用于日期格式化的一个对象 Date date = null; //date 是 java.util.Date 类型, 表示日期 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:mm");date = new Date(); //获取当前日期,倒叙的(国外的); System.out.println(sdf.format(date));//获取当前日期,正叙的 //format是一个用于格式化语言环境敏感的信息(如日期、消息和数字)的抽象基类。
4.do-while的使用(至少需要执行一次)
do {//至少需要执行一次
System.out.println("n=============零钱通明细=============");
System.out.println("ttt1 零钱通明细");
System.out.println("ttt2 收益入账");
System.out.println("ttt3 消 费");
System.out.println("ttt4 退 出");
............
}while (loop);
5.while (true)死循环,来处理接收到的输入时 y 或者 n
代码package com.hspedu.smallchange;
import java.text.SimpleDateFormat;
import java.util.Date; //引入包,表示当前的日期
import java.util.Scanner;
public class SmallChangeSys {
//化繁为简
//1.先完成显示菜单,并可以选择菜单,给出对应提示
//2.完成零钱通明细
//3.完成收益入账
//4.消费
//5.退出
//6.优化一 用户输入4退出时,给出提示“你确定要退出吗? y/n”, 必须
//输入正确的y/n, 否则循环输入指令, 直到输入y 或者 n
//7.优化二 在收益入账和消费时,判断金额是否合理,并给出相应的提示
public static void main(String[] args) {
//定义相关的变量
boolean loop = true; //是否还要循环显示(菜单),默认为true
Scanner scanner = new Scanner(System.in);
String key = ""; //定义用于 接收---请选择(1-4):的哪个键
//2.完成零钱通明细
//(1) 可以把收益入账和消费,保存到数组 (2)可以使用对象
// (3)简单的话可以使用String拼接
String details = "-------------零钱通明细-------------";
//收益明细 就是在details 后面进行拼接(叠加)
//3.完成收益入账 完成功能驱动程序员增加新的变化和代码
//思路,定义新的变量
double money = 0;
double balance = 0; //余额
Date date = null; //date 是 java.util.Date 类型, 表示日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:mm");
//4. 消费
//定义新变量,保存消费的原因
String note = "";
do {//至少需要执行一次
System.out.println("n=============零钱通明细=============");
System.out.println("ttt1 零钱通明细");
System.out.println("ttt2 收益入账");
System.out.println("ttt3 消 费");
System.out.println("ttt4 退 出");
System.out.print("请选择(1-4):");
key = scanner.next();
//使用switch 分支控制
switch (key) {
case "1" :
// System.out.println("1 零钱通明细");
System.out.println(details); //优化
break;
case "2" :
//System.out.println("2 收益入账");
System.out.print("收益入账金额");
money = scanner.nextDouble(); //用户输入消费的金额
//money 的值范围应该校验 -> 一会儿完善
//思路
//找出不正确的金额的条件,然后给出提示,就直接break(正难则反)
if (money <= 0) {
System.out.println("收益入账金额 需要 大于 0");
break;
}
//如果仍然有不正确的条件,则可以就过关斩将一般设立关卡
//if() { }
balance += money;
// 拼接收益入账信息到 details
date = new Date(); //获取当前日期,倒叙的(国外的);
//SimpleDateFormat sdf = null; //SimpleDateFormat可以用于日期格式化的一个对象
//System.out.println(sdf.format(date));
//Format是一个用于格式化语言环境敏感的信息(如日期、消息和数字)的抽象基类。
details += "n收益入账t+" + money + "t" + sdf.format(date) + "t" + balance;
break;
case "3" :
// System.out.println("3 消费");
System.out.print("消费金额:");
money = scanner.nextDouble(); //用户输入消费的金额
//money 的值范围应该校验 -> 一会儿完善
//找出金额不正确的情况
if (money <= 0 || money > balance) {
System.out.println("你的消费金额 应该在 0-" + balance);
break;
}
System.out.print("消费说明: ");
note = scanner.next(); //消费文本说明
balance -= money; //消费 余额-=
// 拼接消费信息到 details
date = new Date(); //获取当前日期,倒叙的(国外的);
details += "n" + note + "tt-" + money + "t" + sdf.format(date) + "t" + balance;
break;
case "4" :
//6.优化 用户输入4退出时,给出提示“你确定要退出吗? y/n”, 必须
//输入正确的y/n, 否则循环输入指令, 直到输入y 或者 n
//思路分析
//(1)定义一个变量choice , 接收用户的输入
String choice = "";
// (2)使用 while + break, 来处理接收到的输入时 y 或者 n
while (true) {
System.out.println("你确定要退出吗? y/n");
choice = scanner.next();
if ("y".equals(choice) || "n".equals(choice)) {
break;
}
// if ("y".equals(choice)) {
// loop = false;
// break;
// } else if ("n".equals(choice)) {
// break;
// } 方法二(不是很好)
}
// (3) 退出while后 , 再判断choice是y 还是n ,就可以决定是否退出
// 当用户退出while, 进行判断
if (choice.equals("y")) {
loop = false; //loop控制显示菜单的,loop = false退出零钱通系统
}
// System.out.println("4 退出");
break;
default:
System.out.println("选择有误,请从新选择");
}
}while (loop);
System.out.println("-----退出了零钱通项目----");
}
}
运行截图 使用多态,对象OOP完成
简洁,明了
1,2,3,4个小功能直接都引出来方法
//使用switch 分支控制
switch (key) {
case "1" :
this.detail();
break;
case "2" :
this.income();
break;
case "3" :
this.pay();
break;
case "4" :
this.exit();
break;
default:
System.out.println("选择有误,请从新选择");
}
}while (loop);
}
//完成零钱通明细
public void detail() {
System.out.println(details); //优化
}
直接调用(简洁,快速)
public class SmallChangeSysApp {
public static void main(String[] args) {
new SmallChangSysoop().mainMenu();
}
}
smallchange.oop.java
该类是完成零钱通的各个功能的类使用OOP (面向对象编程)将各个功能对应一个方法
package com.hspedu.smallchange.oop;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class SmallChangSysoop {
//属性..
//定义相关的变量
boolean loop = true; //是否还要循环显示(菜单),默认为true
Scanner scanner = new Scanner(System.in);
String key = ""; //定义用于 接收---请选择(1-4):的哪个键
//2.完成零钱通明细
//(1) 可以把收益入账和消费,保存到数组 (2)可以使用对象
// (3)简单的话可以使用String拼接
String details = "-------------零钱通明细-------------";
//收益明细 就是在details 后面进行拼接(叠加)
//3.完成收益入账 完成功能驱动程序员增加新的变化和代码
//思路,定义新的变量
double money = 0;
double balance = 0; //余额
Date date = null; //date 是 java.util.Date 类型, 表示日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:mm");
//4. 消费
//定义新变量,保存消费的原因
String note = "";
//先完成显示菜单,并可以选择
public void mainMenu() {
//System.out.println("显示零钱通菜单...");
do {//至少需要执行一次
System.out.println("n=============选择零钱通明细(oop)=============");
System.out.println("ttt1 零钱通明细");
System.out.println("ttt2 收益入账");
System.out.println("ttt3 消 费");
System.out.println("ttt4 退 出");
System.out.print("请选择(1-4):");
key = scanner.next();
//使用switch 分支控制
switch (key) {
case "1" :
this.detail();
break;
case "2" :
this.income();
break;
case "3" :
this.pay();
break;
case "4" :
this.exit();
break;
default:
System.out.println("选择有误,请从新选择");
}
}while (loop);
}
//完成零钱通明细
public void detail() {
System.out.println(details); //优化
}
//完成收益入账
public void income() {
//System.out.println("2 收益入账");
System.out.print("收益入账金额");
money = scanner.nextDouble(); //用户输入消费的金额
//思路
//找出不正确的金额的条件,然后给出提示,就直接break(正难则反)
//break要该成 return;
if (money <= 0) {
System.out.println("收益入账金额 需要 大于 0");
//break; 不能用
return; //退出方法,不在执行后面的代码
}
//如果仍然有不正确的条件,则可以就过关斩将一般设立关卡
//if() { }
balance += money;
// 拼接收益入账信息到 details
date = new Date(); //获取当前日期,倒叙的(国外的);
//SimpleDateFormat sdf = null; //SimpleDateFormat可以用于日期格式化的一个对象
//System.out.println(sdf.format(date));
//Format是一个用于格式化语言环境敏感的信息(如日期、消息和数字)的抽象基类。
details += "n收益入账t+" + money + "t" + sdf.format(date) + "t" + balance;
}
//消费
public void pay() {
// System.out.println("3 消费");
System.out.print("消费金额:");
money = scanner.nextDouble(); //用户输入消费的金额
//money 的值范围应该校验 -> 一会儿完善
//找出金额不正确的情况
if (money <= 0 || money > balance) {
System.out.println("你的消费金额 应该在 0-" + balance);
return;
}
System.out.print("消费说明: ");
note = scanner.next(); //消费文本说明
balance -= money; //消费 余额-=
// 拼接消费信息到 details
date = new Date(); //获取当前日期,倒叙的(国外的);
details += "n" + note + "tt-" + money + "t" + sdf.format(date) + "t" + balance;
}
//退出
public void exit() {
//6.优化 用户输入4退出时,给出提示“你确定要退出吗? y/n”, 必须
//输入正确的y/n, 否则循环输入指令, 直到输入y 或者 n
//思路分析
//(1)定义一个变量choice , 接收用户的输入
String choice = "";
// (2)使用 while + break, 来处理接收到的输入时 y 或者 n
while (true) {
System.out.println("你确定要退出吗? y/n");
choice = scanner.next();
if ("y".equals(choice) || "n".equals(choice)) {
break;
}
// if ("y".equals(choice)) {
// loop = false;
// break;
// } else if ("n".equals(choice)) {
// break;
// } 方法二(不是很好)
}
// (3) 退出while后 , 再判断choice是y 还是n ,就可以决定是否退出
// 当用户退出while, 进行判断
if (choice.equals("y")) {
loop = false; //loop控制显示菜单的,loop = false退出零钱通系统
}
// System.out.println("4 退出");
}
}
SmallChangeSysApp.java
直接调用SmallChangeSysoop 对象,显示主菜单即可
package com.hspedu.smallchange.oop;
//我们直接调用SmallChangeSysoop 对象,显示主菜单即可
public class SmallChangeSysApp {
public static void main(String[] args) {
new SmallChangSysoop().mainMenu();
}
}



