본문 바로가기

S-DEV/C언어 마스터....

중첩 구조체를 이용한 로그인 프로그램

728x90

• 중첩 구조체를 이용하여 로그인 프로그램 코드 작성

10-02. 중첩 구조체 - C 언어 (wikidocs.net) 참고하였다.

 

작성한 코드 분석

 

• 메인 함수

int main() {
    int num = 0;
    //메인 화면 구성 
    printf("1. 로그인\n");
    printf("2. 회원가입\n");
    printf("3. 종료\n");
    printf("번호 선택: ");
    scanf("%d", &num);

//스위치문을 사용해 3가지 기능 실행
    switch (num)
    {
    case 1:
        login();
        break;

    case 2:
        join();
        break;

    default:
        printf("로그인 프로그램 종료\n");
        break;
    }
}

 

• 로그인 기능 

int login() {
    char username[21];
    char password[21];

    printf("ID 입력: ");
    scanf("%s", username);
    printf("PW 입력: ");
    scanf("%s", password);

    // 사용자 인증 체크
    for (int i = 0; i < sizeof(users) / sizeof(users[0]); ++i) {
        if (strcmp(users[i].username, username) == 0 && strcmp(users[i].password, password) == 0) {
            printf("로그인 성공!\n", username);
        }
    }

    printf("로그인 실패.\n");
}

 

• User 중첩 구조체 

struct User {
    char username[21];
    char password[21];
};

// User 구조체에 있는 배열을 사용해 users 정보를 저장
struct User users[2] = {
    { "hcm1", "Hcm12!" },
    { "chulmin", "Hcm12!" }
};

중첩 구조체를 사용를 사용해 아이디와 패스워드를 저장하였다. (패스워드는 특수문자,숫자,대/소문자가 포함되어있다)

회원 가입을 해서 User users 에 저장을 시킬려고 했으나, 오류 및 더 공부가 필요한거 같다.

그렇기에 패스워드 검증은 따로 join 함수를 만들어 사용하였다.

 

 

•  회원 가입

int join() {
    struct User user;
    printf("로그인 가입\n");

    printf("ID 입력: ");
    scanf("%s", user.username);
    printf("PW 입력: ");
    scanf("%s", user.password);

    int len = strlen(user.password);
    int hasDigit = 0;
    int hasUpper = 0;
    int hasLower = 0;
    int hasSpecial = 0;

    for (int i = 0; i < len; ++i) {
        if (isdigit(user.password[i])) {
            hasDigit = 1;
        }
        else if (isupper(user.password[i])) {
            hasUpper = 1;
        }
        else if (islower(user.password[i])) {
            hasLower = 1;
        }
        else if (ispunct(user.password[i])) {
            hasSpecial = 1;
        }

        if (i >= 2) {
            if (isdigit(user.password[i]) && isdigit(user.password[i - 1]) && isdigit(user.password[i - 2])) {
                printf("연속된 숫자는 사용할 수 없습니다.\n");
                return 0;
            }
        }
    }

    if (!(hasDigit && hasUpper && hasLower && hasSpecial) || len > 20 || len < 8) {
        printf("비밀번호는 8자 이상 20자 이하이며, 숫자, 대/소문자, 특수문자를 각각 1개 이상 포함해야 합니다.\n");
        return 0;
    }

    printf("가입이 완료\n");
    return 1;
}

'S-DEV > C언어 마스터....' 카테고리의 다른 글

로그파일로 데이터베이스 생성  (0) 2023.07.27
Socket  (0) 2023.07.27
정규 표현식 구현 코드  (0) 2023.07.27
strcpy 구현  (0) 2023.07.19
int 배열과 char 배열의 차이점  (0) 2023.07.19