MVC Pattern
Model
:The central component of the pattern. It is the application's dynamic data structure, independent of the user interface. It directly manages the data, logic and rules of the application.
View
:Any representation of information such as a chart, diagram or table. Multiple views of the same information are possible, such as a bar chart for management and a tabular view for accountants.
Controller
:Accepts input and converts it to commands for the model or view.
Model: 데이터 관리, 처리
View: 화면(사용자와의 인터페이스)
Controller: Model - View사이를 연결, 업무 처리
package practice;
import java.util.*;
/*<주소록 프로젝트>
기능 정의
0) 메뉴 반복 루프
void mainLoop();
1) 메뉴 출력
void printMenu();
2) 메뉴 선택
int getSelectMenu();
3) 주소 정보 입력(이름, 전화번호, 주소)
void inputAddress();
4) 주소 정보 검색(이름으로 검색)
void searchAddss();
5) 주소 정보 변경(이름으로 검색 후 변경)
void updateAddress();
6) 주소 정보 삭제(이름으로 검색 후 삭제)
void deleteAddress();
7) 주소 정보 전체출력
void printAllAddress();
8) 프로그램 종료
void programExit();
*/
class Address {
public String name;
public String number;
public String address;
}
public class _40 {
static Scanner sc = new Scanner(System.in); // 스캐너 선언
static ArrayList<Address> addrList = new ArrayList<Address>(); // ArrayList 객체인 addrList 선언
public static void main(String[] args) {
mainLoop();
}
// 메뉴 반복 루프
static void mainLoop() {
while (true) {
printMenu();
int sel = selectMenu(); // 입력한 메뉴의 번호를 selectMenu로부터 전달 받는다
switch (sel) {
case 1:
inputAddress();
break;
case 2:
searchMenu();
break;
case 3:
updateAddress();
break;
case 4:
deleteAddress();
break;
case 5:
allClearAddress();
break;
case 6:
printAllAddress();
break;
case 7:
programExit();
break;
default:
System.out.println("잘못입력하였습니다");
break;
}
}
}
// 메뉴 출력
static void printMenu() {
System.out.println("==============");
System.out.println("1. 주소 입력");
System.out.println("2. 주소 검색");
System.out.println("3. 주소 수정");
System.out.println("4. 주소 삭제");
System.out.println("5. 주소 전체 삭제");
System.out.println("6. 주소 전체 출력");
System.out.println("7. 프로그램 종료");
System.out.println("==============");
}
// 메뉴 선택
static int selectMenu() {
int sel;
System.out.println("번호 입력 >> ");
sel = sc.nextInt(); // 입력한 번호를 sel에 저장
return sel;
}
// 주소 정보 입력
static void inputAddress() {
System.out.println("주소를 입력합니다");
// 이름 번호 주소
System.out.print("이 름 : ");
String name = sc.next();
System.out.print("전화번호 : ");
String number = sc.next();
System.out.print("주 소 : ");
String address = sc.next();
// Address 클래스의 객체를 생성해
// name, number, address를 사용한다
Address addr = new Address();
addr.name = name;
addr.number = number;
addr.address = address; // 입력받은 정보를 Address 클래스의 정보로 넘겨준다
addrList.add(addr); // 입력받은 정보를 addr리스트에 넣어준다 (저장완료)
}
// 메뉴 검색
static void searchMenu() {
System.out.println("검색할 이름 입력");
String name = sc.next();
for (int i = 0; i < addrList.size(); i++) { // addrList.size()는 addrList에 저장된 값의 개수
Address addr = addrList.get(i); // addrList.get(i)는 addrList에 저장된 i값을 가져온
if (name.equals(addr.name)) { // 만약 검색한 이름과 배열에 저장된 이름 중 같은 이름이 있을 경우 아래의 정보를 출력한다
System.out.println("======================");
System.out.println("이 름 : " + addr.name);
System.out.println("전화번호 : " + addr.number);
System.out.println("주 소 : " + addr.address);
System.out.println("======================");
break;
}
}
}
// 주소 정보 수정
static void updateAddress() {
System.out.println("수정할 이름 검색");
String name = sc.next();
for (int i = 0; i < addrList.size(); i++) {
Address addr = addrList.get(i);
if (name.equals(addr.name)) {
// 수정할 이름은 new를 붙여줘 구분할 수 있게 만들어줌
System.out.println("수정할 이름 입력");
String newName = sc.next();
System.out.println("수정할 번호 입력");
String newNumber = sc.next();
System.out.println("수정할 주소 입력");
String newAddress = sc.next();
// new가 붙은 정보는 Address클래스의 정보로 다시 저장한다 (값이 변경(수정)되야하기 때문)
addr.name = newName;
addr.number = newNumber;
addr.address = newAddress;
break;
}
}
}
// 주소 정보 삭제
static void deleteAddress() {
System.out.println("삭제할 이름 입력");
String name = sc.next();
System.out.println("정말 삭제하시겠습니까?");
System.out.println(" Y / N ");
String st = sc.next();
if (st.equalsIgnoreCase("Y")) { // 대소문자 구분 없이 y를 입력 시
//.isEmpty()
if(addrList.isEmpty()) { //addrList.size(null)을 만들어야함
// if(addrList.size()<1) {
System.out.println("저장되지 않은 값입니다");
}
for (int i = 0; i < addrList.size(); i++) {
Address addr = addrList.get(i);
if (name.equals(addr.name)) {
addrList.remove(i); // addrList에서 입력한 이름과 같은 이름을 찾을 경우 삭제를 해준다
System.out.println("삭제되었습니다");
break;
}
}
}
else if (st.equalsIgnoreCase("N")) { // 대소문자 구분 없이 n을 입력 시
System.out.println("삭제를 취소하였습니다"); // 아무 일이 일어나지 않으며 "삭제를 취소하였습니다" 문구 출력
} else {
System.out.println("잘못입력되었습니다"); // else는 y,n을 제외한 다른 입력을 받았을때 "잘못입력되었습니다" 문구 출력
}
}
// 주소 전체 삭제
static void allClearAddress() {
System.out.println("정말 전체 삭제 하시겠습니까? \n Y / N");
String st = sc.next();
if (st.equalsIgnoreCase("y")) {
addrList.clear(); // addrList.clear(); 는 addrList의 모든 값을 삭제 해준다
System.out.println("전체 삭제를 되었습니다");
} else if (st.equalsIgnoreCase("n")) {
System.out.println("전체 삭제를 취소하였습니다");
} else {
System.out.println("잘못입력되었습니다");
}
}
// 주소 전체 출력
static void printAllAddress() {
System.out.println("전체 출력합니다");
for (int i = 0; i < addrList.size(); i++) {
Address addr = addrList.get(i); // addrList에 저장된 모든 값을 가져와 아래 양식으로 출력해준다
System.out.println("======================");
System.out.println("이 름 : " + addr.name);
System.out.println("전화번호 : " + addr.number);
System.out.println("주 소 : " + addr.address);
System.out.println("======================");
}
}
// 프로그램 종료
static void programExit() {
System.out.println("프로그램을 종료합니다");
System.exit(0); // 0은 정상종료 / 0이 아니면 비정상종료
}