#15 [Java] Date Class, .toUpperCase(), .toLowerCase(),

    📌 Date Class

    : 날짜를 다룰 수 있게 설계된 클래스
    Date클래스 대부분의 기능은 Deprecated (추천 하지 않음) 됨, 가능하면 Calender 클래스 사용하기

    현재 시간 확인

    import java.util.Date;
    Date date = new Date();
    System.out.println(date);
    Mon Oct 24 17:39:28 KST 2022

    날짜 출력 포맷
    y : 연도 / M : 월 / d : 일 / H : 시 / m : 분 / s : 초

    yyyy-MM-dd	 -> "1988-09-29"	
    dd/MM/yyyy -> "29/09/1988"	
    dd-MMM-yyyy	-> "29-Sep-1988"	
    E, MMM dd yyyy	-> "Thu, Sep 29 1988"

    📌 .toUpperCase( )

    (문자열).toUpperCase();

    문자열을 모두 대문자로 변환

    📌 .toLowerCase( )

    (문자열).toLowerCase();

    문자열을 모두 소문자로 변환

    import java.util.Scanner;
    	public class Main {
    		public static void main (String[] args) {
    			String str1 = "hello java";
    			System.out.println("str1.toUpperCase()");
    			String str2 = "UPPER CASE TO LOWER CASE";
    			System.out.println("str2.toLowerCase()");
    		}
    	}
    


    💡 지난시간에 만든 스토리 보드를 기반으로 코딩 진행
    -> 로그인 화면과 메인 화면을 구현해보았다!

    💻 Loader.java

    package loader;
    
    import client.UserApp;
    
    public class Loader {
    	public static void main(String[] args) {
    		new UserApp();
    	}
    }


    💻 UserApp.java

    package client;
    
    import java.util.Scanner;
    import java.text.SimpleDateFormat;
    import java.time.LocalDateTime;
    import java.time.format.DateTimeFormatter;
    import java.util.Date;
    
    //loader에서 연결될 클래스
    public class UserApp {
    
    	public UserApp() {
    		this.fontController();
    	}
    //이 밑에서부턴 Loader가 알 필요 없으니 private로 메소드 생성
    
    	/* 클라이언트 화면 및 데이터 흐름 제어 */
    	private void fontController() { 
    //		String loginID = new String();
    //		String loginPW = new String();
    		Scanner scanner = new Scanner(System.in); //사용자 입력 받는 scanner 
    		String[] text = { " Main ", " Loading... ", " Closing... " }; // MainTitle 출력시 출력할 문구의 배열 생성
    		boolean isLoop = true; 
    		boolean accessResult;
    		String[] accessInfo = new String[2]; //로그인과 비밀번호를 저장할 배열 선언
    		String mainMenu = this.getMainMenu(); //mainMenu (1.TaskList, 2.Task Settings.... )을 만들어 String mainMenu에 저장 
    		this.display(loginTitle());//loginTitle은 맨처음 한번만 출력
    		while (isLoop) { // 종속관계에서는 boolean값 하나로 반복문 여러개 제어 가능
    			for (int idx = 0; idx < accessInfo.length; idx++) { //2번 반복 
    				this.display(this.mainTitle(this.getToday(true), text[1])); //mainTitle에 날짜와 text[1](Loading...) 인자로
    				this.display(this.loginLayout(true, accessInfo[0])); //loginLayout에 true값과 accessInfo[0] (id입력시 id, 미입력시 null)
    				accessInfo[idx] = this.userInput(scanner);//idx = 0일때 accessInfo[0]에 id 입력, idx=1일때 accessInfo[1]에 비밀번호 입력
    			}
    			this.display(this.loginLayout(false, null)); //loginLayout에 false값과 null값 인자로 넘겨서 출력
    			// 서버에 로그인 정보 전달
    
    			accessResult = true; //accessResult를 true값으로 가정, 백엔드랑 연동될 부분
    			this.display(resultPrint(accessResult)); //accessResult가 true면 success출력, accessResult가 false면 fail 출력
    			if (!accessResult) { //accessResult가 false면(로그인 정보가 틀리면)
    				accessInfo[0] = null; //accessInfo값 null로 초기화
    				accessInfo[1] = null; //accessInfo값 null로 초기화
    				if (this.userInput(scanner).toUpperCase().equals("N")) { //로그인 정보가 틀렸을때, retry? n(아니오)이면 
    					isLoop = false; //반복문(isLoop) 탈출 
    				}
    			} else { //accessResult가 true면(로그인 정보가 맞으면)
    				while (isLoop) { //반복문 실행
    					String menuSelection = new String(); //menuSelection String 객체 선언
    					this.display(this.mainTitle(this.getToday(true), text[0])); //오늘 날짜와 Main 출력
    					this.display(mainMenu); // mainMenu 출력 (1.TaskList, 2.Task Settings.... )
    					menuSelection = this.userInput(scanner); //menuSelection에 사용자 입력 받아서 저장
    
    					if (menuSelection.equals("0")) { //사용자 입력이 0이면..0~4 범위.. 1~4 구현전
    						isLoop = false; //isLoop를 false로 반복문 탈출
    					}
    				}
    			}
    
    		}
    
    		this.display(this.mainTitle(this.getToday(true), text[2])); // frontController 메서드 종료 직전에 메인타이틀(Closing...) 출력
    		scanner.close(); //스캐너 종료
    	}
    //		▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△
    //		▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▼▽▼▽▼▽▼▽▼▽▼
    
    	/* 메인 타이틀 제작 */
    	private String loginTitle() { //loginTitle을 생성하는 객체 선언 -> 로그인시 한번만 출력하기로
    		StringBuffer title = new StringBuffer(); //String Buffer 선언후 
    		title.append(" ______    _____       ____       _____  \r\n"
    				+ "/\\__  _\\  /\\  __`\\    /\\  __`\\   /\\  __`\\    \r\n"
    				+ "\\/_/\\ \\/  \\ \\ \\/\\ \\   \\ \\ \\/\\ \\  \\ \\ \\/\\ \\  \r\n"
    				+ "   \\ \\ \\   \\ \\ \\ \\ \\   \\ \\ \\ \\ \\  \\ \\ \\ \\ \\\r\n"
    				+ "    \\ \\ \\   \\ \\ \\_\\ \\   \\ \\ \\_\\ \\  \\ \\ \\_\\ \\ \r\n"
    				+ "     \\ \\_\\   \\ \\_____\\   \\ \\____/   \\ \\_____\\ \r\n"
    				+ "      \\/_/    \\/_____/    \\/___/     \\/_____/\n\n");
    		title.append("\t\t   __         ______      _____       ______   \r\n"
    				+ "\t\t  /\\ \\       /\\__  _\\    /\\  __`\\    /\\__  _\\  \r\n"
    				+ "\t\t  \\ \\ \\      \\/_/\\ \\/    \\ \\ \\L\\_\\   \\/_/\\ \\/  \r\n"
    				+ "\t\t   \\ \\ \\  __    \\ \\ \\     \\/_\\__ `\\     \\ \\ \\  \r\n"
    				+ "\t\t    \\ \\ \\L\\ \\    \\_\\ \\__    /\\ \\L\\ \\     \\ \\ \\ \r\n"
    				+ "\t\t     \\ \\____/    /\\_____\\   \\ `\\____\\     \\ \\_\\\r\n"
    				+ "\t\t      \\/___/     \\/_____/    \\/_____/      \\/_/\n\n\n\n\n");
    		title.append("\t\t\t\t\tDesigned by group_2\n\n\n"); // StringBuffer에 문자열을 append(추가) 한뒤
    
    		return title.toString(); //StringBuffer를 String으로 만들어 frontController에 return(반환)
    	}
    
    	private String mainTitle(String date, String text) { //현재 날짜와 text(" Main ", " Loading... ", " Closing... ")를 받아 String으로 만들어 반환
    		StringBuffer title = new StringBuffer();
    		title.append("\n▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▼▽▼▽▼▽▼▽▼▽▼▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼\n\n\n");
    		title.append("\tTODO LIST\n\n");
    		title.append("\t\t\t\t  DATE " + date + "\n\n\n");
    		if (text != "") {
    			title.append("\t\t\t[" + text + "]\n\n");
    		}
    		title.append("▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲\n");
    		return title.toString();
    	}
    
    	private String resultPrint(boolean isAccess) { //boolean값을 받아 true면 success, false면 fail 출력
    		StringBuffer accessResult = new StringBuffer();
    		if (isAccess) { //true면
    			accessResult.append("\t\t[■■■■■■■■■■■■■■■■■■■■■■■■■■■■■] SUCCESS !\n");
    		} else { //false면 
    			accessResult.append("\t\t[■■■■■■■■■■                   ] FAIL\n");
    			accessResult.append("▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△ 다시 하시겠습니까? (y/n) : 	");
    		}
    		return accessResult.toString();
    	}
    
    	/* 로그인 */
    	private String loginLayout(boolean loginAccess, String accessInfo) { //boolean : 두가지 경우의 수를 true랑 false의 경우로 나눔
    		StringBuffer loginLayout = new StringBuffer();
    		if (loginAccess) { //loginAccess true면 (첫번째 경우의 수)
    			loginLayout.append("\n");
    			loginLayout.append("▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽ [ LOGIN ] ▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽\n\n");
    			loginLayout.append("\n");
    			loginLayout.append("\t\tID\t\tPassword\n\t\t");
    			loginLayout.append(((accessInfo != null) ? accessInfo + "\t\t" : "")); //accessInfo가 null이 아니면 (값이 있으면), accessInfo의 값을 출력, 값이 없으면 출력하지 않음
    
    		} else {
    			loginLayout.append("\n\n"); //loginAccess false면 (두번째 경우의 수)
    			loginLayout.append("▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△ Connecting ...\n"); // 다 입력하고 false를 넘겨 받아 connecting
    		}
    		return loginLayout.toString();
    
    	}
    
    	private String getMainMenu() { //메인 메뉴 String 객체 생성 메서드
    		StringBuffer mainPage = new StringBuffer();
    
    		mainPage.append("▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼ [ MENU ] ▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽\n\n");
    		mainPage.append("\t\t1. Task List\n");
    		mainPage.append("\t\t2. Task Settings\n");
    		mainPage.append("\t\t3. Modify Task\n");
    		mainPage.append("\t\t4. Task Status\n\n");
    		mainPage.append("\t\t0. Exit\n\n");
    		mainPage.append("▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△△▲△▲△  [ SELECT ] : ");
    		return mainPage.toString();
    	}
    
    	/* 날짜시간 출력 : LocalDateTime Class + DateTimeFormatter Class */
    	private String getToday(boolean isDate) { //true를 넘겨받음
    		String pattern = (isDate) ? "yyyy. MM. dd." : "yyyy-MM-dd HH:mm:ss";
    		return LocalDateTime.now().format(DateTimeFormatter.ofPattern(pattern));
    	}
    
    	/* 출력 */
    	private void display(String text) {
    		System.out.print(text);
    	}
    
    	/* 사용자 입력 */
    	private String userInput(Scanner scanner) {
    		return scanner.next();
    	}
    }
     ______    _____       ____       _____  
    /\__  _\  /\  __`\    /\  __`\   /\  __`\    
    \/_/\ \/  \ \ \/\ \   \ \ \/\ \  \ \ \/\ \  
       \ \ \   \ \ \ \ \   \ \ \ \ \  \ \ \ \ \
        \ \ \   \ \ \_\ \   \ \ \_\ \  \ \ \_\ \ 
         \ \_\   \ \_____\   \ \____/   \ \_____\ 
          \/_/    \/_____/    \/___/     \/_____/
    
    		   __         ______      _____       ______   
    		  /\ \       /\__  _\    /\  __`\    /\__  _\  
    		  \ \ \      \/_/\ \/    \ \ \L\_\   \/_/\ \/  
    		   \ \ \  __    \ \ \     \/_\__ `\     \ \ \  
    		    \ \ \L\ \    \_\ \__    /\ \L\ \     \ \ \ 
    		     \ \____/    /\_____\   \ `\____\     \ \_\
    		      \/___/     \/_____/    \/_____/      \/_/
    
    
    
    
    					Designed by group_2
    
    
    
    ▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▼▽▼▽▼▽▼▽▼▽▼▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼
    
    
    	TODO LIST
    
    				  DATE 2022. 10. 24.
    
    
    			[ Loading... ]
    
    ▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲
    
    ▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽ [ LOGIN ] ▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽
    
    
    		ID		Password
    		adsf
    
    
    ▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▼▽▼▽▼▽▼▽▼▽▼▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼
    
    
    	TODO LIST
    
    				  DATE 2022. 10. 24.
    
    
    			[ Loading... ]
    
    ▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲
    
    ▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽ [ LOGIN ] ▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽
    
    
    		ID		Password
    		adsf		1234
    
    
    
    ▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△ Connecting ...
    		[■■■■■■■■■■■■■■■■■■■■■■■■■■■■■] SUCCESS !
    
    ▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▼▽▼▽▼▽▼▽▼▽▼▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼
    
    
    	TODO LIST
    
    				  DATE 2022. 10. 24.
    
    
    			[ Main ]
    
    ▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲
    ▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼ [ MENU ] ▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽
    
    		1. Task List
    		2. Task Settings
    		3. Modify Task
    		4. Task Status
    
    		0. Exit
    
    ▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△△▲△▲△  [ SELECT ] :
    반응형

    'JAVA' 카테고리의 다른 글

    #17 [Java] ArrayList Class, Generic, try-catch, Buffer, .size()  (0) 2022.10.27
    #16 [Java] File Class, MVC pattern, Java Bean, .split()  (0) 2022.10.27
    #14 [Java]  (0) 2022.10.27
    #13 [Java] 사칙연산 계산기  (0) 2022.10.27
    #12 [Java]  (0) 2022.10.27

    댓글