java第一阶段之零钱通项目

ps:内容为本人学习韩顺平老师课程的笔记,全部all总都为个人总结。

功能

在这里插入图片描述

思路

化繁为简

1.菜单

do while循环loop是循环的条件(Boolean变量) 里面嵌套switch


```java
package smallchange;

import java.util.Scanner;

public class SmallChangeSys {
	public static void main(String[] args) {
		boolean loop=true;
		Scanner sc=new Scanner(System.in);
		String key="";//整形也可以
		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 退出");
			
			System.out.println("请选择(1-4)");
			key=sc.next();
			
			switch(key) {
			case"1"://如果是正型还用写“”吗
				System.out.println("1 零钱通明细");
				break;//这里的break只是脱离switch循环但dowhile还在
			case"2":
				System.out.println("2 收益入账");
				break;
			case"3":
				System.out.println("3 消费");
				break;	
			case"4":
				System.out.println("4 退出");
				loop=false;//这个才把while循环退出了
				break;
			default:
				System.out.println("选择有误,请重新选择");
				break;//是要有的,但是是最后一个选择就没有必要了
			}
		
		}while(loop);
		System.out.println("=======退出零钱通项目=======");
	}
}

2.完成零钱通明细

收入 入账 消费
放入 数组(不确定有多大) 对象 字符串拼接完成
这里选择第3个


```java
String details="--------零钱通明细----------";



case"1":
				System.out.println(details);

3.零钱通收益入账

