面向过程 实现零钱通
采用do-while循环,设置loop循环变量
1.先完成显示菜单,选择菜单,并输出相应提示
//采用switch-case结构,使用输入变量key,判断进行那个功能
2.完成 零钱通明细:设置字符串变量details,加或减之后,details拼接
3.完成 收益入账:设置变量money和balance吗(找到money不合理的情况,break)
4.完成 消费:同 收益入账
5.完成 退出:确认是否要退出y/n,采用while-break结构
tips1:
用到的编程思想:
1.判断money不合理!!的情况,break(如果找合理的情况会比较复杂,会多套一个if-else)
tips2:
补充的函数:
1.日期函数
Date date = null;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd hh:mm");
sdf.format(date);
package com.zyedu.smallchange;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class SmallChangeSys {
/*
1.先完成显示菜单,选择菜单,并输出相应提示
2.完成零钱通明细
3.完成 收益入账
4.完成 消费
*/
public static void main(String[] args) {
boolean loop = true;
Scanner myScanner = new Scanner(System.in);
int key;
String details = "----------零钱通明细----------";
//3.完成 收益入账——定义新的变量
double money = 0;
double balance = 0;
Date date = null;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd hh:mm");//用于日期格式化
//4.完成 消费——定义新的变量
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):");
//用switch判断key
key = myScanner.nextInt();
switch (key) {
case 1:
System.out.println(details);
// System.out.println("1 零钱通明细");
break;
case 2:
// System.out.println("2 收益入账");
System.out.println("收益入账金额:");
money = myScanner.nextDouble();
//money的范围应该校验
//编程思想:找出不正确的编程条件,然后给出提示,就直接break
if (money <= 0) {
System.out.println("收账金额需大于0");
break;//跳出本次switch
}
balance += money;
date = new Date();
details += "\n收益入账\t+" + money + "\t" + sdf.format(date) + "\t余额:" + balance;
break;
case 3:
// System.out.println("3 消费");
System.out.println("消费金额:");
money = myScanner.nextDouble();
//money的范围应该校验
System.out.println("消费说明:");
note = myScanner.next();
if (money <= 0 || money > balance) {
System.out.println("你的消费金额应该在0-" + balance);
break;
}
balance -= money;
date = new Date();
details += "\n" + note + "\t-" + money + "\t" + sdf.format(date) + "\t余额:" + balance;
break;
case 4:
// System.out.println("4 退 出");
String choice = "";
while (true) {
System.out.println("你确定要退出吗?y/n");
choice = myScanner.next();
if ("y".equals(choice) || "n".equals(choice)) {
break;
}
}
if ("y".equals(choice)) {
loop = false;
}
break;
default:
System.out.println("选择有误,请重新选择!");
}
} while (loop);
System.out.println("-----------退出了零钱通项目-----------");
}
}
面向对象 实现零钱通
SmallChangeOOP.java —— 每个功能对应一个方法
直接把各个功能的代码粘贴过来即可,需要注意的有以下几点
1.菜单功能:粘贴过来整个代码,把其他函数的内容换成 this.函数名()
2.明细功能
3.完成 收益入账:if中的break换成return,因为这里的break是退出的最外层的while
4.完成 消费:同 收益入账(if的break换成return)
5.完成 退出:确认是否要退出y/n,采用while-break结构(这里的break不用换成return,因为这里break退出的是这个内层的while,不是switch)
结构:
package com.zyedu.smallchange.oop;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
/**
* 该类是完成零钱通各个功能的类
* 使用OOP(面向对象编程)
* 将各个功能对应一个方法
*/
public class SmallChangeSysOOP {
//变量
boolean loop = true;
Scanner myScanner = new Scanner(System.in);
int key;
String details = "----------零钱通明细----------";
//3.完成 收益入账——定义新的变量
double money = 0;
double balance = 0;
Date date = null;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd hh:mm");//用于日期格式化
//4.完成 消费——定义新的变量
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):");
//用switch判断key
key = myScanner.nextInt();
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);
}
//1.零钱通明细
public void detail() {
System.out.println(details);
}
//2.收益入账
public void income() {
System.out.println("收益入账金额:");
money = myScanner.nextDouble();
//money的范围应该校验
//编程思想:找出不正确的编程条件,然后给出提示,就直接break
if (money <= 0) {
System.out.println("收账金额需大于0");
// break;//跳出本次switch
return;//break换成return
}
balance += money;
date = new Date();
details += "\n收益入账\t+" + money + "\t" + sdf.format(date) + "\t余额:" + balance;
}
//3.消费
public void pay() {
System.out.println("消费金额:");
money = myScanner.nextDouble();
//money的范围应该校验
System.out.println("消费说明:");
note = myScanner.next();
if (money <= 0 || money > balance) {
System.out.println("你的消费金额应该在0-" + balance);
// break;
return;//break换成return
}
balance -= money;
date = new Date();
details += "\n" + note + "\t-" + money + "\t" + sdf.format(date) + "\t余额:" + balance;
}
//4.退出
public void exit() {
String choice = "";
while (true) {
System.out.println("你确定要退出吗?y/n");
choice = myScanner.next();
if ("y".equals(choice) || "n".equals(choice)) {
break;//while中的break不用换成return
}
}
if ("y".equals(choice)) {
loop = false;
}
}
}
SmallChangeAPP.java —— 测试类
创建一个SmallChangeOOP的对象,调用其mainMenu()方法
package com.zyedu.smallchange.oop;
public class SmallChangeSysAPP {
public static void main(String[] args) {
SmallChangeSysOOP smallChangeSysOOP = new SmallChangeSysOOP();
smallChangeSysOOP.mainMenu();
}
}