零钱通(面向对象)
目錄
?一、SmallChangeSysOOP
二、SmallChangeSysApp
?一、SmallChangeSysOOP
思路:
將在面向過程中定義的變量變成這個類的屬性
將主菜單和四個選項分別封裝在獨立的方法中,并且在主菜單中用this關鍵字調用這些方法
package com.hspedu.samllchange.samllchangeoop;import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner;public class SmallChangeSysOOP {//屬性//1.先完成顯示菜單,并可以選擇菜單,給出對應提示//2.完成零錢通明細//3.收益入賬//4.消費支出//5.退出//6.完善退出功能//7.在收益入賬和消費的時候,完成金額判斷并提示Scanner scanner = new Scanner(System.in);String key = "" ;boolean loop = true;//2.完成零錢通明細//老師的思路:(1)可以把收益、入賬和消費保存到數組//(2)可以使用對象//(3)簡單的話可以使用String拼接String details = "------------零錢通明細--------";//3.完成收益入賬//收益入賬的格式:收益入賬 +100.02021-01-21 17:41 余額:100.0//需要定義變量 收入的錢 money; 日期date; 余額balacedouble money = 0;Date date = null;//Date型變量存儲日期//修改日期格式,改成符合中國人習慣的日期SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");//年月日時分// SimpleDateFormat saf = null;double balance = 0;//4.消費支出//變量和收益相似,但是需要定義不同的商家String consume = "";//6.完善退出功能,退出時要輸入選項String choice = "";//將4個功能分別封裝在4個方法內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 退 出");//用戶選擇1-4,即需要輸入1-4,需要ScannerSystem.out.print("請選擇(1-4):");//不用換行key = scanner.next();//接收字符串//使用switch分支結構,輸出4種情況switch(key){case "1":this.details();//直接打印明細break;case "2":this.income();break;case "3":this.pay();break;case "4":this.exit();break;//沒有此處的break,會直接輸出default里的語句default:System.out.println("你的選擇有誤,請重新選擇");}}while(loop);//無限循環,始終是一個不停顯示菜單的過程System.out.println("--------退出了零錢通項目--------");}public void details(){System.out.println(details);}public void income(){//首先提示一筆收益入賬System.out.print("收益入賬金額:");//輸入收益金額money = scanner.nextDouble();//需要對金額進行判斷,金額必須要大于0if(money <= 0){System.out.println("輸入的收益入賬金額有誤,請重新輸入");return;//把break改成return}//日期date = new Date();//獲取當日信息//sdf.format(date);對象sdf調用format方法,傳入//余額balance += money;details += "\n收益入賬\t+" + money + "\t" + sdf.format(date) + "\t余額:" + balance;}public void pay(){System.out.print("消費的項目名稱:");consume = scanner.next();//輸入消費名稱System.out.print("消費支出金額:");money = scanner.nextDouble();//消費金額也要判斷,消費金額大于0并且小于等于余額//所以當money<=0 或者 金額大于余額的時候就是錯的if(money <= 0 || money > balance){System.out.println("你的消費金額需要在0-" + balance);return;}date = new Date();balance -= money;details += "\n" + consume + "\t-" + money + "\t" + sdf.format(date) + "\t余額\t" + balance;}public void exit(){//當用戶輸入4之后,首先執行“退出”,//loop = false;會結束do..while循環//要求:1.用戶輸入4退出時,給出提示”你確定要退出嗎? y/n”,// 必須輸入正確的y/n ,否則循環輸入指令,直到輸入y 或者 n。//循環輸入指令,所以需要一個while循環while(true){System.out.println("你確定要退出嗎? y/n");choice = scanner.next();//最好是一段代碼完成一個功能,此處只完成了輸入y和nif("y".equals(choice) || "n".equals(choice)){break;} // if("y".equals(choice)){//確實是要退出循環 // loop = false;//退出do...while循環 // break;//退出這個while循環 // }else if("n".equals(choice)){ // break;//退出這個小的while,但是還是繼續do...while循環 // }}//在確保輸入的是y或者n之后再次進行判斷if("y".equals(choice)){loop = false;}}}二、SmallChangeSysApp
package com.hspedu.samllchange.samllchangeoop;public class SmallChangeSysApp {public static void main(String[] args) {new SmallChangeSysOOP().mainmenu();} }新建匿名對象,直接調用mainmenu()這個方法
經過測試,功能和面向對象的代碼功能完全一致
總結
- 上一篇: opencv实现matlab的media
- 下一篇: 人人API