/********************************************************
 *                                                      *
 *   프로그램명 : Personal Phone Book Program Ver2.4    *
 *                                                      *
 *   작  성  자 : Romanric Programmer Teddy    *
 *                blog - t-space.tistory.com            *
 *                                                      *
 *   기      능 : 입력, 검색, 수정, 삭제가 가능하고     *
 *                파일로 저장이 되는 전화번호부         *
 *                                                      *
 *   최초작성일 : 2008년  5월  7일 Ver0.1               *
 *                - 메모리에 입력,검색,삭제 구현        *
 *                                                      *
 *   2차 수정일 : 2008년  5월 28일 Ver1.0               *
 *                - 링크드리스트 이용 입력, 출력 구현   *
 *                                                      *
 *   3차 수정일 : 2008년  5월 29일 Ver1.1               *
 *                - 입력 예외처리, 인트로, 종료 추가    *
 *                                                      *
 *   4차 수정일 : 2008년  6월  4일 Ver2.0               *
 *                - 파일 입출력 구현                    *
 *                                                      *
 *   5차 수정일 : 2008년  6월  7일 Ver2.1               *
 *                - 파일 입출력 보강                    *
 *                                                      *
 *   6차 수정일 : 2008년  6월  8일 Ver2.2               *
 *                - 이름, 전화번호로 검색 구현          *
 *                                                      *
 *   7차 수정일 : 2008년  6월 10일 Ver2.3                *
 *                  - 수정 구현                            *
 *                                                      *
 *   8차 수정일 : 2008년  6월 11일 Ver2.4                *
 *                  - 더블 링크드리스트, 삭제 구현        *
 *                                                      *
 ********************************************************/

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

#define NAME_LEN 15   /* 이름 저장 공간 */
#define PHONE_LEN 15  /* 번호 저장 공간 */
#define MAIL_LEN 30   /* 메일 저장 공간 */

/* 구조체 */
typedef struct LIST {
    char name[NAME_LEN+1];
    char phone[PHONE_LEN+1];
    char mail[MAIL_LEN+1];
    int group;
    struct LIST *pPrev;
    struct LIST *pNext;
} LIST;

void cleaning(float wait);                  /* 일정시간 대기후 화면 지우기    */
void Intro(void);                           /* 인트로 화면 출력                */
void PrintTitle(void);                      /* 제목 출력                    */
void MenuPrint(void);                       /* 메뉴 출력                    */
void ExitPrint(void);                       /* 종료 화면 출력                */
void AddList(LIST **dpHead, LIST **dpTail); /* 리스트 추가                    */
LIST * SearchList(LIST **dpHead);            /* 특정 리스트 검색                */
void ModifyDelete(LIST **dpHead);            /* 수정 / 삭제 함수                */
void SortList(LIST **dpHead);                /* 이름순으로 정렬                */
void PrintList(LIST **dpHead);              /* 리스트 출력                    */
void Outtro(void);                            /* 아웃트로 출력                */

