#include #define MAL_OK 1
#define MAL_ERR 0
struct node
{
char name[20];
int num;
struct node * next;
};
typedef struct node Node;
typedef struct node * Link;
void wellcome()
{
printf("------------------------------------\n");
printf(" wellcome to the address list. \n");
printf(" input 1: Add people. \n");
printf(" input 2: Show the address list.\n");
printf(" input 3: Alter the address.\n");
printf(" input 4: inquire someone.\n");
printf(" input 5: Delete someone.\n");
printf(" input 6: Exit.\n");
printf("\n");
printf("\n");
printf("------------------------------------\n");
}
int malloc_ok(Link new_node)
{
if(new_node == NULL)
{
return MAL_ERR;
}
else
{
return MAL_OK;
}
}
void create_node(Link *new_node)
{
(*new_node) = (Link)malloc(sizeof(Node));
while(malloc_ok(*new_node) == MAL_ERR)
{
(*new_node) = (Link)malloc(sizeof(Node));
}
}
void create_link(Link * head)
{
create_node(head);
(*head)->next = NULL;
}
void inser_node_tail(Link head,Link new_node)
{
Link p;
p = head;
while(p->next != NULL)
{
p = p->next;
}
p->next = new_node;
new_node->next = NULL;
}
void input_people(Link new_node)
{
Link p;
p = new_node;
printf("input name.\n");
getchar();
gets(p->name);
printf("input phone number.\n");
scanf("%d",&p->num);
}
void create_address(Link * head,Link * new_node)
{
if((*head) == NULL)
{
create_link(head);
}
create_node(new_node);
inser_node_tail(*head,*new_node);
input_people(*new_node);
}
void display(Link head)
{
Link p;
p = head;
if(p == NULL)
{
printf("No fine link.\n");
}
else if(p->next != NULL)
{
while(p->next != NULL)
{
p = p->next;
printf("name:%s\t",p->name);
printf("phone number:%d\n",p->num);
}
}
}
void alter_address(Link head)
{
Link p;
int order;
p = head->next;
char temp[20];
printf("请输入要修改的人的名字。\n");
getchar();
gets(temp);
printf("输入1为修改名字,输入2为修改电话。\n");
scanf("%d",&order);
if(p == NULL)
{
printf("Address is empty!.\n");
}
else
{
while(p != NULL)
{
if(strcmp(temp,p->name) == 0)
{
break;
}
p = p->next;
}
if(order == 1)
{
printf("Input name:\n");
getchar();
gets(p->name);
}
else if(order == 2)
{
printf("Input number.\n");
scanf("%d",&p->num);
}
else
{
printf("输入错误。\n");
}
}
}
void inquire_address(Link head)
{
Link p;
char temp[20];
p = head->next;
printf("输入要查询的人的名字。\n");
getchar();
gets(temp);
if(p == NULL)
{
printf("Address is empty.\n");
}
else
{
while(p != NULL)
{
if(strcmp(temp,p->name) == 0)
{
printf("查询为:\n");
printf("name:%s\t",p->name);
printf("num:%d\n",p->num);
}
p = p->next;
}
}
}
void del_node(Link head)
{
Link p,q;
char name[20];
q = head;
p = head->next;
printf("请输入要删除的人的名字。\n");
getchar();
gets(name);
if(p == NULL)
{
printf("Link is empty.\n");
}
else
{
while(strcmp(p->name,name) != 0 && p->next != NULL)
{
q = p;
p = p->next;
}
if(p->next == NULL && strcmp(p->name,name) != 0)
{
printf("没有找到。\n");
}
else
{
q->next = p->next;
free(p);
}
}
}
void release_link(Link * head)
{
Link p;
p = *head;
if(p == NULL)
{
printf("No link\n");
}
else
{
while(*head != NULL)
{
*head = (*head)->next;
free(p);
p = *head;
}
}
}
int main()
{
Link head = NULL;
Link new_node = NULL;
int order;
do
{
wellcome();
scanf("%d",&order);
if(order == 1)
{
create_address(&head,&new_node);
}
if(order == 2)
{
display(head);
}
if(order == 3)
{
alter_address(head);
}
if(order == 4)
{
inquire_address(head);
}
if(order == 5)
{
del_node(head);
}
}while(order != 6);
release_link(&head);
return 0;
}