问题描述:写出一段程序,描写一个零钱通项目,功能有查询明细,收益,消费,退出;
图片如下:
解决思路:
1.先简后繁:先构造出框架,即具体的菜单栏,然后进行测试,确保无误
2.补充细节:构造好框架以后,再根据具体的要求,将功能转换成代码,每一个功能进行单独调试,确保每个功能都正常
3.优化:代码结束以后,根据测试结果对代码进行优化,使代码的可读性更高
代码如下(仅供参考):
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class SmallChangeSys {
//零钱通项目:包括零钱通明细,收益入账,消费,退出功能
//思路:先构架出大概的框架,再根据具体细节进行补充
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); //创建输入对象
String key = ""; //key(1-4)表示选择的功能
double money = 0; //money表示每次入账或消费的金额
boolean bool = true; //表示退出do..while循环的变量
double balance = 0; //表示余额
String way = ""; //表示消费途径
String re = ""; //用于在收益和消费两个功能的字符串连接
String ch = ""; //表示是否要退出进程的选择
boolean bool1 = true; //表示是否退出进程
do {
//构造出菜单栏的框架
System.out.println("-------------零钱通菜单-------------");
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.print("请选择(1-4): ");
key = scanner.next(); //此时key表示选择的功能
//用switch语句进行选择
switch (key) {
case "1" :
System.out.println("\n-------------零钱通明细-------------");
System.out.println(re); //输出字符串的连接
break;
case "2" :
System.out.print("输入入账金额:");
money = scanner.nextDouble(); //输入入账的金额
//如果入账金额小于等于0,说明此时入账金额无效
if (money <= 0) {
System.out.println("收益金额无效,请重新输入");
break;
}
balance += money; //入账后的余额
Date date = new Date(); //创建一个日期对象,调用时可以显示实时日期
SimpleDateFormat sdf = new SimpleDateFormat(); //目的是将日期格式化
re += "\n收益入账\t+" + money + "\t" + sdf.format(date) + "\t余额:" + balance; //写出入账后的信息
break;
case "3" :
System.out.print("输入消费金额: ");
money = scanner.nextDouble(); //输入消费的金额
//如果小于等于0,则无效
if (money <= 0) {
System.out.println("消费金额无效,请重新输入");
break;
} else if (money >= balance) { //如果消费金额大于余额,则输出余额不足
System.out.println("余额不足");
break;
}
System.out.print("消费途径:");
way = scanner.next();
balance -= money;
Date date1 = new Date(); //创建一个日期对象,调用时可以显示实时日期
SimpleDateFormat sdf1 = new SimpleDateFormat();
re += "\n" + way + "\t-" + money + "\t" + sdf1.format(date1) + "\t余额:" + balance;
break;
case "4" :
//是否要退出,y表示退出,n表示不退出
while (true){
System.out.print("是否要退出y/n :");
ch = scanner.next();
if(ch.equals("y")){
bool = false;
break;
}else if (ch.equals("n")) {
break;
}else {
System.out.println("请重新输入");
}
}
break;
default:
System.out.println("选择有误,请重新输入");
}
}while (bool);
}
}