Java 零錢通項目 項目要求:使用 Java 開發 零錢通項目 , 可以完成收益入賬,消費,查看明細,退出系統等功能。 1. 面向過程 1)首先是這樣一個菜單界面 由於不管選擇什麼,都需要至少執行一次,所以考慮do...while迴圈結構。 boolean loop = true; do { Sy ...
Java----零錢通項目
項目要求:使用 Java 開發 零錢通項目 , 可以完成收益入賬,消費,查看明細,退出系統等功能。
1. 面向過程
1)首先是這樣一個菜單界面
由於不管選擇什麼,都需要至少執行一次,所以考慮do...while迴圈結構。
boolean loop = true;
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 退\t出");
System.out.print("請選擇1-4:");
}while(loop);
System.out.println("=======退出零錢通=======");
使用switch選擇結構來實現選擇1-4的結果
int n = scanner1.nextInt();
//switch結構
switch (n) {
case 1:
System.out.println("1 零錢明細");
break;
case 2:
System.out.print("2 收益入賬");
break;
case 3:
System.out.print("3 消費");
break;
case 4:
System.out.println("4 退\t出");
loop = false;
break;
}
2)實現1 零錢明細功能
這裡使用字元串拼接,定義detail變數
String detail = "--------------零錢明細--------------";
//在上面case 1的情況下直接輸出detail
case 1:
System.out.println(detail);
System.out.println();
break;
3)實現2 收益入賬功能
這裡需要定義兩個變數,一個是表示收益的money變數,另一個表示餘額balance變數。
另外時間信息需要調用包 import java.util.Date;
double money = 0.0;
double balance = 0.0;
Date date = null;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
//修改上面case 2的情況,得到detail
case 2:
System.out.print("收益入賬金額:");
money = scanner1.nextDouble();
//money需要校驗
if (money <= 0) {
System.out.println("收益入賬金額要大於0");
break;
}
balance += money;
date = new Date();
//System.out.println(sdf.format(date));
detail += "\n收益入賬\t" + money + "\t" + sdf.format(date) + "\t" + balance;
break;
4)實現3 消費功能
與收益入賬類似,
//修改上面case 3的情況,得到detail
case 3:
System.out.print("消費金額:");
money = scanner1.nextDouble();
System.out.print("消費說明:");
note = scanner1.next();
//需要校驗消費是否超出餘額
if (money > balance) {
System.out.println("消費超出餘額");
break;
}
balance -= money;
date = new Date();
detail += "\n" + note + "\t-" + money + "\t" + sdf.format(date) + "\t" + balance;
break;
5)實現4 退出功能
如果輸入結果不是y或n,將一直詢問,所以需要用一個迴圈來實現,並且在迴圈中判斷輸入字元。
//在case 4 中進行修改
case 4:
System.out.println("4 退\t出");
String choice = "";
while (true) {
System.out.println("你確定要退出嗎?y/n");
choice = scanner1.next();
if ("y".equals(choice) || "n".equals(choice)) {
break;
}
}
if ("y".equals(choice)) {
loop = false;
}
break;
此外如果輸入的數字不在1-4範圍內,需要提示錯誤信息。故在switch中添加default情況。
default:
System.out.println("選擇有誤,請重新選擇");
2. 面向對象
將上述菜單界面,4個功能都拆解成類的方法,相應的變數都定義為類的屬性。最後調用菜單方法即可。把各個方法都封裝起來,極大地提高了代碼的復用性,便於維護。
package com.zixue.SmallChange.OOP;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
// 面向對象編程
public class SmallChangeSysOOP {
//1.顯示菜單
boolean loop = true;
Scanner scanner1 = new Scanner(System.in);
//2.零錢通明細
String detail = "--------------零錢明細--------------";
//3.收益入賬
double money = 0;
double balance = 0.0;
Date date = null;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
//4. 消費
String note = null;
// 完成顯示菜單
public void mainMenu() {
do {
System.out.println("==========請選擇零錢通(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 退\t出");
System.out.print("請選擇1-4:");
int n = scanner1.nextInt();
//switch結構
switch (n) {
case 1:
this.detail();
break;
case 2:
this.income();
break;
case 3:
this.consume();
break;
case 4:
this.exit();
break;
default:
System.out.println("選擇有誤,請重新選擇");
}
} while (loop);
}
// 完成零錢通明細
public void detail() {
System.out.println(detail);
System.out.println();
}
// 完成收益入賬
public void income(){
System.out.print("收益入賬金額:");
money = scanner1.nextDouble();
//money需要校驗
if (money <= 0) {
System.out.println("收益入賬金額要大於0");
return;
}
balance += money;
date = new Date();
//System.out.println(sdf.format(date));
detail += "\n收益入賬\t" + money + "\t" + sdf.format(date) + "\t" + balance;
}
// 完成消費
public void consume(){
System.out.print("消費金額:");
money = scanner1.nextDouble();
System.out.print("消費說明:");
note = scanner1.next();
if (money > balance) {
System.out.println("消費超出餘額");
return;
}
balance -= money;
date = new Date();
detail += "\n" + note + "\t-" + money + "\t" + sdf.format(date) + "\t" + balance;
}
// 完成退出
public void exit(){
System.out.println("4 退\t出");
String choice = "";
while (true) {
System.out.println("你確定要退出嗎?y/n");
choice = scanner1.next();
if ("y".equals(choice) || "n".equals(choice)) {
break;
}
}
if ("y".equals(choice)) {
loop = false;
System.out.println("=======退出零錢通=======");
}
}
}
package com.zixue.SmallChange.OOP;
public class SmallChangeSysAPP {
public static void main(String[] args) {
new SmallChangeSysOOP().mainMenu();
}
}