본문 바로가기

Programming/C&C++&C#

[C언어] 주소록 linked list + file I/O

728x90
반응형

#include <stdio.h>

#include <stdlib.h>

#include <string.h>


#define MAX_NAME 50

#define TRUE 1



typedef struct node *NodePointer;

typedef struct node {

int age;

char name[MAX_NAME];

NodePointer link;

} Node;


int count = 0;


void read_Node(NodePointer* );

void save_Node(NodePointer);


void Make_Node(NodePointer *,int ,char * );

void Print_Node(NodePointer );

void Fine_Node(NodePointer );

void delete_Node(NodePointer* );


int main( void )

{


int nember;

int age;

char name[MAX_NAME];


NodePointer head = NULL;

NodePointer temp = head;


read_Node(&head);


while(TRUE)

{

printf("1) 입력 \n 2) 출력  \n3) 검색   \n 4) 삭제 \n 5) 종료\n");

scanf("%d",&nember);

switch(nember)

{

case 1:

printf("이름 입력 : ");

scanf("%s", name);

printf("나이 입력 : ");

scanf("%d", &age);

Make_Node(&head,age, name );

break;


case 2:

Print_Node(head);

break;


case 3:

Fine_Node(head);

break;


case 4:

delete_Node(&head);

break;


case 5:

save_Node(&head);

return 0;

break;

}

}

return ;

}


void save_Node(NodePointer *temp)

{

FILE * file = fopen("savepop.txt","wt");

NodePointer cur = * temp;

int i ;

if(count == 0)

{

fprintf(file,"0");

fclose(file);

return ;

}

else

{

fprintf(file ,"%d\n",count);

for(i = 0 ; i < count ; i++)

{

fprintf(file,"%s %d\n",cur->name,cur->age);

cur = cur->link;

}

}

fclose(file);

}


void read_Node(NodePointer *temp)

{

FILE *file ;

FILE *fl;


NodePointer item = *temp;

int num ,i;

int save_age;

char save_name[30];

if( (file = fopen("savepop.txt","r")) == NULL)

{

fl = fopen("savepop.txt","w+");

fprintf(fl,"0");

fclose(fl);

return ;

}

fscanf(file , "%d", &num);


if(num == 0)

return ;


for(i = 0 ; i < num ; i++)

{

fscanf(file,"%s  %d",save_name,&save_age);

Make_Node( temp, save_age, save_name);

}


fclose(file);

}



void Make_Node(NodePointer *temp, int _age, char *_name)

{

int i;

NodePointer item;

NodePointer cur  = *temp;


item = (NodePointer)malloc(sizeof(Node));

item->age = _age;

strcpy(item->name, _name);


item->link = NULL;


if(*temp == NULL)

{

*temp = item;

}


else

{

for( ; ;  )

{

if((cur)->link == NULL)

{

(cur)->link  = item;

break;

}

cur = cur->link;


}

}

count++;

}


void Print_Node(NodePointer temp)

{

for( ; temp != NULL ;temp = temp->link)

{

printf("이름 : %s  ", temp->name);

printf("나이 : %d  \n",temp->age);

}

}


void Fine_Node(NodePointer temp)

{

char findname[30];

printf("찾을 사람 이름 입력 :");

scanf("%s",findname);


for( ; temp != NULL ;temp = temp->link)

{

if(strcmp(temp->name,findname)== 0)

{

printf("이름 : %s  ", temp->name);

printf("나이 : %d  \n",temp->age);

break;

}

}

if(temp == NULL)

{

printf("찾는사람 없습니다.\n");

}

}


void delete_Node(NodePointer *node)

{

char findname[30];

NodePointer temp = *node;

NodePointer item;

printf("지울 사람 이름 입력 :");

scanf("%s",findname);


for( ; temp != NULL ;temp = temp->link)

{

if(strcmp(temp->name,findname)== 0)

{

if(*node == temp )

{

printf("이름 : %s  ", temp->name);

printf("나이 : %d  \n",temp->age);

*node = NULL;

free(temp);

count--;

break;

}

else

{

printf("이름 : %s  ", temp->name);

printf("나이 : %d  \n",temp->age);

item->link = temp->link;


free(temp);

count--;

break ;

}

}


item = temp;

}

if(temp == NULL)

{

printf("찾는사람 없습니다.\n");

}

}



반응형