編寫一個系統
開始方法呈現開始菜單
登陸
注冊
退出
編寫賬號類(存儲正確的用戶名和密碼)
用戶名
密碼
要求:
選擇登陸后輸入用戶名密碼 並進行驗證(編寫驗證方法),驗證成功后進入主菜單界面
主菜單界面:
幸運抽獎(需要完成功能)
購物結算
商品陳列
真情回饋
注銷用戶
驗證錯誤或者菜單選擇錯誤可以給出提示並允許繼續操作(比如用戶名輸錯,重新輸入,菜單輸錯也可以重新輸入,主菜單輸錯應返回主菜單界面)
注冊要求:輸入注冊的用戶名和密碼和驗證碼(4位數字驗證碼),如果賬戶存在則不能注冊,如果不存在將注冊的信息寫入賬號類(目前的實現將導致將原用戶名和密碼覆蓋),注冊成功退回開始菜單,可以使用注冊的賬戶進行登錄
注銷用戶:返回起始菜單,可以繼續進行登錄或注冊的操作
賬戶類:用於存儲密碼,不是用集合存儲的,所以每次注冊只能進行覆蓋
/** * 賬戶類 * 用於存儲系統的用戶名和密碼 */ public class Account { //用戶名和密碼 String userName = "admin"; String password = "000"; }
購物系統:封裝了系統的所有業務邏輯
/** * 購物系統 * 封裝了系統的所有業務邏輯 */ public class ShoppingSystem { //鍵盤掃描器 Scanner sc; //賬戶對象 Account account; //隨機數生成對象 Random random; //是否中獎的標識 boolean flag; /** * 對系統進行初始化 * 初始化就是在系統運行前,將一些必要的數據進行初始 */ public void init(){ sc = new Scanner(System.in); //初始化賬戶 account = new Account(); //初始化隨機數生成對象 random = new Random(); } /** * 開啟系統 */ public void start(){ //呈現開始菜單 System.out.println("1. 登錄"); System.out.println("2. 注冊"); System.out.println("3. 退出"); System.out.println("請選擇:"); int chooice = sc.nextInt(); //根據選項調用對應的功能 switch(chooice){ //1. 調用登錄方法 case 1: login(); break; //2. 調用注冊方法 case 2: regist(); break; case 3: System.out.println("退出了系統"); //退出正在運行的程序 //System.exit(0); break; } } /** * 登錄方法 */ public void login(){ //輸入用戶名和密碼 System.out.println("請輸入用戶名:"); String userName = sc.next(); System.out.println("請輸入密碼:"); String password = sc.next(); //驗證賬戶:傳入用戶名和密碼 if(validate(userName, password)){
//如果正確,進入主菜單 mainMenu(); } else{ System.out.println("用戶名或密碼錯誤!"); login(); } /** * 驗證用戶名的方法(注冊中也會用到用戶名是否存在,所以單獨抽離成一個方法) * @param userName * @return */ public boolean validateName(String userName){ if(userName.equals(account.userName)){ return true; } return false; } /** * 驗證賬戶 * @param userName * @param password * @return */ public boolean validate(String userName, String password){
//先調用驗證用戶名的方法 if(validateName(userName)){
//如果用戶名正確,進一步驗證密碼是否正確 if(password.equals(account.password)){ return true; } } return false; } /** * 注冊方法 */ public void regist(){ //輸入用戶名和密碼 System.out.println("請輸入用戶名:"); String userName = sc.next(); System.out.println("請輸入密碼:"); String password = sc.next(); //生成驗證碼 String code = createValidateCode(); System.out.println("請輸入驗證碼:【"+code+"】"); String inputCode = sc.next(); //判斷驗證碼 if(!inputCode.equals(code)){ System.out.println("驗證碼輸入錯誤!"); //遞歸注冊 regist(); return; } //對用戶名和密碼進行驗證 if(validateName(userName)){ //如果驗證失敗,重新輸入,遞歸注冊方法 System.out.println("用戶名已經被注冊!"); regist(); } else{ //如果驗證成功,將注冊的用戶名和密碼寫入賬戶對象 account.userName = userName; account.password = password; //進入起始菜單 start(); } /** * 生成驗證碼 * @return */ public String createValidateCode(){ String code = "";
//循環生成4位驗證碼 for(int i = 1; i <= 4; i++){ int n = random.nextInt(10); code+=n; } return code; } /** * 主菜單展現方法 */ public void mainMenu(){ //展現主菜單選項 System.out.println("1. 幸運抽獎"); System.out.println("2. 購物結算"); System.out.println("3. 商品陳列"); System.out.println("4. 真情回饋"); System.out.println("5. 注銷賬戶"); System.out.println("請選擇:"); int chooice = sc.nextInt(); //用戶輸入選項 //對選項進行判斷,根據選項調用對應的方法 switch(chooice){ //1. 調用幸運抽獎方法 case 1: luckyGuess(); break; case 2: case 3: case 4: System.out.println("功能正在完善中……"); break; //5. 調用注銷方法 case 5: loginOff(); } } /** * 抽獎方法 */ public void luckyGuess(){
//防止多次進行抽獎 if(flag){ System.out.println("您已抽過獎了!系統將直接跳轉回主菜單"); mainMenu(); return; } //修改抽獎的標識 flag = true; //生成中獎的數 int target = random.nextInt(10); System.out.println("按任意鍵進行抽獎"); sc.next(); int luckNumber = random.nextInt(10); //判斷是否中獎 if(luckNumber == target){ System.out.println("恭喜你中了大獎!獎勵GeekHome課程一部!"); } else{ System.out.println("很遺憾,沒有中獎,請再接再厲!"); } //無論是否中獎都應回到主菜單 mainMenu(); } /** * 注銷用戶方法 */ public void loginOff(){ //返回起始菜單 start(); } }
啟動購物系統的APP
public class SystemApp { public static void main(String[] args) { //創建系統 ShoppingSystem sys = new ShoppingSystem(); //對系統進行初始化 sys.init(); //啟動系統 sys.start(); } }