<처음에 선생님이 주신 과제>
#1. 연락처 입력
연락처는 최대 5개까지 입력 가능합니다.
저장 데이트는 이름, 전화번호, 메모 3가지 (이름과 전화번호는 필수 입력사항입니다)
필수 입력 사항을 입력하지 않을 경우, 다시 재입력 요청을 해주세요.
# 2.연락처 목록 보기
저장된 정보가 없을 경우, "입력정보" 없음을 출력해주세요
저장된 정보가 2개만 있다면, 입력된 정보 2명에 대해서만 출력해주세요.
즉! 연락처 저장 배열은 5개 만들어 두었습니다. 5개 모두 출력하는 것이아니라,
입력된 인원 수 만큼만 출력해주세요.
# 3.연락처 검색 하기
연락처는 이름으로 검색해주세요.
이름은 같은 사람은 존재하지 않은 것으로 가정하겠습니다.
검색을 위해 이름을 입력하고,
존재한다면 해당 전화번호를 출력해주세요.
만일, 존재 하지 않는다면,
"땡땡" 이름에 대한 정보가 없습니다 로 출력해주세요
를 가지고 처음엔 이렇게 짰었다.... (대참사)
public class Contact
{
public String name;
public String number;
public String memo;
}
import java.util.Scanner;
public class ContactMain{
public static void main (String[] args){
Scanner scan = new Scanner(System.in);
Contact[] contact = new Contact[5];
int choice,num,j=0;
String name;
boolean b = false;
do {
// 사용자가 원하는 연산을 선택하게 한다
System.out.println("# 연락처 프로그램");
System.out.println("1. 연락처 입력");
System.out.println("2. 연락처 목록 보기");
System.out.println("3. 연락처 검색 하기");
System.out.println("4. 프로그램 종료");
choice = scan.nextInt();
scan.nextLine();
// 사용자의 선택에 따라 연산을 수행한다
if (choice == 1) {
if(j==5) {
System.out.println("더이상 입력할 수 없습니다.");
continue;
}
Contact[j]=new Contact();
System.out.println("# 연락처 입력");
do{
System.out.print("이름(필수) : ");
contact[j].name=scan.nextLine();
}while(contact[j].name.length()==0);
do{
System.out.print("전화번호(필수) : ");
contact[j].number=scan.nextLine();
}while(contact[j].number.length()==0);
System.out.print("메모(선택) : ");
contact[j].memo=scan.nextLine().trim();
System.out.println("입력하신 정보는 다음과 같습니다");
System.out.println("-이름 "+contact[j].name);
System.out.println("-전화번호 "+contact[j].number);
System.out.print("-메모 ");
if(contact[j].memo.length()==0) System.out.print("입력정보 없음");
System.out.println(contact[j].memo);
System.out.println("연락처를 저장하시겠습니까? 네/아니오");
if(!scan.nextLine().trim().equals("네")) {
System.out.println("연락처 저장 실패");
contact[j]=null;
continue;
}
System.out.println("연락처 저장 성공");
j++;
}
else if (choice == 2){
num=0;
while(num!=j){
System.out.println("-이름 "+contact[num].name);
System.out.println("-전화번호 "+contact[num].number);
System.out.print("-메모 ");
if(contact[num].memo.length()==0) System.out.print("입력정보 없음");
System.out.println(contact[num].memo+"\n");
num++;
}
}
else if (choice == 3){
num=0;
System.out.print("검색할 이름을 입력하세요>>");
name = scan.nextLine();
while(num!=j){
b=contact[num].name.equals(name);
if(b==true) {
System.out.println(name+"의 연락처는 "+contact[num].number+"입니다.");
break;
}
num++;
}
if(b==false) System.out.println(name+" 이름에 대한 정보가 없습니다.");
}
} while (choice != 4);
scan.close();
}
}
Data클래스의 멤버필드에 직접적으로 접근하는 방식 NONONONONONO~~~!!
만약 저게 어느 사이트의 아이디 비밀번호라고 생각해보자
직접적으로 저걸 변경한다??
보안쪽으로도 아주 심각하지 않겠는가....??
일단 Data클래스의 생성자를 변경해주었다.
public class Contact{
private String name;
private String number;
private String memo;
public Contact(String name,String number, String memo) {
this.name=name;
this.number=number;
this.memo=memo;
}
public String getName() {
return name;
}
public String getNumber() {
return number;
}
public String getMemo() {
return memo;
}
public void setMemo(String memo) {
this.memo = memo;
}
}
이름, 번호, 메모를 가지고 생성하도록 만들었다.
디폴트 생성자 없이 Data클래스 생성자 오버로딩을 했기 때문에 디폴트생성자로는 생성하지 못한다.
1.연락처 입력을 눌렀을 때 Data 클래스를 생성하는 것이 아닌 정보를 받아서
"연락처를 저장하시겠습니까?" 에서 "네" 를 입력했을 시 Data클래스를 생성하게 했다.
그리고 직접 Data클래스의 필드멤버에 접근하는게 아니라 getter 메소드를 이용해서 원하는 정보를 불러오도록 수정했다.
package Contact;
import java.util.Scanner;
public class ContactMain{
public static void main (String[] args){
Scanner scan = new Scanner(System.in);
Contact[] contact = new Contact[5];
int choice,num,j=0;
String name,number,memo;
boolean b = false;
do {
// 사용자가 원하는 연산을 선택하게 한다
System.out.println("# 연락처 프로그램");
System.out.println("1. 연락처 입력");
System.out.println("2. 연락처 목록 보기");
System.out.println("3. 연락처 검색 하기");
System.out.println("4. 프로그램 종료");
choice = scan.nextInt();
scan.nextLine();
// 사용자의 선택에 따라 연산을 수행한다
if (choice == 1) {
if(j==5) {
System.out.println("더이상 입력할 수 없습니다.");
continue;
}
System.out.println("# 연락처 입력");
do{
System.out.print("이름(필수) : ");
name=scan.nextLine();
}while(name.length()==0);
do{
System.out.print("전화번호(필수) : ");
number=scan.nextLine();
}while(number.length()==0);
System.out.print("메모(선택) : ");
memo=scan.nextLine().trim();
System.out.println("입력하신 정보는 다음과 같습니다");
System.out.println("-이름 "+name);
System.out.println("-전화번호 "+number);
System.out.print("-메모 ");
if(memo.length()==0) System.out.print("입력정보 없음");
System.out.println(memo);
System.out.println("연락처를 저장하시겠습니까? 네/아니오");
if(!scan.nextLine().trim().equals("네")) {
System.out.println("연락처 저장 실패");
continue;
}
System.out.println("연락처 저장 성공");
contact[j]=new Contact(name,number,memo);
j++;
}
else if (choice == 2){
num=0;
while(num!=j){
System.out.println("-이름 "+contact[num].getName());
System.out.println("-전화번호 "+contact[num].getNumber());
System.out.print("-메모 ");
if(contact[num].getMemo().length()==0) System.out.print("입력정보 없음");
System.out.println(contact[num].getMemo()+"\n");
num++;
}
}
else if (choice == 3){
num=0;
System.out.print("검색할 이름을 입력하세요>>");
name = scan.nextLine();
while(num!=j){
b=contact[num].getName().equals(name);
if(b==true) {
System.out.println(name+"의 연락처는 "+contact[num].getNumber()+"입니다.");
break;
}
num++;
}
if(b==false) System.out.println(name+" 이름에 대한 정보가 없습니다.");
}
} while (choice != 4);
scan.close();
}
}
수정해야할 것 : 생성자를 바로 data[j] 에 넣는것이 아니라 Data d 라는 참조변수를 선언해주고
거기에 넣어서 거쳐서 생성하기!!! 그리고 이걸 가지고 클래스화를 시켜보도록해야겠당~_~
이상 코린이의 첫 글이었당...♬
'소스코드' 카테고리의 다른 글
jdbc 이클립스 - db 연동 (mysql/sqlite/oracle) (0) | 2022.12.30 |
---|---|
[미니프로젝트] 시나리오01 커피 주문프로그램 (0) | 2022.09.22 |
[코딩습관잡기] - 2.9단계 (0) | 2022.09.19 |
[코딩습관잡기] - 2단계 (수정) (2) | 2022.09.19 |
[JAVA 코딩습관잡기] 2단계 (2) | 2022.09.16 |