[ Class Diagram ]
[소스코드 : NameCardCLIApplication.java]
/******************************************************************** * <고객관리 프로그램, Customer Management Program> 고객관리 프로그램을 만들어야 합니다. 고객정보는 이름, 이메일, 나이를 저장합니다. 최대 100명의 정보를 저장할 수 있어야 합니다. 메모리에 정보를 저장/관리합니다. 배열을 이용합니다. 기능적 요구사항 - 고객정보 입력(Insert) - 고객정보 수정(Update) - 고객정보 삭제(Delete) - 고객정보 리스트 출력(List) - 고객정보 조회(Previous, Next) - 수정 또는 삭제는 조회를 한 다음에 사용할 수 있습니다. 비기능적 요구사항 - 언어는 자바 - CLI 환경 어플리케이션 - 기능들은 모듈단위로 작성되야 합니다. 메서드를 작성하란 의미입니다. 메서드는 기능을 실행하는 별도의 블록 메서드 이름 메서드 파라미터 변수 선언 리턴 타입 public 리턴타입 메서드이름(변수타입 변수명,...) { //To Do } public void insertData() { //To Do } ********************************************************************/ package namecard.prj3; import java.util.Scanner; public class NameCardCLIApplication { static final int MAX = 100; static NameCard[] nameCardList = new NameCard[MAX]; static int count = 0; static int index = -1; static Scanner scan = new Scanner(System.in); public static void main(String[] args) { boolean key = true; System.out.println("******************************************"); System.out.println("************고객 관리 프로그램************"); System.out.println("******************************************"); String menu; while(key){ System.out.println(""); System.out.println(">>메뉴를 선택하세요."); System.out.println("(L)ist, (I)nsert, (S)earch, (Q)uit"); menu = scan.next(); switch(menu.toUpperCase().charAt(0)){ case 'L': System.out.println("모든 정보를 출력합니다."); listData(); break; case 'I': System.out.println("새로운 정보를 추가합니다."); insertData(); break; case 'S': if(count == 0) { System.out.println("입력된 데이터가 없습니다."); } else { System.out.println("정보를 조회합니다."); searchData(); } break; case 'Q': System.out.println("프로그램을 종료합니다."); key = false; break; }//end switch }//end while }//end main public static void insertData() { if(count < MAX) { System.out.println("회원구분(0:비회원, 1:회원, 2:VIP)"); int gubun = scan.nextInt(); System.out.print("이름을 입력하세요. : "); String name = scan.next(); System.out.print("이메일을 입력하세요. : "); String email = scan.next(); System.out.print("나이를 입력하세요. : "); int age = scan.nextInt(); NameCard card = null; if(gubun == 0){ card = new NameCard(name, email, age); } else if(gubun == 1) { System.out.print("ID를 입력하세요. : "); String id = scan.next(); card = new MemberNameCard(name, email, age, id); } else if(gubun == 2) { System.out.print("회원 ID를 입력하세요. : "); String id = scan.next(); System.out.print("권한을 입력하세요. : "); String permission = scan.next(); card = new VipNameCard(name, email, age, id, permission); } else { System.out.println("잘못된 회원 구분입니다. 추가가 취소됩니다."); } if(card != null){ nameCardList[count] = card; } System.out.println("새로운 정보가 추가되었습니다."); count++; } else { System.out.println("더이상 추가 할 수 없습니다."); } } public static void listData() { if(count == 0){ System.out.println("현재 입력된 정보가 없습니다."); }else { System.out.printf("|\t이름\t\t|\t이메일\t\t\t\t|\t나이\t|\n"); for(int i=0; i<count ; i++) { System.out.printf("|\t"+nameCardList[i].getName()+"\t\t|\t" +nameCardList[i].getEmail()+"\t\t|\t" +nameCardList[i].getAge()+"\t|\n"); } } } public static void searchData() { boolean key=true; String smenu; while(key) { System.out.print("세부메뉴를 선택하세요. (P)revious/(N)ext/(U)pdate/(D)elete/(M)ain : "); smenu = scan.next(); switch(smenu.toUpperCase().charAt(0)) { case 'P': previousData(); break; case 'N': nextData(); break; case 'U': updateData(); break; case 'D': deleteData(); break; case 'M': System.out.println("메인 메뉴로 돌아갑니다."); index = -1; key = false; break; default: System.out.println("잘못된 입력입니다."); } } } public static void previousData() { if(index == -1){ System.out.println("(N)ext를 선택해주세요."); } else if(index > 0) { index--; printData(index); } else { System.out.println("처음 데이터입니다."); printData(index); } } public static void nextData() { if(index < count-1) { index++; printData(index); } else { System.out.println("마지막 데이터입니다."); printData(index); } } public static void updateData() { if(index != -1) { NameCard card = nameCardList[index]; System.out.println("선택된 정보를 수정합니다."); System.out.print("이름을 입력하세요. : "); card.setName(scan.next()); System.out.print("이메일을 입력하세요. : "); card.setEmail(scan.next()); System.out.print("나이를 입력하세요. : "); card.setAge(scan.nextInt()); if(card instanceof VipNameCard) { System.out.print("회원 ID를 입력하세요. : "); ((VipNameCard) card).setId(scan.next()); System.out.print("권한을 입력하세요. : "); ((VipNameCard) card).setPermission(scan.next()); } else if (card instanceof MemberNameCard){ System.out.print("회원 ID를 입력하세요. : "); ((MemberNameCard) card).setId(scan.next()); } System.out.println("정보가 수정되었습니다."); printData(index); } } public static void deleteData() { if(index != -1) { System.out.println("선택된 정보를 삭제합니다."); for(int i=index ; i<count ; i++) { nameCardList[i] = nameCardList[i+1]; } nameCardList[count-1]=null; if(!((count > 1) && (index == 0))) { index--; } count--; } } public static void printData(int pos) { System.out.println("======================================"); System.out.println("현재 Index : "+pos+" "); nameCardList[pos].printNameCardInfo(); System.out.println("======================================"); System.out.println(""); } }
[소스코드 : NameCard.java]
package namecard.prj3;
public class NameCard {
private String name;
private String email;
private int age;
public NameCard(String name, String email, int age) {
super();
this.name = name;
this.email = email;
this.age = age;
System.out.println("1");
}
public NameCard(String name, int age) {
this(name,null,age);
//this.name = name;
//this.age = age;
//위의 2줄로 쓰는거 보다. 첫번째줄 처럼 쓰는게 좋다.
System.out.println("2");
}
public NameCard() {
//this("무명씨", "없음", 0); //첫번째 생성자 호출
this("무명씨", 0); //두번째 생성자 호출
System.out.println("3");
}
//NameCard card = new NameCard();를 실행했을 때 실행 순서.
// 3번째 생성자->2번째 생성자->1번째 생성자.
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void printNameCardInfo(){
System.out.println("[이름: "+name+"\t"+
"이메일:"+email+"\t"+
"나이: "+age+"]");
}
}
/*1사람 고객 정보를 저장하려면
//////////////NameCard card = new NameCard();card.name = "홍길동";card.email = "hong@hong.com";card.age = 30;-------------vs-------------NameCard card = new NameCard("홍길동","hong@hong.com",30);/////////////*/
public class NameCard {
private String name;
private String email;
private int age;
public NameCard(String name, String email, int age) {
super();
this.name = name;
this.email = email;
this.age = age;
System.out.println("1");
}
public NameCard(String name, int age) {
this(name,null,age);
//this.name = name;
//this.age = age;
//위의 2줄로 쓰는거 보다. 첫번째줄 처럼 쓰는게 좋다.
System.out.println("2");
}
public NameCard() {
//this("무명씨", "없음", 0); //첫번째 생성자 호출
this("무명씨", 0); //두번째 생성자 호출
System.out.println("3");
}
//NameCard card = new NameCard();를 실행했을 때 실행 순서.
// 3번째 생성자->2번째 생성자->1번째 생성자.
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void printNameCardInfo(){
System.out.println("[이름: "+name+"\t"+
"이메일:"+email+"\t"+
"나이: "+age+"]");
}
}
/*1사람 고객 정보를 저장하려면
//////////////NameCard card = new NameCard();card.name = "홍길동";card.email = "hong@hong.com";card.age = 30;-------------vs-------------NameCard card = new NameCard("홍길동","hong@hong.com",30);/////////////*/
[소스코드 : MemberNameCard.java]
package namecard.prj3;
public class MemberNameCard extends NameCard{
private String id;
public MemberNameCard(String name, String email, int age, String id) {
super(name, email, age);
this.id = id;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@Override
public void printNameCardInfo() {
// TODO Auto-generated method stub
super.printNameCardInfo();
System.out.println("[ ID : "+id+"]");
}
}
public class MemberNameCard extends NameCard{
private String id;
public MemberNameCard(String name, String email, int age, String id) {
super(name, email, age);
this.id = id;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@Override
public void printNameCardInfo() {
// TODO Auto-generated method stub
super.printNameCardInfo();
System.out.println("[ ID : "+id+"]");
}
}
[소스코드 : VipNameCard.java]
package namecard.prj3;
public class VipNameCard extends MemberNameCard{
private String permission;
public VipNameCard(String name, String email, int age, String id, String permission) {
super(name, email, age, id);
this.permission = permission;
}
public String getPermission() {
return permission;
}
public void setPermission(String permission) {
this.permission = permission;
}
@Override
public void printNameCardInfo() {
// TODO Auto-generated method stub
super.printNameCardInfo();
System.out.println("[ 권한 : "+permission+"]");
}
}
public class VipNameCard extends MemberNameCard{
private String permission;
public VipNameCard(String name, String email, int age, String id, String permission) {
super(name, email, age, id);
this.permission = permission;
}
public String getPermission() {
return permission;
}
public void setPermission(String permission) {
this.permission = permission;
}
@Override
public void printNameCardInfo() {
// TODO Auto-generated method stub
super.printNameCardInfo();
System.out.println("[ 권한 : "+permission+"]");
}
}
댓글 없음:
댓글 쓰기