项目—零钱通
项目需求说明
使用Java开发零钱通项目 可以完成收益入账 消费 查看明细 退出系统等功能。
项目的界面
使用面向过程的思想完成这个项目
package wang.project;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class SmallChangeSys {
//1.先完成显示菜单 并可以选择菜单 给出对应提示
//2.完成零钱通明细
//3.完成收益入账
//4.消费
//5.退出
//6.用户输入4退出时 给出提示“你确认要退出吗? y/n" 必须输入正确的y/n 否则循环输出指令 直到输出y或n
//7.在收益入账和消费时 判断金额是否合理 并给出相应的提示
public static void main(String[] args) {
//定义相关的变量
boolean loop = true;
Scanner scanner = new Scanner(System.in);
String key = "";
//2.完成零钱通明细
//思路:(1)使用数组 (2) 使用对象 (3)使用String拼接
String details ="\n---------------零钱通明细---------------";
//3.完成收益入账
//思路:定义新的变量
double money = 0;
double balance = 0;
Date date = null;//date是import java.util.Date;类型 表示日期
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): ");
key = scanner.next();
//使用switch分支控制
switch (key){
case "1":
System.out.println(details);
break;
case "2":
System.out.println("收益入账金额:");
money = scanner.nextDouble();
//money的值的范围应该得到校验
//思路:找出不正确的金额的条件 给出提示 就直接break
if(money <= 0){
System.out.println("收益入账金额需要大于0");
break;
}
balance += money;
//拼接收益入账信息到details
date = new Date();//获取当前日期
details += "\n收益入账\t+" + money + "\t" + sdf.format(date) + "\t" + balance;
break;
case "3":
System.out.println("消费金额");
money = scanner.nextDouble();
//money的值的范围应该得到校验
//思路:找出不正确的金额的条件 给出提示 就直接break
if(money <= 0 || money > balance){
System.out.println("消费金额应在 0-"+balance);
break;
}
System.out.println("消费说明:");
note = scanner.next();
balance -= money;
//拼接消费入账信息到details
date = new Date();//获取当前日期
details += "\n" + note + "\t-" + money + "\t" + sdf.format(date) + "\t" + balance;
break;
case "4":
//用户输入4退出时 给出提示“你确认要退出吗? y/n" 必须输入正确的y/n
// 否则循环输出指令 直到输出y或n
//思路:(1)定义一个变量choice 接受用户的输入
// (2)使用while+break 来处理收到的输入y或n
// (3)退出while后 判断choice是y还是n 就可以决定是否退出
String choice = "";
while(true){//要求用户必须输入y/n 否则一直循环
System.out.println("你确定要退出吗? y/n");
choice = scanner.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 wang.project;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
/**
* 该类是完成零钱通的各个功能的类
* 使用OOP思想
* 将各个功能对应一个方法
*/
public class SmallChangeSysOOP { //定义相关的变量
boolean loop = true;
Scanner scanner = new Scanner(System.in);
String key = "";
//2.完成零钱通明细
//思路:(1)使用数组 (2) 使用对象 (3)使用String拼接
String details = "\n---------------零钱通明细---------------";
//3.完成收益入账
//思路:定义新的变量
double money = 0;
double balance = 0;
Date date = null;//date是import java.util.Date;类型 表示日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");//可以用于日期格式化
//4.消费
//思路:定义新的变量 保存消费的原因
String note = "";
//完成显示菜单 并可以选择
public void mainMenu() {
do {
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("请选择(1-4): ");
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);
}
//完成零钱通明细
public void detail() {
System.out.println(details);
}
//完成收益入账
public void income() {
System.out.println("收益入账金额:");
money = scanner.nextDouble();
//money的值的范围应该得到校验
//思路:找出不正确的金额的条件 给出提示 就直接return
if (money <= 0) {
System.out.println("收益入账金额需要大于0");
return;//退出方法 不执行后面的代码
}
balance += money;
//拼接收益入账信息到details
date = new Date();//获取当前日期
details += "\n收益入账\t+" + money + "\t" + sdf.format(date) + "\t" + balance;
}
//完成消费
public void pay() {
System.out.println("消费金额");
money = scanner.nextDouble();
//money的值的范围应该得到校验
//思路:找出不正确的金额的条件 给出提示 就直接break
if (money <= 0 || money > balance) {
System.out.println("消费金额应在 0-" + balance);
return;
}
System.out.println("消费说明:");
note = scanner.next();
balance -= money;
//拼接消费入账信息到details
date = new Date();//获取当前日期
details += "\n" + note + "\t-" + money + "\t" + sdf.format(date) + "\t" + balance;
}
//完成退出
public void exit() {
//用户输入4退出时 给出提示“你确认要退出吗? y/n" 必须输入正确的y/n
// 否则循环输出指令 直到输出y或n
//思路:(1)定义一个变量choice 接受用户的输入
// (2)使用while+break 来处理收到的输入y或n
// (3)退出while后 判断choice是y还是n 就可以决定是否退出
String choice = "";
while (true) {//要求用户必须输入y/n 否则一直循环
System.out.println("你确定要退出吗? y/n");
choice = scanner.next();
if ("y".equals(choice) || "n".equals(choice)) {
return;
}
if (choice.equals("y")) {
loop = false;
}
}
}
}
package wang.project;
/**
* 直接调用SmallChangeSysOOP对象 显示菜单即可
*/
public class SmallChangeSysApp {
public static void main(String[] args) {
new SmallChangeSysOOP().mainMenu();
}
}