面向过程方式代码如下:
package SmallChangesSys;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class SmallChangeSys {
//1.完成显示菜单
//2.完成零钱通明细显示
//3.收益入账:用字符串
public static void main(String[] args) {
boolean loop=true;
Scanner input=new Scanner(System.in);//创建一个Scanner对象,从键盘上获取输入流
int balance=0;//余额
int money=0;//收益
Date date=new Date();
// System.out.println(date);//Sun Aug 29 20:17:40 CST 2021 需要转换格式
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm");
// System.out.println(sdf.format(date));//2021-08-29 20:22
String details=new String();
do {
System.out.println("\n==============零钱通菜单============");
System.out.println("1 零钱通明细");
System.out.println("2 收益入账");
System.out.println("3 消费");
System.out.println("4 退出");
System.out.print("请输入需要进行的操作:");
int choice = input.nextInt();
switch (choice){
case 1:
System.out.println("----------收益明细----------");
System.out.println(details);
break;
case 2:
System.out.print("请输入收益金额:");
money=input.nextInt();
if (money<0){//设置限定条件
System.out.println("你的输入有误,收益不能小于零,自动退出菜单页面!");
break;
}
balance+=money;
String temp="\n收益入账\t+" + money +"\t"+sdf.format(date)+"\t"+balance;
details+=temp;
break;
case 3:
System.out.print("请输入消费主题:");
String inputString=input.next();
System.out.print("请输入消费金额:");
money=input.nextInt();
while(money>balance){
System.out.print("你的钱包支付不起这笔钱,请重新输入消费金额:");
money=input.nextInt();
}
while(money<0){
System.out.print("商家不会付你钱哦,请重新输入消费金额:");
money=input.nextInt();
}
balance-=money;
details+="\n"+inputString+"\t-" + money +"\t"+sdf.format(date)+"\t"+balance;
break;
case 4:
String exit=new String();
while(true){//这段代码只做一件事:将输入的字符限定在y或n
System.out.print("你确定要退出吗[y/n]:");
exit=input.next();
if("y".equals(exit)||"n".equals(exit)){
break;//输入y或n,退出循环
}
}
if ("y".equals(exit)) {
loop=false;
}
break;
}
}while (loop);
}
}
面向对象实现(基于上述代码):
属性类:存放属性和方法
package SmallChangesSys;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class SmallChangeSysOOP {
boolean loop=true;
Scanner input=new Scanner(System.in);//创建一个Scanner对象,从键盘上获取输入流
int balance=0;//余额
int money=0;//收益
Date date=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm");
String details=new String();
void showMap(){//显示零钱通界面
do {
System.out.println("\n==============零钱通菜单============");
System.out.println("1 零钱通明细");
System.out.println("2 收益入账");
System.out.println("3 消费");
System.out.println("4 退出");
System.out.print("请输入需要进行的操作:");
int choice = input.nextInt();
switch (choice){
case 1:
showDetails();
break;
case 2:
addMoney();
break;
case 3:
comsumption();
break;
case 4:
exitSys();
break;
default:
System.out.println("你的输入有误,请重新输入!");
break;
}
}while (loop);
}
//显示零钱通收益明细
void showDetails(){
System.out.println("----------收益明细----------");
System.out.println(details);
}
//收益
void addMoney(){
System.out.print("请输入收益金额:");
money=input.nextInt();
if (money<0){
System.out.println("你的输入有误,收益不能小于零,自动退出菜单页面!");
return;//从原来的循环中移植的代码,原来都是break用于跳出循环体,这里要改成return跳出方法体
}
balance+=money;
String temp="\n收益入账\t+" + money +"\t"+sdf.format(date)+"\t"+balance;
details+=temp;
}
//消费
void comsumption(){
System.out.print("请输入消费主题:");
String inputString=input.next();
System.out.print("请输入消费金额:");
money=input.nextInt();
while(money>balance){
System.out.print("你的钱包支付不起这笔钱,请重新输入消费金额:");
money=input.nextInt();
}
while(money<0){
System.out.print("商家不会付你钱哦,请重新输入消费金额:");
money=input.nextInt();
}
balance-=money;
details+="\n"+inputString+"\t-" + money +"\t"+sdf.format(date)+"\t"+balance;
}
//退出
void exitSys(){
String exit=new String();
while(true){//这段代码只做一件事:将输入的字符限定在y或n
System.out.print("你确定要退出吗[y/n]:");
exit=input.next();
if("y".equals(exit)||"n".equals(exit)){
break;//输入y或n,退出循环
}
}
if ("y".equals(exit)) {
loop=false;
}
}
}
main方法类:
package SmallChangesSys;
public class SmallChangeSysOOPmain {
public static void main(String[] args) {
new SmallChangeSysOOP().showMap();//调用显示菜单方法
}
}
学习总结:
1、在退出功能中,实现限定输入内容的功能。其中,限定内容的功能与判断功能分开实现,而不是在一个while循环中实现所有的东西。这种思维有利于项目的开发,增强代码的可读性。
2、获取时间==>使用Date类、SimpleDateFormat类
Date date=new Date();
System.out.println(date);//Sun Aug 29 20:17:40 CST 2021 需要转换格式
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm");
System.out.println(sdf.format(date));//2021-08-29 20:22