多态——应用零钱通(普通写法)

使用我们的java实现零钱通的功能:

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

===========零钱通菜单===========
        1 零钱通明细            
        2 收益入账              
        3 消费                  
        4 退出                  
请选择(1-4):2
收益入账金额:
100
===========零钱通菜单===========
        1 零钱通明细            
        2 收益入账              
        3 消费                  
        4 退出                  
请选择(1-4):3
消费金额:
50
消费方向:
吃饭
===========零钱通菜单===========
        1 零钱通明细            
        2 收益入账              
        3 消费                  
        4 退出                  
请选择(1-4):4
是否确定要退出零钱通(y(退出)或者是n(取消退出))
请输入:y
=========退出了零钱通项目=========

我们将实现上述所显示的各项功能:

1.零钱通菜单功能:

首先我们知道菜单栏里面有 1 零钱通明细 2 收益入账 3 消费 4 退出这四个选项,然后我们可以进行我们的选择,与此同时,当我们选择完成之后,会进入到我们所选的功能里面,当然我们知道当我们运行我们的程序之后,菜单栏就会出现,当我们体验完一个功能之后,也会再次跳转得到我们的菜单当中:

//定义一个开关,依此来使得菜单是否需要循环,还是需要退出
		boolean loop = true;
		int key = 0;
		Scanner myscanner = new Scanner(System.in);
		
		//使用do...while语句让菜单循环
		do {
		System.out.println("==========零钱通菜单==========");
		System.out.println("        1 零钱通明细            ");
		System.out.println("        2 收益入账              ");
		System.out.println("        3 消费                  ");
		System.out.println("        4 退出                  ");
		System.out.print("请选择(1-4):");
		//用一个变量来接收我们的选择
		key = myscanner.nextInt();
		//使用switch语句来判断我们的选择
		switch(key) {
		case 1:
			System.out.println("零钱通明细");
			break;
		case 2:
			System.out.println("收益入账");
			break;
		case 3:
			System.out.println("消费");
			break;
		case 4:
			System.out.println("退出");
			loop = false;
			break;
			default:
				System.out.println("输入有误,请输入(1-4),请重新输入:");
		}
		}while(loop);
		
		System.out.println("退出零钱通程序...");

2.零钱通明细功能:

我们认为,零钱通明细的输出我们可以定义一个字符串,依此来输出我们的具体开销与收入

String details = "===========零钱通明细============\n";
            case 1:
			System.out.println(details);
			break;

3.收益入账功能:

首先我们知道收益入账是我们的收入,我们需要一个变量来接收我们的收益,与此同时我们还需要一个变量来接收我们的总的余额,与此同时我们还需要一个时间,来记录收益时的时间,在这里我们需要注意,只有当输入的数值大于0才是正确的,

        double money = 0;//收入与消费的金额
		double balance = 0;//余额
		
		//表示当前的日期,date是java.util.Date类型,表示日期
				Date date = null;
				SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm");
        //可以用于日期格式化
            case 2:
			do {
				System.out.println("请输入您的收入:");
				money = myscanner.nextDouble();
				if(money <= 0) {
					System.out.println("请输入正确的收入:");
				}
			}while(money <= 0);
			balance += money;
			//获取时间
			date = new Date();//获取当前日期
			//拼接字符
			details += "\n收益入账\t+"+money + "\t"+sdf.format(date) + "  余额:"+balance; 
			break;

4.消费功能:

对于消费功能我们需要一个变量知道我们的消费方向,与此同时也要对于消费的金额进行判断,要大于0,还有就是当我们的余额没有消费金额多,此消费是不能生效的。

//消费方向
		String note = "";
case 3:
			System.out.println("请输入您的消费金额:");
			money = myscanner.nextDouble();
			System.out.println("请输入消费动向:");
			note = myscanner.next();
			
			//判断我们账户的余额是否满足此消费
			if(balance < money) {
				System.out.println("账户余额不足,无法满足此消费。");
				break;
			}else if(money >= 0) {    //判断是否money<0
				System.out.println("您输入的金额不正确,请重新输入:");
				break;
			}
			
			balance -= money;
			//拼接消费支出到details
			date = new Date();//获取当前日期
			details += "\n"+note+"\t-"+money + "\t"+sdf.format(date) + "  余额:"+balance;
			break;

5.退出功能:

在这里我们加入一个提问就是是不是真的需要退出

            case 4:
			String choice = "";
			do {
			System.out.println("是否需要退出该程序:(y(退出)或者是n(取消退出))");
			System.out.print("请输入:");
			choice = myscanner.next();
			//进行判断
			if(choice.equals("y")) {
				loop = false;
			}else if(choice.equals("n")) {
				break;
			}else {
				System.out.println("输入有误,请重新输入:");
			}
	
			}while(!(choice.equals("y") || choice.equals("n")));
			break;

这样我们的零钱通的各个功能就完成了

总体代码:

public class PocketMoneySystem {