int main(void)
{
    LIST *pHead = NULL; /* 머리부분            */
    LIST *pTail = NULL; /* 꼬리부분            */
    LIST *pNew = NULL;  /* 추가부분            */
    int choice;            /* 메뉴선택            */
    char yesno;            /* yes or no 선택    */
    FILE *fp;
    int res;

    Intro();
    cleaning(2.0);

    /* 파일 오픈 */
    fp = fopen("list.dat", "r");
    /* 파일이 없다면 새로운 파일을 생성 */
    if(fp == NULL) {
        while(fp == NULL) {
            PrintTitle();
            printf("  !!! warning : \"list.dat\"파일이 없습니다. !!!\n\n");
            printf("  새로 생성하시겠습니까(Y/N)? ");
            scanf("%c", &yesno);
            fflush(stdin);
            if(yesno == 'y' || yesno == 'Y') {
                fp = fopen("list.dat", "w+");
                if(fp == NULL) {
                    printf("\n\n  !!! errer : 파일 생성에 실패하여 프로그램을 실행 할 수 없습니다. !!!\n");
                    printf("  !!! errer : 프로그램을 종료합니다.                               !!!\n");
                    system("pause");
                    return 1;
                }
                printf("\n\n  ** 파일 생성이 완료되었습니다. **\n");
                cleaning(1.0);
            }
            else if(yesno == 'n' || yesno == 'N') {
                printf("\n\n  !!! errer : 파일을 생성하지 않아 프로그램을 실행 할 수 없습니다. !!!\n");
                printf("  !!! errer : 프로그램을 종료합니다.                               !!!\n");
                system("pause");
                return 1;
            }
            else {
                printf("\n\n  !!! errer : 잘 못 선택하셨습니다. !!!\n");
                cleaning(1.0);
            }
        }
    }
    /* 파일 내용 읽어들임 */
    while(1) {
        pNew = (LIST *) malloc(sizeof(LIST));
        res = fscanf(fp, "%s %s %s %d", pNew->name, pNew->phone, pNew->mail, &pNew->group);
        pNew->pNext = NULL;
        pNew->pPrev = pTail;
        if(res == EOF) break;
        if(pTail != NULL) {
            pTail->pNext = pNew;
            pTail = pNew;
        }
        else {
            pHead = pNew;
            pHead->pPrev = NULL;
            pTail = pHead;
        }
    }
    fclose(fp);

    while(1) {
        PrintTitle();
        MenuPrint();
        scanf("%d", &choice);
        fflush(stdin);
        if( choice < 1 || 5 < choice ) {
            printf("\n\n  !!! errer : 잘 못 선택하셨습니다. !!!\n");
            cleaning(1.0);
            continue;
        }
        cleaning(1.0);
        switch(choice) {
            case 1:
                AddList(&pHead, &pTail);
                cleaning(2.0);
                break;

            case 2:
                SearchList(&pHead);
                cleaning(2.0);
                break;

            case 3:
                ModifyDelete(&pHead);
                cleaning(2.0);
                break;

            case 4:
                PrintList(&pHead);
                system("pause");
                cleaning(2.0);
                break;

            case 5:
                while(1) {
                    ExitPrint();
                    scanf("%c", &yesno);
                    fflush(stdin);
                    if( yesno == 'y' || yesno == 'Y' ) {
                        /* 메모리 리스트를 파일에 저장 */
                        fp = fopen("list.dat", "w");
                        if(fp == NULL) {
                            printf("\n\n  !!! errer : 파일에 저장이 실패하였습니다. !!!\n");
                            system("pause");
                            return 1;
                        }
                        while(1) {
                            fprintf(fp, "%s %s %s %d\n", pHead->name, pHead->phone, pHead->mail, pHead->group);
                            pHead = pHead->pNext;
                            if(pHead == NULL) break;
                        }
                        fclose(fp);
                        Outtro();
                        exit(0);
                    }
                    else if( yesno == 'n' || yesno == 'N' ) {
                        printf("\n\n  메인으로 돌아갑니다.\n");
                        cleaning(1.0);
                        break;
                    }
                    else {
                        printf("\n\n  !!! errer : 잘 못 선택하셨습니다. !!!\n");
                        cleaning(1.0);
                        continue;
                    }
                }
        }
    }
}

void cleaning(float wait)
{
    clock_t m = ( (clock_t) wait * CLOCKS_PER_SEC );
    clock_t goal;
    goal = m + clock();
    while( goal > clock() );
    system("cls");
}

void Intro(void)
{
    printf("\n");
    printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \n");
    printf(" *                                                             * \n");
    printf(" *                                         * *       * *       * \n");
    printf(" *                                       *     *   *     *     * \n");
    printf(" *     Wellcome Personal Phone Book..                          * \n");
    printf(" *                                               o             * \n");
    printf(" *                                        *             *      * \n");
    printf(" *                                          *         *        * \n");
    printf(" *           ______i     _____                 * * *           * \n");
    printf(" *          | ==== |    |  B  |                                * \n");
    printf(" *          | Any  |    |  O  ^         Ver2.4 - 2008/06/11    * \n");
    printf(" *          | Call |    |  O  ^                                * \n");
    printf(" *          |______|    |__K__|     blog - tyspace.tistory.com * \n");
    printf(" *                                            by. Kim Tae-Yong * \n");
    printf(" *                                         (tykim85@gmail.com) * \n");
    printf(" *                                                             * \n");
    printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \n");
}

