【JavaSE】如何实现简易的零钱通项目?附完整代码(上)

简介: 文章目录1 零钱通项目介绍2 面向过程方式实现2.1 菜单设计实现2.2 零钱明细展示功能实现2.3 收益入账功能实现2.4 消费功能的实现2.5 程序退出实现2.6 *完整代码3 面向对象方式实现4 功能展示写在最后

1 零钱通项目介绍

✈️ Hi ~ 大家好,我是 Nezuko ,英文名不好记,你也可以叫我黄小黄🐕。今天我们来简单实现一个零钱通的项目,我们先来看一下微信中零钱账单都有哪些内容叭!


通过分析,我们可以知道,一个零钱通程序需要具备的基本功能有:

⭐️ 零钱明细展示功能 : 即展示收账、入账的全部信息;

⭐️ 收账功能 :即收款,增加自己的余额,需要展示收入金额;

⭐️ 消费功能 :即购买物品、餐厅就餐或者转账等操作,减少自己的余额。需要展示消费用途、消费金额以及消费时间的信息;

⭐️ 退出零钱通程序 :即结束或者终止用户的操作。

我们需要利用 Java 已学的知识,来设计一个程序,实现上述基本功能而不必设计界面,简化操作,重在逻辑。下面,我们通过面向过程与面向对象两种思路来实现零钱通项目。


2 面向过程方式实现

2.1 菜单设计实现

🍑 菜单设计如下图:


进入程序时,我们直接进入菜单,根据用户的输入来进入相应的功能, 比如:当用户输入 2 的时候,则进入消费入账的功能,当用户输入 4 的时候则退出程序。

那么,如何让程序刚开始就进入菜单呢? 我们可以考虑使用一个 boolean 变量来控制循环,在循环内使用 switch 语句,来实现相应的功能,菜单的框架就很容易实现啦!参考代码如下:

    Scanner in = new Scanner(System.in);
        // 菜单部分相关变量
        boolean loop = true;  // 用于控制循环
        String key = "";  // 菜单选项
        do{
            // 具体菜单
            System.out.println("=================零钱通菜单=================");
            System.out.println("\t\t\t\t1 零钱通明细");
            System.out.println("\t\t\t\t2 消费入账");
            System.out.println("\t\t\t\t3 消费");
            System.out.println("\t\t\t\t4 退出");
            System.out.println("请选择(1-4): ");
            key = in.next();
            switch (key){
                case "1":  // 零钱通明细部分
                    break;
                case "2":  // 收益入账
                    break;
                case "3":  // 消费
                    break;
                case "4":  // 退出零钱通
                        loop = false;
                    break;
                default:
                    System.out.println("输入有误!");
            }
        }while (loop);
        in.close();

2.2 零钱明细展示功能实现

🍑 该部分功能用于展示零钱的收支等信息,考虑使用 String 类型的变量来存储信息,并在相应的功能区展示,即 case 1 部分,相关代码如下:

  // 零钱通明细相关变量
    String details = "=================零钱通明细=================";  // 展示
    ... 
      case "1":  // 零钱通明细部分
                      System.out.println(details);
                      break;
      ...

2.3 收益入账功能实现

🍑 收益入账部分我们需要设计两个变量,一个用于存储收入,一个用于存储余额。需要注意的是收入不能小于0!收入操作完成后,我们将信息与零钱通明细展示信息变量整合。相关代码如下:

        // 收益入账相应的变量
        double money = 0;  // 入账金额
        double balance = 0;  // 余额
        Date date = null;
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");  // 日期格式化
        ...
          case "2":  // 收益入账
                    System.out.println("=================收益入账=================");
                    System.out.println("收益入账金额: ");
                    money = in.nextDouble();
                    // 校验money范围
                    if(money <= 0){
                        System.out.println("入账信息有误!");  // 提示错误信息
                        break;
                    }
                    balance += money;
                    // 拼接入账信息到 details
                    date = new Date();  // 获取当前日期
                    details += "\n收益入账\t+" + money + "\t" + sdf.format(date) + "\t" + balance;
                    break;
        ...

2.4 消费功能的实现

🍑 在该部分,我们可以使用在收入部分的变量,只不过判断条件不同,即消费不能为负数,也不能超过所剩余额。当然,为了方便信息的展示,我们需要额外设置个变量,来存储消费信息。相关代码如下:

// 消费部分
        String note = "";  // 用于存储消费说明
        ...
          case "3":  // 消费
                    System.out.println("消费金额: ");
                    money = in.nextDouble();
                    // money 校验
                    if(money <= 0 || balance < money){
                        System.out.println("消费金额不正确或余额不足,无法进行消费!");
                        break;
                    }
                    System.out.println("消费说明: ");
                    note = in.next();
                    balance -= money;
                    // 拼接消费信息到 details
                    date = new Date();  // 获取当前日期
                    details += "\n" + note + "\t-" + money + "\t" + sdf.format(date) + "\t" + balance;
                    break;
        ...

