Daily coding

Java Basic : day 9 - Example : 회원관리DAO (회원정보 입출력 / 파일저장,읽기) 본문

Language/Java_basic

Java Basic : day 9 - Example : 회원관리DAO (회원정보 입출력 / 파일저장,읽기)

sunnnkim 2019. 11. 29. 18:05
package day9.example01;

import java.util.Scanner;

public class mainClass {

	public static void main(String[] args) {

		// 메뉴는 여기서 사용하거나 DAO 클래스에 작성 하기

		DAO test = new DAO();
		
		Scanner sc = new Scanner(System.in);
		while (true) {
			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.println("0. 종료");

			System.out.print(">> ");
			int choice;
			try {
				choice = sc.nextInt();
			} catch (Exception e) {
				choice = -1;
			}

			if (choice == 1) {
				test.userInsert();
			} else if (choice == 2) {
				test.userDelete();
			} else if (choice == 3) {
				test.userSelect();
			} else if (choice == 4) {
				test.userUpdate();
			} else if (choice == 5) {
				test.printAll();
			} else if (choice == 6) {
				try {
					test.dataSave();
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			} else if (choice == 7) {
				test.dataLoad();
			} else if (choice == 0) {
				System.out.println("종료합니다.");
				sc.close();
				System.exit(0);
			} else {
				System.out.println("잘못 선택했습니다.");
			}

		}

	}
}​
package day9.example01;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.Scanner;

public class FileClass {
	
	private File file;
	private String dir;
	private String fileName;
	
	public FileClass() {
		file = new File("d:\\");
	}
	
	public FileClass(String dir,String fileName) {
		file = new File("d:\\" + dir + "\\" + fileName+".txt");
		this.dir = "d:\\" + dir;
		this.fileName = fileName +".txt";
	}
	
	
	
	// 파일명이 있는지 확인하기
	public boolean check(File file) {
		if(file.exists()) {
			return true; 
		}
			return false;
	}
	
	// creat
	public void create() throws Exception{
		boolean exist = check(file);
		if(exist) {
			file.delete();
			file.createNewFile();
		}
		else {
			file = new File(dir);
			file.mkdirs();
			file = new File(dir+"\\" + fileName);
			file.createNewFile();
		}
	}
	
	
	
	// read
	public void read() throws Exception{
		boolean exist = check(file);
		if(exist) {
			FileReader fr = new FileReader(file);
			BufferedReader bw = new BufferedReader(fr);
			String str;
			while((str = bw.readLine()) != null ){
				System.out.println(str);
			}
			bw.close();
		}else {
			System.out.println("읽을 파일이 없습니다.");
		}
		
	}
	
	
	// write 
	
	public void write(String str) throws Exception{
		FileWriter fw = new FileWriter(file);
		PrintWriter pw = new PrintWriter(fw);
		pw.println(str);
		fw.close();
		
	}

}

// memberDAO 랑 연결해서 사용하기

// 만들 메소드
// creatfile
// read
// write

package day9.example01;

import java.util.Scanner;

// Data Access Object : 데이터에 접근하는 객체 (CRUD)0.2
/*
	Database의 data에 접근을 위한 객체
	Database에 접근을 하기위한 로직과 비즈니스 로직을 분리하기 위해서 사용
	
 */

	public class DAO {
	//TODO: Member Variables
	Scanner sc = new Scanner(System.in);
	private MemberDTO mList[]=  new MemberDTO[10];
	private FileClass file = new FileClass("sun","memberInfo");
	private int listSize;
	
	
	// 생성자 constructor
	public DAO() {
		
		for (int i = 0; i < mList.length; i++) {
			mList[i] = new MemberDTO();
		}
		
		// 테스트용 데이터
		mList[0].setId(0);
		mList[0].setName("test1");
		mList[0].setAge(11);
		mList[0].setAddress("서울");
		listSize++;
		
		mList[1].setId(1);
		mList[1].setName("test2");
		mList[1].setAge(22);
		mList[1].setAddress("부산");
		listSize++;
		
		mList[2].setId(2);
		mList[2].setName("test3");
		mList[2].setAge(33);
		mList[2].setAddress("대구");
		listSize++;
	}
	
	
	// 	numberId name age address
	// TODO: CRUD
	// insert
	private void insert(MemberDTO m) {
		// 데이터 추가
		mList[listSize] = m;
		listSize++;
		
	}
	// delete
	private void delete(int index) {
		mList[index] = null;
	}
	
	// select 
	private MemberDTO select(int index) {	
		return mList[index];
	}
	
	// update
	private void update(int index, MemberDTO m) {
		mList[index] = m;
	}
	