void PrintTitle(void)
{
    printf("\n");
    printf(" * * * * * * * * * * * * * * * * * * * * * * * * \n");
    printf(" *                                             * \n");
    printf(" *     Personal Phone Book Program Ver2.4      * \n");
    printf(" *                                             * \n");
    printf(" *                   by. 0405059 Kim Tae Yong  * \n");
    printf(" *                                             * \n");
    printf(" * * * * * * * * * * * * * * * * * * * * * * * * \n");
    printf("\n");
    printf("\n");
}

void MenuPrint(void)
{
    printf(" === 메     뉴 === \n");
    printf("\n");
    printf("  1. 입     력 \n");
    printf("  2. 검     색 \n");
    printf("  3. 수정/삭제 \n");
    printf("  4. 전체 보기 \n");
    printf("  5. 종     료 \n");
    printf("\n");
    printf(" 메뉴를 선택해주세요 (1-5) ? ");
}

void ExitPrint(void)
{
    PrintTitle();
    printf(" --- 종     료 --- \n");
    printf("\n");
    printf(" 정말 종료하시겠습니까 (Y/N) ? ");
}

void AddList(LIST **dpHead, LIST **dpTail)
{
    LIST *pNew = (LIST *) malloc (sizeof(LIST));
    int mode=1, modify=0, choice;    /* 어떤항목입력모드?, 수정상태인가?, 어느거수정?    */
    char yesno, temp;                /* 입력한 내용이 정확한가? , 그룹 입력 검사            */
    char strGroup[3][7] = {"기타", "가족", "친구"};

    while(mode != 0) {
        PrintTitle();
        switch(mode) {
            case 1:
                printf(" --- 입     력 ---\n");
                printf("\n");
                /* 이름 필수 입력 */
                while(1) {
                    printf("  이름을 입력하세요 : ");
                    gets(pNew->name);
                    fflush(stdin);
                    /* 입력받은 값이 없다면 에러를 출력하고 다시 입력받기 */
                    if( strlen(pNew->name) == 0 ) {
                        printf("\n\n  !!! errer : 비워 둘 수 없습니다. !!!\n");
                        cleaning(1.0);
                        continue;
                    }
                    else break;
                }
                if( modify == 0 ) mode = 2;
                else mode = 5;
                cleaning(1.0);
                break;

            case 2:
                printf(" --- 입     력 ---\n");
                printf("\n");
                /* 전화번호 필수 입력 */
                while(1) {
                    printf("  전화번호를 입력하세요 : ");
                    gets(pNew->phone);
                    fflush(stdin);
                    /* 입력받은 값이 없다면 에러를 출력하고 다시 입력받기 */
                    if( strlen(pNew->phone) == 0 ) {
                        printf("\n\n  !!! errer : 비워 둘 수 없습니다. !!!\n");
                        cleaning(1.0);
                        continue;
                    }
                    else break;
                }
                if( modify == 0 ) mode = 3;
                else mode = 5;
                cleaning(1.0);
                break;

            case 3:
                printf(" --- 입     력 ---\n");
                printf("\n");
                /* 주소 입력 */
                printf("  E-mail을 입력하세요 : ");
                gets(pNew->mail);
                fflush(stdin);
                /* 입력받은 값이 없다면 "None" 값 저장 */
                if( strlen(pNew->mail) == 0 ) strcpy(pNew->mail, "None");
                if( modify == 0 ) mode = 4;
                else mode = 5;
                cleaning(1.0);
                break;

            case 4:
                printf(" --- 입     력 ---\n");
                printf("\n");
                /* 그룹 입력 */
                printf("  그룹을 입력하세요 (1. 가족 | 2. 친구 | 0. 기타) : ");
                temp = getc(stdin);
                fflush(stdin);
                /* 입력받은 값이 없거나 0-2외의 수 입력시 default값 '0' 저장 */
                if( temp == '\n' || temp == ' ' || temp < '0' || temp > '9' ) temp = '0';
                pNew->group = atoi(&temp);
                mode = 5;
                cleaning(1.0);
                break;

            case 5:
                /* 입력한 내용 확인하고 저장할지 새로 입력할지 결정 */
                printf(" --- 확     인 ---\n");
                printf("\n");
                printf("  이    름 : %s\n", pNew->name);
                printf("  전화번호 : %s\n", pNew->phone);
                printf("  E - mail : %s\n", pNew->mail);
                printf("  그    룹 : %s\n", strGroup[pNew->group]);
                printf("\n");
                printf(" 위의 내용대로 저장 하시겠습니까 (Y/N) ? ");
                scanf("%c", &yesno);
                fflush(stdin);
                if( yesno == 'y' || yesno == 'Y' ) mode = 0;
                else if( yesno == 'n' || yesno == 'N' ) {
                    mode = 6;
                    cleaning(1.0);
                }
                else {
                    printf("\n\n  !!! errer : 잘 못 선택하셨습니다. !!!\n");
                    mode = 5;
                    cleaning(1.0);
                }
                break;
                
            case 6:
                modify = 1;
                /* 새로 입력한다면 어느걸 새로 입력할건지 */
                printf(" --- 수     정 ---\n");
                printf("\n");
                printf("  1. 이    름 수정\n");
                printf("  2. 전화번호 수정\n");
                printf("  3. E - mail 수정\n");
                printf("  4. 그    룹 수정\n");
                printf("  5. 저장안하고 메인으로\n");
                printf("\n");
                printf(" 어떤 작업을 하시겠습니까 ? ");
                scanf("%d", &choice);
                fflush(stdin);
                if( choice < 1 || 5 < choice ) {
                    printf("\n\n  !!! errer : 잘 못 선택하셨습니다. !!!\n");
                    mode = 6;
                    cleaning(1.0);
                }
                else if( choice == 5 ) {
                    printf("\n\n  저장안하고 메인으로 돌아갑니다.\n");
                    return;
                }
                else {
                    mode = choice;
                    cleaning(1.0);
                }
                break;
        }
    }
    pNew->pNext = NULL;
    pNew->pPrev = (*dpTail);
    if( (*dpTail) != NULL ) {
        (*dpTail)->pNext = pNew;
        (*dpTail) = pNew;
    }
    else {
        (*dpHead) = pNew;
        (*dpHead)->pPrev = NULL;
        (*dpTail) = (*dpHead);
    }
}

