상세 컨텐츠

본문 제목

전화번호부 프로그램(C언어)

프로그래밍/C언어

by RosetteNebula 2021. 1. 12. 20:34

본문

 

- 조건 -

 

 

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct PhoneBook
{
    char name[10];  //이름
    int age;        //나이
    char p_num[15]; //전화번호
    char add[25];   //주소
    int authority;  //권한
} PhoneBook;

typedef struct Member
{
    char id[10];    //ID
    char pw[10];    //PW
    int authority;  //권한
} Member;

Member mem[3] = {{"ma", "nager", 1}, {"as", "sistance", 2}, {"ge", "neral", 3}};
PhoneBook pb[10];
char id[10];
char pw[10];
int i;
int authority, c_menu, m_count = 0;

void Run()
{
    system("mode con cols=100 lines=24");
    Login();
    Menu();
}

void Login()
{
    system("cls");
    printf(" -------------\n");
    printf("|    LOGIN    |\n");
    printf(" -------------\n");

    printf("ID : ");
    scanf(" %s", &id);  //ID입력
    printf("PW : ");
    scanf("%s", &pw);   //PW입력

    //ID, PW 확인
    for(i=0; i<sizeof(mem)/sizeof(Member); i++)
    {
        if(strcmp(id, mem[i].id)==0 && strcmp(pw, mem[i].pw)==0)
        {
            authority = mem[i].authority;   //권한 부여
            break;
        }//if(strcmp(id, mem[i].id)==0 && strcmp(pw, mem[i].pw)==0)
        else if(i == sizeof(mem)/sizeof(Member)-1)
        {
            printf("ID 또는 PW가 잘못되었습니다.\n\n");
            system("pause");    //아무키 입력 받기
            Run();
        }//else if(i == sizeof(mem)/sizeof(Member)-1)
    }//for(i=0; i<sizeof(mem)/sizeof(Member); i++)
}

void Menu()
{
    system("cls");
    printf("\n ------------------\n");
    printf("|1. 전화번호부 입력|\n");
    printf("|2. 전화번호부 출력|\n");
    printf("|3. 전화번호부 수정|\n");
    printf("|4. 전화번호부 검색|\n");
    printf("|5. 전화번호부 삭제|\n");
    printf("|6.   메인화면     |\n");
    printf("|7.     종료       |\n");
    printf(" ------------------\n");

    printf("입력 : ");
    scanf("%d", &c_menu);   //메뉴 입력
    printf("\n");

    if(c_menu == 1)
    {
        //남은 자리 확인
        if(m_count < 10)
        {
            Input();
        }//if(m_count < 10)
        else
        {
            printf("더 이상 입력할 수 없습니다.\n");
            system("pause");
        }
    }//if(c_menu == 1)
    else if(c_menu == 2)
    {
        Output();
    }//else if(c_menu == 2)
    else if(c_menu == 3)
    {
        Change();
    }//else if(c_menu == 3)
    else if(c_menu == 4)
    {
        Search();
    }//else if(c_menu == 4)
    else if(c_menu == 5)
    {
        Delete();
    }//else if(c_menu == 5)
    else if(c_menu == 6)
    {
        Back();
    }//else if(c_menu == 6)
    else if(c_menu == 7)
    {
        End();
    }//else if(c_menu == 7)
    else
    {
        printf("잘못 입력하셨습니다.\n");
    }
    Menu();
}

void Input()
{
    system("cls");
    char pnum[10];              //입력받을 번호
    char def[5] = {"010-"};     //010- 기본 입력
    char c;                     //\n 처리

    for(;;)
    {
        printf("이름(필수) : ");
        scanf("%s", &pb[m_count].name); //이름 입력

        //한글 기준 2자리 이상 입력
        if(strlen(pb[m_count].name)<3)
        {
            printf("이름은 최소 2자 이상으로 입력해야 합니다.\n");
        }//if(strlen(pb[m_count].name)<3)
        else
        {
            break;
        }
    }//for(;;)

    printf("나이(필수) : ");
    scanf("%d", &pb[m_count].age);     //나이 입력

    printf("전화번호(필수) : 010-");  //010- 제외하고 입력
    scanf("%s", &pnum);               //전화번호 입력
    strcat(def, pnum);                //입력받은 번호를 010- 뒤에 붙이기
    strcpy(pb[m_count].p_num, def);

    scanf("%c", &c);                                            //\n 처리
    printf("주소(동까지만) : ");
    fgets( pb[m_count].add, sizeof(pb[m_count].add), stdin);   //주소 선택사항으로 입력
    pb[m_count].add[strlen(pb[m_count].add)-1] = '\0';          //마짐가에 \0입력

    pb[m_count].authority = authority;  //확인용 권한 입력
    m_count++;  //저장된 전화번호부 수
}

