[JAVA] 파일 입, 출력을 이용한 회원 관리 프로그램
1. 회원을 생성할때 회원의 정보(아이디, 비밀번호, 닉네임)를 객체화하여 파일 출력 스트림을 사용해 파일로 저장한다.
2. 회원 생성 / 로그인 / 비밀번호 초기화 / 회원 삭제 기능을 구현한다.
3. 아이디에 공백이 존재할 수 없게 구현한다.
4. 메인 클래스 / 서비스 구현 클래스 / DTO 클래스 / DAO 클래스 를 각각 구현하여 클래스별로 기능을 나누어 구현한다.
package loginMain;
import loginDTO.LoginDTO;
import loginService.LoginServiceImpl;
public class Main {
public static void main(String[] args) {
LoginServiceImpl service = new LoginServiceImpl();
while(true){
int choice = service.MainDisplay();
if(choice == 5){
System.out.println("프로그램을 종료합니다.");
break;
}
switch(choice) {
case 1:
service.CreateUser();
break;
case 2:
service.logIn();
break;
case 3:
service.reset();
break;
case 4:
service.remove();
break;
default:
System.out.println("잘못 입력하셨습니다.");
break;
}
}
}
}
Main 클래스
package loginService;
import loginDTO.LoginDTO;
public interface LoginService {
public int MainDisplay();
public void CreateUser();
}
LoginService 인터페이스
package loginService;
import loginDAO.LoginDAO;
import loginDTO.LoginDTO;
import java.io.File;
import java.util.Objects;
import java.util.Scanner;
public class LoginServiceImpl implements LoginService{
static Scanner sc;
@Override
public int MainDisplay() {
sc = new Scanner(System.in);
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("=================");
System.out.print(">>> : ");
int choice = sc.nextInt();
return choice;
}
@Override
public void CreateUser() {
sc = new Scanner(System.in);
LoginDAO DAO = new LoginDAO();
boolean bool = false;
System.out.print("아이디를 입력하세요 : ");
String id = sc.nextLine();
if(id.contains(" ")){
System.out.println("아이디는 공백을 포함할 수 없습니다!!!");
return;
}
if(DAO.duplicationCheck(id)){
System.out.print("이름을 입력하세요 : ");
String name = sc.next();
System.out.print("비밀번호를 입력하세요 : ");
String pwd = sc.next();
LoginDTO DTO = new LoginDTO(id, name, pwd);
bool = DAO.createId(DTO);
if(bool){
System.out.println(name + " 님 계정생성 완료!!!");
}else {
System.out.println("계정 생성 실패!!!");
}
}else {
System.out.println("이미 존재하는 아이디입니다!!!");
}
}
public void logIn(){
sc = new Scanner(System.in);
LoginDAO DAO = new LoginDAO();
String id, pwd;
System.out.print("아이디를 입력하세요 : ");
id = sc.nextLine();
if(DAO.duplicationCheck(id)){
System.out.println("존재하지 않는 아이디 입니다.");
}else{
System.out.print("비밀번호를 입력하세요 : ");
pwd = sc.next();
String result = DAO.logIn(id, pwd);
if(result != null) System.out.println("\"" + result + "\" 님 로그인 완료!!!");
else System.out.println("비밀번호를 확인해주세요.");
}
}
public void reset(){
sc = new Scanner(System.in);
LoginDAO dao = new LoginDAO();
String id, name, pwd;
System.out.print("비밀번호를 초기화할 아이디를 입력하세요 : ");
id = sc.next();
if(dao.duplicationCheck(id)) {
System.out.println("해당 아이디는 존재하지 않습니다.");
return;
}
System.out.print("닉네임을 입력하세요 : ");
name = sc.next();
String result = dao.resetCheck(id, name);
if(result==null){
System.out.println("닉네임을 다시 확인하세요.");
}else {
System.out.println("비밀번호가 {" + result + "} 로 초기화되었습니다.");
}
}
public void remove() {
sc = new Scanner(System.in);
LoginDAO DAO = new LoginDAO();
String id, pwd;
System.out.print("아이디를 입력하세요 : ");
id = sc.nextLine();
if(DAO.duplicationCheck(id)) {
System.out.println("존재하지 않는 아이디 입니다.");
return;
}
System.out.print("비밀번호를 입력하세요 : ");
pwd = sc.next();
String removeCheck = DAO.logIn(id, pwd);
if(removeCheck==null){
System.out.println("비밀번호가 일치하지 않습니다!!");
return;
}
boolean result = DAO.removeId(id);
if(!result){
System.out.println("삭제 실패!!!");
}else {
System.out.println("회원 삭제 성공!!!");
}
}
}
LoginServiceImpl 클래스
package loginDTO;
import java.io.Serializable;
public class LoginDTO implements Serializable {
private String id, name, pwd;
public LoginDTO() {
}
public LoginDTO(String id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
LoginDTO 클래스
package loginDAO;
import loginDTO.LoginDTO;
import java.io.*;
import java.util.Random;
public class LoginDAO {
public boolean duplicationCheck(String id) {
// 아이디가 존재하면 false, 존재하지 않으면 true
File path;
path = new File("/Users/jyh/Desktop/be/java/java-start/회원정보/" + id);
return !path.exists();
}
public boolean createId(LoginDTO DTO) {
File path = new File("/Users/jyh/Desktop/be/java/java-start/회원정보/" + DTO.getId());
try {
FileOutputStream fos = new FileOutputStream(path);
BufferedOutputStream bos = new BufferedOutputStream(fos);
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(DTO);
oos.close(); bos.close(); fos.close();
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
public String logIn(String id, String pwd){
File path;
path = new File("/Users/jyh/Desktop/be/java/java-start/회원정보/" + id);
String name = null;
try {
FileInputStream fis = new FileInputStream(path);
ObjectInputStream ois = new ObjectInputStream(fis);
LoginDTO dto = (LoginDTO) ois.readObject();
if(pwd.equals(dto.getPwd())){
name = dto.getName();
}
} catch (Exception e) {
e.printStackTrace();
}
return name;
}
public String resetCheck(String id, String name) {
File path = new File("/Users/jyh/Desktop/be/java/java-start/회원정보/" + id);
Random random = new Random();
String pwd = null;
try {
FileInputStream fis = new FileInputStream(path);
BufferedInputStream bis = new BufferedInputStream(fis);
ObjectInputStream ois = new ObjectInputStream(bis);
LoginDTO dto = (LoginDTO) ois.readObject();
if(name.equals(dto.getName())){
pwd = Integer.toString(random.nextInt(100000));
dto.setPwd(pwd);
FileOutputStream fos = new FileOutputStream(path);
BufferedOutputStream bos = new BufferedOutputStream(fos);
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(dto);
oos.close(); bos.close(); fos.close();
}
ois.close(); bis.close(); fis.close();
} catch (Exception e) {
e.printStackTrace();
}
return pwd;
}
public boolean removeId(String id) {
File path = new File("/Users/jyh/Desktop/be/java/java-start/회원정보/" + id);
boolean result = path.delete();
return result;
}
}
LoginDAO 클래스
- 메모 -
1. 작성한 코드 중 중복하여 작성한 코드가 있는가 확인
2. 예외 처리를 구조화하여 발생할 수 있는 예외를 모두 생각해보기
3. 맥북에 DB를 설치하여 파일 입, 출력이 아닌 실제 데이터 베이스에 접근하여 쿼리문으로 데이터를 처리해보기
코드 동작
728x90
'프로젝트' 카테고리의 다른 글
Oracle Cloud 속도 이슈 ( 해결 완료 ) (0) | 2024.04.16 |
---|---|
fetch() 를 사용했는데 응답 값을 받지 못한 이슈 ( 해결 완료 ) (1) | 2024.04.12 |
Node.js 로 Oracle Cloud DB 접속하여 쿼리문 실행하기 (0) | 2024.04.05 |
Oracle Cloud DB 접속 방법 (0) | 2024.04.05 |
[JAVA] 숫자 야구 (0) | 2024.02.19 |