DAO - Data Access Object
데이터를 접근하고 편집하는 object
crud를 수행
-> crud - Creat(추가) Read(검색) Update(수정) Delete(삭제)
DTO - Data Transfer Object
VO - Value Object
데이터를 담는 object. 데이터의 한 장
: 메뉴
package main;
import java.util.Scanner;
import dao.AddressDao;
public class MainClass {
public static void main(String[] args) {
AddressDao dao = new AddressDao();
boolean end = false;
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. 종료");
Scanner sc = new Scanner(System.in);
System.out.print(">> ");
int number = sc.nextInt();
switch(number) {
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:
end = true;
break;
default:
}
if(end) {
System.out.println("프로그램을 종료합니다")
break;
}
}
}
}
종료
// 1. System.exit() 이용 -> 강제종료. 주의! 프로세스까지 종료시킴
case7:
System.exit(0);
break;
// 2. boolean변수 이용하여 변수값을 바꾼 후, 바뀌면 빠져나가도록 설정
: 추가, 삭제, 검색, 수정
package dao;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Iterator;
import java.util.Scanner;
import data.FileProc;
import dto.HumanDto;
public class AddressDao {
Scanner sc = new Scanner(System.in);
private HumanDto humanArr[] = new HumanDto[100];
private int count;
private FileProc fp = null;
public AddressDao() {
fp = new FileProc("address");
count = 0;
}
// 추가, 삭제, 검색, 수정
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
public void insert() {
System.out.println("지인을 추가합니다");
System.out.print("이름 = ");
String name = sc.next();
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[count] = new HumanDto(name, age, phone, address, memo);
count++;
}
public void delete() {
System.out.print("삭제할 지인 이름 = ");
String name = sc.next();
// 검색
int index = search(name);
// 삭제
if(index == -1) {
System.out.println("지인을 찾을 수 없습니다");
} else {
humanArr[index].setName("");
humanArr[index].setAge(0);
humanArr[index].setPhone("");
humanArr[index].setAddress("");
humanArr[index].setMemo("");
}
}
public void select() {
System.out.print("검색할 지인 이름 = ");
String name = sc.next();
// 검색
int index = search(name);
if(index == -1) {
System.out.println("지인을 찾을 수 없습니다");
} else {
System.out.println(humanArr[index].toString());
}
}
public void update() {
System.out.print("수정할 지인 이름 = ");
String name = sc.next();
// 검색
int index = search(name);
// 수정
if(index == -1) {
System.out.println("지인을 찾을 수 없습니다");
return;
}
System.out.print("수정할 전화번호 = ");
String phone = sc.next();
System.out.print("수정할 주소 = ");
String address = "";
try {
address = br.readLine();
} catch (IOException e) {
e.printStackTrace();
}
humanArr[index].setPhone(phone);
humanArr[index].setAddress(address);
System.out.println("수정이 완료 되었습니다.");
}
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];
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);
System.out.println("데이터가 저장되었습니다");
}
}
: 주소록의 한 명의 데이터를 담는다
: 사람의 정보에 대한 항목 : 이름, 나이, 전화번호, 주소, 메모
package dto;
public class HumanDto {
// 이름, 나이, 전화번호, 주소, 메모
private String name;
private int age;
private String phone;
private String address;
private String memo;
// construntor
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;
}
// 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;
}
}
: 데이터를 파일에 저장
package data;
import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class FileProc {
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 write(String arr[]) {
try {
PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file)));
for (int i = 0; i < arr.length; i++) {
pw.println(arr[i]);
}
pw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}