题目:用链表实现 查询 添加 删除 修改 显示 等功能 多种形式操作 操作方便 功能完善的通讯录。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node
{
char name[20];
char telephone[11];
char sex[10];
char age[15];
char remarks[20];
struct node *next;
};
typedef struct node Node;
typedef struct node * link;
void create_link(link * head)
{
link p, q;
int i;
*head = (link)malloc(sizeof(Node));
q = *head;
p = NULL;
printf("进行通讯录的输入,1 or 0?\n");
scanf("%d",&i);
getchar();
while(i)
{
p = (link)malloc(sizeof(Node));
printf("请输入姓名:\n");
gets(p->name);
printf("请输入电话号码:\n");
gets(p->telephone);
printf("请输入性别:\n");
gets(p->sex);
printf("请输入年龄:\n");
gets(p->age);
printf("请输入备注:\n");
gets(p->remarks);
p->next = q;
q = p;
scanf("%d",&i);
getchar();
}
//q->next = NULL;
}
void display_link(link head)
{
link p;
p = head;
if(p == NULL)
{
printf("link is empty!\n");
}
else
{
p = head->next;
while(p != NULL)
{
printf("姓名:%s\t手机号:%s\t性别:%s\t年龄:%s\t备注:%s\t\n",p->name,p->telephone,p->sex,p->age,p->remarks);
p=p->next;
}
}
}
void add_node(link head)
{
link p ,q;
p = head ;
q = NULL;
if( p == NULL)
{
printf("要先创建通讯录后才能添加用户信息!\n");
return ;
}
if( p != NULL)
{
while(p->next != NULL)
{
p=p->next;
}
}
int i;
printf("进行通讯录的输入,1 or 0?\n");
scanf("%d",&i);
getchar();
while(i)
{
q = (link)malloc(sizeof(Node));
if(q != NULL)
{
printf("请输入姓名:\n");
gets(q->name);
printf("请输入电话号码:\n");
gets(q->telephone);
printf("请输入性别:\n");
gets(q->sex);
printf("请输入年龄:\n");
gets(q->age);
printf("请输入备注:\n");
gets(q->remarks);
q->next = NULL;
p->next = q;
p = q;
scanf("%d",&i);
getchar();
}
}
}
void delete_node(link head)
{
link p, q;
p = q = head;
char name[20];
getchar();
printf("请输入要删除的姓名:\n");
gets(name);
if( p == NULL)
{
printf("mail_list is empty!\n");
}
else
{
q = p->next;
while(q != NULL)
{
if(strcmp(name,q->name)==0)
break;
else
p = q;
q = q->next;
}
if( q != NULL)
{
p->next = q->next;
free(q);
printf("删除成功!\n");
}
else
{
printf("没有此联系人,删除失败!\n");
}
}
}
void search_node(link head)
{
link p;
char name[20];
p = head;
getchar();
printf("请输入要查找的姓名:\n");
gets(name);
if(p == NULL)
{
printf("mail_list is empty!\n");
}
else
{
p = head->next;
while( p != NULL)
{
if(strcmp(name,p->name)==0)
{
break;
}
else
{
p = p->next;
}
}
if( p != NULL)
{
printf("姓名:%s\t手机号:%s\t性别:%s\t年龄:%s\t备注:%s\t\n",p->name,p->telephone,p->sex,p->age,p->remarks);
}
else
{
printf("查无此人!\n");
}
}
}
void modify_node(link head)
{
link p;
char name[20];
p = head;
getchar();
printf("请输入要修改人的姓名:\n");
gets(name);
if(p == NULL)
{
printf("mail_list is empty!\n");
}
else
{
p = head->next;
while( p != NULL)
{
if(strcmp(name,p->name)==0)
{
break;
}
else
{
p = p->next;
}
}
if(p != NULL)
{
printf("请输入新的手机号码:\n");
gets(p->telephone);
printf("请输入新的性别:\n");
gets(p->sex);
printf("请输入新的年龄:\n");
gets(p->age);
printf("请输入新的备注:\n");
gets(p->remarks);
}
else
{
printf("没有此人,无法修改信息!\n");
}
}
}
void release_link(link * head)
{
link p;
p = *head;
if(p == NULL)
{
printf("link is empty!\n");
}
else
{
p = (*head)->next;
while(p->next != NULL)
{
(*head)->next = p->next;
free(p);
p = (*head)->next;
}
free(p);
*head = NULL;
}
}
int main()
{
link head = NULL;
int sel;
while(1)
{
printf("***************************************************\n");
printf("***************** 通讯录 *******************\n");
printf("***************************************************\n");
printf("********** 1.通讯录的创建 *************\n");
printf("********** 2.通讯录的显示 *************\n");
printf("********** 3.通讯录的增加 *************\n");
printf("********** 4.通讯录的删除 *************\n");
printf("********** 5.通讯录的查找 *************\n");
printf("********** 6.通讯录的修改 *************\n");
printf("********** 0.退出系统 *************\n");
printf("***************************************************\n");
printf("***************************************************\n");
printf("请选择(0--6)的命令:\n");
scanf("%d",&sel);
switch(sel)
{
case 1:create_link(&head);
break;
case 2:display_link(head);
break;
case 3:add_node(head);
break;
case 4:delete_node(head);
break;
case 5:search_node(head);
break;
case 6:modify_node(head);
break;
case 0:release_link(&head);return 0;
break;
}
}
//display_link(head);
return 0;
}