void Output()
{
    system("cls");
    if(m_count>0)
    {
        printf(" ----------------------------------------전화번호부--------------------------------------\n");
        for(i=0; i<m_count; i++)
        {
            printf("|이름 : %-8s| 나이 : %2d세| 전화번호 : %-13s| 주소 : %-25s|\n", pb[i].name, pb[i].age, pb[i].p_num, pb[i].add);
            printf(" ----------------------------------------------------------------------------------------\n");
        }//for(i=0; i<m_count; i++)
    }//if(m_count>0)
    else
    {
        printf("전화번호부가 비었습니다.\n");
    }
    system("pause");
}

void Change()
{
    system("cls");
    char s_name[10];            //찾을 이름
    char c_pnum[10];            //변경할 전화번호
    char def[5] = {"010-"};     //010- 사전 입력
    char c;                     //\n 처리
    int s_count = 0;

    if(m_count>0)
    {

        printf("수정할 이름을 입력 : ");
        scanf("%s", &s_name);               //수정할 이름

        for(i=0; i<m_count; i++)
        {
            if(strcmp(pb[i].name, s_name)==0)
            {
                s_count++;

                if(authority == 1)  //권한 확인
                {
                    for(;;)
                    {
                        printf("이름 : ");
                        scanf("%s", &pb[i].name);
                        if(strlen(pb[i].name)<3)
                        {
                            printf("이름은 최소 2자 이상으로 입력해야 합니다.\n");
                            continue;
                        }//if(strlen(pb[i].name)<3)

                        printf("나이 : ");
                        scanf("%d", &pb[i].age);

                        printf("전화번호 : 010-");
                        scanf("%s", &c_pnum);
                        strcat(def, c_pnum);
                        strcpy(pb[i].p_num, def);

                        scanf("%c", &c);
                        printf("주소(동까지만) : ");
                        fgets( pb[i].add, sizeof(pb[i].add), stdin);
                        pb[i].add[strlen(pb[i].add)-1] = '\0';

                        pb[i].authority = 1;

                        break;
                    }//for(;;)
                    break;
                }//if(authority == 1)
                else if(authority == 2)
                {
                    if(pb[i].authority != 1)    //상위 권한 수정 불가
                    {
                        for(;;)
                        {
                            printf("이름 : ");
                            scanf("%s", &pb[i].name);

                            if(strlen(pb[i].name)<3)
                            {
                                printf("이름은 최소 2자 이상으로 입력해야 합니다.\n");
                                continue;
                            }//if(strlen(pb[i].name)<3)

                            printf("나이 : ");
                            scanf("%d", &pb[i].age);

                            printf("전화번호 : 010-");
                            scanf("%s", &c_pnum);
                            strcat(def, c_pnum);
                            strcpy(pb[i].p_num, def);

                            scanf("%c", &c);
                            printf("주소(동까지만) : ");
                            fgets( pb[i].add, sizeof(pb[i].add), stdin);
                            pb[i].add[strlen(pb[i].add)-1] = '\0';

                            pb[i].authority = 2;

                            break;
                        }//for(;;)
                        break;
                    }//if(pb[i].authority != 1)
                    else if(pb[i].authority == 1)
                    {
                        printf("권한이 없습니다.\n");
                        system("pause");
                        break;
                    }//else if(pb[i].authority == 1)

                }//else if(authority == 2)
                else if(authority == 3)
                {
                    if(pb[i].authority == 3)
                    {
                        printf("수정할 전화번호를 입력하세요 : 010-");
                        scanf("%s", &c_pnum);
                        strcat(def, c_pnum);
                        strcpy(pb[i].p_num, def);
                        break;
                    }//if(pb[i].authority == 3)
                    else if(pb[i].authority != 3)
                    {
                        printf("권한이 없습니다.\n");
                        system("pause");
                        break;
                    }//else if(pb[i].authority != 3)
                }//else if(authority == 3)
            }//if(strcmp(pb[i].name, s_name)==0)
        }//for(i=0; i<m_count; i++)
        if(s_count == 0)
        {
            printf("찾는 이름이 없습니다.\n");
            system("pause");
        }//if(s_count == 0)
    }//if(m_count>0)
    else
    {
        printf("전화번호부가 비었습니다.\n");
        system("pause");
    }
}

