写在前面:本次一个小测验技术范围非常浅,非常适用于像我这样小白的人练习,并深刻体会面向过程和面向对象最直观的区别。

1、面向过程代码实现:

package com.codetest.smallchange;
//自动补全alt+/   快捷注释ctrl+/  删除行ctrl+d  复制行ctrl+alt+向下键
//导入需要的类alt+enter 快速格式化代码ctrl+alt+l  快速运行alt+r
//生成构造器alt+insert  查看类的层次关系ctrl+h  快速定位方法ctrl+b
//自动分配变量名 后面加.var
//模板快捷键 soutm mainimport java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;public class SmallChangeSys {public static void main(String[] args) {//定义循环判断变量boolean loop = true;//定义选择变量String choice = null;//1、先完成显示菜单,并能够选择//2、完成零钱通明细//定义零钱通明细变量,其实一开始是看不出来这个的,这是列出总的明细//方法一:String拼接String detail = "==========零钱通明细==========\n";//3、完成收益入账//定义收益入账中的变量double money = 0;//定义收益出入账的钱double balance = 0;//定义余额Date date = null;//定义日期SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");//日期格式化//4、消费//定义支出原因变量String note = null;Scanner scanner = new Scanner(System.in);System.out.println("==========零钱通菜单==========");System.out.println("\t\t1 零钱通明细\n\t\t2 收益入账\n\t\t3 消费\n\t\t4 退 \t出");do {System.out.print("请选择(1~4):");choice = scanner.next();switch (choice) {case "1":System.out.println(detail);break;case "2":System.out.print("收益入账:");money = scanner.nextDouble();//接收记入的账单金额//此处应该控制money范围//思路:找出不正确的条件,然后给出提示,最后跳出if (money < 0) {System.out.println("收益入账应该大于0元!");break;}date = new Date();balance += money;//这一步如果理解不了,就用debug一步一步调出来detail += "收益入账\t+" + money + "\t" + sdf.format(date) + "\t余额:" + balance + "\n";break;case "3":System.out.print("消费金额:");money = scanner.nextDouble();//接收支出的账单金额//此处应该控制money范围if (money < 0 ||money>balance) {System.out.println("消费金额应该在0~"+balance+"之间!");break;}date = new Date();balance -= money;System.out.print("消费说明:");note = scanner.next();detail += note + "\t-" + money + "\t" + sdf.format(date) + "\t余额:" + balance + "\n";break;case "4"://优化  //用户输出4时,给出提示"你确定要退出吗?y/n",要求必须输入y或n,//否则循环输入指令直到y和n
//                    do{
//                        System.out.print("你确定要退出吗?y/n");
//                        //定义一个接收变量key接收指令
//                        char key=scanner.next().charAt(0);
//                        if(key=='y'){
//                            break;
//                        }
//                    }while(true);//上面这段还可以优化//首先判断输入的字符是否是y或是n//定义一个接收变量key接收指令char key;while (true) {System.out.println("你确定要退出吗?y/n");key = scanner.next().charAt(0);if (key == 'y' || key == 'n') {break;}}//然后做出y和n的功能分支if (key == 'y') {System.out.println("退出程序....");loop = false;} else {System.out.println("欢迎回来,请选择你需要选择的服务?");}break;default:System.out.println("选择输入有误,请重新输入(1~4):");}} while (loop);System.out.println("欢迎下次使用零钱通!");}
}

2、OOP面向对象

分析功能板块

SmallChangeSysOOP类
package com.codetest.smallchange.oop;import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;/*** 该类是完成零钱通各个功能的类* 用OOP(面向对象编程)*/
public class SmallChangeSysOOP {Scanner scanner = new Scanner(System.in);//定义循环判断变量boolean loop = true;//定义选择变量String choice = null;//1、先完成显示菜单,并能够选择//2、完成零钱通明细//定义零钱通明细变量,其实一开始是看不出来这个的,这是列出总的明细//方法一:String拼接String detail = "==========零钱通明细==========\n";//3、完成收益入账//定义收益入账中的变量double money = 0;//定义收益出入账的钱double balance = 0;//定义余额Date date = null;//定义日期SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");//日期格式化//4、消费//定义支出原因变量String note = null;//1、先完成显示菜单,并能够选择public void mainMenu(){System.out.println("==========零钱通菜单(OOP)==========");System.out.println("\t\t1 零钱通明细\n\t\t2 收益入账\n\t\t3 消费\n\t\t4 退 \t出");do {System.out.print("请选择(1~4):");choice = scanner.next();switch (choice) {case "1":this.detail();break;case "2":this.income();break;case "3":this.pay();break;case "4":this.exit();break;default:System.out.println("选择输入有误,请重新输入(1~4):");}} while (loop);}//2、完成零钱通明细public void detail(){System.out.println(detail);}//3、完成收益入账public void income(){System.out.print("收益入账:");money = scanner.nextDouble();//接收记入的账单金额//此处应该控制money范围//思路:找出不正确的条件,然后给出提示,最后跳出if (money < 0) {System.out.println("收益入账应该大于0元!");return;//退出方法不再执行后面的代码}date = new Date();balance += money;//这一步如果理解不了,就用debug一步一步调出来detail += "收益入账\t+" + money + "\t" + sdf.format(date) + "\t余额:" + balance + "\n";}//4、消费public void pay(){System.out.print("消费金额:");money = scanner.nextDouble();//接收支出的账单金额//此处应该控制money范围if (money < 0 || money > balance) {System.out.println("消费金额应该在0~"+balance+"之间!");return;}date = new Date();balance -= money;System.out.print("消费说明:");note = scanner.next();detail += note + "\t-" + money + "\t" + sdf.format(date) + "\t余额:" + balance + "\n";}//5、退出public void exit(){char key;while (true) {System.out.println("你确定要退出吗?y/n");key = scanner.next().charAt(0);if (key == 'y' || key == 'n') {break;}}//然后做出y和n的功能分支if (key == 'y') {System.out.println("退出程序....");loop = false;} else {System.out.println("欢迎回来,请选择你需要选择的服务?");}}}
SmallChangeSysApp类
package com.codetest.smallchange.oop;/*** 这里直接调用SmallChangeSysOOP对象完成菜单的使用*/
public class SmallChangeSysApp {public static void main(String[] args) {SmallChangeSysOOP smallChangeSysOOP = new SmallChangeSysOOP();smallChangeSysOOP.mainMenu();}
}

Java学习笔记:模拟实现微信零钱通(面向过程和OOP两种方法)相关推荐

