#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct user
{
int id;
int sex;
char name[20];
char tel[12];
char address[80];
struct user * prev;
struct user * next;
}User;
typedef struct user * Link;
void malloc_ok(Link *new_node);
void create_link(Link *head);
void create_newnode(Link head,Link *new_node);
void insert(Link head,Link newnode);
void menu();
void menu_search();
void menu_return();
void menu_revise();
void add(Link *head);
void list(Link *head);
void search(Link *head);
void search_id(Link *head);
void search_name(Link *head);
void search_sex(Link *head);
void search_tel(Link *head);
void search_address(Link *head);
void delete(Link *head);
void revise(Link *head);
void revise_id(Link *head);
void revise_sex(Link *head);
void revise_name(Link *head);
void revise_tel(Link *head);
void revise_address(Link *head);
int match(char a[],char b[]);
int is_empty(Link *head);
int main()
{
int menu_i;
Link head = NULL;
create_link(&head);
while(1)
{
menu();
scanf("%d",&menu_i);
switch(menu_i)
{
case 1: add(&head);
//system("cls");
break;
case 2: search(&head);
//system("cls");
break;
case 3: delete(&head);
//system("cls");
break;
case 4: revise(&head);
//system("cls");
break;
case 5: list(&head);
getchar();
getchar();
//system("cls");
break;
case 0: printf("\n\t\t\t谢谢使用,欢迎再次使用!");
exit(0);
break;
default :printf("\t\t输入有误!请输入正确的编号:");
scanf("%d",&menu_i);
continue;
}
}
return 0;
}
void malloc_ok(Link *new_node)
{
(*new_node) = (Link)malloc(sizeof(User));
if(*new_node == NULL)
{
printf("creat error!\n");
exit(-1);
}
}
void create_link(Link *head)
{
malloc_ok(head);
(*head)->prev = *head;
(*head)->next = *head;
}
void menu()
{
printf("\t\t\t**************************************************\n\n");
printf("\t\t\t************欢迎使用冰羽通讯录系统****************\n\n");
printf("\t\t\t 1、添加联系人 2、查找联系人\n\n");
printf("\t\t\t 3、删除联系人 4、修改联系人\n\n");
printf("\t\t\t 5、联系人列表 0、退出\n\n");
printf("\t\t\t**************************************************\n\n");
printf("\t\t\t\t请输入您选择的编号:");
}
void create_newnode(Link head,Link *new_node)
{
malloc_ok(new_node);
}
void add(Link *head)
{
int i,add_i;
Link new_node;
printf("请输入要输入的联系人个数:");
scanf("%d",&add_i);
for(i = 0;i < add_i;i++)
{
create_newnode(*head,&new_node);
printf("\t请输入第%d位联系人信息:\n",i+1);
printf("\t\t该联系人性别为(1-m/0-w):");
scanf("%d",&new_node->sex);
if(new_node->sex < 0)
{
new_node->sex *= -1;
}
new_node->sex %= 2;
printf("\t\t该联系人编号为:");
scanf("%d",&new_node->id);
printf("\t\t该联系人姓名为:");
scanf("%s",new_node->name);
printf("\t\t该联系人电话号码为:");
scanf("%s",new_node->tel);
printf("\t\t该联系人住址为:");
scanf("%s",new_node->address);
insert(*head,new_node);
}
printf("\t\t添加成功!");
getchar();
getchar();
}
void insert(Link head,Link newnode)
{
Link p;
p = (head)->next;
while(p->next != head && p->id < (newnode)->id)
{
p = p->next;
}
if(p->id < newnode->id)
{
newnode->next = head;
newnode->prev = head->prev;
head->prev->next = newnode;
head->prev = newnode;
return;
}
else
{
newnode->next = p;
newnode->prev = p->prev;
p->prev->next = newnode;
p->prev = newnode;
return;
}
}
int is_empty(Link *head)
{
if((*head)->next == *head)
{
printf("\t联系人列表为空,请先添加新联系人!\n");
getchar();
getchar();
return 1;
}
return 0;
}
void list(Link *head)
{
Link tmp;
if(is_empty(head) == 1)
{
return;
}
tmp = (*head)->next;
printf("\t现有联系人列表为:\n\n");
printf("\t\t\t编号\t姓名\t\t性别\t号码\t\t\t住址\n\n");
while(tmp->next != (*head))
{
printf("\t\t\t%d\t%s\t\t%d\t%s\t\t%s\n\n",tmp->id,tmp->name,tmp->sex,tmp->tel,tmp->address);
tmp = tmp->next;
}
printf("\t\t\t%d\t%s\t\t%d\t%s\t\t%s\n\n",tmp->id,tmp->name,tmp->sex,tmp->tel,tmp->address);
}
void menu_search()
{
printf("\t\t**************************************************\n\n");
printf("\t\t**************查 找 菜 单****************\n\n");
printf("\t\t 1、按id查找 2、按姓名查找\n\n");
printf("\t\t 3、按号码查找 4、按住址查找\n\n");
printf("\t\t 5、按性别查找 0、返回上一页\n\n");
printf("\t\t**************************************************\n\n");
printf("\t\t\t请选择查找类型:");
}
void menu_return()
{
printf("\t\t**************************************************\n\n");
printf("\t\t**************返 回 菜 单****************\n\n");
printf("\t\t 1、返回上一页 0、退出\n\n");
printf("\t\t**************************************************\n\n");
printf("\t\t\t请选择:") ;
}
void search(Link *head)
{
Link tmp;
int loop = 1;
int search_i;
if(is_empty(head) == 1)
{
return;
}
while(loop)
{
//system("cls");
menu_search();
scanf("%d",&search_i);
switch(search_i)
{
case 1: search_id(head);
break;
case 2: search_name(head);
break;
case 3: search_tel(head);
break;
case 4: search_address(head);
break;
case 5: search_sex(head);
break;
case 0: loop = 0;
//system("cls");
break;
default:printf("\t\t输入有误!请输入正确的编号:");
getchar();
getchar();
//system("cls");
continue;
}
}
}
void search_id(Link *head)
{
Link tmp = (*head)->next;
int choice;
int n;
printf("\t\t请输入要查找的id:");
scanf("%d",&n);
while(tmp->next != *head && tmp->id != n)
{
tmp = tmp->next;
}
if(tmp->id != n)
{
printf("\n\t\t现有通讯录里没有该id,是否返回?\n\n");
}
else
{
printf("\n\t\t\t编号\t姓名\t\t性别\t号码\t\t\t住址\n");
printf("\t\t\t%d\t%s\t\t%d\t%s\t\t%s\n\n",tmp->id,tmp->name,tmp->sex,tmp->tel,tmp->address);
}
getchar();
menu_return();
scanf("%d",&choice);
if(choice == 0)
{
printf("\n\t\t\t谢谢使用,欢迎再次使用!");
exit(0);
}
}
void search_sex(Link *head)
{
Link tmp = (*head)->next;
int choice;
int flag = 0;
int sex_tmp;
printf("\t\t请输入要查找的性别(1-m/0-w):");
scanf("%d",&sex_tmp);
while(tmp != *head)
{
if(tmp->sex == sex_tmp)
{
if(flag == 0)
{
printf("\n\t\t\t编号\t姓名\t\t性别\t号码\t\t\t住址\n");
}
printf("\t\t\t%d\t%s\t\t%d\t%s\t\t%s\n\n",tmp->id,tmp->name,tmp->sex,tmp->tel,tmp->address);
flag = 1;
}
tmp = tmp->next;
}
if(flag == 0)
{
printf("\n\t\t现有通讯录里没有该性别,是否返回?");
}
printf("\n\n");
getchar();
menu_return();
scanf("%d",&choice);
if(choice == 0)
{
printf("\n\t\t\t谢谢使用,欢迎再次使用!");
exit(0);
}
}
void search_name(Link *head)
{
Link tmp = (*head)->next;
int choice;
int flag = 0;
char search_string[20];
printf("\t\t请输入要查找的姓名关键字:");
scanf("%s",search_string);
while(tmp != *head)
{
if(match(tmp->name,search_string) == 1)
{
if(flag == 0)
{
printf("\n\t\t\t编号\t姓名\t\t性别\t号码\t\t\t住址\n");
}
printf("\t\t\t%d\t%s\t\t%d\t%s\t\t%s\n\n",tmp->id,tmp->name,tmp->sex,tmp->tel,tmp->address);
flag = 1;
}
tmp = tmp->next;
}
if(match(tmp->name,search_string) != 1 && flag == 0)
{
printf("\n\t\t现有通讯录里没有该关键字的姓名,是否返回?");
}
printf("\n\n");
getchar();
menu_return();
scanf("%d",&choice);
if(choice == 0)
{
printf("\n\t\t\t谢谢使用,欢迎再次使用!");
exit(0);
}
}
void search_tel(Link *head)
{
Link tmp = (*head)->next;
int choice;
int flag = 0;
char search_string[12];
printf("\t\t请输入要查找的号码关键字:");
scanf("%s",search_string);
while(tmp != *head)
{
if(match(tmp->tel,search_string) == 1)
{
if(flag == 0)
{
printf("\n\t\t\t编号\t姓名\t\t性别\t号码\t\t\t住址\n");
}
printf("\t\t\t%d\t%s\t\t%d\t%s\t\t%s\n\n",tmp->id,tmp->name,tmp->sex,tmp->tel,tmp->address);
flag = 1;
}
tmp = tmp->next;
}
if(match(tmp->tel,search_string) != 1 && flag == 0)
{
printf("\n\t\t现有通讯录里不存在该关键段的号码,是否返回?");
}
printf("\n\n");
getchar();
menu_return();
scanf("%d",&choice);
if(choice == 0)
{
printf("\n\t\t\t谢谢使用,欢迎再次使用!");
exit(0);
}
}
void search_address(Link *head)
{
Link tmp = (*head)->next;
int choice;
int flag = 0;
char search_string[80];
printf("\t\t请输入要查找的地址关键字:");
scanf("%s",search_string);
while(tmp != *head)
{
if(match(tmp->address,search_string) == 1)
{
if(flag == 0)
{
printf("\n\t\t\t编号\t姓名\t\t性别\t号码\t\t\t住址\n");
}
printf("\t\t\t%d\t%s\t\t%d\t%s\t\t%s\n\n",tmp->id,tmp->name,tmp->sex,tmp->tel,tmp->address);
flag = 1;
}
tmp = tmp->next;
}
if(match(tmp->address,search_string) != 1 && flag == 0)
{
printf("\n\t\t现有通讯录里不存在该关键段的地址,是否返回?");
}
printf("\n\n");
getchar();
menu_return();
scanf("%d",&choice);
if(choice == 0)
{
printf("\n\t\t\t谢谢使用,欢迎再次使用!");
exit(0);
}
}
int match(char a[],char b[])
{
char *p1=a;
char *p2=b;
while(*p1 != '\0')
{
if(*p1 == *p2)
{
while(*p1 == *p2 && *p2 != '\0')
{
p1++;
p2++;
}
}
else
p1++;
if(*p2 == '\0')
{
return 1;
}
p2 = b;
}
return 0;
}
void delete(Link *head)
{
Link tmp;
int n;
if(is_empty(head) == 1)
{
return;
}
list(head);
tmp = (*head)->next;
printf("\t\t请输入需要删除的编号:");
scanf("%d",&n);
while(tmp != *head && tmp->id != n)
{
tmp = tmp->next;
}
if(tmp != *head)
{
tmp->prev->next = tmp->next;
tmp->next->prev = tmp->prev;
free(tmp);
printf("\n\t\t删除成功!\n");
}
else
{
printf("\n\t\t没有该id对应的信息,请确认!\n");
}
list(head);
getchar();
getchar();
}
void revise(Link *head)
{
Link tmp;
int n;
int choice;
int loop = 1;
if(is_empty(head) == 1)
{
return;
}
while(loop)
{
//system("cls");
list(head);
menu_revise();
scanf("%d",&choice);
switch(choice)
{
case 1: revise_id(head);
break;
case 2: revise_name(head);
break;
case 3: revise_tel(head);
break;
case 4: revise_address(head);
break;
case 5: revise_sex(head);
break;
case 0: loop = 0;
break;
default:printf("\n\t\t输入有误!请输入正确的编号:");
getchar();
getchar();
continue;
}
}
}
void menu_revise()
{
printf("\t\t***************************************************\n\n");
printf("\t\t****************修 改 菜 单***************\n\n");
printf("\t\t 1、修改某人id 2、修改某人姓名\n\n");
printf("\t\t 3、修改某人号码 4、修改某人住址\n\n");
printf("\t\t 5、修改某人性别 0、返回上一页\n\n");
printf("\t\t\t请选择:");
}
void revise_id(Link *head)
{
int change_id;
int n;
Link tmp = (*head)->next;
printf("\t\t请输入你需要修改的编号:");
scanf("%d",&n);
while(tmp != *head && tmp->id != n)
{
tmp = tmp->next;
}
if(tmp != *head)
{
printf("\n\t\t原id为%d,要修改为:",tmp->id);
scanf("%d",&change_id);
tmp->id = change_id;
}
else
{
printf("\n\t\t没有这样的id,请确认后操作!\n");
return;
}
}
void revise_sex(Link *head)
{
int change_sex;
int n;
Link tmp = (*head)->next;
printf("\t\t请输入你需要修改的编号:");
scanf("%d",&n);
while(tmp != *head && tmp->id != n)
{
tmp = tmp->next;
}
if(tmp != *head)
{
printf("\n\t\t原性别为%d,要修改为(1-m/0-w):",tmp->sex);
scanf("%d",&change_sex);
tmp->sex = change_sex;
}
else
{
printf("\n\t\t没有这样的id,请确认后操作!\n");
return;
}
}
void revise_name(Link *head)
{
char change_name[20];
int n;
Link tmp = (*head)->next;
printf("\t\t请输入你需要修改的编号:");
scanf("%d",&n);
while(tmp != *head && tmp->id != n)
{
tmp = tmp->next;
}
if(tmp != *head)
{
printf("\n\t\t原姓名为%s,要修改为:",tmp->name);
scanf("%s",change_name);
strcpy(tmp->name,change_name);
}
else
{
printf("\n\t\t没有这样的id,请确认后操作!\n");
return;
}
}
void revise_tel(Link *head)
{
char change_tel[20];
int n;
Link tmp = (*head)->next;
printf("\t\t请输入你需要修改的编号:");
scanf("%d",&n);
while(tmp != *head && tmp->id != n)
{
tmp = tmp->next;
}
if(tmp != *head)
{
printf("\n\t\t原电话号码为%s,要修改为:",tmp->tel);
scanf("%s",change_tel);
strcpy(tmp->tel,change_tel);
}
else
{
printf("\n\t\t没有这样的id,请确认后操作!\n");
return;
}
}
void revise_address(Link *head)
{
char change_address[80];
int n;
Link tmp = (*head)->next;
printf("\t\t请输入你需要修改的编号:");
scanf("%d",&n);
while(tmp != *head && tmp->id != n)
{
tmp = tmp->next;
}
if(tmp != *head)
{
printf("\n\t\t原住址为\t%s\n\t\t要修改为:",tmp->address);
scanf("%s",change_address);
strcpy(tmp->address,change_address);
}
else
{
printf("\n\t\t没有这样的id,请确认后操作!\n");
return;
}
#include<stdlib.h>
#include<string.h>
typedef struct user
{
int id;
int sex;
char name[20];
char tel[12];
char address[80];
struct user * prev;
struct user * next;
}User;
typedef struct user * Link;
void malloc_ok(Link *new_node);
void create_link(Link *head);
void create_newnode(Link head,Link *new_node);
void insert(Link head,Link newnode);
void menu();
void menu_search();
void menu_return();
void menu_revise();
void add(Link *head);
void list(Link *head);
void search(Link *head);
void search_id(Link *head);
void search_name(Link *head);
void search_sex(Link *head);
void search_tel(Link *head);
void search_address(Link *head);
void delete(Link *head);
void revise(Link *head);
void revise_id(Link *head);
void revise_sex(Link *head);
void revise_name(Link *head);
void revise_tel(Link *head);
void revise_address(Link *head);
int match(char a[],char b[]);
int is_empty(Link *head);
int main()
{
int menu_i;
Link head = NULL;
create_link(&head);
while(1)
{
menu();
scanf("%d",&menu_i);
switch(menu_i)
{
case 1: add(&head);
//system("cls");
break;
case 2: search(&head);
//system("cls");
break;
case 3: delete(&head);
//system("cls");
break;
case 4: revise(&head);
//system("cls");
break;
case 5: list(&head);
getchar();
getchar();
//system("cls");
break;
case 0: printf("\n\t\t\t谢谢使用,欢迎再次使用!");
exit(0);
break;
default :printf("\t\t输入有误!请输入正确的编号:");
scanf("%d",&menu_i);
continue;
}
}
return 0;
}
void malloc_ok(Link *new_node)
{
(*new_node) = (Link)malloc(sizeof(User));
if(*new_node == NULL)
{
printf("creat error!\n");
exit(-1);
}
}
void create_link(Link *head)
{
malloc_ok(head);
(*head)->prev = *head;
(*head)->next = *head;
}
void menu()
{
printf("\t\t\t**************************************************\n\n");
printf("\t\t\t************欢迎使用冰羽通讯录系统****************\n\n");
printf("\t\t\t 1、添加联系人 2、查找联系人\n\n");
printf("\t\t\t 3、删除联系人 4、修改联系人\n\n");
printf("\t\t\t 5、联系人列表 0、退出\n\n");
printf("\t\t\t**************************************************\n\n");
printf("\t\t\t\t请输入您选择的编号:");
}
void create_newnode(Link head,Link *new_node)
{
malloc_ok(new_node);
}
void add(Link *head)
{
int i,add_i;
Link new_node;
printf("请输入要输入的联系人个数:");
scanf("%d",&add_i);
for(i = 0;i < add_i;i++)
{
create_newnode(*head,&new_node);
printf("\t请输入第%d位联系人信息:\n",i+1);
printf("\t\t该联系人性别为(1-m/0-w):");
scanf("%d",&new_node->sex);
if(new_node->sex < 0)
{
new_node->sex *= -1;
}
new_node->sex %= 2;
printf("\t\t该联系人编号为:");
scanf("%d",&new_node->id);
printf("\t\t该联系人姓名为:");
scanf("%s",new_node->name);
printf("\t\t该联系人电话号码为:");
scanf("%s",new_node->tel);
printf("\t\t该联系人住址为:");
scanf("%s",new_node->address);
insert(*head,new_node);
}
printf("\t\t添加成功!");
getchar();
getchar();
}
void insert(Link head,Link newnode)
{
Link p;
p = (head)->next;
while(p->next != head && p->id < (newnode)->id)
{
p = p->next;
}
if(p->id < newnode->id)
{
newnode->next = head;
newnode->prev = head->prev;
head->prev->next = newnode;
head->prev = newnode;
return;
}
else
{
newnode->next = p;
newnode->prev = p->prev;
p->prev->next = newnode;
p->prev = newnode;
return;
}
}
int is_empty(Link *head)
{
if((*head)->next == *head)
{
printf("\t联系人列表为空,请先添加新联系人!\n");
getchar();
getchar();
return 1;
}
return 0;
}
void list(Link *head)
{
Link tmp;
if(is_empty(head) == 1)
{
return;
}
tmp = (*head)->next;
printf("\t现有联系人列表为:\n\n");
printf("\t\t\t编号\t姓名\t\t性别\t号码\t\t\t住址\n\n");
while(tmp->next != (*head))
{
printf("\t\t\t%d\t%s\t\t%d\t%s\t\t%s\n\n",tmp->id,tmp->name,tmp->sex,tmp->tel,tmp->address);
tmp = tmp->next;
}
printf("\t\t\t%d\t%s\t\t%d\t%s\t\t%s\n\n",tmp->id,tmp->name,tmp->sex,tmp->tel,tmp->address);
}
void menu_search()
{
printf("\t\t**************************************************\n\n");
printf("\t\t**************查 找 菜 单****************\n\n");
printf("\t\t 1、按id查找 2、按姓名查找\n\n");
printf("\t\t 3、按号码查找 4、按住址查找\n\n");
printf("\t\t 5、按性别查找 0、返回上一页\n\n");
printf("\t\t**************************************************\n\n");
printf("\t\t\t请选择查找类型:");
}
void menu_return()
{
printf("\t\t**************************************************\n\n");
printf("\t\t**************返 回 菜 单****************\n\n");
printf("\t\t 1、返回上一页 0、退出\n\n");
printf("\t\t**************************************************\n\n");
printf("\t\t\t请选择:") ;
}
void search(Link *head)
{
Link tmp;
int loop = 1;
int search_i;
if(is_empty(head) == 1)
{
return;
}
while(loop)
{
//system("cls");
menu_search();
scanf("%d",&search_i);
switch(search_i)
{
case 1: search_id(head);
break;
case 2: search_name(head);
break;
case 3: search_tel(head);
break;
case 4: search_address(head);
break;
case 5: search_sex(head);
break;
case 0: loop = 0;
//system("cls");
break;
default:printf("\t\t输入有误!请输入正确的编号:");
getchar();
getchar();
//system("cls");
continue;
}
}
}
void search_id(Link *head)
{
Link tmp = (*head)->next;
int choice;
int n;
printf("\t\t请输入要查找的id:");
scanf("%d",&n);
while(tmp->next != *head && tmp->id != n)
{
tmp = tmp->next;
}
if(tmp->id != n)
{
printf("\n\t\t现有通讯录里没有该id,是否返回?\n\n");
}
else
{
printf("\n\t\t\t编号\t姓名\t\t性别\t号码\t\t\t住址\n");
printf("\t\t\t%d\t%s\t\t%d\t%s\t\t%s\n\n",tmp->id,tmp->name,tmp->sex,tmp->tel,tmp->address);
}
getchar();
menu_return();
scanf("%d",&choice);
if(choice == 0)
{
printf("\n\t\t\t谢谢使用,欢迎再次使用!");
exit(0);
}
}
void search_sex(Link *head)
{
Link tmp = (*head)->next;
int choice;
int flag = 0;
int sex_tmp;
printf("\t\t请输入要查找的性别(1-m/0-w):");
scanf("%d",&sex_tmp);
while(tmp != *head)
{
if(tmp->sex == sex_tmp)
{
if(flag == 0)
{
printf("\n\t\t\t编号\t姓名\t\t性别\t号码\t\t\t住址\n");
}
printf("\t\t\t%d\t%s\t\t%d\t%s\t\t%s\n\n",tmp->id,tmp->name,tmp->sex,tmp->tel,tmp->address);
flag = 1;
}
tmp = tmp->next;
}
if(flag == 0)
{
printf("\n\t\t现有通讯录里没有该性别,是否返回?");
}
printf("\n\n");
getchar();
menu_return();
scanf("%d",&choice);
if(choice == 0)
{
printf("\n\t\t\t谢谢使用,欢迎再次使用!");
exit(0);
}
}
void search_name(Link *head)
{
Link tmp = (*head)->next;
int choice;
int flag = 0;
char search_string[20];
printf("\t\t请输入要查找的姓名关键字:");
scanf("%s",search_string);
while(tmp != *head)
{
if(match(tmp->name,search_string) == 1)
{
if(flag == 0)
{
printf("\n\t\t\t编号\t姓名\t\t性别\t号码\t\t\t住址\n");
}
printf("\t\t\t%d\t%s\t\t%d\t%s\t\t%s\n\n",tmp->id,tmp->name,tmp->sex,tmp->tel,tmp->address);
flag = 1;
}
tmp = tmp->next;
}
if(match(tmp->name,search_string) != 1 && flag == 0)
{
printf("\n\t\t现有通讯录里没有该关键字的姓名,是否返回?");
}
printf("\n\n");
getchar();
menu_return();
scanf("%d",&choice);
if(choice == 0)
{
printf("\n\t\t\t谢谢使用,欢迎再次使用!");
exit(0);
}
}
void search_tel(Link *head)
{
Link tmp = (*head)->next;
int choice;
int flag = 0;
char search_string[12];
printf("\t\t请输入要查找的号码关键字:");
scanf("%s",search_string);
while(tmp != *head)
{
if(match(tmp->tel,search_string) == 1)
{
if(flag == 0)
{
printf("\n\t\t\t编号\t姓名\t\t性别\t号码\t\t\t住址\n");
}
printf("\t\t\t%d\t%s\t\t%d\t%s\t\t%s\n\n",tmp->id,tmp->name,tmp->sex,tmp->tel,tmp->address);
flag = 1;
}
tmp = tmp->next;
}
if(match(tmp->tel,search_string) != 1 && flag == 0)
{
printf("\n\t\t现有通讯录里不存在该关键段的号码,是否返回?");
}
printf("\n\n");
getchar();
menu_return();
scanf("%d",&choice);
if(choice == 0)
{
printf("\n\t\t\t谢谢使用,欢迎再次使用!");
exit(0);
}
}
void search_address(Link *head)
{
Link tmp = (*head)->next;
int choice;
int flag = 0;
char search_string[80];
printf("\t\t请输入要查找的地址关键字:");
scanf("%s",search_string);
while(tmp != *head)
{
if(match(tmp->address,search_string) == 1)
{
if(flag == 0)
{
printf("\n\t\t\t编号\t姓名\t\t性别\t号码\t\t\t住址\n");
}
printf("\t\t\t%d\t%s\t\t%d\t%s\t\t%s\n\n",tmp->id,tmp->name,tmp->sex,tmp->tel,tmp->address);
flag = 1;
}
tmp = tmp->next;
}
if(match(tmp->address,search_string) != 1 && flag == 0)
{
printf("\n\t\t现有通讯录里不存在该关键段的地址,是否返回?");
}
printf("\n\n");
getchar();
menu_return();
scanf("%d",&choice);
if(choice == 0)
{
printf("\n\t\t\t谢谢使用,欢迎再次使用!");
exit(0);
}
}
int match(char a[],char b[])
{
char *p1=a;
char *p2=b;
while(*p1 != '\0')
{
if(*p1 == *p2)
{
while(*p1 == *p2 && *p2 != '\0')
{
p1++;
p2++;
}
}
else
p1++;
if(*p2 == '\0')
{
return 1;
}
p2 = b;
}
return 0;
}
void delete(Link *head)
{
Link tmp;
int n;
if(is_empty(head) == 1)
{
return;
}
list(head);
tmp = (*head)->next;
printf("\t\t请输入需要删除的编号:");
scanf("%d",&n);
while(tmp != *head && tmp->id != n)
{
tmp = tmp->next;
}
if(tmp != *head)
{
tmp->prev->next = tmp->next;
tmp->next->prev = tmp->prev;
free(tmp);
printf("\n\t\t删除成功!\n");
}
else
{
printf("\n\t\t没有该id对应的信息,请确认!\n");
}
list(head);
getchar();
getchar();
}
void revise(Link *head)
{
Link tmp;
int n;
int choice;
int loop = 1;
if(is_empty(head) == 1)
{
return;
}
while(loop)
{
//system("cls");
list(head);
menu_revise();
scanf("%d",&choice);
switch(choice)
{
case 1: revise_id(head);
break;
case 2: revise_name(head);
break;
case 3: revise_tel(head);
break;
case 4: revise_address(head);
break;
case 5: revise_sex(head);
break;
case 0: loop = 0;
break;
default:printf("\n\t\t输入有误!请输入正确的编号:");
getchar();
getchar();
continue;
}
}
}
void menu_revise()
{
printf("\t\t***************************************************\n\n");
printf("\t\t****************修 改 菜 单***************\n\n");
printf("\t\t 1、修改某人id 2、修改某人姓名\n\n");
printf("\t\t 3、修改某人号码 4、修改某人住址\n\n");
printf("\t\t 5、修改某人性别 0、返回上一页\n\n");
printf("\t\t\t请选择:");
}
void revise_id(Link *head)
{
int change_id;
int n;
Link tmp = (*head)->next;
printf("\t\t请输入你需要修改的编号:");
scanf("%d",&n);
while(tmp != *head && tmp->id != n)
{
tmp = tmp->next;
}
if(tmp != *head)
{
printf("\n\t\t原id为%d,要修改为:",tmp->id);
scanf("%d",&change_id);
tmp->id = change_id;
}
else
{
printf("\n\t\t没有这样的id,请确认后操作!\n");
return;
}
}
void revise_sex(Link *head)
{
int change_sex;
int n;
Link tmp = (*head)->next;
printf("\t\t请输入你需要修改的编号:");
scanf("%d",&n);
while(tmp != *head && tmp->id != n)
{
tmp = tmp->next;
}
if(tmp != *head)
{
printf("\n\t\t原性别为%d,要修改为(1-m/0-w):",tmp->sex);
scanf("%d",&change_sex);
tmp->sex = change_sex;
}
else
{
printf("\n\t\t没有这样的id,请确认后操作!\n");
return;
}
}
void revise_name(Link *head)
{
char change_name[20];
int n;
Link tmp = (*head)->next;
printf("\t\t请输入你需要修改的编号:");
scanf("%d",&n);
while(tmp != *head && tmp->id != n)
{
tmp = tmp->next;
}
if(tmp != *head)
{
printf("\n\t\t原姓名为%s,要修改为:",tmp->name);
scanf("%s",change_name);
strcpy(tmp->name,change_name);
}
else
{
printf("\n\t\t没有这样的id,请确认后操作!\n");
return;
}
}
void revise_tel(Link *head)
{
char change_tel[20];
int n;
Link tmp = (*head)->next;
printf("\t\t请输入你需要修改的编号:");
scanf("%d",&n);
while(tmp != *head && tmp->id != n)
{
tmp = tmp->next;
}
if(tmp != *head)
{
printf("\n\t\t原电话号码为%s,要修改为:",tmp->tel);
scanf("%s",change_tel);
strcpy(tmp->tel,change_tel);
}
else
{
printf("\n\t\t没有这样的id,请确认后操作!\n");
return;
}
}
void revise_address(Link *head)
{
char change_address[80];
int n;
Link tmp = (*head)->next;
printf("\t\t请输入你需要修改的编号:");
scanf("%d",&n);
while(tmp != *head && tmp->id != n)
{
tmp = tmp->next;
}
if(tmp != *head)
{
printf("\n\t\t原住址为\t%s\n\t\t要修改为:",tmp->address);
scanf("%s",change_address);
strcpy(tmp->address,change_address);
}
else
{
printf("\n\t\t没有这样的id,请确认后操作!\n");
return;
}
}
明天早点交了作业出去嗨了嘿嘿嘿嘿。