零钱通
项目要求:使用java开发零钱通,可以完成收益入账,消费,查看明细,推出系统等功能
面向过程完成
步骤分解:
1.菜单制作,且可以选择功能
2.完成查看零钱通明细
3.完成收益入账
4.完成消费功能
- 菜单制作
public class Changes {
public static void main(String[] args) {
//1.使用do while循环制作菜单
boolean loop = true;
Scanner mysc = new Scanner(System.in);
do{
System.out.println("===============零钱通菜单==============");
System.out.println("\t1.零钱通明细");
System.out.println("\t2.收益入账");
System.out.println("\t3.消费");
System.out.println("\t4.退 出");
System.out.println("请选择(1-4)");
//2.使用switch语句完成选择
char key = mysc.next().charAt(0);
switch(key){
case '1':
System.out.println("\t1.零钱通明细");
break;
case '2':
System.out.println("\t2.收益入账");
break;
case '3':
System.out.println("\t3.消费");
break;
case '4':
System.out.println("\t4.退 出");
break;
}
}while (loop);
}
}
- 完成零钱通查看明细
public class Changes {
public static void main(String[] args) {
//1.使用do while循环制作菜单
boolean loop = true;
Scanner mysc = new Scanner(System.in);
String details = "==============明细===================";
do{
System.out.println("===============零钱通菜单==============");
System.out.println("\t1.零钱通明细");
System.out.println("\t2.收益入账");
System.out.println("\t3.消费");
System.out.println("\t4.退 出");
System.out.println("请选择(1-4)");
//2.使用switch语句完成选择
char key = mysc.next().charAt(0);
switch(key){
case '1':
//3.完成明细显示功能,这里使用字符串拼接。
System.out.println(details);
break;
case '2':
System.out.println("\t2.收益入账");
break;
case '3':
System.out.println("\t3.消费");
break;
case '4':
System.out.println("\t4.退 出");
loop = false;
break;
}
}while (loop);
System.out.println("零钱通已退出");
}
}
- 完成收益入账
public class Changes {
public static void main(String[] args) {
//1.使用do while循环制作菜单
boolean loop = true;
Scanner mysc = new Scanner(System.in);
String details = "==============明细===================";//明细拼接头部
double money = 0;//单次进出金额初始化
double balance = 0;//余额
Date date = null;//实时时间变量
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");//把时间的格式改成自己想要的
do{
System.out.println("===============零钱通菜单==============");
System.out.println("\t1.零钱通明细");
System.out.println("\t2.收益入账");
System.out.println("\t3.消费");
System.out.println("\t4.退 出");
System.out.println("请选择(1-4)");
//2.使用switch语句完成选择
char key = mysc.next().charAt(0);
switch(key){
case '1':
//3.完成明细显示功能,这里使用字符串拼接。
System.out.println(details);
break;
case '2':
//4.完成收益入账
System.out.println("请输入收益金额:");
money = mysc.nextDouble();
balance+=money;
date = new Date();//获取最新时间
//怎么拼接是关键
details+=
"\n收益入账\t +"+money+" "+sdf.format(date)+"\t余额:"+balance;
break;
case '3':
System.out.println("\t3.消费");
break;
case '4':
System.out.println("\t4.退 出");
loop = false;
break;
}
}while (loop);
System.out.println("零钱通已退出");
}
}
- 完成消费
public class Changes {
public static void main(String[] args) {
//1.使用do while循环制作菜单
boolean loop = true;
Scanner mysc = new Scanner(System.in);
String details = "==============明细===================";//明细拼接头部
double money = 0;//单次进出金额初始化
double balance = 0;//余额
Date date = null;//实时时间变量
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");//把时间的格式改成自己想要的
String Merchant = null;
do{
System.out.println("===============零钱通菜单==============");
System.out.println("\t1.零钱通明细");
System.out.println("\t2.收益入账");
System.out.println("\t3.消费");
System.out.println("\t4.退 出");
System.out.println("请选择(1-4)");
//2.使用switch语句完成选择
char key = mysc.next().charAt(0);
switch(key){
case '1':
//3.完成明细显示功能,这里使用字符串拼接。
System.out.println(details);
break;
case '2':
//4.完成收益入账
System.out.println("请输入收益金额:");
money = mysc.nextDouble();
balance+=money;
date = new Date();//获取最新时间
//怎么拼接是关键
details+=
"\n收益入账\t +"+money+" "+sdf.format(date)+"\t余额:"+balance;
break;
case '3':
//5.完成消费
System.out.println("请输入商户名:");
Scanner s = new Scanner(System.in);
Merchant = s.nextLine();
System.out.println("请输入消费金额:");
money = mysc.nextDouble();
balance-=money;
details+=
"\n"+Merchant+"\t -"+money+" "+sdf.format(date)+"\t余额:"+balance;
break;
case '4':
System.out.println("\t4.退 出");
loop = false;
break;
}
}while (loop);
System.out.println("零钱通已退出");
}
}
退出功能 把boole变量改成false就行。
优化
要求:
- 在用户要退出时,增加一次是否确认退出的信息
- 在收益入账和消费时,判断金额是否合理,并且给出相应的提示
public class Changes {
public static void main(String[] args) {
//1.使用do while循环制作菜单
boolean loop = true;
Scanner mysc = new Scanner(System.in);
String details = "==============明细===================";//明细拼接头部
double money = 0;//单次进出金额初始化
double balance = 0;//余额
Date date = null;//实时时间变量
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");//把时间的格式改成自己想要的
String Merchant = null;
do{
System.out.println("===============零钱通菜单==============");
System.out.println("\t1.零钱通明细");
System.out.println("\t2.收益入账");
System.out.println("\t3.消费");
System.out.println("\t4.退 出");
System.out.println("请选择(1-4)");
//2.使用switch语句完成选择
char key = mysc.next().charAt(0);
switch(key){
case '1':
//3.完成明细显示功能,这里使用字符串拼接。
System.out.println(details);
break;
case '2':
//4.完成收益入账
System.out.println("请输入收益金额:");
money = mysc.nextDouble();
//建立编程思想,不要全部放到分支语句,可以设置关卡,如果条件不满足直接break跳出不进行下面语句
if (money <= 0){
System.out.println("收益必须大于0");
break;
}
balance+=money;
date = new Date();//获取最新时间
//怎么拼接是关键
details+=
"\n收益入账\t +"+money+" "+sdf.format(date)+"\t余额:"+balance;
break;
case '3':
//5.完成消费
System.out.println("请输入商户名:");
Scanner s = new Scanner(System.in);
Merchant = s.nextLine();
System.out.println("请输入消费金额:");
money = mysc.nextDouble();
if (money > balance || money <=0) {
System.out.println("支付失败,您的支付金额应该在1~"+balance+"之间");
break;
}
balance-=money;
details+=
"\n"+Merchant+"\t -"+money+" "+sdf.format(date)+"\t余额:"+balance;
break;
case '4':
boolean out = true;
do{System.out.println("是否确认退出 y/n");//嵌套do while循环
char answer = new Scanner(System.in).next().charAt(0);
if (answer == 'y'){
loop = false;
out = false;
}else if(answer == 'n'){
System.out.println("已返回菜单");
}
}while (out);
break;
default:
System.out.println("输入错误,请输入1-4");
}
}while (loop);
System.out.println("零钱通已退出");
}
}
使用演示:
---------------零钱通菜单------------------
1.零钱通明细
2.收益入账
3.消费
4.退 出
请选择(1-4)
2
请输入收益金额:
500
---------------零钱通菜单------------------
1.零钱通明细
2.收益入账
3.消费
4.退 出
请选择(1-4)
3
请输入商户名:
看电影
请输入消费金额:
50
---------------零钱通菜单------------------
1.零钱通明细
2.收益入账
3.消费
4.退 出
请选择(1-4)
1
--------------------明细------------------
收益入账 +500.0 2022-10-15 23:35 余额:500.0
看电影 -50.0 2022-10-15 23:35 余额:450.0
---------------零钱通菜单------------------
1.零钱通明细
2.收益入账
3.消费
4.退 出
请选择(1-4)
3
请输入商户名:
吃饭5001
请输入消费金额:
300
---------------零钱通菜单------------------
1.零钱通明细
2.收益入账
3.消费
4.退 出
请选择(1-4)
1
--------------------明细------------------
收益入账 +500.0 2022-10-15 23:35 余额:500.0
看电影 -50.0 2022-10-15 23:35 余额:450.0
吃饭5001 -300.0 2022-10-15 23:35 余额:150.0
---------------零钱通菜单------------------
1.零钱通明细
2.收益入账
3.消费
4.退 出
请选择(1-4)
3
请输入商户名:
买手机
请输入消费金额:
5000
支付失败,您的支付金额应该在1~150.0之间
---------------零钱通菜单------------------
1.零钱通明细
2.收益入账
3.消费
4.退 出
请选择(1-4)
4
是否确认退出 y/n
n
已返回菜单
---------------零钱通菜单------------------
1.零钱通明细
2.收益入账
3.消费
4.退 出
请选择(1-4)
4
是否确认退出 y/n
y
零钱通已退出