LIST * SearchList(LIST **dpHead)
{
    LIST *pList = (*dpHead);
    char strGroup[3][5] = {"기타", "가족", "친구"};
    char search[20];
    char yesno;
    int searchMode = 1;

    /* 이름으로, 전화번호로 검색할지 선택 */
    while(1) {
        PrintTitle();
        printf(" --- 검     색 ---\n");
        printf("\n");
        printf("  1. 이름으로   검색\n");
        printf("  2. 전화번호로 검색\n");
        printf("  3. 메인으로\n");
        printf("\n");
        printf("  선택해주세요 : ");
        scanf("%d", &searchMode);
        fflush(stdin);
        if( searchMode < 1 || 3 < searchMode ) {
            printf("\n\n  !!! errer : 잘 못 선택하셨습니다. !!!\n");
            cleaning(1.0);
            continue;
        }
        else if( searchMode == 3 ) {
            printf("\n\n  메인으로 돌아갑니다.\n");
            pList = NULL;
            return pList;
        }
        cleaning(1.0);
        break;
    }

    /* 검색할 문자열 입력 */
    while(1) {
        PrintTitle();
        printf(" --- 검     색 ---\n");
        printf("\n");
        if( searchMode == 1 ) printf("  검색할 이름을 입력하세요 : ");
        else printf("  검색할 전화번호를 입력하세요 : ");
        gets(search);
        fflush(stdin);
        cleaning(1.0);
        break;
    }

    /* 이름으로 검색할시 */
    if( searchMode == 1 ) {
        while(1) {
            PrintTitle();
            printf(" --- 검     색 ---\n");
            printf("\n");
            if( strstr(pList->name, search) != NULL ) {
                printf("  \"%s\"을(를) 찾았습니다.\n\n", pList->name);
                printf("  이    름 : %s\n", pList->name);
                printf("  전화번호 : %s\n", pList->phone);
                printf("  E - mail : %s\n", pList->mail);
                printf("  그    룹 : %s\n", strGroup[pList->group]);
                printf("\n\n  찾는 정보가 맞습니까 (Y/N) ? ");
                scanf("%c", &yesno);
                fflush(stdin);
                if( yesno == 'y' || yesno == 'Y' ) {
                    printf("\n");
                    system("pause");
                    return pList;
                }
                else if( yesno == 'n' || yesno == 'N' ) {
                    printf("\n\n  계속 검색합니다.\n");
                    pList = pList->pNext;
                    if( pList == NULL ) break;
                    cleaning(1.0);
                    continue;
                }
                else {
                    printf("\n\n  !!! errer : 잘 못 선택하셨습니다. !!!\n");
                    cleaning(1.0);
                    continue;
                }    
            }
            printf("\n  \"%s\"을(를) 찾습니다.\n\n", search);
            printf("\n\n  계속 검색합니다.\n");
            pList = pList->pNext;
            if( pList == NULL ) break;
            cleaning(1.0);
        }
    }
    /* 전화번호로 검색할시 */
    else {
        while(1) {
            PrintTitle();
            printf(" --- 검     색 ---\n");
            printf("\n");
            if( strstr(pList->phone, search) != NULL ) {
                printf("  \"%s\"을(를) 찾았습니다.\n\n", pList->phone);
                printf("  이    름 : %s\n", pList->name);
                printf("  전화번호 : %s\n", pList->phone);
                printf("  E - mail : %s\n", pList->mail);
                printf("  그    룹 : %s\n", strGroup[pList->group]);
                printf("\n\n  찾는 정보가 맞습니까 (Y/N) ? ");
                scanf("%c", &yesno);
                fflush(stdin);
                if( yesno == 'y' || yesno == 'Y' ) {
                    printf("\n");
                    system("pause");
                    return pList;
                }
                else if( yesno == 'n' || yesno == 'N' ) {
                    printf("\n\n  계속 검색합니다.\n");
                    pList = pList->pNext;
                    if( pList == NULL ) break;
                    cleaning(1.0);
                    continue;
                }
                else {
                    printf("\n\n  !!! errer : 잘 못 선택하셨습니다. !!!\n");
                    cleaning(1.0);
                    continue;
                }    
            }
            printf("\n  \"%s\"을(를) 찾습니다.\n\n", search);
            printf("\n\n  계속 검색합니다.\n");
            pList = pList->pNext;
            if( pList == NULL ) break;
            cleaning(1.0);
        }
    }
    
    /* 검색 내용이 없는 경우 */
    system("cls");
    PrintTitle();
    printf("\n\n  \"%s\"을(를) 찾지 못 하였습니다.\n\n", search);
    system("pause");
    return pList;
}

