面向过程版本
package com.hansp.project.SmallChange.tradition;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class menu {
public static void main(String[] args) {
boolean loop = true;
Scanner scanner = new Scanner(System.in);
String key="";
//先完成显示菜单
//完成零钱通明细的功能
//完成收益入账的功能
//改进功能,一般都是找不正确的功能
String note="";
double money = 0;
double balance= 0;
char x='x';
Date date = null;
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm");
String details="----------零钱通明细----------";
do{
System.out.println("\n==========零钱通菜单==========");
System.out.println("\t\t1.零钱通明细");
System.out.println("\t\t2.收益入账");
System.out.println("\t\t3.消费情况 ");
System.out.println("\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("你输入了错误的收益");
break;
}
balance+=money;
//拼接收益入账信息
date=new Date();//获取到当前日期
details +="\n收益入账\t+"+money+"\t"+sdf.format(date )+"\t"+balance;
break;
case "3" :
System.out.println("输入消费金额");
money=scanner.nextInt();
if(money>balance||money<=0)
{
System.out.println("不能花费大于你,并且应该是正数");
}
//范围校验,一会实现细节
System.out.println("消费说明");
note=scanner.next();
date=new Date();
balance-=money;
//开始拼接
details +="\n"+note+"\t-"+money+"\t"+sdf.format(date )+"\t"+balance;
break;
case "4":
System.out.println("你确定退出吗,确定的话输入y,不想退出的话输入n");
x=scanner.next().charAt(0);
while(true){
if(x=='y' || x=='n'){
break;
}
else System.out.println("请输入y或者n");
x=scanner.next().charAt(0);
}
if(x=='y')
loop=false;
//退出零钱通项目
break;
default:
System.out.println("请选择1-4中的一个数");
}
}while(loop);
}
}
OOP(面向对象)版本
package com.hansp.project.SmallChange.OOP;
//app类
import java.util.Date;
public class App {
public static void main(String[] args) {
function f = new function();
f.mainMenu();
}
}
功能类
package com.hansp.project.SmallChange.OOP;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
/**
* 该类是完成零钱通的各个功能的类
* 使用OOP
* 一个功能对应一个方法
*/
public class function {
boolean loop = true;
Scanner scanner = new Scanner(System.in);
String key="";
String note="";
double money = 0;
double balance= 0;
char x='x';
Date date = null;
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm");
String details="----------零钱通明细----------";
public void mainMenu(){
do{
System.out.println("\n==========零钱通菜单==========");
System.out.println("\t\t1.零钱通明细");
System.out.println("\t\t2.收益入账");
System.out.println("\t\t3.消费情况 ");
System.out.println("\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("请选择1-4中的一个数");
}
}while(loop);
}
public void detail(){
System.out.println(details);
}
public void income(){
System.out.println("收益入账金额");
money=scanner.nextDouble();
//校验收益
if(money<=0)
{
System.out.println("你输入了错误的收益");
return;//退出方法不再执行后面的代码
}
balance+=money;
//拼接收益入账信息
date=new Date();//获取到当前日期
details +="\n收益入账\t+"+money+"\t"+sdf.format(date )+"\t"+balance;
}
public void pay(){ System.out.println("输入消费金额");
money=scanner.nextInt();
if(money>balance||money<=0)
{
System.out.println("不能花费大于你,并且应该是正数");
return;
}
//范围校验,一会实现细节
System.out.println("消费说明");
note=scanner.next();
date=new Date();
balance-=money;
//开始拼接
details +="\n"+note+"\t-"+money+"\t"+sdf.format(date )+"\t"+balance;
}
public void exit(){
System.out.println("你确定退出吗,确定的话输入y,不想退出的话输入n");
x=scanner.next().charAt(0);
while(true){
if(x=='y' || x=='n'){
break;
}
else System.out.println("请输入y或者n");
x=scanner.next().charAt(0);
}
if(x=='y')
loop=false;
}
}
积累经验:
1.当我们想杜宇某一个值进项判断从而约束时,可以想想他不正确的情况(比较好想)
if(条件){报错提示 break;}
if(另一个条件) {报错提示 break;}
这样的代码可读性会大大增强
2.OOP的特性的封装在这里体现出来了
功能类写方法再通过功能类的主菜单调用各种方法
最后应用,而不是在应用再写代码了
而且修改比较方便,新增功能也比较方便