Q. 전화번호 관리 프로그램 04단계 문제
class PhoneInfo
{
String name;
String phoneNumber;
}
다음 두 클래스 추가로 삽입
PhoneUnivInfo 대학 동기들의 전화번호 저장
PhoneCompanyInfo 회사 동료들의 전화번호 저장
각각의 클래스에 정의되어야 하는 인스턴스 변수의 종류는 다음과 같다.
PhoneUnivInfo
이름 name String
전화번호 phoneNumber String
전공 major String
학년 year int
PhoneCompanyInfo
이름 name String
전화번호 phoneNumber String
회사 company String
데이터를 입력받는 메소드이외에 나머지 메소드의 변경은 없다.
전화번호 관리 프로그램 04단계 프로그램의 실행 예
선택하세요...
1. 데이터 입력
2. 데이터 검색
3. 데이터 삭제
4. 모든 데이터 보기
5. 프로그램 종료
선택 : 1
데이터 입력을 시작합니다.
1. 일반, 2. 대학, 3. 회사
선택 >> 1
이름 : 홍길동
전화번호 : 222 - 3333
데이터 입력이 완료되었습니다.
선택하세요...
1. 데이터 입력
2. 데이터 검색
3. 데이터 삭제
4. 모든 데이터 보기
5. 프로그램 종료
선택 : 1
데이터 입력을 시작합니다.
1. 일반, 2. 대학, 3. 회사
선택 >> 2
이름 : 김유신
전화번호 : 111 - 2222
전공 : 컴퓨터공학
학년 : 3
데이터 입력이 완료되었습니다.
선택하세요...
1. 데이터 입력
2. 데이터 검색
3. 데이터 삭제
4. 모든 데이터 보기
5. 프로그램 종료
선택 : 1
데이터 입력을 시작합니다.
1. 일반, 2. 대학, 3. 회사
선택 >> 3
이름 : 임꺽정
전화번호 : 533 - 5555
회사 : 굿컴패니
데이터 입력이 완료되었습니다.
선택하세요...
1. 데이터 입력
2. 데이터 검색
3. 데이터 삭제
4. 모든 데이터 보기
5. 프로그램 종료
선택 : 2
데이터 검색을 시작합니다.
이름 : 김유신
이름 : 김유신
전화번호 : 111 - 2222
전공 : 컴퓨터공학
학년 : 3
데이터 검색이 완료되었습니다.
그리고 검색시에는 해당 이름에 대한 정보 전체를 출력해야 한다.
A. 강사님의 답 (더 쉽게 설명 위한 간단한 예시답변)
class PhoneInfo
{
private String name;
private String phoneNumber;
PhoneInfo(String name, String phoneNumber)
{
this.name = name;
this.phoneNumber = phoneNumber;
}
public void printCS()
{
System.out.println("이름 : " + name);
System.out.println("전화 번호 : " + phoneNumber);
}
}
class PhoneUnivInfo extends PhoneInfo
{
private String major;
private int year;
PhoneUnivInfo(String name, String phoneNumber, String major, int year)
{
super(name, phoneNumber);
this.major = major;
this.year = year;
}
public void printCS()
{
super.printCS();
System.out.println("전공 : " + major);
System.out.println("학년 : " + year);
}
}
class PhoneCompanyInfo extends PhoneInfo
{
private String company;
PhoneCompanyInfo(String name, String phoneNumber, String company)
{
super(name, phoneNumber);
this.company = company;
}
public void printCS()
{
super.printCS();
System.out.println("회사 : " + company);
}
}
class PhoneInfoMain
{
public static void main(String[] args)
{
PhoneInfo[] infoArr = new PhoneInfo[100];
int menu = 0, cnt = 0;
java.util.Scanner sc = new java.util.Scanner(System.in);
String name= null, phoneNumber = null, major = null, company = null;
int year = 0;
while(true)
{
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.print("선택 :");
menu = sc.nextInt();
sc.nextLine();
switch(menu)
{
case 1:
System.out.print("이름 : ");
name = sc.nextLine();
System.out.print("전화번호 : ");
phoneNumber= sc.nextLine();
infoArr[cnt] = new PhoneInfo(name, phoneNumber);
cnt++;
break;
case 2:
System.out.print("이름 : ");
name = sc.nextLine();
System.out.print("전화번호 : ");
phoneNumber= sc.nextLine();
System.out.print("전공 : ");
major = sc.nextLine();
System.out.print("학년 : ");
year= sc.nextInt();
infoArr[cnt] = new PhoneUnivInfo(name, phoneNumber, major, year);
cnt++;
break;
case 3:
System.out.print("이름 : ");
name = sc.nextLine();
System.out.print("전화번호 : ");
phoneNumber= sc.nextLine();
System.out.print("회사 : ");
company = sc.nextLine();
infoArr[cnt] = new PhoneCompanyInfo(name, phoneNumber, company);
cnt++;
break;
case 6:
for(int i=0;i<cnt;i++)
infoArr[i].printCS();
break;
}
}
}
}
A. 내가 생각한 답
import java.util.*;
class PhoneInfoMain
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
PhoneInfoBook pib = new PhoneInfoBook();
while(true)
{
pib.intro();
int menu = sc.nextInt();
sc.nextLine();
switch(menu)
{
case 1 :
pib.insert();
break;
case 2 :
pib.search();
break;
case 3 :
pib.delete();
break;
case 4 :
pib.allData();
break;
case 5 :
System.out.println("프로그램을 종료합니다.");
break;
default :
System.out.println("잘못 입력하셨습니다. 다시 입력해주세요.");
return;
}
}
}
}
import java.util.Scanner;
class PhoneInfoBook
{
Scanner sc = new Scanner(System.in);
int year=0, num =0;
int cnt=0;
String name, phoneNumber, major, company = null;
int size = 100;
PhoneInfo [] arr = new PhoneInfo[size];
boolean flag =true;
public void intro()
{
System.out.println("선택하세요...");
System.out.println("1. 데이터 입력");
System.out.println("2. 데이터 검색");
System.out.println("3. 데이터 삭제");
System.out.println("4. 모든 데이터 보기");
System.out.println("5. 프로그램 종료");
}
public void insert()
{
System.out.println("데이터 입력을 시작합니다.");
System.out.println("1. 일반, 2. 대학, 3. 회사");
System.out.print("선택>>");
num = sc.nextInt();
sc.nextLine();
switch(num)
{
case 1 :
System.out.println("이름 :");
name = sc.nextLine();
System.out.println("전화번호 :");
phoneNumber = sc.nextLine();
arr[cnt++] = new PhoneInfo(name, phoneNumber);
System.out.println("데이터 입력이 완료되었습니다.");
break;
case 2 :
System.out.println("이름 :");
name = sc.nextLine();
System.out.println("전화번호 :");
phoneNumber = sc.nextLine();
System.out.println("전공 :");
major = sc.nextLine();
System.out.println("학년 :");
year = sc.nextInt();
sc.nextLine();
arr[cnt++] = new PhoneUnivInfo(name, phoneNumber, major, year);
System.out.println("데이터 입력이 완료되었습니다.");
break;
case 3 :
System.out.println("이름 :");
name = sc.nextLine();
System.out.println("전화번호 :");
phoneNumber = sc.nextLine();
System.out.println("회사 :");
company = sc.nextLine();
arr[cnt++] = new PhoneCompanyInfo(name, phoneNumber, company);
System.out.println("데이터 입력이 완료되었습니다.");
break;
default :
System.out.println("잘못 입력하셨습니다.");
return;
}
}
public void search()
{
boolean flag =true;
System.out.println("데이터 검색을 시작합니다.");
System.out.print("선택 :");
name = sc.nextLine();
for(int i=0;i<cnt;i++)
{
if((arr[i].getName()).equals(name))
{
arr[i].showPhoneInfo();
flag = false;
System.out.println("검색을 완료했습니다.");
break;
}
}
if(flag) System.out.println("검색할 데이터가 존재하지 않습니다.");
}
public void delete()
{
boolean flag =true;
System.out.println("데이터 삭제를 시작합니다.");
System.out.print("선택 :");
name = sc.nextLine();
for(int i=0;i<cnt;i++)
{
if((arr[i].getName()).equals(name))
{
for(int j=i;j<cnt-1;j++)
{
arr[j] = arr[j+1];
}
arr[cnt-1] = null;
cnt--;
flag = false;
System.out.println("삭제를 완료했습니다.");
break;
}
}
if(flag) System.out.println("삭제할 데이터가 존재하지 않습니다.");
}
public void allData()
{
if(cnt==0)
System.out.println("데이터가 존재하지 않습니다.");
else
{
System.out.println("모든 데이터를 출력합니다.");
for(int i=0;i<cnt;i++)
{
arr[i].showPhoneInfo();
System.out.println();
}
}
}
}
class PhoneInfo
{
private String name;
private String phoneNumber;
PhoneInfo(String name, String phoneNumber)
{
this.name = name;
this.phoneNumber = phoneNumber;
}
public void showPhoneInfo()
{
System.out.println("이름 :"+name);
System.out.println("전화번호 :"+phoneNumber);
}
public String getName()
{
return name;
}
public String getPhoneNumber()
{
return phoneNumber;
}
}
class PhoneUnivInfo extends PhoneInfo
{
private String major;
private int year;
PhoneUnivInfo(String name, String phoneNumber, String major, int year)
{
super(name, phoneNumber);
this. major = major;
this. year = year;
}
public void showPhoneInfo()
{
super.showPhoneInfo();
System.out.println("전공 :"+major);
System.out.println("학년 :"+year);
}
}
class PhoneCompanyInfo extends PhoneInfo
{
private String company;
PhoneCompanyInfo(String name, String phoneNumber, String company)
{
super(name, phoneNumber);
this. company = company;
}
public void showPhoneInfo()
{
super.showPhoneInfo();
System.out.println("회사 :"+company);
}
}
+Q. 입력 시 가나다순으로 출력되도록 변경해보시오.
A. 강사님의 답(클래스에 따라 보기 편하도록 나눔)
class PhoneInfo
{
private String name;
private String phone;
PhoneInfo(String name, String phone)
{
this.name = name;
this.phone = phone;
}
public String getName()
{
return name;
}
public void showPhoneInfo()
{
System.out.println("이름 : " + name);
System.out.println("전화번호 : " + phone);
}
}
class PhoneUnivInfo extends PhoneInfo
{
private String major;
private int year;
PhoneUnivInfo(String name ,String phone, String major, int year)
{
super(name, phone);
this.major = major;
this.year = year;
}
public void showPhoneInfo()
{
super.showPhoneInfo();
System.out.println("전공 : " + major);
System.out.println("학년 : " + year);
}
}
class PhoneCompanyInfo extends PhoneInfo
{
private String company;
PhoneCompanyInfo(String name ,String phone, String company)
{
super(name, phone);
this.company = company;
}
public void showPhoneInfo()
{
super.showPhoneInfo();
System.out.println("회사 : " + company);
}
}
class PhoneBook
{
private static PhoneBook pb;
private PhoneInfo[] pInfo;
private int cntOfPhone;
private int sizePhoneInfo;
PhoneBook(int sizePhoneInfo)
{
pInfo = new PhoneInfo[sizePhoneInfo];
cntOfPhone = 0;
this.sizePhoneInfo = sizePhoneInfo;
}
public static PhoneBook getPhoneBookInst(int sizePhoneInfo)
{
if(pb == null)
pb = new PhoneBook(sizePhoneInfo);
return pb;
}
public void inputPhoneInfo(PhoneInfo pInfo)
{
int i = 0, j=0;
if(cntOfPhone >= sizePhoneInfo)
{
System.out.println("더 이상 저장할 수 없습니다.");
return;
}
for(i=0;i<cntOfPhone;i++)
{
if(this.pInfo[i].getName().compareTo(pInfo.getName()) > 0)
{
for(j=cntOfPhone-1;j>=i;j--)
{
this.pInfo[j+1] = this.pInfo[j];
}
break;
}
}
this.pInfo[i] = pInfo;
cntOfPhone++;
}
public void searchPhoneInfo(String name)
{
int result = search(name);
if(result != -1)
pInfo[result].showPhoneInfo();
else
System.out.println("찾으시는 데이터가 없습니다.");
}
public void deletePhoneInfo(int idx)
{
int i=0;
for(i=idx;i<cntOfPhone-1;i++)
pInfo[i] = pInfo[i+1];
pInfo[i] = null;
cntOfPhone--;
System.out.println("삭제가 완료되었습니다.");
}
public int search(String name)
{
for(int i=0;i<cntOfPhone;i++)
{
if(pInfo[i].getName().compareTo(name) == 0)
return i;
}
return -1;
}
public void showAllPhoneInfo()
{
for(int i=0;i<cntOfPhone;i++)
pInfo[i].showPhoneInfo();
}
}
import java.util.Scanner;
class PhoneUI
{
private static final int MAX_CNT=100;
public static Scanner sc = new Scanner(System.in);
private static PhoneBook pb = PhoneBook.getPhoneBookInst(MAX_CNT);
public static final int INPUT_PHONEINFO = 1;
public static final int SEARCH_PHONEINFO = 2;
public static final int DELETE_PHONEINFO = 3;
public static final int SHOW_ALL_PHONEINFO = 4;
public static final int PROGRAM_QUIT = 5;
public static final int GENERAL = 1;
public static final int UNIVERCITY = 2;
public static final int COMPANY = 3;
public static final int YES = 1;
public static final int NO = 2;
public static void mainMenu()
{
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.print("선택 : ");
}
public static void inputMenu()
{
System.out.println("1. 일반, 2. 대학, 3. 회사");
}
public static void inputMenuChoice()
{
int choice=0;
choice = sc.nextInt();
sc.nextLine();
switch(choice)
{
case GENERAL:
inputGeneralPhoneInfo();
break;
case UNIVERCITY:
inputUniversityPhoneInfo();
break;
case COMPANY:
inputCompanyPhoneInfo();
break;
default:
System.out.println("잘못 입력 하셨습니다.");
}
}
public static void inputGeneralPhoneInfo()
{
String name;
String phone;
System.out.println("데이터 입력을 시작합니다.");
System.out.print("이름 : ");
name = sc.nextLine();
System.out.print("전화번호 : ");
phone = sc.nextLine();
System.out.println("데이터 입력이 완료되었습니다.");
pb.inputPhoneInfo( new PhoneInfo(name, phone) );
}
public static void inputUniversityPhoneInfo()
{
String name;
String phone;
String major;
int year;
System.out.println("데이터 입력을 시작합니다.");
System.out.print("이름 : ");
name = sc.nextLine();
System.out.print("전화번호 : ");
phone = sc.nextLine();
System.out.print("전공 : ");
major = sc.nextLine();
System.out.print("학년 : ");
year = sc.nextInt();
sc.nextLine();
System.out.println("데이터 입력이 완료되었습니다.");
pb.inputPhoneInfo( new PhoneUnivInfo(name, phone, major, year) );
}
public static void inputCompanyPhoneInfo()
{
String name;
String phone;
String company;
System.out.println("데이터 입력을 시작합니다.");
System.out.print("이름 : ");
name = sc.nextLine();
System.out.print("전화번호 : ");
phone = sc.nextLine();
System.out.print("회사 : ");
company = sc.nextLine();
System.out.println("데이터 입력이 완료되었습니다.");
pb.inputPhoneInfo( new PhoneCompanyInfo(name, phone, company) );
}
public static void searchPhoneInfo()
{
String name;
System.out.println("데이터 검색을 시작합니다.");
System.out.println("검색하시고자 하는 이름을 입력하세요.");
name = sc.nextLine();
pb.searchPhoneInfo(name);
}
public static void deletePhoneInfo()
{
String name;
int result=0;
int answer=0;
System.out.println("검색하시고자 하는 이름을 입력하세요.");
name = sc.nextLine();
result = pb.search(name);
if(result != -1)
{
System.out.println("정말 삭제하시겠습니까? 1. Yes 2. No");
answer = sc.nextInt();
sc.nextLine();
switch(answer)
{
case YES:
pb.deletePhoneInfo(result);
break;
case NO:
break;
default:
System.out.println("잘못 누르셨습니다.");
}
}
else
System.out.println("삭제하시려는 데이터가 없습니다.");
}
public static void showAllPhoneInfo()
{
pb.showAllPhoneInfo();
}
}
class PhoneMain
{
public static void main(String[] args)
{
int choice=0;
while(true)
{
PhoneUI.mainMenu();
choice = PhoneUI.sc.nextInt();
PhoneUI.sc.nextLine();
switch(choice)
{
case PhoneUI.INPUT_PHONEINFO:
PhoneUI.inputMenu();
PhoneUI.inputMenuChoice();
break;
case PhoneUI.SEARCH_PHONEINFO:
PhoneUI.searchPhoneInfo();
break;
case PhoneUI.DELETE_PHONEINFO:
PhoneUI.deletePhoneInfo();
break;
case PhoneUI.SHOW_ALL_PHONEINFO:
PhoneUI.showAllPhoneInfo();
break;
case PhoneUI.PROGRAM_QUIT:
return;
default:
System.out.println("잘못 선택하셨습니다.");
}
}
}
}
A. 내가 생각한 답
import java.util.*;
class PhoneInfoMain
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
PhoneInfoBook pib = new PhoneInfoBook();
while(true)
{
pib.intro();
int menu = sc.nextInt();
sc.nextLine();
switch(menu)
{
case 1 :
pib.insert();
break;
case 2 :
pib.search();
break;
case 3 :
pib.delete();
break;
case 4 :
pib.allData();
break;
case 5 :
System.out.println("프로그램을 종료합니다.");
break;
default :
System.out.println("잘못 입력하셨습니다. 다시 입력해주세요.");
return;
}
}
}
}
import java.util.Scanner;
class PhoneInfoBook
{
Scanner sc = new Scanner(System.in);
int year=0, num =0;
int cnt=0;
String name, phoneNumber, major, company = null;
int size = 100;
PhoneInfo [] arr = new PhoneInfo[size];
PhoneInfo pi = new PhoneInfo();
boolean flag =true;
public void intro()
{
System.out.println("선택하세요...");
System.out.println("1. 데이터 입력");
System.out.println("2. 데이터 검색");
System.out.println("3. 데이터 삭제");
System.out.println("4. 모든 데이터 보기");
System.out.println("5. 프로그램 종료");
}
public void insert()
{
System.out.println("데이터 입력을 시작합니다.");
System.out.println("1. 일반, 2. 대학, 3. 회사");
System.out.print("선택>>");
num = sc.nextInt();
sc.nextLine();
switch(num)
{
case 1 :
System.out.println("이름 :");
name = sc.nextLine();
System.out.println("전화번호 :");
phoneNumber = sc.nextLine();
arr[cnt++] = new PhoneInfo(name, phoneNumber);
for(int i=0;i<cnt;i++)
{
if(arr[i].getName().compareTo(name)>0)
{
for(int j=i;j<cnt-1;j++)
{
arr[j+1] = arr[j];
}
break;
}
}
this.arr[i] = name;
System.out.println("데이터 입력이 완료되었습니다.");
break;
case 2 :
System.out.println("이름 :");
name = sc.nextLine();
System.out.println("전화번호 :");
phoneNumber = sc.nextLine();
System.out.println("전공 :");
major = sc.nextLine();
System.out.println("학년 :");
year = sc.nextInt();
sc.nextLine();
arr[cnt++] = new PhoneUnivInfo(name, phoneNumber, major, year);
System.out.println("데이터 입력이 완료되었습니다.");
break;
case 3 :
System.out.println("이름 :");
name = sc.nextLine();
System.out.println("전화번호 :");
phoneNumber = sc.nextLine();
System.out.println("회사 :");
company = sc.nextLine();
arr[cnt++] = new PhoneCompanyInfo(name, phoneNumber, company);
System.out.println("데이터 입력이 완료되었습니다.");
break;
default :
System.out.println("잘못 입력하셨습니다.");
return;
}
}
public void search()
{
boolean flag =true;
System.out.println("데이터 검색을 시작합니다.");
System.out.print("선택 :");
name = sc.nextLine();
for(int i=0;i<cnt;i++)
{
if((arr[i].getName()).equals(name))
{
arr[i].showPhoneInfo();
flag = false;
System.out.println("검색을 완료했습니다.");
break;
}
}
if(flag) System.out.println("검색할 데이터가 존재하지 않습니다.");
}
public void delete()
{
boolean flag =true;
System.out.println("데이터 삭제를 시작합니다.");
System.out.print("선택 :");
name = sc.nextLine();
for(int i=0;i<cnt;i++)
{
if((arr[i].getName()).equals(name))
{
for(int j=i;j<cnt-1;j++)
{
arr[j] = arr[j+1];
}
arr[cnt-1] = null;
cnt--;
flag = false;
System.out.println("삭제를 완료했습니다.");
break;
}
}
if(flag) System.out.println("삭제할 데이터가 존재하지 않습니다.");
}
public void allData()
{
if(cnt==0)
System.out.println("데이터가 존재하지 않습니다.");
else
{
System.out.println("모든 데이터를 출력합니다.");
for(int i=0;i<cnt;i++)
{
arr[i].showPhoneInfo();
System.out.println();
}
}
}
}
class PhoneInfo
{
private String name;
private String phoneNumber;
PhoneInfo(String name, String phoneNumber)
{
this.name = name;
this.phoneNumber = phoneNumber;
}
public void showPhoneInfo()
{
System.out.println("이름 :"+name);
System.out.println("전화번호 :"+phoneNumber);
}
public String getName()
{
return name;
}
public String getPhoneNumber()
{
return phoneNumber;
}
}
class PhoneUnivInfo extends PhoneInfo
{
private String major;
private int year;
PhoneUnivInfo(String name, String phoneNumber, String major, int year)
{
super(name, phoneNumber);
this. major = major;
this. year = year;
}
public void showPhoneInfo()
{
super.showPhoneInfo();
System.out.println("전공 :"+major);
System.out.println("학년 :"+year);
}
}
class PhoneCompanyInfo extends PhoneInfo
{
private String company;
PhoneCompanyInfo(String name, String phoneNumber, String company)
{
super(name, phoneNumber);
this. company = company;
}
public void showPhoneInfo()
{
super.showPhoneInfo();
System.out.println("회사 :"+company);
}
}
'SW > Java' 카테고리의 다른 글
[필기정리]Day16 - 인터페이스, 전화번호 관리 프로그램 문제 05단계 (0) | 2020.07.01 |
---|---|
[필기정리]Day15 - Lotto생성기 및 숫자야구게임 문제 (0) | 2020.06.30 |
[필기정리]Day13 - final, 상속 (0) | 2020.06.26 |
[필기정리]Day12 - 상속 (0) | 2020.06.25 |
[필기정리]Day11 - 전화번호 관리 프로그램 문제 03단계 (0) | 2020.06.24 |