/*****************************************************
copyright (C), Nanjing University of Tecnology
File name:list.c
Author: Zhangchao Version:0.1 Date: 2016-12-13 16:28
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct list
{
char name[30];
char sex[30];
char birth[30];
char phone[30];
char job[30];
char email[30];
struct list *next;
};
typedef struct list List;
typedef struct list *Link;
void creat_new_node(Link *new_node);
void creat_link(Link *head) //创建链表
{
creat_new_node(head);
(*head)->next = NULL;
}
void creat_new_node(Link *new_node) //创建结点
{
*new_node = (Link)malloc(sizeof(List)); //分配空间
if(*new_node == NULL)
{
printf("malloc error\n");
exit(-1);
}
}
void creat_new_node(Link *new_node);
void add_new_node(Link *head) //添加联系人功能
{
Link new_node; //创建新结点插入
creat_new_node(head);
printf("请输入姓名:");
scanf("%s",(new_node)->name);
printf("请输入性别:");
scanf("%s",(new_node)->sex);
printf("请输入生日:");
scanf("%s",(new_node)->birth);
printf("请输入电话:");
scanf("%s",(new_node)->phone);
printf("请输入职业:");
scanf("%s",(new_node)->job);
printf("请输入邮箱:");
scanf("%s",(new_node)->email);
printf("添加完成\n");
insert_node(head,new_node);
}
insert_node(Link head,Link new_node) //前插
{
(new_node)->next = head->next;
head->next = new_node;
}
void menu_select() //菜单显示
{
printf("**************欢迎使用通讯录**************\n");
printf("************请选择要使用的功能************\n");
printf(" 1.添加联系人 \n");
printf(" 2.查找联系人 \n");
printf(" 3.删除联系人 \n");
printf(" 4.显示通讯录 \n");
printf(" 5.清空通讯录 \n");
printf(" 6.退出通讯录 \n");
printf("******************************************\n");
printf("******************************************\n");
}
void switch_func(Link *head) //功能选择
{
int num;
scanf("%d",&num);
switch(num)
{
case 1:add_new_node(head);break;
case 2:find_node(head);break;
case 3:delete_node(head);break;
// case 4:display_link(head);break;
// case 5:release_link(head);break;
// case 6:exit_link();break;
default:printf("功能不存在,请重新输入对应编号!");break;
}
}
find_node(Link head) //查找联系人功能
{
char name[30];
Link p = head->next;
printf("请输入您要查找的联系人姓名:");
scanf("%s",name);
if(p->next == NULL)
{
printf("通讯录是空的");
return;
}
else
{
while(strcmp(p->name,name) != 0 && p->next != NULL)
{
p=p->next;
}
if(p->next == NULL)
{
if(strcmp(p->name,name) !=0)
{
printf("查无此人");
}
else
{
printf("%s\n",p->name);
printf("%s\n",p->sex);
printf("%s\n",p->birth);
printf("%s\n",p->phone);
printf("%s\n",p->job);
printf("%s\n",p->email);
}
}
else
{
printf("%s\n",p->name);
printf("%s\n",p->sex);
printf("%s\n",p->birth);
printf("%s\n",p->phone);
printf("%s\n",p->job);
printf("%s\n",p->email);
}
}
}
delete_node(Link head) //删除联系人
{
char name[30];
Link p1,p2;
p1 = head->next;
p2 = head;
printf("请输入要删除的联系人姓名:");
scanf("%s",name);
if(head->next == NULL)
{
printf("通讯录为空");
return;
}
while(strcmp(p1->name,name) != 0 && p1->next !=NULL)
{
p2 = p1;
p1 = p1->next;
}
p2->next = p1->next;
free(p1);
}
int main(int argc, char **argv) //主函数
{
Link head = NULL;
Link new_node = NULL;
creat_link(&head);
while(1)
{
menu_select();
switch_func(&head);
}
return 0;
}
copyright (C), Nanjing University of Tecnology
File name:list.c
Author: Zhangchao Version:0.1 Date: 2016-12-13 16:28
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct list
{
char name[30];
char sex[30];
char birth[30];
char phone[30];
char job[30];
char email[30];
struct list *next;
};
typedef struct list List;
typedef struct list *Link;
void creat_new_node(Link *new_node);
void creat_link(Link *head) //创建链表
{
creat_new_node(head);
(*head)->next = NULL;
}
void creat_new_node(Link *new_node) //创建结点
{
*new_node = (Link)malloc(sizeof(List)); //分配空间
if(*new_node == NULL)
{
printf("malloc error\n");
exit(-1);
}
}
void creat_new_node(Link *new_node);
void add_new_node(Link *head) //添加联系人功能
{
Link new_node; //创建新结点插入
creat_new_node(head);
printf("请输入姓名:");
scanf("%s",(new_node)->name);
printf("请输入性别:");
scanf("%s",(new_node)->sex);
printf("请输入生日:");
scanf("%s",(new_node)->birth);
printf("请输入电话:");
scanf("%s",(new_node)->phone);
printf("请输入职业:");
scanf("%s",(new_node)->job);
printf("请输入邮箱:");
scanf("%s",(new_node)->email);
printf("添加完成\n");
insert_node(head,new_node);
}
insert_node(Link head,Link new_node) //前插
{
(new_node)->next = head->next;
head->next = new_node;
}
void menu_select() //菜单显示
{
printf("**************欢迎使用通讯录**************\n");
printf("************请选择要使用的功能************\n");
printf(" 1.添加联系人 \n");
printf(" 2.查找联系人 \n");
printf(" 3.删除联系人 \n");
printf(" 4.显示通讯录 \n");
printf(" 5.清空通讯录 \n");
printf(" 6.退出通讯录 \n");
printf("******************************************\n");
printf("******************************************\n");
}
void switch_func(Link *head) //功能选择
{
int num;
scanf("%d",&num);
switch(num)
{
case 1:add_new_node(head);break;
case 2:find_node(head);break;
case 3:delete_node(head);break;
// case 4:display_link(head);break;
// case 5:release_link(head);break;
// case 6:exit_link();break;
default:printf("功能不存在,请重新输入对应编号!");break;
}
}
find_node(Link head) //查找联系人功能
{
char name[30];
Link p = head->next;
printf("请输入您要查找的联系人姓名:");
scanf("%s",name);
if(p->next == NULL)
{
printf("通讯录是空的");
return;
}
else
{
while(strcmp(p->name,name) != 0 && p->next != NULL)
{
p=p->next;
}
if(p->next == NULL)
{
if(strcmp(p->name,name) !=0)
{
printf("查无此人");
}
else
{
printf("%s\n",p->name);
printf("%s\n",p->sex);
printf("%s\n",p->birth);
printf("%s\n",p->phone);
printf("%s\n",p->job);
printf("%s\n",p->email);
}
}
else
{
printf("%s\n",p->name);
printf("%s\n",p->sex);
printf("%s\n",p->birth);
printf("%s\n",p->phone);
printf("%s\n",p->job);
printf("%s\n",p->email);
}
}
}
delete_node(Link head) //删除联系人
{
char name[30];
Link p1,p2;
p1 = head->next;
p2 = head;
printf("请输入要删除的联系人姓名:");
scanf("%s",name);
if(head->next == NULL)
{
printf("通讯录为空");
return;
}
while(strcmp(p1->name,name) != 0 && p1->next !=NULL)
{
p2 = p1;
p1 = p1->next;
}
p2->next = p1->next;
free(p1);
}
int main(int argc, char **argv) //主函数
{
Link head = NULL;
Link new_node = NULL;
creat_link(&head);
while(1)
{
menu_select();
switch_func(&head);
}
return 0;
}