百木园-与人分享,
就是让自己快乐。

Java----零钱通项目

Java----零钱通项目

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

1. 面向过程

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

由于不管选择什么,都需要至少执行一次,所以考虑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 零钱明细功能

这里使用字符串拼接,定义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 <= 0) {
        System.out.println(\"收益入账金额要大于0\");
        break;
    }
    balance += money;
    date = new Date();
    //System.out.println(sdf.format(date));
    detail += \"\\n收益入账\\t\" + money + \"\\t\" + sdf.format(date) + \"\\t\" + balance;
    break;

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 退出功能

如果输入结果不是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 <= 0) {
            System.out.println(\"收益入账金额要大于0\");
            return;
        }
        balance += money;
        date = new Date();
        //System.out.println(sdf.format(date));
        detail += \"\\n收益入账\\t\" + money + \"\\t\" + sdf.format(date) + \"\\t\" + balance;
    }
    // 完成消费
    public void consume(){
        System.out.print(\"消费金额:\");
        money = scanner1.nextDouble();
        System.out.print(\"消费说明:\");
        note = scanner1.next();
        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();
    }
}

来源:https://www.cnblogs.com/shelley2022/p/16372463.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » Java----零钱通项目

相关推荐

  • 暂无文章