class
//주소록의 한명의 데이터를 담는 object
public class HumanDto{
//사람의 정보에 항목(column)
//이름, 나이, 전화번호, 주소, 메모
private String name;
private int age;
private String phone;
private String address;
private String memo;
//기본 생성자
public HumanDto(){
}
//매개변수 생성자
public HumanDto(String name, int age, String phone, String address, String memo) {
this.name = name;
this.age = age;
this.phone = phone;
this.address = address;
this.memo = memo;
}
//private -> 은닉성 접근을 위해 getter,setter 사용
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getMemo() {
return memo;
}
public void setMemo(String memo) {
this.memo = memo;
}
//확인용
@Override
public String toString() {
return name + "*" + age + "*" + phone + "*" + address + "*" + memo;
}
}
//데이터를 접근하고 편집하는 object
//추가, 삭제, 검색, 수정
//클래스
public class AddressDao {
Scanner sc = new Scanner(System.in);
// 변수를 100개 생성 (변수들을 생성)
private HumanDto humanArr[] = new HumanDto[100];
//멤버변수
private int count;
private FileProc fp = null;
//생성자
public AddressDao() {
// 변수들에 객체를 생성
/*
for (int i = 0; i < humanArr.length; i++) {
humanArr[i] = new HumanDto();
}
*/
fp = new FileProc("address");
humanArr[0] = new HumanDto("홍길동", 24, "123-4567", "서울시", "절친");
humanArr[1] = new HumanDto("성춘향", 16, "234-5678", "남원시", "여사친");
humanArr[2] = new HumanDto("일지매", 22, "345-6789", "부산시", "동호회");
humanArr[3] = new HumanDto("홍길동", 20, "555-5555", "춘천시", "친구");
count = 0;
}
//////////////////////////////////////////////////////////////////////////////////////////////
//함수 이름 : insert
//목적 : 주소록에 추가
public void insert() {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //공백 지원(* - 등)
System.out.println("지인을 추가합니다");
System.out.print("이름 = ");
String name = sc.next();//주소록에 추가할 이름 user input
System.out.print("나이 = ");
int age = sc.nextInt();
System.out.print("전화번호 = ");
String phone = sc.next();
System.out.print("주소 = ");
String address = "";
try { //예외 핸들링
address = br.readLine();
} catch (IOException e) {
e.printStackTrace();
}
System.out.print("메모 = ");
String memo = sc.next();
/*
humanArr[0].setName(name);
humanArr[0].setAge(age);
humanArr[0].setPhone(phone);
humanArr[0].setAddress(address);
humanArr[0].setMemo(memo);
*/
//count - index 위에 user input value 저장
humanArr[count] = new HumanDto(name, age, phone, address, memo);
count++; //user input 저장 -> 인덱스 증가
}
//////////////////////////////////////////////////////////////////////////////////////////////
//함수 이름 : delete
//목적 : 주소록에 있는 정보 삭제
public void delete() {
System.out.print("삭제할 지인의 이름 = ");
String name = sc.next(); //삭제할 정보(이름) user input
// 검색
int index = search(name);
/*
int index = -1;
for (int i = 0; i < humanArr.length; i++) {
if(humanArr[i] != null
&& name.equals(humanArr[i].getName())) {
index = i;
break;
}
}
*/
if(index == -1) { //인덱스가 -1이라면 정보를 찾을 수 없음 호출
System.out.println("지인의 정보를 찾을 수 없습니다");
}
//인덱스가 -1이 아닌 그 외
else {
// 삭제
humanArr[index].setName("");
humanArr[index].setAge(0);
humanArr[index].setPhone("");
humanArr[index].setAddress("");
humanArr[index].setMemo("");
System.out.println("지정한 지인을 삭제하였습니다");
}
}
//////////////////////////////////////////////////////////////////////////////////////////////
//함수 이름 : select
//목적 : 동명이인 찾기
public void select() { // 동명이인을 찾는다
// 검색
System.out.print("검색할 지인의 이름 = ");
String name = sc.next(); //검색할 지인 이름 user input
/*
for (int i = 0; i < humanArr.length; i++) {
if(humanArr[i] != null
//입력한 사람 이름과 humanArr[i]에 있는 이름과 같을 때는 이렇게만 하면 되지만
&& name.equals(humanArr[i].getName())) {
System.out.println(humanArr[i].toString());
}
}
*/
// 찾을 사람이 몇명인지?
int count = 0;
for (int i = 0; i < humanArr.length; i++) {
if(humanArr[i] != null
&& name.equals(humanArr[i].getName())) {
count++;
}
}
//ex)동명이인이라면 2명이 나올테니까 count < 1는 false조건 -> 즉 검색할 수 x
if(count < 1) {
System.out.println("검색한 지인은 찾을 수 없습니다");
return;
}
//찾은 데이터를 보관하는 배열
HumanDto hdto[] = new HumanDto[count];
int n = 0;
for (int i = 0; i < humanArr.length; i++) {
if(humanArr[i] != null
&& name.equals(humanArr[i].getName())) {
hdto[n] = humanArr[i];
n++; //n -> 1 다시 for문 돌아감
}
}
// 찾은 데이터의 배열(동명이인들의 집합들을 출력)
for (int i = 0; i < hdto.length; i++) {
System.out.println(hdto[i].toString());
}
}
//////////////////////////////////////////////////////////////////////////////////////////////
//함수 이름 : update
//목적 : 주소록 특정 지인을 검색하여 phone, address 수정
public void update() {
System.out.print("수정할 지인의 이름 = ");
String name = sc.next(); //수정할 지인의 이름 user input
// 검색
int index = search(name);
//인덱스가 -1이면 찾을 수 없음 print 호출
if(index == -1) {
System.out.println("지인의 정보를 찾을 수 없습니다");
return;
}
// 수정
// phone
// address
System.out.println("데이터를 찾았습니다");
System.out.print("전화번호 = ");
String phone = sc.next(); //수정할 전화번호 user input
System.out.print("주소 = ");
String address = sc.next(); //수정할 주소 user input
humanArr[index].setPhone(phone); //수정한 전화번호 humanArr[]배열에 정보 저장
humanArr[index].setAddress(address); //수정한 주소 humanArr[]배열에 정보 저장
System.out.println("정상적으로 수정되었습니다"); //정상 수정 print문 호출
}
//////////////////////////////////////////////////////////////////////////////////////////////
//select함수가 아닌 다른 update, delete와 같은 함수에거 검색을 위해 활용되는 함수
//search는 동명이인을 찾는 것이고 다른 함수들에서 활용되는 select는 한명만 찾음
public int search(String name) {
int index = -1;
for (int i = 0; i < humanArr.length; i++) {
if(humanArr[i] != null
&& name.equals(humanArr[i].getName())) {
index = i;
break;
}
}
return index;
}
//확인용
public void allDataPrint() {
for (int i = 0; i < humanArr.length; i++) {
if(humanArr[i] != null
&& humanArr[i].getName().equals("") == false) {
System.out.println(humanArr[i].toString());
}
}
}
public void filesave() {
// 실제 배열에 들어 있는 데이터
int count = 0;
for (int i = 0; i < humanArr.length; i++) {
if(humanArr[i] != null && !humanArr[i].getName().equals("")) {
count++;
}
}
String dataArr[] = new String[count];
/*
이름나이전화번호주소메모
홍길동24123-4567서울시친구
홍길동*24*123-4567*서울시*친구
*/
count = 0;
for (int i = 0; i < humanArr.length; i++) {
if(humanArr[i] != null &&
!humanArr[i].getName().equals("")) {
dataArr[count] = humanArr[i].toString();
count++;
}
}
fp.write(dataArr);
}
}
public class MainClass {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
AddressDao dao = new AddressDao();
// menu
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(">> ");
int choice = sc.nextInt();
switch(choice) {
case 1:
dao.insert();
break;
case 2:
dao.delete();
break;
case 3:
dao.select();
break;
case 4:
dao.update();
break;
case 5:
dao.allDataPrint();
break;
case 6:
dao.filesave();
break;
case 7:
break;
default:
}
}
}
}
public class FileProc {
// 파일 쓰기, 읽기
private File file = null;
public FileProc(String filename) {
file = new File("c:\\tmp\\" + filename + ".txt");
try {
if(file.createNewFile()) {
System.out.println("파일 생성 성공!");
}else {
System.out.println("기존의 파일이 있습니다");
}
} catch (IOException e) {
e.printStackTrace();
}
}
public void read() {
}
public void write(String datas[]) {
try {
PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file)));
for (int i = 0; i < datas.length; i++) {
pw.println(datas[i]);
}
pw.close();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("파일에 저장되었습니다");
}
}