入账 时间 余额
入账 钱数(会有个范围校验时间 余额
首先就是定义新的变量 所以是功能驱动程序员增加新的变化和代码

介绍一下时间的用法

import java.util.Date;

		Date date=null;

date=new Date();
System.out.println(date);

输出是这样的在这里插入图片描述
我们要换个格式

		Date date=null;
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm");//可以用于日期格式化

        date=new Date();
		System.out.println(sdf.format(date));

这回输出就是
在这里插入图片描述

details+="\n收益入账\t+"+money+"\t"+sdf.format(date)+"\t"+balance;

输出的时候
在这里插入图片描述

4.消费

在这里插入图片描述
变量
消费名称

在这里插入图片描述

5.退出

在这里插入图片描述

				String choice="";
				
				//while循环确保输入的是y或n
				while(true) {
					System.out.println("你确定要退出吗? y/n");
					choice=sc.next();
					if("y".equals(choice) || "n".equals(choice)) {
						break;//只是退出switch里的while
					}
				}//其实在这里也可以分y和n但是尽量一段代码,只完成一个小功能
				//是y就退出整个  n的话不做讨论
				if("y".equals(choice)) {
					loop=false;
				}
                break;//这个一定是要有的,要不然还会执行default

在这里插入图片描述

6.补充:收益和消费的时候判断金额是否合理

当要增加功能的时候我们要知道代码要在什么地方写

思路:找出不正确的金额的条件,然后给出提示,就直接break

//2
if(money<=0) {//说错误的
					System.out.println("收益入账金额需要大于0");
					break;//直接打道回府
				}
//3
if(money<=0 ||money>balance) {
					System.out.println("你的消费金额应该在0-"+balance);
					break;
				}

这样写就是很方便,分支少,方便修改
加入再加入其他的条件,那么就是分支会多,如果按照错误的写就是直接再添加独自的
在这里插入图片描述

过程编程代码

package smallchange;

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

public class SmallChangeSys {
	public static void main(String[] args) {
		boolean loop=true;
		Scanner sc=new Scanner(System.in);
		String key="";//整形也可以
		//2.明细
		String details="--------零钱通明细----------";
		//3.收益入账
		double money=0;
		double balance=0;
		Date date=null;
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm");//可以用于日期格式化
		//4.消费原因
		String note="";
		do {
			System.out.println("\n=========零钱通菜单========");//\n换行
			System.out.println("\t\t\t1 零钱通明细");
			System.out.println("\t\t\t2 收益入账");
			System.out.println("\t\t\t3 消费");
			System.out.println("\t\t\t4 退出");
			
			System.out.println("请选择(1-4)");
			key=sc.next();
			
			switch(key) {
			case"1":
				System.out.println(details);
				break;
			case"2":
				System.out.println("收益入账金额:");
				money=sc.nextDouble();
				//money的值应该校验 收益
				if(money<=0) {//说错误的
					System.out.println("收益入账金额需要大于0");
					break;//直接打道回府
				}
				balance+=money;
				date=new Date();
				
				details+="\n收益入账\t+"+money+"\t"+sdf.format(date)+"\t"+balance;//其实也可写收入说明但是功能里没详细写
				
				break;
			case"3":
				System.out.println("消费金额");
				money=sc.nextDouble();
				//也有范围校验
				if(money<=0 ||money>balance) {
					System.out.println("你的消费金额应该在0-"+balance);
					break;
				}
				System.out.println("消费说明:");
				note=sc.next();
				balance-=money;
                date=new Date();
				details+="\n"+note+"\t-"+money+"\t"+sdf.format(date)+"\t"+balance;
				break;	
			case"4":
				String choice="";
				
				//while循环确保输入的是y或n
				while(true) {
					System.out.println("你确定要退出吗? y/n");
					choice=sc.next();
					if("y".equals(choice) || "n".equals(choice)) {
						break;//只是退出switch里的while
					}
				}//其实在这里也可以分y和n但是尽量一段代码,只完成一个小功能
				//是y就退出整个  n的话不做讨论
				if("y".equals(choice)) {
					loop=false;
				}
                break;//这个一定是要有的,要不然还会执行default
			default:
				System.out.println("选择有误,请重新选择");
				break;
			}
		
		}while(loop);
		System.out.println("=======退出零钱通项目=======");
	}
}

面向对象OOP

上面是过程编程,现在换成oop来感受一下切身好处
在这里插入图片描述
把各个功能都对应成方法

package OOP;

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

public class SmallChangeSysOOP {
	boolean loop=true;
	Scanner sc=new Scanner(System.in);
	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("\n=========零钱通菜单(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 退出");
			System.out.println("请选择(1-4)");
			key=sc.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);
		System.out.println("=======退出零钱通项目=======");
	}
	//零钱通明细
	public void detail() {
		System.out.println(details);
	}
	//完成收益入账
	public void income() {
		System.out.println("收益入账金额:");
		money=sc.nextDouble();
		if(money<=0) {
			System.out.println("收益入账金额需要大于0");
			return;//break换为return,退出方法,不再执行后面的代码
		}
		balance+=money;
		date=new Date();
		details+="\n收益入账\t+"+money+"\t"+sdf.format(date)+"\t"+balance;
        //这个break不再有必要了
	}
	//消费
	public void pay() {
		System.out.println("消费金额");
		money=sc.nextDouble();
		if(money<=0 ||money>balance) {
			System.out.println("你的消费金额应该在0-"+balance);
			return;
		}
		System.out.println("消费说明:");
		note=sc.next();
		balance-=money;
        date=new Date();
		details+="\n"+note+"\t-"+money+"\t"+sdf.format(date)+"\t"+balance;
	}
	//退出
	public void exit() {
		String choice="";
		
		while(true) {
			System.out.println("你确定要退出吗? y/n");
			choice=sc.next();
			if("y".equals(choice) || "n".equals(choice)) {
				break;
			}
		}
		if("y".equals(choice)) {
			loop=false;
		}
	}
}
package OOP;

public class SmallChangeSysAPP {
	public static void main(String[] args) {
		new SmallChangeSysOOP().mainMenu();//不用再分2部了,目的是一样的
	}

}

在这里插入图片描述
好处:
1.系统了很多,代码可读性
2.方便他人使用,加用自己的东西

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值