#include <stdio.h>
#include <stdlib.h>
//定义结构体*********
struct dblnode
{
char num[10];//学号
char name[5];//姓名
char sex[2];//性别
char tel[12];//性别
char add[100];//地址
struct dblnode *next,*prior;//指针域
};
typedef struct dblnode Dblnode;
typedef struct dblnode * Dbllink;
//所有函数声明*********
void interface();
void mainsecond();
void create_link(Dbllink *head);
void create_newnode(Dbllink *newnode);
void is_malloc_ok(Dbllink *newnode);
void select_menu(Dbllink *head);
void insert_contacts(Dbllink *head);
void find_node(Dbllink *head);
void delete_node(Dbllink *head);
void display_node(Dbllink *head);
void update_node(Dbllink *head);
void exit_node(Dbllink *head);
/********************************
主函数************
*********************************/
int main()
{
Dbllink head = NULL;
create_link(&head);
select_menu(&head);
return 0;
}
/**************************************
主界面****************
***************************************/
void interface()
{
printf("/*************************/\n");
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("\n");
printf("/*************************/\n");
}
/*************************************
目录选择***************
***************************************/
void select_menu(Dbllink *head)
{
int n;
while(1)
{
interface();
printf("请输入要选择的序号:");
scanf("%d",&n);
switch(n)
{
case 1:
printf("***************\n");
printf("1.添加联系人\n");
printf("***************\n");
insert_contacts(head);
break;
case 2:
printf("***************\n");
printf("2.查找联系人\n");
printf("***************\n");
find_node(head);
break;
case 3:
printf("***************\n");
printf("3.删除联系人\n");
printf("***************\n");
delete_node(head);
break;
case 4:
printf("***************\n");
printf("4.查看所有联系人\n");
printf("***************\n");
display_node(head);
break;
case 5:
printf("***************\n");
printf("5.修改联系人信息\n");
printf("***************\n");
update_node(head);
break;
case 6:
printf("***************\n");
printf("6.退出通信录\n");
printf("***************\n");
exit_node(head);
return;
}
}
}
/**************************************
链表创建****************
****************************************/
void create_link(Dbllink *head)
{
create_newnode(head);
(*head)->next = (*head)->prior = *head;
}
void create_newnode(Dbllink *newnode)
{
*newnode = (Dbllink)malloc(sizeof(Dblnode));
is_malloc_ok(newnode);
}
void is_malloc_ok(Dbllink *newnode)
{
if(*newnode == NULL)
{
printf("malloc is error!\n");
exit(-1);
}
}
/**************************************
插入联系人**************
***************************************/
//调用插入
void insert_contacts(Dbllink *head)
{
Dbllink newnode = NULL;
create_newnode(&newnode);
printf("请输入联系人序号:");
scanf("%s",newnode->num);
printf("请输入联系人姓名:");
scanf("%s",newnode->name);
printf("请输入联系人性别:");
scanf("%s",newnode->sex);
printf("请输入联系人电话:");
scanf("%s",newnode->tel);
printf("请输入联系人地址:");
scanf("%s",newnode->add);
printf("\n");
printf("\n");
(newnode)->next = *head;
(newnode)->prior = (*head)->prior;
(*head)->prior->next = newnode;
(*head)->prior = newnode;
}
/************************************
查找联系人*************
*************************************/
//查找结点
void find_node(Dbllink *head)
{
Dbllink tmp;
int fn;
tmp = (*head)->next;
char num[10];
char name[5];
printf("*************************\n");
printf("请选择查询方式:\n");
printf("1.序号查询\n");
printf("2.姓名查询\n");
printf("*************************\n");
printf("\n");
printf("请输入选择序号:");
scanf("%d",&fn);
if(fn == 2)
{
printf("请输入姓名:");
scanf("%s",name);
while((tmp != (*head)) && (strcmp(tmp->name,name) != 0))
{
tmp = tmp->next;
}
printf("序号:%s\n",tmp->num);
printf("姓名:%s\n",tmp->name);
printf("性别:%s\n",tmp->sex);
printf("电话:%s\n",tmp->tel);
printf("地址:%s\n",tmp->add);
}
else if(fn == 1)
{
printf("请输入查找的序号:");
scanf("%s",num);
while((tmp != *head) && (strcmp(tmp->num,num) != 0))
{
tmp = tmp->next;
}
while((tmp->next == *head) && (strcmp(tmp->num,num) > 0))
{
tmp = NULL;
printf("没有此序号!\n");
}
printf("序号:%s\n",tmp->num);
printf("姓名:%s\n",tmp->name);
printf("性别:%s\n",tmp->sex);
printf("电话:%s\n",tmp->tel);
printf("地址:%s\n",tmp->add);
}
else printf("输入错误!\n");
printf("\n");
printf("\n");
}
/**********************************
删除联系人*************
***********************************/
//删除结点*************
void delete_node(Dbllink *head)
{
Dbllink tmp;
int fn;
tmp = (*head)->next;
char num[10];
char name[5];
char flag[1];
printf("*************************\n");
printf("请选择查询方式:\n");
printf("1.序号查询\n");
printf("2.姓名查询\n");
printf("*************************\n");
printf("\n");
printf("请输入选择序号:");
scanf("%d",&fn);
if(fn == 2)
{
printf("请输入姓名:");
scanf("%s",name);
while((tmp != (*head)) && (strcmp(tmp->name,name) != 0))
{
tmp = tmp->next;
}
printf("\n");
printf("序号:%s\n",tmp->num);
printf("姓名:%s\n",tmp->name);
printf("性别:%s\n",tmp->sex);
printf("电话:%s\n",tmp->tel);
printf("地址:%s\n",tmp->add);
}
else if(fn == 1)
{
printf("请输入查找的序号:");
scanf("%s",num);
while((tmp != *head) && (strcmp(tmp->num,num) != 0))
{
tmp = tmp->next;
}
while((tmp->next == *head) && (strcmp(tmp->num,num) > 0))
{
tmp = NULL;
printf("没有此序号!\n");
}
printf("\n");
printf("序号:%s\n",tmp->num);
printf("姓名:%s\n",tmp->name);
printf("性别:%s\n",tmp->sex);
printf("电话:%s\n",tmp->tel);
printf("地址:%s\n",tmp->add);
}
else printf("输入错误!\n");
printf("\n");
printf("是否真的要删除此结点?(y/n)");
scanf("%s",flag);
if(strcmp(flag,"y") == 0)
{
tmp->next->prior = tmp->prior;
tmp->prior->next = tmp->next;
free(tmp);
}
printf("\n");
}
/*************************************
查看所有联系人************
***************************************/
void display_node(Dbllink *head)
{
Dbllink tmp;
tmp = (*head)->next;
while(tmp != *head)
{
printf("\n");
printf("***********************\n");
printf("序号:%s\n",tmp->num);
printf("姓名:%s\n",tmp->name);
printf("性别:%s\n",tmp->sex);
printf("电话:%s\n",tmp->tel);
printf("地址:%s\n",tmp->add);
printf("***********************\n");
printf("\n");
tmp = tmp->next;
}
printf("\n");
printf("\n");
}
/***************************************
修改联系人信息*************
****************************************/
void update_node(Dbllink *head)
{
Dbllink tmp;
int fn;
tmp = (*head)->next;
char num[10];
char name[5];
char flag[1];
printf("*************************\n");
printf("请选择查询方式:\n");
printf("1.序号查询\n");
printf("2.姓名查询\n");
printf("*************************\n");
printf("\n");
printf("请输入选择序号:");
scanf("%d",&fn);
if(fn == 2)
{
printf("请输入姓名:");
scanf("%s",name);
while((tmp != (*head)) && (strcmp(tmp->name,name) != 0))
{
tmp = tmp->next;
}
printf("\n");
printf("序号:%s\n",tmp->num);
printf("姓名:%s\n",tmp->name);
printf("性别:%s\n",tmp->sex);
printf("电话:%s\n",tmp->tel);
printf("地址:%s\n",tmp->add);
}
else if(fn == 1)
{
printf("请输入查找的序号:");
scanf("%s",num);
while((tmp != *head) && (strcmp(tmp->num,num) != 0))
{
tmp = tmp->next;
}
while((tmp->next == *head) && (strcmp(tmp->num,num) > 0))
{
tmp = NULL;
printf("没有此序号!\n");
}
printf("\n");
printf("序号:%s\n",tmp->num);
printf("姓名:%s\n",tmp->name);
printf("性别:%s\n",tmp->sex);
printf("电话:%s\n",tmp->tel);
printf("地址:%s\n",tmp->add);
printf("\n");
printf("\n");
printf("是否真的要删除此结点?(y/n)");
scanf("%s",flag);
printf("\n");
if(strcmp(flag,"y") == 0)
{
printf("请输入联系人序号:");
scanf("%s",tmp->num);
printf("请输入联系人姓名:");
scanf("%s",tmp->name);
printf("请输入联系人性别:");
scanf("%s",tmp->sex);
printf("请输入联系人电话:");
scanf("%s",tmp->tel);
printf("请输入联系人地址:");
scanf("%s",tmp->add);
}
}
}
/*************************************
退出通信录***************
***************************************/
void exit_node(Dbllink *head)
{
printf("/*********************/\n");
printf("\n");
printf("\n");
printf(" 感 谢 您的 使 用 ^_^ \n");
printf("\n");
printf("\n");
printf("/*********************/\n");
printf("\n");
printf("\n");
exit;
}
通信录
最新推荐文章于 2022-11-12 22:29:06 发布