C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[25984] 틀린부분이있는데 왜틀렸는지 모르겠습니다 수정좀 부탁드립니다
궁금합니다 [] 520 읽음    2003-06-17 16:54
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct namet
{
        char name[30]; // 이름 저장부분
        char address[60]; // 주소 저장부분
        char hphone[15]; // 집전화번호 저장부분
        char ophone[15]; // 회사전화번호 저장부분
        struct namet* next; // 뒤의 노드의 주소를 받는 부분
        struct namet* prev; // 앞의 노드의 주소를 받는 부분
} NAMET;

NAMET* start;
NAMET* last;

void initial();
int menu_select();
NAMET* append(NAMET* );
NAMET* deleted(NAMET* );
void find(NAMET* );
void save(NAMET* );
void load();
void display(NAMET* );

void main()
{
        int choice;
       
        start = NULL;
        initial();

        while(1)
        {
                choice = menu_select();
                switch(choice)
                {
                case 0:
                        exit(0);
                case 1:
                        start = append(start);
                        break;
                case 2:
                        start = deleted(start);
                        break;
                case 3:
                        find(start);
                        break;
                case 4:
                        save(start);
                        break;
                case 5:
                        load();
                        break;
                case 6:


                        display(start);
                        break;
                }
        }
}

void initial() // Head(start)와 Tail(last)의 초기화와 연결
{
        start = (NAMET*)malloc(sizeof(NAMET));
        last = (NAMET*)malloc(sizeof(NAMET));

        start->prev = NULL;
        start->next = last;
        last->prev = start;
        last->next = NULL;
}
               
int menu_select() //메뉴 선택 창
{
        int a;

        printf("         - - - -MENU- - - -         \n");
        printf("             .*``````*.             \n");
        printf("          .*`          `*.          \n");
        printf("          :   0.Exit     :          \n");
        printf(" :`````````   1.Insert   `````````: \n");
        printf(" :   ♤       2.Delete       ☆   : \n");
        printf(" :   ♡       3.Search       ♧   : \n");
        printf(" `*.          4.Save            .*` \n");
        printf("    `*.       5.Load         .*`    \n");
        printf("       `*.    6.Display   .*`       \n");
        printf("          `*.          .*`          \n");
        printf("          .*`          `*.          \n");
        printf("         ``````````````````         \n");

        scanf("%d", &a);

        return a;
}

NAMET* append(NAMET* start) // insert함수
{
        NAMET *s;
        NAMET *p;

        fflush(stdin);
       
        s = malloc(sizeof(NAMET)); //연결할 노드의 생성

        printf("이름입력\n");
        gets(s->name);
        fflush(stdin);
        printf("주소입력\n");
        gets(s->address);
        fflush(stdin);
        printf("집 전화번호\n");
        gets(s->hphone);
        fflush(stdin);
        printf("직장 전화번호\n");
        gets(s->ophone);
        fflush(stdin);
       
        p = start;

        if(p->next == last)
        {
                s->prev = last->prev;
                s->next = p->next;
                p->next = s;
                last->prev = s;
                return start;
        }
       
        while(p->next)
        {
                p = p->next;
                if(strcmp(p->name, s->name) == 1)
                        break;
        }
        p = p->prev;

        s->prev = p->next->prev;
        s->next = p->next;
        p->next->prev = s;
        p->next = s;
        return start;
}

NAMET* deleted(NAMET* start) // 노드 삭제 함수
{
        NAMET* p, *k;
        int a = 1;
        char arr[30] = {0};

        printf("삭제하고 시픈 녀석의 이름을 써라\n");
        fflush(stdin); 
        scanf("%s", arr);
       
        p = start;

        while(a)
        {
                p = p->next;
                a = strcmp(p->name, arr);

                if(p->next == NULL)
                {
                        printf("똑바로 써라\n");
                        return start;
                }
        }

        k = p;

        p->prev->next = p->next;
        p->next->prev = p->prev;

        free(k);
        printf("삭제 완료\n");

        return start;
}

void find(NAMET* start) //search 함수
{
        NAMET* p;
        int a;
        char arr[30] ={0};

        printf("차꼬시픈 이름을 입력하시오\n");
        fflush(stdin);
        gets(arr);

        p = start;

        while(a)
        {
                p = p->next;
                a = strcmp(p->name, arr);

                if(p->next == NULL)
                {
                        printf("똑바로 써라\n");
                        return;
                }
        }

        printf("이름    주소   집전화   직장전화\n");
        printf("%s\t", p->name);
        printf("%s\t", p->address);
        printf("%s\t", p->hphone);
        printf("%s\n", p->ophone);
}

void save(NAMET* start) // 파일 입출력의 메모장 입력
{
        NAMET* p;
        FILE *fp;
        char str[30] = {0};
               
        p = start;
       
        if( (fp=fopen("list.txt", "w")) == NULL)
                        return;

        p = p->next;
       
        fprintf(fp,"이름    주소   집전화   직장전화\n");
       
        while(p->next)
        {
                fprintf(fp,"%s\t",p->name);
                fprintf(fp,"%s\t",p->address);
                fprintf(fp,"%s\t",p->hphone);
                fprintf(fp,"%s\n",p->ophone);
                p = p->next;
        }      
        fclose(fp);

        p = start;
       
        if( (fp=fopen("list.txt", "r")) == NULL)
                        return;
       
        while(p->next)
        {
                fgets(str,30,fp);
                p = p->next;
        }
        fclose(fp);

        printf("입력완료\n");
}

void load() // 메모장의 내용을 출력
{
        NAMET* k = NULL;
        FILE *fp;
        char str[30] = {0};
       
        if( (fp=fopen("list.txt", "r")) == NULL)
                        return;

        while(!feof(fp))
        {
                fgets(str,30,fp);
                printf("%s",str);
                memset(str,0,sizeof(char)*30);
        }
        fclose(fp);

        printf("출력완료\n");
}

void display(NAMET* start) // 메모리에 저장된 내용 출력 함수
{
        NAMET* k;
       
        k = start;
        k = k->next;

        printf("이름    주소   집전화   직장전화\n");
        while(k->next)
        {
                printf("%s\t",k->name);
                printf("%s\t",k->address);
                printf("%s\t",k->hphone);
                printf("%s\n",k->ophone);
                k = k->next;
        }
}

+ -

관련 글 리스트
25984 틀린부분이있는데 왜틀렸는지 모르겠습니다 수정좀 부탁드립니다 궁금합니다 520 2003/06/17
32621     Re:틀린부분이있는데 왜틀렸는지 모르겠습니다 수정좀 부탁드립니다 임문환.실업자 617 2003/06/17
32620     Re:틀린부분이있는데 왜틀렸는지 모르겠습니다 수정좀 부탁드립니다 한대상 604 2003/06/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.