반응형
👇 공부한 자료들의 실제 소스파일들을 기록해논 공간입니다 👇
오늘의 실습 과제
소스 작성 전 정리
ToDoList 만들기
1. 일정등록
2. 일정수정
3. 일정삭제
4. 전체보기
Package todo
Class
Main // 프로그램 시작
TodoList // 생성자 및 프로그램 실행
Work // 일정을 등록할때 등록할 내용 클래스
String day - 일정 날짜
String text - 일정 내용
int iptWork - 중요도 , 숫자는 1~3까지만 입력
fnc // 기능 정의 클래스
메서드명
일정등록 : addWork
일정수정 : editWork
일정삭제 : delWork
전체보기 : totalList
날짜포맷기능 : dayFomat
내용포멧기능 : textFomat
멤버변수
workList = new workList[]
일정을 등록할때
날짜 포멧 : 숫자로 20230000 > 23/00/00
내용 포멧 : 특수문자 2개만 허용 "!@#$%^&*
중요도 : 1 - * , 2 - ** , 3 - ***
기능
- 날짜 포멧이 정확하게 입력된게 맞는지 (숫자구성 8자리)
숫자 외 다른 내용은 없는지 검사 / 검사 후 반환해야함
매개변수도 필요하고 , 리턴타입도 필요해 -> boolean
- 일정 내용 등록시 특수문자 2개가 들어가는지 유효성 확인
다른 단어는 정상이고, 특수문자만 2개까지 허용 그외 불가
검사후 반환해야함으로 매개변수 필요 , 리턴타입 필요 -> boolean
문제풀이
package todo;
public class Main {
public static void main(String[] args) {
// 프로그램 실행부
new TodoList();
}
}
package todo;
public class Work {
String day = "";
String text = null;
int iptWork = 0;
public void todoPrt(){
StringBuilder star = new StringBuilder();
for (int i = 0; i < iptWork; i++) {
star.append("⛤ ");
}
System.out.println();
System.out.println(" ︵‿︵‿︵‿︵‿︵ My To do List ︵‿︵‿︵‿︵‿︵ ");
System.out.println(" ⓵ 중요도 : " + star);
System.out.println(" ⓶ DAY : " + day.substring(0,4) + "년 " + day.substring(4,6) + "월 " + day.substring(6) + "일 ");
System.out.println(" ⓷ Contents : " + text);
System.out.println(" ︵‿︵‿︵‿︵‿︵︵‿︵‿︵‿︵‿︵︵‿︵‿︵‿︵‿︵︵‿ ");
}
}
package todo;
import javax.swing.*;
import java.util.Scanner;
public class TodoList {
Fnc fn = new Fnc();
Scanner in = new Scanner(System.in);
// 저장할 to do list를 저장할 배열 선언
Work[] workList = new Work[30];
// 관리자 ID
String managerId = "ADMIN";
// 관리자 패스워드
String managerPass = "!!12345!!";
TodoList() {
// 로그인 확인
int cnt = 0;
for (int i = 0; i < 3; i++) {
System.out.print("관리자 ID를 입력하세요 ➜ ");
String adminId = in.nextLine();
System.out.print("비밀번호를 입력하세요 ➜ ");
String adminPw = in.nextLine();
if (managerId.equals(adminId) && managerPass.equals(adminPw)) {
System.out.println(" ✔ 관리자님 로그인 완료");
break;
} else {
cnt++;
System.out.println("✘ 일치되지 않습니다 ✘ (" + cnt + "/3)");
}
}
// 오답횟수가 3번 미만인 경우 프로그램 접속 시작
if (cnt < 3) {
boolean flag = true;
while (flag) {
// 프로그램 시작 후 첫 메뉴
info();
System.out.print("\t ✐ 입력 ➜ ");
int choice = in.nextInt();
in.nextLine();
switch (choice) {
case 1:
// 일정 추가
addWork();
break;
case 2:
// 일정 수정
editWork();
break;
case 3:
// 일정 삭제
delWork();
break;
case 4:
// 일정 전체 보기
totalList();
break;
case 5:
// 종료
flag = false;
System.out.println(" ◡̈⋆* 프로그램을 종료합니다. ");
break;
}
}
} else {
// 로그인 횟수 오류 3번 이상부턴 프로그램 종료
System.out.println("✘ 로그인 횟수 초과 / 프로그램 종료합니다 ✘");
}
}
private void totalList() {
// 일정 전체보기
System.out.println("\t✔ 중요도가 높은 순서대로 보여집니다 ");
// 전체 일정 출력
for (int i = 0; i < workList.length; i++) {
if (workList[i] != null){
workList[i].todoPrt();
}
}
}
private void delWork() {
// 일정 삭제 메서드
System.out.println("삭제 할 날짜를 입력하세요(예시 : 20201111) 입력 ➜ ");
System.out.print("\t ✐ 입력 ➜ ");
String day = in.nextLine();
for (int i = 0; i < workList.length; i++) {
if (workList[i] != null) if (workList[i].day.equals(day)) {
workList[i] = null;
System.out.println("[ " + day.substring(0, 4) + "년 " + day.substring(4, 6) + "월 " + day.substring(6) + "일 ] ✔ 삭제 완료 ");
break;
} else
System.out.println("[ " + day.substring(0, 4) + "년 " + day.substring(4, 6) + "월 " + day.substring(6) + "일 ] ✘ 찾을 수 없습니다 ✘ ");
}
}
private void editWork() {
// 일정 수정 메서드
System.out.print("수정 하려는 날짜를 입력하세요( 예 : 20230101 ) 입력 ➜ ");
String dayTmp = in.nextLine();
System.out.println("① 날짜 변경 ② 내용 변경 ③ 중요도 변경 ");
System.out.print("\t ✐ 입력 ➜ ");
int choice = in.nextInt();
in.nextLine();
// 찾은 일정의 주소를 tmp 객체에 넣어준다
Work tmp = loopData(dayTmp);
switch (choice) {
case 1:
// 사용자 입력이 1번인 경우
System.out.print("\t ✐ 수정할 날짜 입력 (예 : 20231223 ) ➜ ");
String tmpStr = in.nextLine();
if (fn.dayInspect(tmpStr)) {
tmp.day = tmpStr;
System.out.println(" ✔ 수정 완료 ");
} else System.out.println("✘ 불가능한 날짜 입니다 ✘");
break;
case 2:
// 사용자 입력이 2번인 경우
System.out.print("\t ✐ 수정할 내용 입력 ( 한글/영어만 가능 ) ➜ ");
String strtmp = in.nextLine();
if (fn.textInspect(strtmp)) {
tmp.text = strtmp;
System.out.println(" ✔ 수정 완료 ");
} else System.out.println("✘ 불가한 내용이 포함되어 있습니다 ✘");
break;
case 3:
// 사용자 입력이 3번인 경우
System.out.print(" ✐ 수정할 중요도 입력 ( 숫자 1,2,3 만가능 ) ➜ ");
int iptTmp = in.nextInt();
in.nextLine();
if (fn.iptWorkInspect(iptTmp)) {
tmp.iptWork = iptTmp;
System.out.println(" ✔ 수정 완료 ");
} else System.out.println("✘ 선택 불가능한 숫자입니다 ✘");
break;
default:
System.out.println("✘ 처리되지 않았습니다 ✘");
}
tmp = null;
}
private void addWork() {
// 사용자 일정 등록하는 메서드
Work dayTmp = new Work();
System.out.println("날짜 입력은 년월일 숫자 총 8자리로 입력해주세요 , 예 ) 2023/10/10 -> 입력 : 20231010 ");
System.out.print("\t ✐ 입력 ➜ ");
dayTmp.day = in.nextLine();
System.out.println("일정 내용을 입력 해 주세요. 일정 내용은 특수 문자 없이 영어 및 한글만 작성 가능합니다 ");
System.out.print("\t ✐ 입력 ➜ ");
dayTmp.text = in.nextLine();
System.out.println("일정의 중요도를 입력 해 주세요. 1 : 별1개 , 2 : 별2개 , 3 : 별3개 , 숫자만 입력되며 1~3까지 입력해주세요");
System.out.print("\t ✐ 입력 ➜ ");
dayTmp.iptWork = in.nextInt();
in.nextLine();
// 정상적인 규칙 확인, 정상일 경우 등록되며 아닐경우 규칙 오류로 등록되지 않는다
// 날짜 규칙
// 1000년 초과, 12월 이하, 31일 이하로 입력해야만 정상 등록됩니다.
// 내용 규칙
// 특수문자가 포함되지않는 영어와 한글만 가능
// 중요도 규칙
// 1 , 2 , 3 만 가능하다
if (fn.dayInspect(dayTmp.day) && fn.textInspect(dayTmp.text) && fn.iptWorkInspect(dayTmp.iptWork)) {
for (int i = 0; i < workList.length; i++) {
if (workList[i] == null) {
workList[i] = dayTmp;
System.out.println("[ " + workList[i].day + " ] ✔ 등록 완료 ");
dayTmp = null;
break;
}
}
listSort();
} else {
System.out.println("✘✘ 규칙 오류 / 등록되지 않습니다 ✘✘");
dayTmp = null;
}
}
public void listSort() {
// 중요도가 높은 순 으로 바꿔주기
for (int i = 0; i < workList.length; i++) {
if (workList[i] != null) {
for (int j = 0; j < workList.length; j++) {
Work tmp = new Work();
if (workList[j] != null){
if (workList[i].iptWork > workList[j].iptWork){
tmp = workList[j];
workList[j] = workList[i];
workList[i] = tmp;
}
}
}
}
}
}
// 원하는 특정 날짜의 객체 주소를 찾아서 반환해주는 메서드
public Work loopData(String day) {
Work dayTmp = new Work();
for (int i = 0; i < workList.length; i++) {
if (workList[i] != null) {
if (workList[i].day.equals(day)) {
dayTmp = workList[i];
break;
}
}
}
return dayTmp;
}
// 인포메뉴
private void info() {
System.out.println("|××××××××××|××××××××××|××××××××××|××××××××××|××××××××××|");
System.out.println("\t\t▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄\n" +
"\t\t█░░░░░░░░▀█▄▀▄▀██████░▀█▄▀▄▀██████░\n" +
"\t\t░░░░░░░░░░░▀█▄█▄███▀░░░ ▀██▄█▄███▀░\n");
System.out.println("\t\t✎⁾⁾⁾ ︎ToDo List 메모장 입니다 ");
System.out.println("\t❶ 일정 등록\n\t❷ 일정 수정\n\t❸ 일정 삭제\n\t❹ 전체 보기\n\t❺ 종료");
System.out.println("|××××××××××|××××××××××|××××××××××|××××××××××|××××××××××|");
}
}
package todo;
public class Fnc {
// 유효성 검사 : 입력된 숫자가 정상적인 날짜인지 검사
// 1000년 초과, 12월 이하, 31일 이하로 입력해야만 정상 등록됩니다.
public boolean dayInspect(String tmp) {
boolean answer = false;
int yyyy = 0;
int mm = 0;
int dd = 0;
if (tmp.matches("^[0-9]*$")) {
if (tmp.length() == 8) {
yyyy = Integer.parseInt(tmp.substring(0, 5));
mm = Integer.parseInt(tmp.substring(4, 6));
dd = Integer.parseInt(tmp.substring(6));
}
}
if (yyyy > 1000 && mm <= 12 && dd <= 31) answer = true;
return answer;
}
// 유효성 검사 : 일정 내용 중 한글, 영어 외 입력 된 부분이 있는지 확인
public boolean textInspect(String tmp) {
boolean answer = false;
if (tmp.matches("^[a-zA-Z가-힣]*$")) {
answer = true;
}
return answer;
}
// 유효성 검사 : 중요도 1.2.3 범위인지 아닌지확인
public boolean iptWorkInspect(int tmp) {
boolean answer = false;
if (tmp > 0 && tmp < 4) {
answer = true;
}
return answer;
}
}
반응형
'👩🏻💻 𝐋𝐚𝐧𝐠𝐮𝐚𝐠𝐞 > ⠀⠀⠀⠀ Jᴀᴠᴀ' 카테고리의 다른 글
2023/10/27 🎈접근제어자 (0) | 2023.11.01 |
---|---|
2023/10/25 😍 클래스 실습 과제2 (0) | 2023.10.31 |
2023/10/23✨ 클래스 (0) | 2023.10.31 |
2023/10/20 ⭐️ 조별미션 - 즐겨봐요 게임의숲 (1) | 2023.10.20 |
2023/10/19💌 조별 미션 / 영단어 깨기 (1) | 2023.10.19 |