由零钱通项目体会面向对象编程的好处

普通版

package com.hspedu.project;

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

public class SmallChangeSys {

    //1.先完成菜单
    //2.完成零钱通明细
    //3.收益入账
    //4.完成消费
    //5.校验退出
    //6.判断金额是否合理
    public static void main(String[] args) {
        boolean loop = true;
        Scanner scanner = new Scanner(System.in);
        String key = "";

        //2.完成零钱通明细
        //思路:1.把收益入账和消费保存到数组 2.使用对象 3.string拼接
        String details = "------------零钱通明细-------------";
        System.out.println("\n");
        //3.收益入账
        //根据功能,定义新变量
        double money = 0;
        double balance = 0;
        Date date = null; // date 是java.util.Date 类型,表示日期
        //日期格式化: 年月日时分
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
        //4.消费
        //定义新变量,保存消费的原因
        String note = "";
        //5.校验退出
        //定义校验的变量
        String choice = "";
        do {
            System.out.println("\n==========零钱通菜单=========");
            System.out.println("\t\t\t1 零钱通明细");//ctrl + alt + 向下箭头
            System.out.println("\t\t\t2 收益入账");
            System.out.println("\t\t\t3 消费");
            System.out.println("\t\t\t4 退   出");

            System.out.print("请选择(1-4):");
            key = scanner.next();

            //使用 switch 分支
            switch (key) {
                case "1":
                    System.out.println(details);
                    break;
                case "2":
                    System.out.print("收益入账金额:");
                    //money 的值应该校验
                    money = scanner.nextDouble();
                    if(money <= 0) {
                        System.out.println("收益金额 需要大于零");
                        break;
                    }
                    balance += money;

                    //拼接入账信息到 details
                    date = new Date(); //获取到当前日期
                    details += "\n收益入账\t+" + money + "\t" + sdf.format(date) + "\t" + balance;
                    break;
                case "3":
                    System.out.println("消费金额");
                    //money值同样需要校验
                    money = scanner.nextDouble();
                    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":
                    //使用 while + break 确保接收到正确的输入
                    //退出后,再判断
                    //建议一段代码,完成一个小功能
                    while (true) {
                        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("==========退出了零钱通项目==========");
    }
}

运行结果:

==========零钱通菜单=========
            1 零钱通明细
            2 收益入账
            3 消费
            4 退   出
请选择(1-4):2
收益入账金额:100

==========零钱通菜单=========
            1 零钱通明细
            2 收益入账
            3 消费
            4 退   出
请选择(1-4):3
消费金额
50
消费说明:
小蛋糕

==========零钱通菜单=========
            1 零钱通明细
            2 收益入账
            3 消费
            4 退   出
请选择(1-4):1
------------零钱通明细-------------
收益入账    +100.0    2023-11-28 18:50    100.0
小蛋糕    -50.0    2023-11-28 18:51    50.0

==========零钱通菜单=========
            1 零钱通明细
            2 收益入账
            3 消费
            4 退   出
请选择(1-4):4
你确定要退出吗 y/n
n

==========零钱通菜单=========
            1 零钱通明细
            2 收益入账
            3 消费
            4 退   出
请选择(1-4):4
你确定要退出吗 y/n
y
==========退出了零钱通项目==========

Process finished with exit code 0

OOP版 

别人也好用,代码也更简洁,好维护

package com.hspedu.project;

/*
* 直接调用SmallChangeSysOOP对象,显示主菜单即可
* */
public class SmallChangeSysApp {
    public static void main(String[] args) {
        new SmallChangeSysOOP().mainMenu();
    }
}
package com.hspedu.project;

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

//将各个功能对应一个方法
public class SmallChangeSysOOP {
    boolean loop = true;
    Scanner scanner = new Scanner(System.in);
    String key = "";

    //2.完成零钱通明细
    //思路:1.把收益入账和消费保存到数组 2.使用对象 3.string拼接
    String details = "------------零钱通明细-------------";
    //3.收益入账
    //根据功能,定义新变量
    double money = 0;
    double balance = 0;
    Date date = null; // date 是java.util.Date 类型,表示日期
    //日期格式化: 年月日时分
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
    //4.消费
    //定义新变量,保存消费的原因
    String note = "";
    //5.校验退出
    //定义校验的变量
    String choice = "";
    //先完成显示菜单,并可以选择
    public void mainMenu() {
        do {
            System.out.println("\n==========OOP零钱通菜单=========");
            System.out.println("\t\t\t1 零钱通明细");//ctrl + alt + 向下箭头
            System.out.println("\t\t\t2 收益入账");
            System.out.println("\t\t\t3 消费");
            System.out.println("\t\t\t4 退   出");

            System.out.print("请选择(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.print("收益入账金额:");
        //money 的值应该校验
        money = scanner.nextDouble();
        if(money <= 0) {
            System.out.println("收益金额 需要大于零");
            return; //退出方法
        }
        balance += money;

        //拼接入账信息到 details
        date = new Date(); //获取到当前日期
        details += "\n收益入账\t+" + money + "\t" + sdf.format(date) + "\t" + balance;
    }

    //完成消费
    public void pay() {
        System.out.println("消费金额");
        //money值同样需要校验
        money = scanner.nextDouble();
        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() {
        //使用 while + break 确保接收到正确的输入
        //退出后,再判断
        //建议一段代码,完成一个小功能
        while (true) {
            System.out.println("你确定要退出吗 y/n");
            choice = scanner.next();
            if ("y".equals(choice) || "n".equals(choice)) {
                break;
            }
        }
        if (choice.equals("y")) {
            loop = false;
        }
    }
}

 

 

你可能感兴趣的:(Java基础,java,开发语言)