项目说明
使用 Java 开发 零钱通项目 , 可以完成收益入账,消费,查看明细,退出系统等功能
该项目展现了面向对象中封装的好处
(该项目来源:韩顺平java 0基础)
/**
面向过程
**/
import javax.xml.crypto.Data;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
/**
* 显示页面菜单
*/
public class Smallchange {
public static void main(String[] args) {
boolean loop = true;
Scanner input = new Scanner(System.in);
String key = "";
double money;//入账
double balance = 0;
String details = "-----------零钱通明细-------------";
Date date = null;
String note;
String choice = "";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");//可以用于日期格式化的
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.print("请选择(1-4)");
key = input.next();
switch (key) {
case "1"://零钱通明细
System.out.println(details);
break;
case "2"://收费入账
System.out.println("收益入账金额:");
money = input.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("消费说明:");
note = input.next();
System.out.println("消费金额:");
money = input.nextDouble();
if(money<0 ||balance<money){
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"://退出
/**1)定义变量choice
2)使用while+break 处理接收的输入时 y/n
3)退出while后,再判断choice是 y/n,就可以决定是否退出
4)原则:一段代码,完成一个小功能
*/
while (true) {
System.out.println("你确定要退出吗?(y/n)");
choice = input.next();
if ("y".equals(choice) || "n".equals(choice)) {
break;
}
}
if (choice.equals("y")) {
loop = false;
}
break;
default:
System.out.println("选择有误,请重新选择");
}
}while (loop);
System.out.println("退出了零钱通项目");
}
}
/**
面向对象
**/
package smallage;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class SmallChangeOOP {
//属性
boolean loop = true;
Scanner input = new Scanner(System.in);
String key = "";
double money;//入账
double balance = 0;
String details = "-----------零钱通明细-------------";
Date date = null;
String note;
String choice = "";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");//可以用于日期格式化的
//菜单的显示
public void Menu(){
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.print("请选择(1-4)");
key = input.next();
switch (key) {
case "1":
this.details();
break;
case "2":
this.Income();
break;
case "3":
this.pay();
break;
case "4":
/**1)定义变量choice
2)使用while+break 处理接收的输入时 y/n
3)退出while后,再判断choice是 y/n,就可以决定是否退出
4)原则:一段代码,完成一个小功能
*/
this.exit();
break;
default:
System.out.println("选择有误,请重新选择");
}
}while (loop);
System.out.println("退出了零钱通项目");
}
//零钱通明细
public void details(){
System.out.println(details);
}
//入账
public void Income(){
System.out.println("收益入账金额:");
money = input.nextDouble();
//金额校验(过关斩将法:找出不正确的情况)
if(money<=0){
System.out.println("输入金额应大于0");
return;//方法用return,不是逻辑操作的break/continue
}
balance += money;
date = new Date();
//拼接信息
details += "\n收益入账\t+" + money + "\t" + sdf.format(date) + "\t余额:" + balance;
}
//消费
public void pay(){
System.out.println("消费说明:");
note = input.next();
System.out.println("消费金额:");
money = input.nextDouble();
if(money<0 ||balance<money){
System.out.println("你的消费金额 应该在"+"0-"+balance);
return;
}
balance -= money;
date = new Date();
details += "\n" + note + "\t-" + money + "\t" + sdf.format(date) + "\t余额:" + balance;
}
//退出
public void exit(){
while (true) {
System.out.println("你确定要退出吗?(y/n)");
choice = input.next();
if ("y".equals(choice) || "n".equals(choice)) {
break;
}
}
if (choice.equals("y")) {
loop = false;
}
}
}
package smallage;
public class SmallChangeAPP {
public static void main(String[] args) {
new SmallChangeOOP().Menu();
}
}