2.5 程序退出实现

🍑 在该部分,当用户输入4时,则询问用户是否退出程序。当用户输入 y 时,则退出程序;当用户输入 n 时,则继续运行程序;当用户输入其他值时,程序继续询问用户是否退出程序,相关代码如下:

              ...
                case "4":  // 退出零钱通
                    // 询问用户是否退出
                    String choice = "";
                    while (true){
                        System.out.println("你确定要退出吗?y/n: ");
                        choice = in.next();
                        if("y".equals(choice) || "n".equals(choice)){
                            break;
                        }
                    }
                    // 用户输入 y 则退出, 输入 n 则不退出
                    if(choice.equals("y")){
                        loop = false;
                    }
                    break;
               ...

2.6 *完整代码

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class SmallChange {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 菜单部分相关变量
        boolean loop = true;  // 用于控制循环
        String key = "";  // 菜单选项
        // 零钱通明细相关变量
        String details = "=================零钱通明细=================";  // 展示明细
        // 收益入账相应的变量
        double money = 0;  // 入账金额
        double balance = 0;  // 余额
        Date date = null;
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");  // 日期格式化
        // 消费部分
        String note = "";  // 用于存储消费说明
        do{
            // 具体菜单
            System.out.println("=================零钱通菜单=================");
            System.out.println("\t\t\t\t1 零钱通明细");
            System.out.println("\t\t\t\t2 消费入账");
            System.out.println("\t\t\t\t3 消费");
            System.out.println("\t\t\t\t4 退出");
            System.out.println("请选择(1-4): ");
            key = in.next();
            switch (key){
                case "1":  // 零钱通明细部分
                    System.out.println(details);
                    break;
                case "2":  // 收益入账
                    System.out.println("=================收益入账=================");
                    System.out.println("收益入账金额: ");
                    money = in.nextDouble();
                    // 校验money范围
                    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 = in.nextDouble();
                    // money 校验
                    if(money <= 0 || balance < money){
                        System.out.println("消费金额不正确或余额不足,无法进行消费!");
                        break;
                    }
                    System.out.println("消费说明: ");
                    note = in.next();
                    balance -= money;
                    // 拼接消费信息到 details
                    date = new Date();  // 获取当前日期
                    details += "\n" + note + "\t-" + money + "\t" + sdf.format(date) + "\t" + balance;
                    break;
                case "4":  // 退出零钱通
                    // 询问用户是否退出
                    String choice = "";
                    while (true){
                        System.out.println("你确定要退出吗?y/n: ");
                        choice = in.next();
                        if("y".equals(choice) || "n".equals(choice)){
                            break;
                        }
                    }
                    // 用户输入 y 则退出, 输入 n 则不退出
                    if(choice.equals("y")){
                        loop = false;
                    }
                    break;
                default:
                    System.out.println("输入有误!");
            }
        }while (loop);
        in.close();
    }
}


相关文章
|
2月前
|
运维 监控 搜索推荐
阿里大鱼进行发短信业务---使用详细步骤-Java操作
这篇文章详细介绍了如何在Java中使用阿里大鱼服务来发送短信,包括开通短信服务、签名和模板管理,以及具体的Java开发步骤和代码示例。
94 0
阿里大鱼进行发短信业务---使用详细步骤-Java操作
|
7月前
|
JavaScript Java 测试技术
基于Java的网上拍卖系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的网上拍卖系统的设计与实现(源码+lw+部署文档+讲解等)
108 3
|
7月前
|
JavaScript Java 测试技术
基于Java的餐厅点餐系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的餐厅点餐系统的设计与实现(源码+lw+部署文档+讲解等)
132 1
|
7月前
|
JavaScript Java 测试技术
基于Java的个体户商城的设计与实现(源码+lw+部署文档+讲解等)
基于Java的个体户商城的设计与实现(源码+lw+部署文档+讲解等)
36 0
|
7月前
|
JavaScript Java 测试技术
基于Java的青年租房管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的青年租房管理系统的设计与实现(源码+lw+部署文档+讲解等)
57 0
|
7月前
|
JavaScript Java 测试技术
基于Java的理财通的设计与实现(源码+lw+部署文档+讲解等)
基于Java的理财通的设计与实现(源码+lw+部署文档+讲解等)
59 0
|
7月前
|
JavaScript Java 测试技术
基于Java的网上奶茶店系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的网上奶茶店系统的设计与实现(源码+lw+部署文档+讲解等)
101 0
|
7月前
|
JavaScript Java 测试技术
基于Java的网上订餐管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的网上订餐管理系统的设计与实现(源码+lw+部署文档+讲解等)
353 0
|
7月前
|
JavaScript Java 测试技术
基于Java的餐馆点餐系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的餐馆点餐系统的设计与实现(源码+lw+部署文档+讲解等)
64 0
|
7月前
|
存储 Java 数据库
Java实现一个简单的图书管理系统(内有源码)
Java实现一个简单的图书管理系统(内有源码)
111 0