	public static void main(String[] args) {
		
		//项目
		//第一步:显示菜单,选择菜单,给出对应提示
		//第二步:完成零钱通明细
		//第三步:收益入账
		//第四步:消费支出
	
		//定义相关变量
		boolean loop = true;
		Scanner myscanner = new Scanner(System.in);
		int key = 0;
		
		//第二步:零钱通明细,使用字符串来拼接
		String details = "===========零钱通明细============\n";
		
		//第三步:收益入账
		double money = 0;
		double balance = 0;
		//表示当前的日期,date是java.util.Date类型,表示日期
		Date date = null;
		SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm");//可以用于日期格式化
		
		//第四步:消费支出
		String note =""; 
		
		//第五步:退出的确定与规范
		
		//收益入账money的校验
		
		//消费支出money的校验		
		
		//菜单界面,初始化菜单界面,显示我们的菜单功能,并且可以选择我们的菜单功能
		//使用do...while()循环,我们的菜单是需要循环的,不断的提供选择的,
		//选择Scanner,用一个变量接收,使用switch语句进行判断执行哪个功能
		do {
			System.out.println("===========零钱通菜单===========");
			System.out.println("        1 零钱通明细            ");
			System.out.println("        2 收益入账              ");
			System.out.println("        3 消费                  ");
			System.out.println("        4 退出                  ");
			System.out.print("请选择(1-4):");
			key = myscanner.nextInt();
			switch(key) {
			case 1:
				System.out.println(details);
				break;
			case 2:
				do {
					System.out.println("收益入账金额:");
					money = myscanner.nextDouble();
					//money要进行校验,是否正确
					if(money <= 0 ) {
						System.out.println("请输入正确的金额 需要大于0");
					}
				}while(money <= 0);
				
				balance += money;
				//拼接收益入账到details
				date = new Date();//获取当前日期
				details += "\n收益入账\t+"+money + "\t"+sdf.format(date) + "  余额:"+balance;
				break;
			case 3:
				
				System.out.println("消费金额:");
				money = myscanner.nextDouble();
				//消费金额的校验
				System.out.println("消费方向:");
				note = myscanner.next();
				
				if(balance < money) {
					System.out.println("余额不足,无法消费此行为..");
					break;
				}else if(money <= 0) {
					System.out.println("您的消费余额应该在0到"+balance+"之间"+"请重新输入:");
					break;
				}
				
				balance -= money;
				//拼接消费支出到details
				date = new Date();//获取当前日期
				details += "\n"+note+"\t-"+money + "\t"+sdf.format(date) + "  余额:"+balance;
				break;
				
			case 4:
				String choice = "";
				do {
					System.out.println("是否确定要退出零钱通(y(退出)或者是n(取消退出))");
					System.out.print("请输入:");
					choice = myscanner.next();
					if(choice.equals("y")) {
						//选择退出的时候,我们改变整个控制菜单循环的变量,便可以退出
						loop = false;
						break;
					}else if(choice.equals("n")){
						break;
					}else {
						System.out.println("输入有误,请重新输入");
					}
					//进入循环的条件:当两个条件都为假的时候。取反才为真,才进入循环
				}while(!(choice.equals("y") || choice.equals("n")));
				
				break;
				
			default:
					System.out.println("您的选择有误,请重新选择输入...");	
			}
		}while(loop);
		System.out.println("=========退出了零钱通项目=========");
		

	}

}

实现演示:

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

===========零钱通菜单===========
        1 零钱通明细            
        2 收益入账              
        3 消费                  
        4 退出                  
请选择(1-4):2
收益入账金额:
1000
===========零钱通菜单===========
        1 零钱通明细            
        2 收益入账              
        3 消费                  
        4 退出                  
请选择(1-4):3
消费金额:
-100
消费方向:
gg
您的消费余额应该在0到1000.0之间请重新输入:
===========零钱通菜单===========
        1 零钱通明细            
        2 收益入账              
        3 消费                  
        4 退出                  
请选择(1-4):1
===========零钱通明细============

收益入账	+1000.0	2024-06-29 09:35  余额:1000.0
===========零钱通菜单===========
        1 零钱通明细            
        2 收益入账              
        3 消费                  
        4 退出                  
请选择(1-4):3
消费金额:
1500
消费方向:
gg
余额不足,无法消费此行为..
===========零钱通菜单===========
        1 零钱通明细            
        2 收益入账              
        3 消费                  
        4 退出                  
请选择(1-4):1
===========零钱通明细============

收益入账	+1000.0	2024-06-29 09:35  余额:1000.0
===========零钱通菜单===========
        1 零钱通明细            
        2 收益入账              
        3 消费                  
        4 退出                  
请选择(1-4):3
消费金额:
500
消费方向:
gg
===========零钱通菜单===========
        1 零钱通明细            
        2 收益入账              
        3 消费                  
        4 退出                  
请选择(1-4):1
===========零钱通明细============

收益入账	+1000.0	2024-06-29 09:35  余额:1000.0
gg	-500.0	2024-06-29 09:36  余额:500.0
===========零钱通菜单===========
        1 零钱通明细            
        2 收益入账              
        3 消费                  
        4 退出                  
请选择(1-4):4
是否确定要退出零钱通(y(退出)或者是n(取消退出))
请输入:b
输入有误,请重新输入
是否确定要退出零钱通(y(退出)或者是n(取消退出))
请输入:n
===========零钱通菜单===========
        1 零钱通明细            
        2 收益入账              
        3 消费                  
        4 退出                  
请选择(1-4):4
是否确定要退出零钱通(y(退出)或者是n(取消退出))
请输入:y
=========退出了零钱通项目=========

如有错误,还望指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值