Java学习小项目–零钱通
大纲
- 零钱通初级编程
- 零钱通高级编程
- 一个重要的编程思想
要求
具体案例
- 面向过程编写法(不推荐)
package smallChange;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class smallChange {
public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
boolean test = true;
String accept;
double rest = 0;
double yuan;
String note;
Date date = new Date();
String details = "----------零钱通明细----------";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
String check;
do {
System.out.println("----------零钱通菜单----------");
System.out.println("\t\t1 零钱通明细");
System.out.println("\t\t2 收益入账");
System.out.println("\t\t3 消费");
System.out.println("\t\t4 退\t出");
System.out.println("请选择1-4");
accept = myScanner.next();
switch (accept) {
case "1":
System.out.println(details);
break;
case "2":
System.out.println("2 收益入账");
System.out.println("请输入收入金额");
yuan = myScanner.nextDouble();
if (yuan <= 0){
System.out.println("收益金额应该是大于0的");
break;
}else {
rest += yuan;
details += "\n收益入账\t+" + yuan + "\t" + sdf.format(date) + "\t" + rest;
break;
}
case "3":
System.out.println("3 消费");
while (true) {
System.out.println("输入消费的金额");
yuan = myScanner.nextDouble();
if ((rest - yuan) < 0 || yuan < 0) {
System.out.println("你没有那么多钱,请重新输入");
}else break;
}
System.out.println("请输入消费说明");
note = myScanner.next();
rest -= yuan;
details += "\n" + note + "\t-" + yuan + "\t" + sdf.format(date) + "\t" + rest;
break;
case "4":
do{
System.out.println("你确定要退出吗?输入确定或不退出");
check = myScanner.next();
if (check.equals("确定") || check.equals("不退出")) {
break;
}else {
System.out.println("输入错误请重新输出");
}
}while (true);
if (check.equals("确定")){
test = false;
}
break;
default:
System.out.println("选择有错,请重新选择");
}
} while (test);
System.out.println("退出了零钱通");
}
}
这是没有引用对象的编写,比较复杂和长
2. 面向对象编程
这里直接将他们封装起来,一个模块一个模块的完成
package smallChange.OOP;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class oop {
Scanner myScanner = new Scanner(System.in);
boolean test = true;
String accept;
double rest = 0;
double yuan;
String note;
Date date = new Date();
String details = "----------零钱通明细----------";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
String check;
public void mainMenu(){
do {
System.out.println("----------零钱通菜单----------");
System.out.println("\t\t1 零钱通明细");
System.out.println("\t\t2 收益入账");
System.out.println("\t\t3 消费");
System.out.println("\t\t4 退\t出");
System.out.println("请选择1-4");
accept = myScanner.next();
switch (accept) {
case "1":
this.detail();
break;
case "2":
this.income();
case "3":
this.pay();
break;
case "4":
this.exit();
break;
default:
System.out.println("选择有错,请重新选择");
}
} while (test);
System.out.println("退出了零钱通");
}
public void detail(){
System.out.println(details);
}
public void income() {
System.out.println("2 收益入账");
System.out.println("请输入收入金额");
yuan = myScanner.nextDouble();
if (yuan <= 0) {
System.out.println("收益金额应该是大于0的");
} else {
rest += yuan;
details += "\n收益入账\t+" + yuan + "\t" + sdf.format(date) + "\t" + rest;
}
}
public void pay(){
System.out.println("3 消费");
while (true) {
System.out.println("输入消费的金额");
yuan = myScanner.nextDouble();
if ((rest - yuan) < 0 || yuan < 0) {
System.out.println("你没有那么多钱,请重新输入");
}else break;
}
System.out.println("请输入消费说明");
note = myScanner.next();
rest -= yuan;
details += "\n" + note + "\t-" + yuan + "\t" + sdf.format(date) + "\t" + rest;
}
public void exit(){
do{
System.out.println("你确定要退出吗?输入确定或不退出");
check = myScanner.next();
if (check.equals("确定") || check.equals("不退出")) {
break;
}else {
System.out.println("输入错误请重新输出");
}
}while (true);
if (check.equals("确定")){
test = false;
}
}
}
//====================================================
package smallChange.OOP;
public class testOop {
public static void main(String[] args) {
new oop().mainMenu();
}
}
这样就可以先将要做的项目,简化为几个模块,然后再对每个模块进行编辑,便于分析。
3. 编程思想
在编写代码,判断条件时,尽量的化繁为简,一个代码块执行一个功能,先判断错误条件,再判断正确条件继续执行。