|
#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 = (NAMET*)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;
}
}
|