본문 바로가기
C언어

[C언어] 전화번호부를 연결리스트를 이용하여 만들어보자. 사용자가 전화 번호를 입력하면 연결리스트의 끝에 추가한다. 탐색기능도 추가하시오

by 이얏호이야호 2020. 5. 14.

공부하시는대에 도움이 됐으면 좋겠습니다.

답안코드 확인해주세요!

 

더보기
#include <stdio.h>

			#include <stdlib.h>

			#include <string.h>

			#define TRUE 1

			#define FALSE 0

			typedef struct {

				char name[30];

				char phone[20];

			}

			DATA;

			typedef struct NODE {

				DATA data;

				struct NODE *link;

			}

			NODE;

			NODE *search_pos(NODE *plist, char name[]);

			NODE *search(NODE *plist, char name[]);

			NODE *create_node(char *name, char* phone, NODE *link);

			void insert_node(NODE **phead, NODE *node, NODE *prev);

			void print_menu();

			int main(void) {

				char name_t[30]= {

					'\0'

				}

				;

				char phone_t[20]= {

					'\0'

				}

				;

				char cmenu=1;

				int bEscape = FALSE;

					NODE* List = NULL;

					NODE* Temp = NULL;

					while(TRUE) {

						fflush(stdin);

						print_menu();

						printf("번호를 입력하세요 : ");

					scanf("%c", &cmenu);

					switch(cmenu) {

						case '1':

						break;

						case '2':

						printf("이름 : ");

						scanf("%s", name_t);

						printf("번호 : ");

						scanf("%s", phone_t);

						insert_node(&List, create_node(name_t, phone_t, NULL),

						search_pos(List, name_t));

						printf("추가되었습니다.\n");

						break;

						case '3':

						printf("찾을 이름을 입력하세요 : ");

						scanf("%s", name_t);

						Temp = search(List, name_t);

						if(Temp!=NULL) {

							printf("전화 번호부를 찾았습니다.\n");

						printf("이름 : %s\n번호 : %s\n", Temp->data.name,

						Temp->data.phone);

					} else

					printf("데이터를 찾지 못했습니다.\n");

				break;

				case '4':

				printf("찾을 이름을 입력하세요 : ");

				scanf("%s", name_t);

				Temp = search(List, name_t);

				printf("변경할 이름을 입력하세요 : ");

				scanf("%s", name_t);

				printf("변경할 번호를 입력하세요 : ");

				scanf("%s", phone_t);

				strcpy(Temp->data.name, name_t);

				strcpy(Temp->data.phone, phone_t);

				printf("데이터가 변경되었습니다.\n");

				break;

					case '5':

					bEscape = TRUE;

					break;

					default:

					printf("잘못 입력 하셨습니다. 다시입력해주세요.\n");

					break;

				}

				if(bEscape)

			break;

		}

		return 0;

	}

	void print_menu() {

		printf("------------------------------\n");

		printf("1. 초기화\n");

			printf("2. 전화 번호 추가\n");

			printf("3. 전화 번호 탐색\n");

			printf("4. 전화 번호 변경\n");

			printf("5. 종료\n");

			printf("------------------------------\n");

	}

	NODE *search_pos(NODE *plist, char name[]) {

		NODE *curr, *prev;

			prev = NULL;

			curr = plist;

			while(curr != NULL) {

				if(strcmp(curr->data.name, name) > 0)

				break;

			prev = curr;

			curr = curr->link;

		}

		return prev;

	}

	NODE *search(NODE *plist, char name[]) {

		NODE *curr;

			curr = plist;

			while(curr != NULL) {

				if(strcmp(curr->data.name, name) == 0)

				break;

				curr = curr->link;

			}

			return curr;

		}

		NODE *create_node(char *name, char* phone, NODE *link) {

			NODE *new_node;

			new_node = (NODE *)malloc(sizeof(NODE));

if( new_node == NULL ) {

	fprintf(stderr, "메모리 할당 에러\n");

	exit(1);

}

strcpy(new_node->data.name, name);

strcpy(new_node->data.phone, phone);

new_node->link = link;

return(new_node);

}

void insert_node(NODE **phead, NODE *node, NODE *prev) {

if( *phead == NULL ) {

	*phead = node;

	node->link = NULL;

} else if(prev == NULL) {

	node->link = (*phead)->link;

	(*phead) = node;

} else {

	node->link = prev->link;

	prev->link = node;

}

}

 

 

 


더 많은 C코드가 보고 싶다면?

https://chuinggun.tistory.com/category/C%EC%96%B8%EC%96%B4

댓글