이번엔 간단한 CRUD를 만들어보겠습니다.
어제했던 콘솔게임(?) 보다는 간단합니다.
먼저 메인메뉴를 선택할 수 있는 목록을 main함수에서 조회합니다.
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int input = 0;
String[] menus = {
"1. 등록",
"2. 조회",
"3. 수정",
"4. 삭제",
"0. 종료"
};
List<String> postList = new ArrayList<>();
postList.add("hello");
postList.add("yume in muse dash!");
while (true) {
System.out.println("원하시는 기능을 선택해주세요.");
for (int i = 0; i < menus.length; i++) {
System.out.println(menus[i]);
}
System.out.print("입력 : ");
input = scan.nextInt();
if (input < 0 || input > menus.length) {
System.out.println("없는 기능입니다. 다시 시도해주세요.");
continue;
}
if (input == 0) {
System.out.println("프로그램을 종료합니다.");
break;
} else {
menus(input, scan, postList); //선택 완료 후 menus 메서드로 이동
}
}
메뉴에서 선택이 완료되면 menus로 이동합니다.
public static void menus(intinput, Scanner scan, List<String> postList) {
if(input == 1) {
createPost(scan, postList);
} else if(input == 2) {
System.out.println("포스트 목록을 불러옵니다.");
readAllPosts(scan, postList);
} else if(input == 3) {
updatePost(scan, postList);
} else{
deletePost(scan, postList);
}
}
menus 메서드는 각 선택한 메뉴에 따라 맞는 메서드들로 이동시키는 필터링 역할을 합니다.
기능들을 보기 전에, 각 코드에서 반복되는 공통 작업들이 있습니다. 바로 확인메세지이죠.
public static boolean checkMessage(Scanner scan) {
String check;
while(true) {
System.out.print("해당 작업을 수행하시겠습니까? (Y/N) : ");
check = scan.next();
if(check.equalsIgnoreCase("Y")) {
return true;
} else if(check.equalsIgnoreCase("N")) {
return false;
} else{
System.out.println("Y또는 N이 아닙니다 다시 시도해주세요.");
}
}
}
해당 행동을 할 것인지 2차로 확인하는 것이며, y면 true, n이면 false를 반환해 작업 수행여부를 판단시킵니다.
public static void createPost(Scanner scan, List<String> postList) {
String content;
String check;
while(true) {
System.out.println("포스트를 추가합니다.추가할 내용을 입력 해주세요.");
System.out.print("입력 : ");
scan.nextLine(); //버퍼 엔터 제거 중요함.content = scan.nextLine();
if(checkMessage(scan)) { // 확인메세지 메서드 사용
System.out.println("포스트를 추가합니다.");
postList.add(content);
break;
} else{
System.out.println("메뉴로 돌아갑니다.");
}
}
}
내용을 생성해, 리스트에 담습니다.
public static void readAllPosts(Scanner scan, List<String> postList) {
System.out.println("현재 포스트는 총 "+ postList.size() + "개 입니다.");
for(inti = 0; i < postList.size(); i++) {
System.out.println((i + 1) + ". "+ postList.get(i));
}
System.out.println();
}
리스트에 들어있는 포스트들을 조회합니다. 이는 수정, 삭제 목록에도 띄우는 공공역할도 맡습니다.
public static void updatePost(Scanner scan, List<String> postList) {
intchoose = 0;
String check;
String content;
System.out.println("업데이트할 포스트를 골라주세요.");
readAllPosts(scan, postList); // 전체조회 메서드 사용
System.out.print("선택 : ");
choose = scan.nextInt();
choose -= 1;
if(choose <= postList.size() && choose >= 0) {
postList.get(choose);
if(checkMessage(scan)) {
System.out.println("수정을 시작합니다.새로운 내용을 적어주세요.");
System.out.print("본문 : ");
scan.nextLine();
content = scan.nextLine();
postList.set(choose, content);
System.out.println("수정이 완료되었습니다.");
}
System.out.println("메뉴로 돌아갑니다.");
} else{
System.out.println("해당 포스트를 찾을 수 없습니다.");
}
}
리스트 목록에서 고른 포스트를 수정합니다.
public static void deletePost(Scanner scan, List<String> postList) {
intchoose = 0;
String check;
System.out.println("삭제할 포스트를 선택 해주세요.");
readAllPosts(scan, postList);
System.out.print("선택 : ");
choose = scan.nextInt() - 1;
if(checkMessage(scan)) {
postList.remove(choose);
System.out.println("포스트를 삭제하였습니다.");
}
System.out.println("메뉴로 돌아갑니다.");
}
리스트 목록에서 고른 포스트를 삭제합니다.
목표를 포스트 기록 → 이름 기록으로 변경
public static boolean getOrDefault(List<String> nameList) {
if (nameList.isEmpty()) {
System.out.println("이름 목록이 비어있습니다.");
return true;
} else {
return false;
}
}
package ch06;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Ex3 {
public static boolean checkMessage(Scanner scan) {
String check;
while (true) {
System.out.print("해당 작업을 수행하시겠습니까? (Y/N) : ");
check = scan.next();
if (check.equalsIgnoreCase("Y")) {
return true;
} else if (check.equalsIgnoreCase("N")) {
return false;
} else {
System.out.println("Y 또는 N이 아닙니다 다시 시도해주세요.");
}
}
}
public static boolean getOrDefault(List<String> nameList) {
if (nameList.isEmpty()) {
System.out.println("이름 목록이 비어있습니다.");
return true;
} else {
return false;
}
}
public static void createName(Scanner scan, List<String> nameList) {
String name;
String check;
while (true) {
System.out.println("이름을 추가합니다. 추가할 내용을 입력 해주세요.");
System.out.print("입력 : ");
scan.nextLine(); // 버퍼 엔터 제거 중요함.
name = scan.nextLine();
for (int i = 0; i < nameList.size(); i++) {
if (name.equalsIgnoreCase(nameList.get(i))) {
System.out.println("중복 이름은 사용할 수 없습니다!");
return;
}
}
if (checkMessage(scan)) {
System.out.println("이름을 추가합니다.");
nameList.add(name);
break;
} else {
System.out.println("메뉴로 돌아갑니다.");
}
}
}
public static void readAllNames(List<String> nameList) {
if (getOrDefault(nameList)) {
return;
}
System.out.println("현재 이름은 총 " + nameList.size() + "개 입니다.");
for (int i = 0; i < nameList.size(); i++) {
System.out.println((i + 1) + ". " + nameList.get(i));
}
System.out.println();
}
public static void updateName(Scanner scan, List<String> nameList) {
int choose = 0;
String name;
if (getOrDefault(nameList)) {
return;
}
System.out.println("업데이트할 이름을 골라주세요.");
readAllNames(nameList);
System.out.print("선택 : ");
choose = scan.nextInt();
choose -= 1;
if (choose <= nameList.size() && choose >= 0) {
if (checkMessage(scan)) {
System.out.println("수정을 시작합니다. 새로운 내용을 적어주세요.");
System.out.print("본문 : ");
scan.nextLine();
name = scan.nextLine();
nameList.set(choose, name);
System.out.println("수정이 완료되었습니다.");
}
System.out.println("메뉴로 돌아갑니다.");
} else {
System.out.println("해당 이름를 찾을 수 없습니다.");
}
}
public static void deleteName(Scanner scan, List<String> nameList) {
int choose = 0;
String check;
if (getOrDefault(nameList)) {
return;
}
System.out.println("삭제할 이름을 선택 해주세요.");
readAllNames(nameList);
System.out.print("선택 : ");
choose = scan.nextInt() - 1;
if (checkMessage(scan)) {
nameList.remove(choose);
System.out.println("이름을 삭제하였습니다.");
}
System.out.println("메뉴로 돌아갑니다.");
}
public static void menus(int input, Scanner scan, List<String> nameList) {
if (input == 1) {
createName(scan, nameList);
} else if (input == 2) {
System.out.println("이름 목록을 불러옵니다.");
readAllNames(nameList);
} else if (input == 3) {
updateName(scan, nameList);
} else {
deleteName(scan, nameList);
}
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int input = 0;
String[] menus = {
"1. 등록",
"2. 조회",
"3. 수정",
"4. 삭제",
"0. 종료"
};
List<String> nameList = new ArrayList<>();
while (true) {
System.out.println("원하시는 기능을 선택해주세요.");
for (int i = 0; i < menus.length; i++) {
System.out.println(menus[i]);
}
System.out.print("입력 : ");
input = scan.nextInt();
if (input < 0 || input > menus.length) {
System.out.println("없는 기능입니다. 다시 시도해주세요.");
continue;
}
if (input == 0) {
System.out.println("프로그램을 종료합니다.");
break;
} else {
menus(input, scan, nameList);
}
}
}
}