[JAVA] 주소록 만들기(DAO, DTO)

seonjeong·2022년 12월 28일
0

Java

목록 보기
9/26
post-thumbnail

💖 DAO

DAO - Data Access Object
데이터를 접근하고 편집하는 object
crud를 수행
-> crud - Creat(추가) Read(검색) Update(수정) Delete(삭제)

💖 DTO

DTO - Data Transfer Object
VO - Value Object
데이터를 담는 object. 데이터의 한 장

💖 주소록 만들기

✍ Main

: 메뉴

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변수 이용하여 변수값을 바꾼 후, 바뀌면 빠져나가도록 설정

✍ Dao

: 추가, 삭제, 검색, 수정

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("데이터가 저장되었습니다");
	}
}

✍ Dto

: 주소록의 한 명의 데이터를 담는다
: 사람의 정보에 대한 항목 : 이름, 나이, 전화번호, 주소, 메모

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;
	}
}

✍ Data

: 데이터를 파일에 저장

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();
		}
	}
}
profile
🦋개발 공부 기록🦋

0개의 댓글

관련 채용 정보