Java—-零钱通项目

Java—-零钱通项目

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

1. 面向过程

1)首先是这样一个菜单界面

Java----零钱通项目

由于不管选择什么,都需要至少执行一次,所以考虑do…while循环结构。

boolean loop = true;
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 退\t出");

            System.out.print("请选择1-4:");
}while(loop);
System.out.println("=======退出零钱通=======");

使用switch选择结构来实现选择1-4的结果

int n = scanner1.nextInt();
//switch结构
switch (n) {
    case 1:
        System.out.println("1 零钱明细");
        break;
    case 2:
        System.out.print("2 收益入账");
        break;
    case 3:
        System.out.print("3 消费");
        break;
    case 4:
        System.out.println("4 退\t出");
        loop = false;
        break;
}

2)实现1 零钱明细功能

Java----零钱通项目

这里使用字符串拼接,定义detail变量

String detail = "--------------零钱明细--------------";
//在上面case 1的情况下直接输出detail
case 1:
        System.out.println(detail);
        System.out.println();
        break;

3)实现2 收益入账功能

这里需要定义两个变量,一个是表示收益的money变量,另一个表示余额balance变量。

另外时间信息需要调用包 import java.util.Date;

double money = 0.0;
double balance = 0.0;
Date date = null;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
//修改上面case 2的情况,得到detail
case 2:
    System.out.print("收益入账金额:");
    money = scanner1.nextDouble();
    //money需要校验
    if (money

4)实现3 消费功能

与收益入账类似,

//修改上面case 3的情况,得到detail
case 3:
    System.out.print("消费金额:");
    money = scanner1.nextDouble();
    System.out.print("消费说明:");
    note = scanner1.next();
    //需要校验消费是否超出余额
    if (money > balance) {
        System.out.println("消费超出余额");
        break;
    }
    balance -= money;
    date = new Date();
    detail += "\n" + note + "\t-" + money + "\t" + sdf.format(date) + "\t" + balance;
    break;

5)实现4 退出功能

Java----零钱通项目

如果输入结果不是y或n,将一直询问,所以需要用一个循环来实现,并且在循环中判断输入字符。

//在case 4 中进行修改
case 4:
    System.out.println("4 退\t出");
    String choice = "";

    while (true) {
        System.out.println("你确定要退出吗?y/n");
        choice = scanner1.next();
        if ("y".equals(choice) || "n".equals(choice)) {
            break;
        }
    }
    if ("y".equals(choice)) {
        loop = false;
    }
    break;

此外如果输入的数字不在1-4范围内,需要提示错误信息。故在switch中添加default情况。

default:
    System.out.println("选择有误,请重新选择");

2. 面向对象

将上述菜单界面,4个功能都拆解成类的方法,相应的变量都定义为类的属性。最后调用菜单方法即可。把各个方法都封装起来,极大地提高了代码的复用性,便于维护。

package com.zixue.SmallChange.OOP;

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

// 面向对象编程
public class SmallChangeSysOOP {
    //1.显示菜单
    boolean loop = true;
    Scanner scanner1 = new Scanner(System.in);
    //2.零钱通明细
    String detail = "--------------零钱明细--------------";
    //3.收益入账
    double money = 0;
    double balance = 0.0;
    Date date = null;
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
    //4. 消费
    String note = null;
    // 完成显示菜单
    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 退\t出");

            System.out.print("请选择1-4:");
            int n = scanner1.nextInt();
            //switch结构
            switch (n) {
                case 1:
                    this.detail();
                    break;
                case 2:
                    this.income();
                    break;
                case 3:
                    this.consume();
                    break;
                case 4:
                    this.exit();
                    break;
                default:
                    System.out.println("选择有误,请重新选择");
            }
        } while (loop);
    }
    // 完成零钱通明细
    public void detail() {
        System.out.println(detail);
        System.out.println();
    }
    // 完成收益入账
    public void income(){
        System.out.print("收益入账金额:");
        money = scanner1.nextDouble();
        //money需要校验
        if (money  balance) {
            System.out.println("消费超出余额");
            return;
        }
        balance -= money;
        date = new Date();
        detail += "\n" + note + "\t-" + money + "\t" + sdf.format(date) + "\t" + balance;
    }
    // 完成退出
    public void exit(){
        System.out.println("4 退\t出");
        String choice = "";

        while (true) {
            System.out.println("你确定要退出吗?y/n");
            choice = scanner1.next();
            if ("y".equals(choice) || "n".equals(choice)) {
                break;
            }
        }
        if ("y".equals(choice)) {
            loop = false;
            System.out.println("=======退出零钱通=======");
        }
    }
}
package com.zixue.SmallChange.OOP;

public class SmallChangeSysAPP {
    public static void main(String[] args) {
        new SmallChangeSysOOP().mainMenu();
    }
}

Original: https://www.cnblogs.com/shelley2022/p/16372463.html
Author: 迷路的柚子
Title: Java—-零钱通项目

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/589170/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球