※우선 이 글은 자바가 설치되어 있다는 가정하에 이클립스를 기반으로 작성합니다.
오늘은 어젯밤에 운동도 강도 높게 하고 오래 자고 누워서 멍을 때렸다 보니 컨디션이 많이 좋아진 것 같습니다. 그런 기념으로 어제 작성한 예제를 업그레이드한 것을 가져왔습니다. 바로 전화번호부 프로그램인데요. 어제 했던 것을 응용한 문제입니다. 저희가 배웠던 다형성도 나오고 오버 라이딩, 상속, 조건, 반복문 등 여러 가지가 등장합니다. 다 같이 풀어봤으면 좋겠습니다. 제 코딩 실력은 아직 많이 미숙하니 이상한 점이나 불편한 점, 질문이 있으면 댓글 남겨주세요. 아니면 쪽지나 댓글 보내주셔도 됩니다.(rlawngh621@네이버)
+) 이번 포스팅은 바로 코드보시는게 아니라 주어진 조건만 보고 한번 풀어보시고 모르겠으면 검색하거나 조금씩 보면서 풀어보세요. 바로 보는 것은 금지입니다.
문제입니다.
1. Main 클래스와 Address 클래스를 상속받는 Normal, Job, School, Friend 클래스로 구성됩니다.
2. Address 클래스에 메뉴를 작성합니다. 메뉴는
메인 메뉴
1. 사용자 등록
2. 사용자 검색
3. 사용자 삭제
4. 종료
번호를 입력하세요. :
사용자 등록
1. 일반 등록
2. 직장 등록
3. 학교 등록
4. 친구 등록
5. 메인메뉴로 돌아가기
번호를 입력하세요. :
이렇게 구성됩니다.
3. 학생의 정보는 이름, 별명, 전화번호로 구성됩니다.
4. 생성된 객체를 배열에 저장합니다. -> ex) Student [] student = new Student [n];
5. 다형성, while문, for문, if문, 배열, 상속 등 여러 가지 문법이 사용됩니다.
6. 위에 조건들만 지켜주시면 크게 틀에 신경쓰지않으시고 풀으셔도 됩니다. 만약 다른 방법으로 푸신분이 있다면 댓글로 남겨주시거나 이메일, 쪽지로 보내주시면 감사하겠습니다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
String name;
String nickname;
String phone;
Address[] add = new Address[10]; //전화번호부 크기
int count = 0; //배열의 위치마다 정보를 입력해야 하기위해 필요한 변수
Address addr = new Address("");
Address nor = new Normal("");
Address job = new Job("");
Address sch = new School("");
Address fri = new Friend(""); //부모클래스의 변수로써 자식클래스의 인스턴스가 들어가고 있죠? 이 부분이 다형성입니다.
while(true) { //참일동안 반복
addr.printMenu(); //메인메뉴 표시
int insert1 = s.nextInt();
if(insert1 == 1) {
while(true) {
addr.printAddMenu(); //추가 메뉴표시
int insert2 = s.nextInt();
if(insert2 == 1) {
nor.getName();
name = s.next();
nor.getNickname();
nickname = s.next();
nor.getPhone();
phone = s.next();
for(int j = count; j <= count; j++) {
add[j] = new Address(name); //생성자에 이름 입력
add[j].setNickname(nickname); //별명 입력값 설정
add[j].setPhone(phone); //전화번호 입력값 설정
}
}
else if(insert2 == 2) {
job.getName();
name = s.next();
job.getNickname();
nickname = s.next();
job.getPhone();
phone = s.next();
for(int j = count; j <= count; j++) {
add[j] = new Address(name);
add[j].setNickname(nickname);
add[j].setPhone(phone);
}
}
else if(insert2 == 3) {
sch.getName();
name = s.next();
sch.getNickname();
nickname = s.next();
sch.getPhone();
phone = s.next();
for(int j = count; j <= count; j++) {
add[j] = new Address(name);
add[j].setNickname(nickname);
add[j].setPhone(phone);
}
}
else if(insert2 == 4) {
fri.getName();
name = s.next();
fri.getNickname();
nickname = s.next();
fri.getPhone();
phone = s.next();
for(int j = count; j <= count; j++) {
add[j] = new Address(name);
add[j].setNickname(nickname);
add[j].setPhone(phone);
}
}
else if(insert2 == 5) {
System.out.println("메인으로 돌아가기");
break;
}
count++;
}
}
else if(insert1 == 2) {
System.out.print("검색할 사용자의 이름을 입력하세요. : ");
name = s.next();
for(int j = 0; j < count; j++) {
if(name.equals(add[j].getName())) { //입력값과 배열에 저장된 값을 비교해서 같은 정보 출력
System.out.println("이름 : " + add[j].getName());
System.out.println("별명 : " + add[j].getNickname());
System.out.println("전화번호 : " + add[j].getPhone());
}
}
}
else if(insert1 == 3) {
System.out.print("삭제할 사용자의 이름을 입력하세요. : ");
name = s.next();
for(int j = 0; j < count; j++) {
if(name.equals(add[j].getName())){ //입력값과 배열에 저장된 값을 비교해서 같은 정보 초기화
add[j] = new Address("");
for(int k = j; k < 9; k++) {
add[k] = add[k + 1]; //삭제된 자리에 그 다음 값을 집어넣어준다.
} //삭제를 해야 자리가 비어서 다시 추가할 수 있게된다.
}
}
}
else if(insert1 == 4) {
System.out.println("전화번호부를 종료합니다.");
break;
}
}
}
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
public class Address {
protected String name;
protected String nickname;
protected String phone;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public String getNickname() {
return nickname;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getPhone() {
return phone;
}
public Address(String name) { //이름을 생성자에서 처리하도록 한 것입니다.
this.name = name; //nickname과 phone을 추가하고 코드를 수정해도 됩니다.
}
public void printMenu() {
System.out.println("메인 메뉴");
System.out.println("1. 사용자 등록");
System.out.println("2. 사용자 검색");
System.out.println("3. 사용자 삭제");
System.out.println("4. 종료");
System.out.print("번호를 입력하세요. : ");
}
public void printAddMenu() {
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("번호를 입력하세요. : ");
}
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
public class Normal extends Address{
@Override
public String getName() { //이름을 받아오는 get메소드
System.out.print("이름 : ");
return super.getName(); //부모클래스의 getName()호출
}
@Override
public String getNickname() { //별명을 받아오는 get메소드
System.out.print("별명 : ");
return super.getNickname(); //부모클래스의 getNickname()호출
}
@Override
public String getPhone() { //전화번호를 받아오는 get메소드
System.out.print("전화번호 : ");
return super.getPhone(); //부모클래스의 getPhone()호출
}
public Normal(String name) { //생성자
super(name); //부모클래스 Address의 생성자 호출
}
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
public class Job extends Address {
@Override
public String getName() {
System.out.print("이름 : ");
return super.getName();
}
@Override
public String getNickname() {
System.out.print("별명 : ");
return super.getNickname();
}
@Override
public String getPhone() {
System.out.print("전화번호 : ");
return super.getPhone();
}
public Job(String name) {
super(name);
}
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
public class School extends Address {
@Override
public String getName() {
System.out.print("이름 : ");
return super.getName();
}
@Override
public String getNickname() {
System.out.print("별명 : ");
return super.getNickname();
}
@Override
public String getPhone() {
System.out.print("전화번호 : ");
return super.getPhone();
}
public School(String name) {
super(name);
}
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
public class Friend extends Address {
@Override
public String getName() {
System.out.print("이름 : ");
return super.getName();
}
@Override
public String getNickname() {
System.out.print("별명 : ");
return super.getNickname();
}
@Override
public String getPhone() {
System.out.print("전화번호 : ");
return super.getPhone();
}
public Friend(String name) {
super(name);
}
}
|
cs |
헷갈리네요 헷갈려.. 하지만 오늘 공부로 많은 것들을 배운 것 같습니다. 이 포스팅을 보시는 분들에게도 그런 느낌이 들었으면 좋겠습니다. 오늘도 봐주셔서 감사합니다.
'자바 공부' 카테고리의 다른 글
[JAVA]초보 개발자 김주호와 기초부터 시작하는 자바공부 8일차 (은행, 입금, 출금, 계좌이체) (0) | 2021.01.22 |
---|---|
[JAVA]초보 개발자 김주호와 기초부터 시작하는 자바공부 7일차 (ArrayList) (0) | 2021.01.20 |
[JAVA]초보 개발자 김주호와 기초부터 시작하는 자바공부 5일차 (0) | 2021.01.18 |
[JAVA]초보 개발자 김주호와 기초부터 시작하는 자바공부 4일차 예제 풀이 (0) | 2021.01.16 |
[JAVA]초보 개발자 김주호와 기초부터 시작하는 자바공부 4일차 (인터페이스(interface), 다형성(Polymorphism), 객체(Object)클래스) (0) | 2021.01.16 |