미니 프로젝트
- DB 를 연동하지 않아서 코드를 실행할때마다 데이터가 초기화 되는 문제를 파일로 객체 정보를 저장하여 해결해보자...!!!
회원 정보를 파일로 저장하고 등록, 확인, 탈퇴할 수 있는 프로그램
package file.main;
import java.util.Scanner;
import file.service.ServiceMember;
import file.service.ServiceMemberImpl;
public class MainClass {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num;
ServiceMember member = new ServiceMemberImpl();
while(true) {
System.out.println("1. 회원가입");
System.out.println("2. 검 색");
System.out.println("3. 회원 목록 보기");
System.out.println("4. 탈 퇴");
System.out.println("5. 종 료");
System.out.print(">>>> : ");
num = sc.nextInt();
switch(num) {
case 1 :
member.register();
break;
case 2 :
member.search();
break;
case 3 :
member.list();
break;
case 4 :
member.delete();
break;
case 5 :
System.out.println("프로그램을 종료합니다.");
break;
default :
System.out.println("잘못 입력하셨습니다.");
break;
}
}
}
}
MainClass
package file.service;
public interface ServiceMember {
public void register();
public void list();
public void delete();
public void search();
}
ServiceMember
package file.service;
import java.util.Scanner;
import file.dao.MemberDAO;
import file.dto.MemberDTO;
public class ServiceMemberImpl implements ServiceMember {
private MemberDAO dao;
public ServiceMemberImpl() {
dao = new MemberDAO();
}
@Override
public void register() {
MemberDTO dto = new MemberDTO();
Scanner sc = new Scanner(System.in);
System.out.print("아이디 입력 : ");
dto.setId(sc.next());
System.out.print("이름 입력 : ");
dto.setName(sc.next());
dao.register(dto);
}
public void list() {
String[] listFile = dao.getList();
if(listFile.length == 0) {
System.out.println("저장된 목록이 없습니다!!!");
}else {
for(int i=0; i<listFile.length; i++) {
System.out.println(i + ". " + listFile[i]);
}
}
}
public void delete() {
Scanner sc = new Scanner(System.in);
String id;
System.out.print("삭제할 id 입력 : ");
id = sc.next();
dao.delete(id);
}
public void search() {
Scanner sc = new Scanner(System.in);
String id;
System.out.print("검색할 id 입력 : ");
id = sc.next();
MemberDTO d = dao.search(id);
if(d != null) {
System.out.println("id : " + d.getId());
System.out.println("name : " + d.getName());
}
}
}
ServiceMemberImpl
package file.dto;
import java.io.Serializable;
import lombok.Data;
@Data
public class MemberDTO implements Serializable{
// serializble 상속 받아 직렬화
private String id, name;
}
MemberDTO
package file.dao;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import file.dto.MemberDTO;
public class MemberDAO {
// 객체가 저장될 path 설정
private String path = "E:\\0.핀테크\\members\\";
// 파일 입출력에 관련된 객체들을 선언
private FileInputStream fis;
private FileOutputStream fos;
private BufferedInputStream bis;
private BufferedOutputStream bos;
private ObjectInputStream ois;
private ObjectOutputStream oos;
// 객체를 외부로 전송....
public void register(MemberDTO dto) {
// String p = path + dto.getId() + ".txt";
// 파일 클래스의 기능들을 사용하기 위해 String 자료형이 아닌
// File 클래스를 사용
File p = new File(path + dto.getId() + ".txt");
// 동일한 이름의 회원 파일이 있는지 확인
if(p.exists()) {
System.out.println("이미 존재하는 회원입니다.");
}else {
try {
fos = new FileOutputStream(p);
bos = new BufferedOutputStream(fos);
oos = new ObjectOutputStream(bos);
oos.writeObject(dto);
oos.close(); bos.close(); fos.close();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("회원가입 성공!!!!!");
}
}
public String[] getList() {
File file = new File(path);
return file.list();
}
public void delete(String id) {
File file = new File(path + id + ".txt");
if(file.exists()) {
file.delete();
System.out.println(id + " 가 삭제되었습니다.");
}else {
System.out.println("존재하지 않는 회원입니다.");
}
}
public MemberDTO search(String id) {
File file = new File(path + id + ".txt");
MemberDTO dto = null;
if(file.exists()) {
try {
fis = new FileInputStream(file);
bis = new BufferedInputStream(fis);
ois = new ObjectInputStream(bis);
dto = (MemberDTO)ois.readObject();
ois.close();
bis.close();
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
}else {
System.out.println("찾는 회원이 없습니다.");
}
return dto;
}
}
MemberDAO
728x90
'국비지원_핀테크' 카테고리의 다른 글
17일차_ [DB] Oracle DB 설치, sqldeveloper 설치 및 DB 생성, 기본 문법 (1) | 2024.02.27 |
---|---|
16일차_ [java] Socket 과 Thread 를 활용한 실시간 채팅 프로그램 (0) | 2024.02.26 |
15일차_ [java] 직렬화 ( Serializable ) (0) | 2024.02.23 |
15일차_ [DB] DB 다운로드 (0) | 2024.02.23 |
15일차_ [java] 파일 입, 출력 ( File I/O ) (0) | 2024.02.23 |