void ModifyDelete(LIST **dpHead)
{
    LIST *pPrevList;    /* 이전 리스트                    */
    LIST *pList;        /* 현재 리스트                    */
    LIST *pNextList;    /* 다음 리스트                    */
    int choice, mode;    /* 메뉴선택, 어느걸 수정할지    */
    char yesno, temp;    /* Y / N 선택, 그룹임시입력        */
    char strGroup[3][5] = {"기타", "가족", "친구"};

    while(1) {
        PrintTitle();
        printf(" --- 수정/삭제 ---\n");
        printf("\n");
        printf("  1. 수     정 \n");
        printf("  2. 삭     제 \n");
        printf("  3. 메인으로\n");
        printf("\n");
        printf("  선택해주세요 : ");
        scanf("%d", &choice);
        fflush(stdin);
        if( choice < 1 || 3 < choice ) {
            printf("\n\n  !!! errer : 잘 못 선택하셨습니다. !!!\n");
            cleaning(1.0);
            continue;
        }
        else if( choice == 3 ) {
            printf("\n\n  메인으로 돌아갑니다.\n");
            return;
        }
        else {
            cleaning(1.0);
            break;
        }
    }

    /* 수정/삭제 할 리스트 검색 */
    pList = SearchList( &(*dpHead) );
    if( pList == NULL ) return;
    cleaning(1.0);
    if( choice == 1 ) {
        while(1) {
            PrintTitle();
            printf(" --- 수     정 ---\n");
            printf("\n");
            printf("  1. 이    름 수정\n");
            printf("  2. 전화번호 수정\n");
            printf("  3. E - mail 수정\n");
            printf("  4. 그    룹 수정\n");
            printf("\n");
            printf(" 어떤 작업을 하시겠습니까 ? ");
            scanf("%d", &choice);
            fflush(stdin);
            if( choice < 1 || 4 < choice ) {
                printf("\n\n  !!! errer : 잘 못 선택하셨습니다. !!!\n");
                cleaning(1.0);
                continue;
            }
            else {
                mode = choice;
                cleaning(1.0);
            }
            switch(mode) {
                case 1:
                    PrintTitle();
                    printf(" --- 이름 수정 ---\n");
                    printf("\n");
                    /* 이름 필수 입력 */
                    while(1) {
                        printf("  이름을 입력하세요 : ");
                        gets(pList->name);
                        fflush(stdin);
                        /* 입력받은 값이 없다면 에러를 출력하고 다시 입력받기 */
                        if( strlen(pList->name) == 0 ) {
                            printf("\n\n  !!! errer : 비워 둘 수 없습니다. !!!\n");
                            cleaning(1.0);
                            continue;
                        }
                        else break;
                    }
                    printf("\n\n  이    름 : %s\n", pList->name);
                    printf("  전화번호 : %s\n", pList->phone);
                    printf("  E - mail : %s\n", pList->mail);
                    printf("  그    룹 : %s\n", strGroup[pList->group]);
                    printf("\n\n 수정을 완료하시겠습니까 (Y/N) ? : ");
                    scanf("%c", &yesno);
                    fflush(stdin);
                    if( yesno == 'y' || yesno == 'Y' ) {
                        printf("\n\n  수정이 완료되었습니다.\n");
                        return;
                    }
                    else if( yesno == 'n' || yesno == 'N' ) {
                        cleaning(1.0);
                        continue;
                    }
                    else {
                        printf("\n\n  !!! errer : 잘 못 선택하셨습니다. !!!\n");
                        cleaning(1.0);
                        continue;
                    }

                case 2:
                    PrintTitle();
                    printf(" --- 전화번호 수정 --- \n");
                    printf("\n");
                    /* 전화번호 필수 입력 */
                    while(1) {
                        printf("  전화번호를 입력하세요 : ");
                        gets(pList->phone);
                        fflush(stdin);
                        /* 입력받은 값이 없다면 에러를 출력하고 다시 입력받기 */
                        if( strlen(pList->phone) == 0 ) {
                            printf("\n\n  !!! errer : 비워 둘 수 없습니다. !!!\n");
                            cleaning(1.0);
                            continue;
                        }
                        else break;
                    }
                    printf("\n\n  이    름 : %s\n", pList->name);
                    printf("  전화번호 : %s\n", pList->phone);
                    printf("  E - mail : %s\n", pList->mail);
                    printf("  그    룹 : %s\n", strGroup[pList->group]);
                    printf("\n\n 수정을 완료하시겠습니까 (Y/N) ? : ");
                    scanf("%c", &yesno);
                    fflush(stdin);
                    if( yesno == 'y' || yesno == 'Y' ) {
                        printf("\n\n  수정이 완료되었습니다.\n");
                        return;
                    }
                    else if( yesno == 'n' || yesno == 'N' ) {
                        cleaning(1.0);
                        continue;
                    }
                    else {
                        printf("\n\n  !!! errer : 잘 못 선택하셨습니다. !!!\n");
                        cleaning(1.0);
                        continue;
                    }

                case 3:
                    PrintTitle();
                    printf(" --- E-mail 수정 --- \n");
                    printf("\n");
                    printf("  E-mail을 입력하세요 : ");
                    gets(pList->mail);
                    fflush(stdin);
                    /* 입력받은 값이 없다면 "None" 값 저장 */
                    if( strlen(pList->mail) == 0 ) strcpy(pList->mail, "None");
                    printf("\n\n  이    름 : %s\n", pList->name);
                    printf("  전화번호 : %s\n", pList->phone);
                    printf("  E - mail : %s\n", pList->mail);
                    printf("  그    룹 : %s\n", strGroup[pList->group]);
                    printf("\n\n 수정을 완료하시겠습니까 (Y/N) ? : ");
                    scanf("%c", &yesno);
                    fflush(stdin);
                    if( yesno == 'y' || yesno == 'Y' ) {
                        printf("\n\n  수정이 완료되었습니다.\n");
                        return;
                    }
                    else if( yesno == 'n' || yesno == 'N' ) {
                        cleaning(1.0);
                        continue;
                    }
                    else {
                        printf("\n\n  !!! errer : 잘 못 선택하셨습니다. !!!\n");
                        cleaning(1.0);
                        continue;
                    }

                case 4:
                    PrintTitle();
                    printf(" --- 그룹 수정 --- \n");
                    printf("\n");
                    /* 그룹 입력 */
                    printf("  그룹을 입력하세요 (1. 가족 | 2. 친구 | 0. 기타) : ");
                    temp = getc(stdin);
                    fflush(stdin);
                    /* 입력받은 값이 없거나 0-2외의 수 입력시 default값 '0' 저장 */
                    if( temp == '\n' || temp == ' ' || temp < '0' || temp > '9' ) temp = '0';
                    pList->group = atoi(&temp);
                    printf("\n\n  이    름 : %s\n", pList->name);
                    printf("  전화번호 : %s\n", pList->phone);
                    printf("  E - mail : %s\n", pList->mail);
                    printf("  그    룹 : %s\n", strGroup[pList->group]);
                    printf("\n\n 수정을 완료하시겠습니까 (Y/N) ? : ");
                    scanf("%c", &yesno);
                    fflush(stdin);
                    if( yesno == 'y' || yesno == 'Y' ) {
                        printf("\n\n  수정이 완료되었습니다.\n");
                        return;
                    }
                    else if( yesno == 'n' || yesno == 'N' ) {
                        cleaning(1.0);
                        continue;
                    }
                    else {
                        printf("\n\n  !!! errer : 잘 못 선택하셨습니다. !!!\n");
                        cleaning(1.0);
                        continue;
                    }
            }
        }
    }
    else {
        while(1) {
            PrintTitle();
            printf(" --- 삭     제 --- \n");
            printf("\n");
            printf("  이    름 : %s\n", pList->name);
            printf("  전화번호 : %s\n", pList->phone);
            printf("  E - mail : %s\n", pList->mail);
            printf("  그    룹 : %s\n", strGroup[pList->group]);
            printf("\n");
            printf("\n 위 내용을 삭제 하시겠습니까 (Y/N) ? ");
            scanf("%c", &yesno);
            fflush(stdin);
            if( yesno == 'y' || yesno == 'Y' ) {
                if( pList == (*dpHead) ) {
                    (*dpHead) = pList->pNext;
                    free(pList);
                    printf("\n\n  삭제가 완료되었습니다.\n");
                    return;
                }
                else if( pList->pNext == NULL ) {
                    pPrevList = pList->pPrev;
                    pPrevList->pNext = NULL;
                    free(pList);
                    printf("\n\n  삭제가 완료되었습니다.\n");
                    return;
                }
                pPrevList = pList->pPrev;
                pNextList = pList->pNext;
                pPrevList->pNext = pNextList;
                pNextList->pPrev = pPrevList;
                free(pList);
                printf("\n\n  삭제가 완료되었습니다.\n");
                return;
            }
            else if( yesno == 'n' || yesno == 'N' ) {
                printf("\n\n  삭제하지 않고 메인으로 돌아갑니다.\n");
                return;
            }
            else {
                printf("\n\n  !!! errer : 잘 못 선택하셨습니다. !!!\n");
                cleaning(1.0);
                continue;
            }
        }
    }
}

