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 |