?写在前面:本次一个小测验技术范围非常浅,非常适用于像我这样小白的人练习,并深刻体会面向过程和面向对象最直观的区别。
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 main
import 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();
}
}
?
|