	// printAll
	public void printAll() {
		System.out.println("< 전체 회원목록 >");
		int index = 1;
		for (int i = 0; i < mList.length; i++) {
			try {
				if(mList[i].getName() != null) {
					System.out.println("< "+ index +". "+mList[i].getName() + " 회원 >");
					System.out.println("회원번호 : " + mList[i].getId());
					System.out.println("나이: " + mList[i].getAge());
					System.out.println("주소: " + mList[i].getAge());
					index++;
				}
			}catch(Exception e) {
				continue;
			}
		}
	}
	
	
	// 인덱스 찾기 : 키 - 이름 
	private int findIndex() {
		System.out.print("회원이름을 입력하시오 : ");
		String name = sc.next();
		for (int i = 0; i < mList.length; i++) {
			try {
				if(mList[i].getName().equals(name)) {
					return i;
				}
			} catch (Exception e) {
				return -1;
			}
		}
			return -1;
	}

	
	
	//user메소드 : 사용자의 입력값있음.
	
	// user Insert
	public void userInsert() {
		if(listSize < 10) {	
			MemberDTO m = new MemberDTO();
			System.out.println("< 회원 정보입력 >");
			System.out.print("회원번호 : ");
			int id = sc.nextInt();
			System.out.print("이름 : ");
			String name = sc.next();
			System.out.print("나이 : ");
			int age = sc.nextInt();
			System.out.print("주소 : ");
			String ad = sc.next();
			
			m.setId(id);
			m.setAge(age);
			m.setName(name);
			m.setAddress(ad);
			insert(m);
		}else {
			System.out.println("저장할 공간이 꽉 찼습니다.");
		}
	}
	
	//user Delete 
	public void userDelete() {
		int index = findIndex();
		if(index != -1) {
			delete(index);
			System.out.println("회원을 삭제했습니다.");
		}else {
			// 이름이 없는 경우
			System.out.println("해당 회원이 없습니다.");
		}
	}
	
	
	// userSelect 멤버 값 리턴하기 
	public void userSelect() {
		int index = findIndex();
		if(index != -1) { // 인덱스 있는 경우 
			MemberDTO m = select(index);
			int id = m.getId();
			int age = m.getAge();
			String name = m.getName();
			String address = m.getAddress();
			
			System.out.println("< "+name + " 의 회원정보 >");
			System.out.println(" - 회원번호 : " + id);
			System.out.println(" - 이름 : " + name);
			System.out.println(" - 나이 : " + age);
			System.out.println(" - 주소 : " + address);
		}
		else {
			System.out.println("회원이 없습니다.");
		}
	}
	
	
	//user Update
	public void userUpdate() {
		int index = findIndex();
		if(index != -1) {
			// 이름 있는 경우
			MemberDTO m = new MemberDTO();
			m.setId(mList[index].getId());
			System.out.println("< "+ mList[index].getName() + " 회원 정보수정 >");
			System.out.println("회원번호 : " + m.getId() );
			System.out.print("이름 : ");
			m.setName(sc.next());
			System.out.print("나이 : ");
			m.setAge(sc.nextInt());
			System.out.print("주소 : ");
			m.setAddress(sc.next());
			
			update(index, m);
			System.out.println("수정되었습니다.");
		}else {
			// 이름이 없는 경우
			System.out.println("해당 회원이 없습니다.");
		}
	}
	
	
	// File method
	
	public void dataSave() throws Exception{
		file.create();
		String str = " 번호\t 이름\t 나이\t 주소\n"
				+ "-------------------------------------\n";
		for (int i = 0; i < mList.length; i++) {
			try {
				if(mList[i].getName()!= null) {
					str += mList[i].toString()+"\n";
				}
				file.write(str);
			} catch (Exception e) {
				System.out.println(str);
				System.out.println("에러");
				continue;
			}
		}
		System.out.println("데이터를 저장했습니다.");

		
	}
	
	public void dataLoad() {
		try {
			file.read();
		} catch (Exception e) {
			System.out.println("읽을 파일이 없습니다.");
		}
	}
	
	
}
​
package day9.example01;

public class MemberDTO {

	/*	
	 	DTO : Data Transfer Objecct
	 	
	        일반적인 DTO는 로직을 갖고 있지 않는 순수한 데이터 객체이며 
	        속성과 그 속성에 접근하기 위한 getter, setter 메소드만 가진 클래스를 말합니다
	 
	 */
	
	
	
	//번호 이름 나이 주소
	private int id;
	private String name;
	private int age;
	private String address;
	
	// 기본생성자
	public MemberDTO() {
		
	}
	
	

	//getter, setter 
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	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 getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	
	// toString
	public String toString () {
		return " "+ id + "\t" + name + "\t" + age+"\t"+ address;
	}
	
	
}