项目零钱通
项目代码实现
面向过程方式代码 (边看边做)
package com.quange.smallchange;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class SmallChangeSys {
// 化繁为简
// 1. 首先完成显示菜单,并可以选择菜单,给出对应的提示信息
// 2. 完成零钱通明细
// 思路:(1)可以把收益入账和消费,保存到数组 (2)可以使用对象 (3) 简单的话使用字符串拼接的方法。
// 3. 完成收益入账
// 思路:创建新的变量 入账金额,余额,当前日期时间
// 4. 完成 消费
// 思路: 常见新的变量,保存消费的原因
public static void main(String[] args) {
// 定义相关的变量
boolean loop = true;
Scanner scanner = new Scanner(System.in);
String details = "----------------零钱通明细----------------";
// 收益的钱
double money = 0;
// 余额
double balance = 0;
// date 是 java.util.Date 类型 表示日期
Date date = null;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 可以用于日期格式化
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.print("请选择菜单(1-4):");
String key = scanner.next();
// 使用switch 分支控制
switch (key) {
case "1" :
System.out.println(details);
break;
case "2" :
System.out.print("收益入账金额:");
// 接收输入的入账金额
money = scanner.nextDouble();
// 对money值的范围进行校验
if (money <= 0){
System.out.println("输入的金额应大于0");
break;
}
// 把入账的金额加入到余额中
balance += money;
date = new Date();
// 格式化日期
String date1 = sdf.format(date);
// 拼接收益入账信息到 details
details += "\n收益入账\t+" + money + "\t" + date1 + "\t" + balance;
break;
case "3":
System.out.println("输入消费金额");
money = scanner.nextDouble();
// 对消费金额进行校验
if (money > balance || money <= 0){
System.out.println("消费金额应该在0" + balance + "元");
break;
}
System.out.println("请出入消费说明!");
note = scanner.next();
balance -= money;
date = new Date();
// 格式化日期
String date2 = sdf.format(date);
// 拼接消费信息到 details
details += "\n" + note + "\n \t-" + money + "\t" + date2 + "\t" + balance;
break;
case "4":
String choice = "";
// 判断是否输入的是y/n
while (true){
System.out.print("请确认是否退出(y/n)");
choice = scanner.next();
if ("y".equals(choice) || "n".equals(choice)){
break;
}
}
// 如果输入的是Y,则退出程序
if (choice.equals("y")){
loop = false;
}
break;
default:
System.out.println("菜单选择有误,请重新选择!!");
}
}while (loop);
System.out.println("已推出零钱通程序!!");
}
}
----------------零钱通明细----------------
收益入账 +100.0 2022-04-15 14:34:22 100.0
================零钱通菜单================
1: 零钱通明细
2: 收益入账
3: 消费
4: 退 出
请选择菜单(1-4):
面向对象编程方法 oop代码 (边看边做)
package com.quange.smallchange;
/**
* 调用对象,显示菜单
*/
public class SmallChangeSysApp {
public static void main(String[] args) {
new SmallChangeSysOOP().mainMenu();
}
}
package com.quange.smallchange;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
/**
* 该类是完成零钱通各个功能的类,使用 oop面向对象编程
* 1、显示菜单
* 2、完成零钱通明细
* 3、完成收益入账
* 4、消费
* 5、推出
* 思路:将各个功能,对应一个方法
*/
public class SmallChangeSysOOP {
// 属性
// 定义相关的变量
boolean loop = true;
Scanner scanner = new Scanner(System.in);
String details = "----------------零钱通明细----------------";
// 收益的钱
double money = 0;
// 余额
double balance = 0;
// date 是 java.util.Date 类型 表示日期
Date date = null;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 可以用于日期格式化
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.print("请选择菜单(1-4):");
String key = scanner.next();
// 使用switch 分支控制
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);
System.out.println("已推出零钱通程序!!");
}
// 零钱通明细
public void detail(){
System.out.println(details);
}
// 零钱通收益入账
public void income(){
System.out.print("收益入账金额:");
// 接收输入的入账金额
money = scanner.nextDouble();
// 对money值的范围进行校验
if (money <= 0){
System.out.println("输入的金额应大于0");
return; // 推出方法,不在执行后面的语句代码
}
// 把入账的金额加入到余额中
balance += money;
date = new Date();
// 格式化日期
String date1 = sdf.format(date);
// 拼接收益入账信息到 details
details += "\n收益入账\t+" + money + "\t" + date1 + "\t" + balance;
}
// 消费
public void pay(){
System.out.println("输入消费金额");
money = scanner.nextDouble();
// 对消费金额进行校验
if (money > balance || money <= 0){
System.out.println("消费金额应该在0" + balance + "元");
return;
}
System.out.println("请出入消费说明!");
note = scanner.next();
balance -= money;
date = new Date();
// 格式化日期
String date2 = sdf.format(date);
// 拼接消费信息到 details
details += "\n" + note + "\n \t-" + money + "\t" + date2 + "\t" + balance;
}
public void exit(){
String choice = "";
// 判断是否输入的是y/n
while (true){
System.out.print("请确认是否退出(y/n)");
choice = scanner.next();
if ("y".equals(choice) || "n".equals(choice)){
break;
}
}
// 如果输入的是Y,则退出程序
if (choice.equals("y")){
loop = false;
}
}
}
================零钱通菜单================
1: 零钱通明细
2: 收益入账
3: 消费
4: 退 出
请选择菜单(1-4):4
请确认是否退出(y/n)y
已推出零钱通程序!!
进程已结束,退出代码0
评论区