linked list를 이용하여 주소록 관리 프로그램
Posted 2007/11/13 19:59, Filed under: programming/C++#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include <conio.h>
struct addr_list
{
char stnum[10];
char name[12];
char idnum[13];
char addr[30];
char hp[12];
char homehp[12];
struct addr_list *next;
};
struct addr_list *head =NULL;
int count()
{
struct addr_list *cur =head;
int num=0;
while(1)
{
if (cur==NULL)
return num;
else
{ num++;
cur=cur->next;
}
}
}
void list()
{
struct addr_list *cur = head;
printf("The resulting List is ");
while(1)
{
printf("\n학번 %s\n", cur->stnum);
printf("이름 %s\n", cur->name);
printf("주민번호 %s\n", cur->idnum);
printf("주소 %s\n",cur->addr);
printf("휴대전화 %s\n",cur->hp);
printf("집번화 %s\n",cur->homehp);
printf("----->");
if(cur->next ==NULL)
{
printf("NULL\n");
break;
}
else cur=cur->next;
}
}
void create_nodes()
{
struct addr_list *list, *pre_list;
while(1)
{ list=(struct addr_list *) malloc (sizeof(struct addr_list));
if (head ==NULL)
head=list;
else pre_list->next =list;
printf("\n학번을 입력하시오 : , 입력의 끝은 Enter를 누리스오!");
gets(list->stnum);
if(*(list->stnum) =='\0')
{
free (list);
pre_list->next =NULL;
break;
}
printf("이름을 입력하시오 : ");
gets(list->name);
printf("주민번호를 입력하시오 :");
gets(list->idnum);
printf("주소를 입력하시오 :");
gets(list->addr);
printf("휴대폰 번호를 입력하시오 :");
gets(list->hp);
printf("집 전화번호를 입력하시오 :");
gets(list->homehp);
list->next=NULL;
pre_list=list;
}
}
void update_node()
{
char stnum[10], yesno, sw='n';
struct addr_list *cur;
printf("\n 변경할 학번을 입력하시오 :");
gets(stnum);
if(head==NULL)
{
printf("연결 리스트가 없음\n");
exit(0);
}
cur=head;
while(cur)
{
if(strcmp(cur->stnum,stnum)==0)
{ printf("\n학번 %s\n",cur->stnum);
printf("이름 %s\n", cur->name);
printf("주민번호 %s\n", cur->addr);
printf("w주소 %s ",cur->idnum);
printf("주소를 변경하십니까? (y/n) :");
if(yesno=getche() =='y')
{ printf("주소를 입력하시오 ! :");
gets(cur->addr);
}
printf("휴대전화%s\n",cur->hp);
printf("휴대전화를 변경하십니까?(y/n) :");
if (yesno=getche() =='y')
{ printf("휴대전화를 입력하시오! :");
gets(cur->hp);
}
printf("집전화 %s\n",cur->homehp);
printf("집전화를 변경하시겠습니다? (y/n) :");
if(yesno=getche() =='y')
{
printf("집전화를 입력하시오! :");
gets(cur->homehp);
}
sw='y';
break;
}
else cur=cur->next;
}
if(sw=='n') printf("\n변경할 학번이 없습니다.");
}
void insert_node()
{
struct addr_list *list, *pre_list, *cur;
list=(struct addr_list*) malloc(sizeof(struct addr_list));
if(list==NULL)
{ printf("memory overflow\n");
exit(0);
}
printf("\n학번을 입력하시오 :");
gets(list->stnum);
printf("이름을 입력하시오 :");
gets(list->name);
printf("주민번호를 입력하시오 :");
gets(list->idnum);
printf("핸드폰 번호를 입력하시오 :");
gets(list->hp);
printf("집 전화번호를 입력하시오 :");
gets(list->homehp);
list->next =NULL;
if(head==NULL)
{ head=list;
list->next=NULL;
printf("0000");
}
else
{ if(strcmp(head->stnum, list->stnum) >=0)
{ list->next=head;
head=list;
}
else
{ pre_list = head;
while(1)
{
cur=pre_list->next;
if(strcmp(cur->stnum, list->stnum) >=0)
{
list->next =cur;
pre_list->next =list;
break;
}
else if (strcmp(cur->stnum,list->stnum)==0)
{ printf("Same data duplicated");
exit(0);
}
else if (cur->next ==NULL)
{ cur->next =list;
list->next =NULL;
break;
}
pre_list=cur;
}
}
}
printf("*************** 학번 %s 삽입되었습니다.\n",list->stnum);
}
void remove_node()
{
struct addr_list *pre_list, *cur;
char stnum[10];
printf("\n삭제할 학번을 입력하시오 :");
gets(stnum);
if(head==NULL);
{
printf("연결 리스트가 없음\n");
exit(0);
}
cur=head;
if(strcmp(cur->stnum,stnum)==0)
{ head=cur->next;
printf("*************** 학번 %s 삭제되었습니다. \n", stnum);
free(cur);
}
else
{
pre_list =cur;
while(1)
{
cur=pre_list->next;
if (strcmp (cur->stnum,stnum)==0)
{ pre_list->next =cur->next;
printf("************** 학번 %s 삭제되었습니다.\n",stnum);
free(cur);
break;
}
if(cur->next ==NULL)
{
printf("삭제할 학번 %s이 존재하지않습니다.\n",stnum);
break;
}
pre_list =cur;
}
}
}
int main(void)
{
char s[10];
while(1)
{
printf("\n*****************************************************************\n");
printf("생성(creat), 변경(update), 추가(insert), 삭제(Delect), 출력(List), 종료(Quit) : ");
gets(s);
*s =toupper(*s);
switch (*s) {
case 'C' : create_nodes(); break;
case 'U' : update_node(); break;
case 'D' : remove_node(); break;
case 'I' : insert_node(); break;
case 'L' : list();
printf("THIS list has %d elements\n",count());break;
case 'Q' : exit(0);
}
}
free(head);
}
'programming > C++' 카테고리의 다른 글
| 연결 리스트를 이용하여 주소록을 만드는 프로그램 (0) | 2007/11/13 |
|---|---|
| linked list를 이용하여 주소록 관리 프로그램 (0) | 2007/11/13 |
| 스택을 이용 5칙 연산을 수행하는 간단한 계산기 프로그램 (2) | 2007/11/05 |
| Eclipse Downloads (0) | 2007/11/04 |
이올린에 북마크하기
이올린에 추천하기