JAVA

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

dP fla 2022. 10. 27. 14:49

📌 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 ] :
반응형