https://dev-with-gpt.tistory.com/103
오늘 수업은 지난번 프로그램에 이어서 추가로 진행하였다.
[설명]
이 프로젝트의 목적은 사용자 입력과 배열의 활용, 메소드 호출 등의 기본적인 개념을 구현한다.
이를 통해 회원 정보를 입력받고 출력하는 간단한 목록 관리 시스템이다.
지난 프로그램에 이어서 클래스를 추가하여 다른 메소드에서 각 클래스를 호출하고
사용하는 것에 대해 배울 수 있었다. 이렇게 각 기능들을 클래스로 분류하여 나눔으로써
유지보수를 쉽게 만드는 것이 주요 목적이라고 할 수 있다.
총 3개의 클래스로 구성되어 있으며 각 클래스는 메소드들을 포함하고있다.
각 클래스와 메소드, 그리고 인자(파라미터) 값들은 무슨 의미인지 바로 식별할 수 있게
선언하였다.
Prompt 클래스:
이 클래스는 사용자로부터 입력을 받기 위한 메소드인 prompt를 제공한다.
prompt 메소드는 사용자에게 메시지를 출력하고, 키보드로부터 한 줄의 입력을 받아 반환한다.
close 메소드는 Scanner 객체를 닫아 사용을 종료한다.
MemberHandler 클래스:
이 클래스는 회원 정보를 입력받고 관리하는 메소드들을 제공한다.
inputMember 메소드는 사용자로부터 이름, 이메일, 암호를 입력받고, 성별을 선택하여 배열에 저장한다.
printMembers 메소드는 저장된 회원 정보를 출력한다.
available 메소드는 현재 배열에 더이상 회원 정보를 입력할 수 있는 여유 공간이 있는지를 확인한다.
App5 클래스:
이 클래스는 프로그램의 진입점(main 메소드)을 포함하고 있다.
printTitle 메소드는 프로그램의 타이틀을 출력한다.
promptContinue 메소드는 사용자로부터 계속 진행할 것인지를 입력받는다.
입력이 유효하지 않은 경우 다시 입력을 요구한다.
main 메소드에서는 타이틀을 출력한 후,
MemberHandler 클래스의 메소드를 사용하여 회원 정보를 입력받고 출력한다.
입력과 출력이 더 이상 필요하지 않을 때 Prompt.close()를 호출하여 Scanner 객체를 닫는다.
[코드]
Prompt
MemberHandler
App5
[결과]
[코드블럭]
Prompt
package bitcamp.myapp;
import java.util.Scanner;
class Prompt {
static Scanner keyboardScanner = new Scanner(System.in);
static String prompt(String title) {
System.out.print(title);
return keyboardScanner.nextLine();
}
public static void close() {
keyboardScanner.close();
}
}
MemberHandler
package bitcamp.myapp;
import bitcamp.myapp.Prompt; // Import the Prompt class
class MemberHandler {
final static int MAX_SIZE = 3; // 배열 길이
static int[] num = new int[MAX_SIZE];
static String[] name = new String[MAX_SIZE];
static String[] email = new String[MAX_SIZE];
static String[] password = new String[MAX_SIZE];
static char[] gender = new char[MAX_SIZE];
static int userid = 1;
static int length = 0;
static final char MALE = 'M';
static final char FEMALE = 'W';
static void inputMember() {
name[length] = Prompt.prompt("이름?");
email[length] = Prompt.prompt("이메일?");
password[length] = Prompt.prompt("암호?");
loop: while (true) { // true가 나올 때까지 반복한다.(라벨생성)
String menuNO = Prompt.prompt("성별: \n" +
" 1. 남자\n" +
" 2. 여자\n" +
"> ");
switch (menuNO) { // if문 대신 사용가능. break때문에 loop 사용해야한다.
case "1":
gender[length] = MALE;
break loop;
case "2":
gender[length] = FEMALE;
break loop;
default:
System.out.print("무효한 번호입니다.\n");
}
}
num[length] = userid++;
length++;
}
static void printMembers() {
// 출력
System.out.println("------------------------------");
System.out.println("번호, 이름, 이메일, 성별");
System.out.println("------------------------------");
for (int i = 0; i < length; i++) {
System.out.printf("%d %s %s %c\n",
num[i], name[i], email[i], gender[i]);
}
}
public static boolean available() {
return length < MAX_SIZE;
}
}
APP5
package bitcamp.myapp;
// import java.util.Scanner;
import bitcamp.myapp.Prompt;
import bitcamp.myapp.MemberHandler;
public class App5 {
public static void main(String[] args) {
// 타이틀 메소드 출력
printTitle();
// for문 배열 입력 (회원정보 입력)
while (MemberHandler.available()) {
MemberHandler.inputMember();
if (!promptContinue()) {
break;
}
}
// 회원정보 출력
MemberHandler.printMembers();
Prompt.close();
}
// methods
static void printTitle() {
System.out.println("나의 목록 관리 시스템");
System.out.println("----------------------");
}
static boolean promptContinue() {
// 계속 진행 할 것인지 확인
while (true) {
String choice = Prompt.prompt("계속 하시겠습니까? (Y/n): ");
System.out.println("");
if (choice.equalsIgnoreCase("Y") || choice.equals("")) {
return true;
} else if (choice.equalsIgnoreCase("N")) {
System.out.println("실행을 종료합니다.");
return false;
} else {
System.out.println("유효하지 않은 입력입니다. 다시 입력해주세요.");
}
}
}
}