编程思想
1.一串代码尽量只完成一个功能,便于代码的可读性和维护性
2.判断条件,找出不正确的进行判断
//例如消费,消费金额应该大于0,且小于等于余额,
// 第一种
if(money <= 0)
else if(money > balance)
else
// 推荐第二种
if(money<=0 || money> balance)
面向过程编程
零钱通,实现收益入账,消费,查看明细,退出系统等功能
package smallChange;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class sys {
//化繁为简
// 1.先完成显示菜单
// 2.完成零钱通明细
// 3.完成收益入账
// 4.消费
// 5.退出时,必须输入正确的指令才能退出
// 6.收益入账和消费时,判断金额是否合理,并给出相应的判断
public static void main(String[] args) {
boolean loop = true;
Scanner sc = new Scanner(System.in);
String key = "";
String details = "\n======零钱通明细======\n";
//收益明细
double money = 0;
double balance = 0;
//日期格式化
Date date = null;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:mm");
//消费明细
String note = " ";
//退出功能
String choice="";
do {
System.out.println("=========================");
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("请选择");
key = sc.next();
switch (key) {
case "1":
System.out.println(details);
break;
case "2":
System.out.println("收益入账金额");
money = sc.nextDouble();
if(money<=0){
System.out.println("收益入账金额需要大于0");
break;
}
balance += money;
//拼接收益信息
date = new Date();
details += "\n收益入账\t" + money + "\t" + sdf.format(date) + "\t" + balance;
break;
case "3":
System.out.println("消费金额");
money = sc.nextDouble();
if(money<=0 || money> balance){
System.out.println("消费金额应该在 0-"+balance);
}
System.out.println("请输入消费说明");
note = sc.next();
balance -= money;
date = new Date();
details+="\n" + note+ "\t" + money+"\t"+sdf.format(date) + "\t" + balance;
break;
case "4":
System.out.println("\t\t\t4 退出");
while(true){
System.out.println("你确定要退出码?y/n");
choice=sc.next();
if("y".equals(choice) || "n".equals(choice)){
break;
}
}
//退出while后,再判断
if(choice.equals("y")){
loop = false;
}
break;
default:
System.out.println("输入有误");
}
} while (loop);
System.out.println("已退出");
}
}
面向对象编程
package smallChange.OOP;
public class SysApp {
public static void main(String[] args) {
SysOOP sysOOP = new SysOOP();
sysOOP.mainMenu();
}
}
package smallChange.OOP;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
//用于完成零钱通的功能
//将各个功能对应一个方法
public class SysOOP {
//需要用到的属性
boolean loop = true;
Scanner sc = new Scanner(System.in);
String key = "";
String details = "\n======零钱通明细======\n";
//收益明细
double money = 0;
double balance = 0;
//日期格式化
Date date = null;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:mm");
//消费明细
String note = " ";
//退出功能
String choice="";
//显示菜单
public void mainMenu(){
do {
System.out.println("=========================");
System.out.println("=========零钱通(OOP)菜单========");
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("请选择");
key = sc.next();
switch (key) {
case "1":
this.detail();
break;
case "2":
this.income();
break;
case "3":
this.pay();
break;
case "4":
this.back();
break;
default:
System.out.println("输入有误");
}
} while (loop);
}
//零钱通明细
public void detail(){
System.out.println(details);
}
//收益入账
public void income(){
System.out.println("收益入账金额");
money = sc.nextDouble();
if(money<=0){
System.out.println("收益入账金额需要大于0");
//方法中return结束
return ;
}
balance += money;
//拼接收益信息
date = new Date();
details += "\n收益入账\t" + money + "\t" + sdf.format(date) + "\t" + balance;
}
//消费
public void pay(){
System.out.println("消费金额");
money = sc.nextDouble();
if(money<=0 || money> balance){
System.out.println("消费金额应该在 0-"+balance);
return;
}
System.out.println("请输入消费说明");
note = sc.next();
balance -= money;
date = new Date();
details+="\n" + note+ "\t" + money+"\t"+sdf.format(date) + "\t" + balance;
}
//退出
public void back(){
System.out.println("\t\t\t4 退出");
while(true){
System.out.println("你确定要退出码?y/n");
choice=sc.next();
if("y".equals(choice) || "n".equals(choice)){
break;
}
}
//退出while后,再判断
if(choice.equals("y")){
return;
}
}
}