<주요기능 - 회원가입>
- 사용자로부터 이름, 아이디, 비밀번호를 입력받아 계정을 생성한다.
- 아이디는 중복 검사를 통해 기존에 존재하는 아이디와 중복되지 않음을 확인한다.
- 비밀번호는 대문자, 소문자, 숫자가 각각 최소 1개 이상 포함된 8자 이상의 문자열이어야
한다. - 유효한 아이디와 비밀번호를 입력하면 사용자 정보를 텍스트 파일에 저장한다.
<주요기능 - 로그인>
• 사용자로부터 아이디와 비밀번호를 입력받아 계정을 확인한다.
• 입력된 아이디와 비밀번호가 저장된 사용자 정보와 일치하면 로그인이 성공한다.
• 일치하지 않으면 로그인 실패 메시지를 출력한다.
<주요기능 - 종료>
• 프로그램을 종료한다.
<코드>
1. User클래스
package Test;
public class User {
private String name;
private String id;
private String password;
public User(String name, String id, String password) {
this.name = name;
this.id = id;
this.password = password;
}
public String getId() {
return id;
}
public String getPassword() {
return password;
}
}
2. Main클래스
package Test;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
private static final String FILE_NAME = "C:\\Java\\Assignment\\src\\Test\\users.txt";
private static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
while (true) {
System.out.println("[1] 로그인 [2] 회원가입 [3] 종료"); //화면 구성
int choice = sc.nextInt();
sc.nextLine();
switch (choice) {
case 1:
login();
break;
case 2:
register();
break;
case 3:
System.out.println("프로그램을 종료합니다.");
return;
default:
System.out.println("올바른 선택이 아닙니다.\n");
break;
}
}
}
//회원가입 기능
//사용자로부터 이름, 아이디, 비밀번호를 입력받음
private static void register() {
System.out.print("이름: ");
String name = sc.nextLine();
String id; //회원가입-아이디
while (true) {
System.out.print("아이디: ");
id = sc.nextLine();
if (availableId(id)) { //availableId: 아이디 중복 확인
System.out.println("아이디 사용 가능\n");
break;
} else {
System.out.println("중복된 아이디입니다. 다시 입력하세요.");
}
}
String password;
while (true) {
System.out.println("(비밀번호는 8자 이상이어야 하며, 대문자, 소문자, 숫자를 최소 1개 이상 포함해야 합니다.)");
System.out.print("비밀번호: ");
password = sc.nextLine();
if (!availablePassword(password)) { //availablePassword: 비밀번호의 유효성을 검사하고, 확인 입력을 통해 일치 여부를 확인
System.out.println("비밀번호 조건을 확인하세요.\n");
continue;
}
System.out.print("비밀번호 확인: ");
String confirmPassword = sc.nextLine();
if (password.equals(confirmPassword)) {
break;
} else {
System.out.println("비밀번호를 다시 입력하세요\n");
}
}
save(name, id, password); //입력받은 사용자 정보를 save 메소드를 통해 파일에 저장
System.out.println(name + "님 가입을 축하합니다\n");
}
// 비밀번호 유효성 검사
//향상된 for문과 if문을 사용해서 비밀번호에 대문자, 소문자, 숫자가 모두 들어가는지 검사
private static boolean availablePassword(String password) {
if (password.length() < 8) {
return false;
}
boolean hasUpperCase = false; //대문자
boolean hasLowerCase = false; //소문자
boolean hasDigit = false; //숫자
for (char c : password.toCharArray()) {
if (Character.isUpperCase(c)) { //Character 클래스의 isUpperCase 메소드를 호출
hasUpperCase = true;
}
if (Character.isLowerCase(c)) {
hasLowerCase = true;
}
if (Character.isDigit(c)) {
hasDigit = true;
}
}
return hasUpperCase && hasLowerCase && hasDigit;
}
// 아이디 중복 확인
private static boolean availableId(String id) {
List<User> users = load(); //load 메소드를 통해 파일에서 사용자 정보를 읽어옴
for (User user : users) { //향상된 for문과 if문을 통해 리스트에 중복되는 아이디가 있는지 확인
if (user.getId().equals(id)) {
return false;
}
}
return true;
}
// 로그인 기능
private static void login() {
System.out.print("아이디: ");
String id = sc.nextLine();
System.out.print("비밀번호: ");
String password = sc.nextLine();
List<User> users = load();
boolean loginSuccess = false;
for (User user : users) {
if (user.getId().equals(id) && user.getPassword().equals(password)) { //현재 검사중인 user객체의 아이디와 비밀번호가 맞는 경우
System.out.println("로그인 성공\n");
loginSuccess = true;
break;
}
}
if (!loginSuccess) {
// 로그인 실패 시 메시지를 한 번만 출력
System.out.println("로그인 실패. 아이디나 비밀번호를 다시 입력하세요.\n");
}
}
// BufferedWriter와 FileWriter를 사용하여 파일쓰기
private static void save(String name, String id, String password) {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(FILE_NAME, true))) {
writer.write(name + "," + id + "," + password); // 사용자 정보를 쉼표로 구분하여 파일에 쓰기
writer.newLine();
} catch (IOException e) {
System.out.println("사용자 정보를 저장하는 동안 오류가 발생했습니다.");
}
}
// BufferedReader와 FileReader를 사용하여 파일읽기
private static List<User> load() { //users라는 이름의 List 객체를 선언하고, load 메서드를 호출
List<User> users = new ArrayList<>();
try (BufferedReader reader = new BufferedReader(new FileReader(FILE_NAME))) {
String line;
while ((line = reader.readLine()) != null) { // 파일에서 한 줄씩 읽기(null이 아닐 경우 반복문 계속 실행)
String[] parts = line.split(","); // 쉼표로 문자열 분리
if (parts.length == 3) { // 배열의 길이가 3인지 확인
users.add(new User(parts[0], parts[1], parts[2])); // User 객체를 생성하여 리스트에 추가
}
}
} catch (IOException e) {
System.out.println("사용자 정보를 불러오는 동안 오류가 발생했습니다.");
}
return users;
}
}
<실행결과>
1. 다른 숫자를 입력한 경우
2. 정상적으로 회원가입을 한 경우
3. 중복된 아이디인 경우, 비밀번호 조건이 틀린 경우
4. 첫번째 입력한 비밀번호가 두번째 입력한 비밀번호와 다를 경우
5. 로그인에 실패한 경우, 로그인에 성공한 경우
6. 프로그램을 종료한 경우
7. 정보가 저장되는 텍스트 파일
'Project' 카테고리의 다른 글
[개인 프로젝트/java] 시흥시 자영업자들을 위한 매출 분석 및 유동인구 조회 프로그램 (1) | 2025.01.28 |
---|