void Search()
{
    system("cls");
    char s_name[10];
    int s_count = 0;

    if(m_count>0)
    {
        printf("검색할 이름을 입력하세요 : ");
        scanf("%s", &s_name);

        for(i=0; i<m_count; i++)
        {
            if(strcmp(s_name, pb[i].name)==0)
            {
                s_count++;
                printf(" ----------------------------------------------------------------------------------------\n");
                printf("|이름 : %-8s| 나이 : %2d세| 전화번호 : %-13s| 주소 : %-25s|\n", pb[i].name, pb[i].age, pb[i].p_num, pb[i].add);
                printf(" ----------------------------------------------------------------------------------------\n");
            }//if(strcmp(s_name, pb[i].name)==0)
        }//for(i=0; i<m_count; i++)
        if(s_count==0)
        {
            printf("찾는 이름이 없습니다.\n");
        }//if(s_count==0)

    }//if(m_count>0)
    else
    {
        printf("전화번호부가 비었습니다.\n");
    }
    system("pause");
}

void Delete()
{
    char s_name[10];    //삭제할 이름
    int dump, j, s_count = 0;
    char c_del[5];

    system("cls");
    if(m_count>0)
    {
        if(authority == 1)  //관리자만 삭제 가능
        {
            printf("삭제할 이름을 입력하세요 : ");
            scanf("%s", &s_name);

            for(i=0; i<m_count; i++)
            {
                if(strcmp(s_name, pb[i].name)==0)
                {
                    s_count++;

                    printf("삭제 하시겠습니까?(Y/N)");
                    scanf(" %s", &c_del);
                    if(stricmp(c_del, "Y") == 0)
                    //if(stricmp(c_del, "Y") == 0)
                    {
                        printf("test1\n");
                        for(j=i; j<m_count; j++)
                        {
                            dump = j+1;
                            strcpy(pb[j].name, pb[dump].name);
                            pb[j].age = pb[dump].age;
                            strcpy(pb[j].p_num, pb[dump].p_num);
                            strcpy(pb[j].add, pb[dump].add);
                            pb[j].authority = pb[dump].authority;
                        }//for(j=i; j<m_count; j++)
                        m_count--;
                        break;
                    }//if(c_del == 'Y' || c_del == 'y')
                    else if(stricmp(c_del, "N") == 0)
                    {
                        Menu();
                    }//else if(stricmp(c_del, "N") == 0)
                    else{
                        printf("잘못 입력하셨습니다.\n");
                        system("pause");
                    }
                }//if(strcmp(s_name, pb[i].name)==0)
            }//for(i=0; i<m_count; i++)
            if(s_count == 0)
            {
                printf("찾는 이름이 없습니다.\n");
                system("pause");
            }//if(s_count == 0)
        }//if(authority == 1)
        else if(authority != 1)
        {
            printf("권한이 없습니다.\n");
            system("pause");
        }//else if(authority != 1)
    }//if(m_count>0)
    else
    {
        printf("전화번호부가 비었습니다.\n");
        system("pause");
    }
}

void Back()
{
    system("cls");
    char c_back[5];

    printf("로그인 창으로 돌아가시겠습니까?(Y/N)");
    scanf(" %s", &c_back);

    if(stricmp(c_back, "Y") == 0)
    {
        Run();
    }//if(stricmp(c_back, "Y") == 0)
    else if(stricmp(c_back, "N") == 0)
    {
        Menu();
    }//else if(stricmp(c_back, "N") == 0)
    else
    {
        printf("\n잘못 입력하셨습니다.\n");
        system("pause");
    }
}

void End()
{
    system("cls");
    char c_end[5];

    printf("종료 하시겠습니까?(Y/N)");
    scanf( " %s", &c_end);

    if(stricmp(c_end, "Y") == 0)
    {
        exit(1);
    }//if(stricmp(c_end, "Y") == 0)
    else if(stricmp(c_end, "N") == 0)
    {
        Menu();
    }//else if(stricmp(c_end, "N") == 0)
    else
    {
        printf("\n잘못 입력하셨습니다.\n");
        system("pause");
    }
}

int main()
{
    Run();
    return 0;
}

 

 

'프로그래밍 > C언어' 카테고리의 다른 글

직원 관리 프로그램(C언어)  (0) 2021.01.12
영화 예매 프로그래밍(C언어)  (2) 2021.01.12
출입명부 프로그램(C언어)  (0) 2021.01.12

관련글 더보기