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