要求:
模仿写一个微信零钱通信息,如下图所示:
输出这样的:
我们先通过面向过程来完成这样一个要求,后面在通过面向过程的方法去写面向对象的方法:
在整个过程中,我们应该通过化繁为简的思路去完成,其中已经有注释:
package com.xiaowang.smaalChange;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
/**
* @Author wanghaiyang
* id 201931101227
* @date 2021/11/26 16:32
*/
/*实现零钱通功能
1、先完成显示菜单界面,并且可以选择
* */
public class SmallChange {
public static void main(String[] args) {
//化繁为简:
//1、完成零钱通菜单
//2、完成零钱通明细:选择(3)
//3、完成收益入账
//4、完成消费
//5、完成退出
//代码改进:
//1.用户输入4退出时。给出提示”你确定要退出吗:y/n“,必须输入正确的y/n,否则循环输入指令,直到输入y或n。
//2.在收益和消费时,判断金额是否合理,并给出相应的提示
//3.将面向过程的代码修改成面向对象的方法,编写SmallChangeSysOOP.java类,并使用SmallChangeSysApp.java完成测试。
boolean loop = true;
double money=0;//收益金额
double balance =0;//余额
Date date = null;//格式中需要引进日期,下面是日期格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
String reason ="";//消费原因
String details = "---------------零钱通明细----------------";
//1、先得显示一下零钱通菜单,当loop是true的时候输出零钱通菜单
do {
System.out.println("============零钱通菜单============");
System.out.println("\t\t\t 1 零钱通明细");
System.out.println("\t\t\t 2 收益入账");
System.out.println("\t\t\t 3 消费");
System.out.println("\t\t\t 4 退出");
System.out.print("请选择(1-4)");
Scanner scanner = new Scanner(System.in);//得输入所要选择的功能
String key = scanner.next();//用key来保存所选择的功能
//接下来就是输出对应的功能咯
switch (key){
//2 完成零钱通明细:选择(3):(1)可以把收益入账和消费存入数组 (2)可以使用对象 (3)直接使用String拼接
case "1":
System.out.println(details+"\n");//直接输出那句话,后面的功能直接拼接
break;
case "2":
//3 完成收益入账功能,根据输出格式肯定要引进收益和余额两个变量
//2.在收益和消费时,判断金额是否合理,并给出相应的提示
System.out.println("请输入你的收益金额:");
money = scanner.nextDouble();
//建议去判断不正确的用例,不正确就直接退出,正确就继续往下面走,要是判断值正确的还得把后面代码包括进去并且最后还要判断不正确金额时
if (money<=0){
System.out.println("金额输入有误,应该大于0");
break;
}
balance += money;
date = new Date();//定义一个date日期
//用字符串拼接收益信息
details += "\n收益入账\t+"+ money + "\t"+ sdf.format(date)+"\t余额"+balance;
break;
case "3":
//4 完成零钱通消费,按照格式,需要一个字符串接收消费原因,一个变量消费金额
System.out.print("请输入消费原因");
reason = scanner.next();
System.out.print("请输入消费金额");
money = scanner.nextDouble();
//有一个范围校验
if (money <=0 || money>balance){
System.out.println("消费有误,消费金额应该在0-"+balance+"之间");
break;
}
balance -= money;
date = new Date();
//用字符串拼接消费信息
details += "\n\t"+reason+"\t-"+money+"\t"+sdf.format(date)+"\t余额"+balance;
break;
case "4":
//1.用户输入4退出时。给出提示”你确定要退出吗:y/n“,必须输入正确的y/n,否则循环输入指令,直到输入y或n。
String choice = "";//接收输入变量
//先判断是否输入的是y或者n,建议一段代码一个功能,方便更复杂的操作
while (true){
System.out.println("你确定要退出吗:y/n");
choice = scanner.next();
if (choice.equals("y") || choice.equals("n")){
break;
}
}
//退出while后,当输入y时,退出零钱通
if (choice.equals("y")){
loop = false;
}
break;
default:
System.out.println("您的输入有误请重新选择");
}
}while (loop);
System.out.println("=======退出零钱通=======");
}
}
多次选择后的输出:
面向对象可参考我的另外一篇博客:零钱通-面向对象