1.非oop版:
package projection;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class SmallChangeSys {
public static void main(String[] args) {
//面向过程,非数组,
boolean loop = true;//结束的标志。
Scanner scanner = new Scanner(System.in);//scanner方法,很重要
String key = "";
//直接数组,或者对象,或者string拼接
String details = "--------------零钱通明细------------------";
double money = 0;
//总金额:
double balance = 0;
Date date = null;//date是java.util.Date类型,日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy--MM--dd hh:mm");//格式化日期
//消费说明,定义新变量
String note = "";
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.println("请选择:(1-4):");
key = scanner.next();
switch (key) {
case "1":
System.out.println(details);
break;
case "2":
System.out.println("收益入账金额:");
money = scanner.nextDouble();
//检测是否符合常理,判断其不正确的情况显然可读性大于判断其正确输入的情况,编程经验
if(money<=0){
System.out.println("Are You Killing Me? 重新输!");
break;
}
//值的范围需要效验,之后才能完善
balance += money;
date = new Date();//日期
System.out.println(sdf.format(date));
details += "\n收益入账\t+" + money + "\t" + sdf.format(date) + "\t" + balance;
break;
case "3":
System.out.println("消费金额:");
money = scanner.nextDouble();
//检测是否合理
if (money <= 0 || money>balance){
System.out.println("你的消费金额应在0-" + balance);
break;
}
System.out.println("消费说明:");
note = scanner.next();
balance -= money;
//拼接信息到details
date = new Date();
details += "\n" + note + "\t\t-" + money + "\t" + sdf.format(date) + "\t" + balance;
break;
case "4":
String choice = "";
while(true){
System.out.println("你确定退出吗?y/n");
choice = scanner.next();
if("y".equals(choice)){
loop = false;
break;
}else if("n".equals(choice)){
break;
}
}
//loop = false; //此时退出可以执行while语句,while循环结构换可以当选择结构用,为false时不再循环,只do一次,因此不需要循环体。
break;
default:
System.out.println("选择有误,请重新选择");
}
}while(loop);
System.out.println("退出了零钱通项目");
}
}
2.oop版:
SmallChangeSysOOP.java:
package projection.OOP;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
//这里储存其面向对象的方法,各个功能对应一个方法
public class SmallChangeOOP {
//属性直接全复制过来即可。
//面向过程,非数组,
boolean loop = true;//结束的标志。
Scanner scanner = new Scanner(System.in);//scanner方法,很重要
String key = "";
//直接数组,或者对象,或者string拼接
String details = "--------------零钱通明细------------------";
double money = 0;
//总金额:
double balance = 0;
Date date = null;//date是java.util.Date类型,日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy--MM--dd hh:mm");//格式化日期
//消费说明,定义新变量
String note = "";
public void mainMenu(){
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.println("请选择:(1-4):");
key = scanner.next();
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() {
//case1直接粘贴来
System.out.println(details);
}
public void income() {
System.out.println("收益入账金额:");
money = scanner.nextDouble();
//检测是否符合常理,判断其不正确的情况显然可读性大于判断其正确输入的情况,编程经验
if(money<=0){
System.out.println("Are You Killing Me? 重新输!");
return;//需要将break改为return
}
//值的范围需要效验,之后才能完善
balance += money;
date = new Date();//日期
System.out.println(sdf.format(date));
details += "\n收益入账\t+" + money + "\t" + sdf.format(date) + "\t" + balance;
//不用return,没有在循环内。
}
public void pay() {
System.out.println("消费金额:");
money = scanner.nextDouble();
//检测是否合理
if (money <= 0 || money>balance){
System.out.println("你的消费金额应在0-" + balance);
return;
}
System.out.println("消费说明:");
note = scanner.next();
balance -= money;
//拼接信息到details
date = new Date();
details += "\n" + note + "\t\t-" + money + "\t" + sdf.format(date) + "\t" + balance;
}
public void exit() {
String choice = "";
while(true){
System.out.println("你确定退出吗?y/n");
choice = scanner.next();
if("y".equals(choice)){
loop = false;
break;
}else if("n".equals(choice)){
return;
}
}
//loop = false; //此时退出可以执行while语句,while循环结构换可以当选择结构用,为false时不再循环,只do一次,因此不需要循环体。
}
}
SmallChangeSysApp.java:
package projection.OOP;
public class SmallChangeSysApp {
public static void main(String[] args) {
new SmallChangeOOP().mainMenu();
}
}