void PrintList(LIST **dpHead)
{
    LIST *pList = (*dpHead);
    char strGroup[3][5] = {"기타", "가족", "친구"}; /* 출력될 그룹명 */
    int cnt = 1;

    PrintTitle();
    printf(" --- 전체 보기 ---\n");
    printf("\n");
    printf("  번호 이름            전화번호        E-mail                         그룹\n");
    printf(" --------------------------------------------------------------------------\n");
    while( pList != NULL ) {
        printf("  %04d ", cnt++);
        printf("%-15s ", pList->name);
        printf("%-15s ", pList->phone);
        printf("%-30s ", pList->mail);
        printf("%-4s\n", strGroup[pList->group]);
        pList = pList->pNext;
    }
    printf("\n");
}

void Outtro(void)
{
    system("cls");
    PrintTitle();
    printf("\n\n  **  저희 프로그램을 이용해 주셔서 감사합니다.  **");
    printf("\n\n  **  이용에 불편한 점 있으시면 아래 E-mail이나  **");
    printf("\n\n  **  블로그를 통하여 알려주시기 바랍니다.       **");
    printf("\n\n  **        by. Kim Tae-Yong (tykim85@gmail.com) **");
    printf("\n\n  **            blog - tyspace.tistory.com       **\n\n");
    system("pause");
}
신고

+ Recent posts

티스토리 툴바