本篇主要解决内容:
- 使用面向过程的思路完成零钱通项目⭐️
- 使用面向对象的思路完成零钱通项目⭐️
❤️ 个人主页:Nezuko627的博客 欢迎来访~~~
文章目录
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();
}
}
3 面向对象方式实现
🍑 在该部分,我们只需要将面向过程实现部分的代码进行优化即可。
首先我们创建一个类 SmallChange
,里面需要包含该程序的基础属性以及基础功能的方法 ,参考代码如下:
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class SmallChange {
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 = ""; // 用于存储消费说明
// 显示菜单
public void mainMenu(){
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": // 零钱通明细部分
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.println("=================收益入账=================");
System.out.println("收益入账金额: ");
money = in.nextDouble();
// 校验money范围
if(money <= 0){
System.out.println("入账信息有误!"); // 提示错误信息
return;
}
balance += money;
// 拼接入账信息到 details
date = new Date(); // 获取当前日期
details += "\n收益入账\t+" + money + "\t" + sdf.format(date) + "\t" + balance;
return;
}
// 消费
public void pay(){
System.out.println("消费金额: ");
money = in.nextDouble();
// money 校验
if(money <= 0 || balance < money){
System.out.println("消费金额不正确或余额不足,无法进行消费!");
return;
}
System.out.println("消费说明: ");
note = in.next();
balance -= money;
// 拼接消费信息到 details
date = new Date(); // 获取当前日期
details += "\n" + note + "\t-" + money + "\t" + sdf.format(date) + "\t" + balance;
return;
}
// 退出
public void exit(){
// 询问用户是否退出
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;
}
return;
}
}
🍎 而后,我们只需要在主函数中创建对象,来调用相应的方法,即可实现零钱通功能,相关代码如下:
public class ShowSmallChange {
public static void main(String[] args) {
SmallChange sc = new SmallChange();
sc.mainMenu();
}
}
4 功能展示
⭐️ Star 1: 输入 2 ,收账 100,再次输入 2,收账 200;
⭐️ Star 2: 输入 3,消费 99,消费信息为 肯德基;
⭐️ Star 3: 输入 1,展示一下零钱明细;
⭐️ Star 4: 输入 4,而后输入 y,退出程序。
写在最后
🌟以上便是本文的全部内容啦,后续内容将会持续免费更新,如果文章对你有所帮助,麻烦动动小手点个赞 + 关注,非常感谢 ❤️ ❤️ ❤️ !
如果有问题,欢迎私信或者评论区!
共勉:“你间歇性的努力和蒙混过日子,都是对之前努力的清零。”