java实操项目-简易的零钱通

韩顺平java零钱通项目实操:

项目需求说明:

使用 java 开发简易的零钱通项目,可以完成收益入账,消费,查看明细,退出系统等功能。

java代码实现美元转人民币代码 java整钱兑换零钱代码_System

要求:

  1. 用户输入4退出时,给出提示”你确定要退出吗?y/n”,必须输入正确的y/n,否则循环输入指令,直到输入V或者n。
  2. 在收益入账和消费时,判断金额是否合理,并给出相应的提示。
  3. 将面向过程的代码修改成面向对象的方法,编写 SmallChanageSysOOPjava类,
    并使用SmallChanageSysApp.java完成测试。

代码:

SmallChanageSysOOP.java

import java.util.Scanner;
import java.text.SimpleDateFormat;
import java.util.Date;

public class SmallChangeSysOOP {

    // 属性
    // 获得用户的输入
    String choise = "";
    // 控制循环
    private boolean loop = true;
    // 如果写到 mainMenu() 里,运行时将抛出异常,应该写在属性这一栏
    Scanner scanner = new Scanner(System.in);
    // 使用字符串拼接的方法
    String expression = "-------------------零钱通明细---------------------";
    // 收入
    double money = 0;
    // 余额
    double balance = 0;
    // 获取时间
    Date date = new Date();
    // 修改时间格式
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
    // 支出
    double consumeMoney = 0;
    // 消费项目名称
    String consumeName = "";
    // 退出的选择
    String choiseExit = "";


    //方法
    //主菜单
    public void mainMenu() {
        do{
            System.out.println("\n==================零钱通菜单===================");
            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): ");
            choise = scanner.next();

            switch (choise) {
                case "1":
                    this.details();
                    break;
                case "2":
                    this.income();
                    break;
                case "3":
                    this.consume();
                    break;
                case "4":
                    this.exit();
                    break;
                default:
                    System.out.println("选择有误,请重新选择!");
                    break;
            }
        } while (loop);

        scanner.close();
    }
    
    // 零钱通明细
    public void details() {
        // 使用字符串拼接的方法,存放 零钱通明细 的数据
        System.out.println(expression);
    }

    // 收益到账
    public void income() {
        System.out.println("----------------------收益到账-------------------------");
        System.out.print("金额:");
        money = scanner.nextDouble();
        // 检测金额是否合理
        if (money <= 0) {
            System.out.println("收益金额应大于0!");
            // 不合理则返回主菜单
            // 结束方法
            return;
        }
        // 金额合理则余额 + 收入
        balance += money;
        // 写入到 明细 中
        expression += "\n收益到账\t+" + money + "\t\t" + sdf.format(date) + "\t余额:" + balance;
    }

    // 消费
    public void consume() {
        System.out.println("----------------------消费-------------------------");
        System.out.print("消费项目:");
        // 使用 nextLine() 获取用户的输入,会出现 直接跳过消费项目的获取 的现象
        if (scanner.hasNext()) {
            consumeName = scanner.next();
        }
        System.out.print("消费金额:");
        if (scanner.hasNextDouble()) {
            consumeMoney = scanner.nextDouble();
        }
        // 检测金额是否合理
        if (consumeMoney <= 0 || consumeMoney > balance) {
            System.out.println("消费金额应该在0-" + balance + "之间(不包括0)");
            // 不合理则返回主菜单
            // 结束方法
            return;
        }
        // 金额合理则余额 - 消费
        balance -= consumeMoney;
        // 写入到 明细 中
        expression += "\n" + consumeName + "\t\t-" + consumeMoney + "\t\t" + sdf.format(date) + "\t余额:" + balance;
    }

    // 退出
    public void exit() {
        System.out.println("你确定要退出吗?y/n");
        choiseExit = scanner.next();
        if ("y".equals(choiseExit)) { // 退出系统
            System.out.println("退出成功!");
            loop = false;
        } else if ("n".equals(choiseExit)) { // 返回到主菜单
            return;
        } else { // 必须输入正确的y/n,否则循环输入指令,直到输入y/n
            exit();
        }
    }
}

SmallChanageSysApp.java

public class SmallChangeSysAPP {
    public static void main(String[] args) {
        // 创建对象并调用主菜单
        new SmallChangeSysOOP().mainMenu();
    }
}