通信录

#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;
}
	

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值