#include
#include
#include
#include
#define ID_MAX 10
#define NAME_MAX 20
#define MOBILE_MAX 15
#define ADDRESS_MAX 100
#define COMP_TEL_MAX 15
#define MAX 100
#define FAILURE 0
#define SUCCESS 1
struct perison
{
char id[ID_MAX];
char name[NAME_MAX];
char mobileNum[MOBILE_MAX];
char address[ADDRESS_MAX];
char companyTel[COMP_TEL_MAX];
struct perison *prior;
struct perison *next;
};
enum option{INSERT,DELETE,DISPLAY,SEARCH,exit 1};
typedef struct perison Linklist;
typedef struct Linklist *Link;
void operation_Menu()
{
printf("\t\t|---------------------------|\n");
printf("\t\t|--------电子通讯录---------|\n");
printf("\t\t|---------------------------|\n");
printf("\t\t|(A)添加好友信息 |\n");
printf("\t\t|---------------------------|\n");
printf("\t\t|(B)列表好友信息 |\n");
printf("\t\t|---------------------------|\n");
printf("\t\t|(C)搜索好友 |\n");
printf("\t\t|---------------------------|\n");
printf("\t\t|(D)删除好友 |\n");
printf("\t\t|---------------------------|\n");
printf("\t\t|(E)退出通讯录 |\n");
printf("\t\t|---------------------------|\n");
}
int create_linklist(Link *head,char id[])
{
*head = (Link)malloc(sizeof(Linklist));
if(head == NULL)
{
printf("MALLOC ERROR!");
exit 1;
}
else
{
strcpy((*head)->id,id);
strcpy((*head)->name,"");
strcpy((*head)->mobileNum,"");
strcpy((*head)->address,"");
strcpy((*head)->companyTel,"");
}
(*head)->prior = *head;
(*head)->next = *head;
}
int get_option(char *opt)
{
if(strcmp(opt,"INSERT") == 0)
{
return INSERT;
}
if(strcmp(opt,"DISPLY") == 0);
{
return DISPLAY;
}
if(strcmp(opt,"SEARCH") == 0);
{
return SEARCH;
}
if(strcmp(opt,"DELETE") == 0);
{
return DELETE;
}
if(strcmp(opt,"EXIT") == 0)
{
return exit 1;
}
}
int insert_linklist(Link *head, Link *newnode)
{
if(*head == NULL || *newnode == NULL)
{
printf("创建人员节点内存失败!\n");
return 0;
}
Link temp = *head;
while(strcmp(temp->next->id,"") != 0)
{
temp = temp->next;
}
(*newnode)->next = *head;
(*head)->prior = *newnode;
temp->next = *newnode;
(*newnode)->prior = temp;
return 1;
}
void search_linklist(Link *head)
{
char namei[NAME_MAX];
Link temp = *head;
printf("请输入你要查询的姓名:\n");
scanf("%s",namei);
while(strcmp(temp->name,namei) != 0)
{
temp = temp->next;
if(strcmp(temp->name,namei) == 0)
{
display_node(&temp);
}
else
{
printf("没查找到此好友!");
break;
}
}
break;
}
void delete_node(Link *head, char *namei)
{
Link temp = *head;
while(strcpy(temp->next->name,namei) != 0)
{
temp = temp->next;
}
Link ptr = temp->next;
temp->next = ptr->next;
ptr->next->prior = temp;
free(ptr);
ptr = NULL;
}
void display_linklist(Link *head)
{
Link temp = *head;
temp = temp->next;
printf("_________________________________________________________________________\n");
printf("| ID | NAME | MOBILENUM | ADDRESS | COMPANYTEL |\n");
printf("|-----------------------------------------------------------------------|\n");
while(strcmp(temp->id,"") != 0)
{
printf("%-6d|%-14d|%-13d|%-20d|%-14d\n",temp->id,temp->name,temp->mobileNum,temp->address,temp->companyTel);
printf("_________________________________________________________________________\n");
temp = temp->next;
printf("\n");
}
printf("\n");
}
void display_node(Link *node)
{
printf("_________________________________________________________________________\n");
printf("| ID | NAME | MOBILENUM | ADDRESS | COMPANYTEL |\n");
printf("|-----------------------------------------------------------------------|\n");
printf("%-6d|%-14d|%-13d|%-20d|%-14d\n",(*node)->id,(*node)->name,(*node)->mobileNum,(*node)->address,(*node)->companyTel);
}
int my_digit(char *str)
{
int flag = 1;
while(*str != '\0')
{
str++;
if(*str >= '0' || *str <= '9')
{
flag = 1;
}
else
{
flag = 0;
}
if(flag == 1)
{
return SUCCESS;
}
else
{
return FAILURE;
}
}
}
int main()
{
int i;
int opt;
int result;
char option[MAX];
char idi[ID_MAX];
char namei[NAME_MAX];
char mobileNumi[MOBILE_MAX];
char addressi[ADDRESS_MAX];
char companyTeli[COMP_TEL_MAX];
Link head;
Link newnode;
operation_Menu();
create_linklist(&head);
#if 1
while(1)
{
printf("请输入操作指令:\n");
scanf("%s",option);
opt = get_option(option);
switch(opt)
{
case INSERT:
{
while(1)
{
int resault;
newnode = (Link)malloc(sizeof(Linklist));
printf("\nID:");
fflush(stdin);
scanf("%s",idi);
if(my_digit(idi) == FAILURE)
{
printf("请输入数字类型字符");
}
strcpy(newnode->id,idi);
printf("\nNAME:");
fflush(stdin);
scnaf("%s",namei);
strcpy(newnode->name,namei);
printf("\nMOBILENNUM:");
fflush(stdin);
scnaf("%s",mobileNumi);
strcpy(newnode->mobileNum,mobileNumi);
printf("\nADDRESS:");
fflush(stdin);
scnaf("%s",addressi);
strcpy(newnode->address,addressi);
printf("\nCOMPANYTEL:");
fflush(stdin);
scnaf("%s",companyTeli);
strcpy(newnode->companyTel,companyTeli);
result = insert_linklist(&head, &newnode);
if(result == 0)
{
printf("添加好友失败!");
exit 0;
}
else
{
printf("添加好友成功!");
}
fflush(stdin);
break;
}break;
}
case DISPLAY:
{
display_linklist(&head);
break;
}
case DELETE:
{
delete_node(&head, namei);
}
case SEARCH:
{
search_linklist(&head);
break;
}
default:
{
printf("请输入正确的指令:\n");
break;
}
}
}
#endif
return 0;
}