  1. 学习笔记(23):Python网络编程并发编程-开启线程的两种方式

    立即学习:https://edu.csdn.net/course/play/24458/296437?utm_source=blogtoedu 开启线程的两种方法:threading.Thread 1 ...

  2. 微信小程序 使用特殊字体的两种方法

    微信小程序中如何使用特殊字体 我有两种方法: 1. 转base64格式 下载要使用的字体,建议TTF格式 打开网站 https://transfonter.org/ 转换格式,得到压缩包 将压缩包解压 ...

  3. android 模拟apk安装广播,android模拟器安装apk的两种方法

    今天好奇apk怎么安装到模拟器上,研究一下,发现两种方法比较简单: 一,把所要安装的apk,例xxx.apk拷贝到sdk下的adb的路径下,也就是和adb在同一个文件夹,比如我的是D:Program ...

  4. android java 实体类 object变量 保存_Android中Intent传递对象的两种方法Serializable,Parcelable...

    Android中的传递有两个方法,一个是Serializable,另一个是Parcelable. Serializable是J2SE本身就支持的.而Parcelable是Android所特有的. 二者 ...

  5. 微信小程序转二维码两种方法

    话不多说,直接上干货 第一种方法: 首先,你需要在电脑上打开https://mp.weixin.qq.com注册一个个人微信订阅号, 其次,登陆微信电脑版,微信号关注你注册的订阅号,这是重点 注册好了 ...

  6. java怎么打印星期_java中获取日期是星期几的两种方法

    java中取得指定日期是星期几可以采用下面两种方式取得日期是星期几:(推荐:java视频教程) 1.使用Calendar类//根据日期取得星期几 public static String getWee ...

  7. 学习笔记(16):Python网络编程并发编程-开启子进程的两种方式

    立即学习:https://edu.csdn.net/course/play/24458/296424?utm_source=blogtoedu #方式一:使用python内置模块multiproces ...

  8. java new thread参数_java开启新线程并传参的两种方法

    一.继承Thread类 步骤: 1):定义一个类A继承于Java.lang.Thread类. 2):在A类中覆盖Thread类中的run方法. 3):我们在run方法中编写需要执行的操作:run方法里 ...

  9. java 登录过滤_Java 过滤器实现(登录) + 拦截器(两种方法)

    以下是实现未登录不能进入页面的实现 使用了thyemeleaf+SpringBoot+过滤器实现的,过滤器的核心代码如下: @Component @WebFilter(filterName= &quo ...

最新文章

  1. linux 设备树调试必须知道的几个路径
  2. Firefox浏览器的安装
  3. mysql语句_Mysql语句
  4. 求助 windows server2008密码策略修改
  5. etherchannel
  6. Nearest Opposite Parity(反向建边+spfa)
  7. 深度探秘.NET 5.0
  8. linux 进程的执行时间,Linux 获取进程执行时间
  9. matlab cd参数,MATLAB变量参数列表​
  10. IOS学习笔记05---C语言程序的开发运行过程
  11. html跨页面提取表单,HTML页面提取参数如何通过表单传递?
  12. OKR是什么、OKR有什么用?
  13. HiveQL学习笔记(一):Hive安装及Hadoop,Hive原理简介
  14. 小型的搜索引擎设计_广州网站设计工作室-赛致信息科技
  15. 可能是阿里最古老的流程引擎:PMC的架构与设计分享
  16. csdn积分有什么用
  17. 基于操作系统编程与裸机编程的区别
  18. 首都师范 博弈论 9 5 5引入物质奖励后的博弈模型
  19. python写文件指定编码_python指定写入文件时的编码格式方法
  20. 百度地图 根据经纬度 定位

热门文章

  1. z3 android os耗电,vivo Z3续航为何如此长?看完你就知道了
  2. 关于8位指针强制转16位隐晦问题
  3. RSRS指标择时及大小盘轮动
  4. 【原创】随手记下-Intel TSX漏洞补丁(大幅影响性能)
  5. 微信多开,不用模拟器
  6. jquery 动态拼接数据设置点击事件
  7. Anaconda3环境安装tensorflow2.0 python3.7使用spyder
  8. iphonex适配游戏_iPhoneX怎么玩王者荣耀 iPhoneX适配常见问题汇总
  9. Java根据姓名生成头像(类似钉钉)
  10. python批量爬取图片_【原创开源】快手爬虫,根据id批量爬取用户的所有图集和视频...