c语言链表简易通讯录

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define SUCCESS 10000
#define FAILURE 10001
#define SIZE 100

typedef int ElemType;
/*struct Info
{
char name[32]; // char name; 通讯录 结构体
char tel[32]; //电话
char home[64]; // 家庭住址
char htel[32]; // 住宅电话
ElemType age; // 年龄
ElemType No; // 编号
};
typedef struct Info info;
/

struct Node //定义链表 (节点)结构体
{
char name[32]; // char *name; 通讯录 结构体
char tel[32]; //电话
char home[64]; // 家庭住址
char htel[32]; // 住宅电话
ElemType age; // 年龄
ElemType No; // 数据域(个人信息结构体指针)
struct Node *next; // 指针域 指向下一个节点也就是下一个结构体
};

typedef struct Node Link;
typedef Link *pLink; //指向结构体节点的指针

int InitLink(pLink *l) //初始化
{
if(NULL == l)
{
return FAILURE;
}

*l =(pLink)malloc(sizeof(Link)*1);
if(NULL == (*l))
{
	return FAILURE;
}

(*l)->next = NULL;



printf("Init Success! \n");
sleep(1);

return SUCCESS;

}

void welcome()
{
system(“clear”);
printf("\n\n\n");
printf("\t\t***欢 *********************\n");
printf("\t\t***迎 *\n");
printf("\t\t您 **********欧力给
\n");
printf("\t\t***使 *****************\n");
printf("\t\t
用 ********************\n");
sleep(1);
} // 通讯录打印界面

void menu()
{
system(“clear”);
printf("\n\n\n");
printf("\t\t******************************************\n");
printf("\t\t******************************************\n");
printf("\t\t 1、增加信息 2、修改信息\n");
printf("\t\t 3、查找信息 4、删除信息\n");
printf("\t\t 5、显示信息 6、退出\n");
printf("\t\t******************************************\n");
printf("\t\t******************************************\n");
}

int SaveInfo(int argc,)
{

}
int addinfo(pLink i) // i 是个人信息结构体的指针
{

pLink q = i;   //定义另一个头结点的指针q

char name[32] = {0};
char tel[32] = {0};
char home[32] = {0};
char htel[32] = {0};
int  age = 0;
		
printf("请输入姓名,号码,年龄,住址,住宅电话:\n");
scanf("%s%s%d%s%s", name,tel,&age,home,htel);

while(strlen(tel) != 11)
{   
    strcpy(tel,"\0");
	printf("您输入的号码不合法,请重新输入:\n");
	scanf("%s",tel);
} //判断输入的号码长度是否合法

while(q->next != NULL)
{
	if(strcmp(q->next->tel,tel)==0)
    {	
        strcpy(tel,"\0");
        printf("输入号码与%s相同,请重新输入:\n",q->next->name);
		scanf("%s",tel);
    }

	q = q->next;
}        //判断输入的号码是否重复

q = i; //重新指向头指针
while(q->next != NULL )    //根据名字确定指针的位置
{
	if(strcmp(q->next->name,name)>0)
    {
        break;
    }
	q = q->next;
}

pLink n = (pLink)malloc(sizeof(Link) * 1);
if(NULL == n)
{
    return FAILURE;
}

strcpy(n->name, name);
strcpy(n->tel, tel);
n->age = age;
strcpy(n->home, home);
strcpy(n->htel, htel);  //写入 n 里面 

n->next = q->next;
q->next = n;

sleep(1);

return SUCCESS;  

}

int modifyinfo(pLink i) //修改信息
{
pLink q = i; //定义另一个头结点的指针q

char Newname[32] = {0};
char Newtel[32] = {0};
int  Newage = 0;
char Newhome[32] = {0};
char Newhtel[32] = {0};

char Tel[32] = {0};     //输入的需要查找的号码信息


printf("请输入需要修改人的电话:    \n");
scanf("%s",Tel);


while(strlen(Tel) != 11)
{
	strcpy(Tel,"\0");
	printf("您输入的号码不合法,请重新输入号码:\n");
	scanf("%s",Tel);
}      //判断输入的号码长度是否合法


while(q->next != NULL )    
{
	if(0 == strcmp(q->next->tel,Tel))
	{
        break;
	}
	q = q->next;
}
if(q->next == NULL)
{
	printf("查无此人,请重新输入指令! \n");
	printf("Press any key to continue! \n");
	getchar();
	getchar();
	return FAILURE;
}


printf("请输入新的姓名,号码,年龄,住址,住宅电话:\n");
scanf("%s%s%d%s%s", Newname,Newtel,&Newage,Newhome,Newhtel);	
while(strlen(Tel) != 11)
{
	strcpy(Tel,"\0");
	printf("您输入的号码不合法,请重新输入:\n");
	scanf("%s",Tel);
} 

q=q->next;
strcpy(q->name,  Newname);
strcpy(q->tel,  Newtel);
q->age =  Newage;
strcpy(q->home,  Newhome);
strcpy(q->htel,  Newhtel);   

printf("修改成功!\n");
sleep(2);

return SUCCESS;

}

int searchinfo(pLink i)
{
pLink q = i; //定义另一个头结点的指针q
char Tel[32] = {0}; //输入的需要查找的号码信息

printf("请输入需要查找人的电话:    \n");
scanf("%s",Tel);

while(strlen(Tel) != 11)
{
    strcpy(Tel,"\0");
	printf("您输入的号码不合法,请重新输入号码:\n");
	scanf("%s",Tel);
}
while(q->next != NULL )    
{
	if(0 == strcmp(q->next->tel,Tel))
	{
		break;
	}

	q = q->next;
}


if(q->next == NULL)
{
	printf("查无此人,请重新输入指令! \n");
	printf("Press any key to continue! \n");
	getchar();
	getchar();
	return FAILURE;
}                    //判断输入的号码长度是否合法


printf("%s%s%d%s%s\n",q->next->name,q->next->tel,q->next->age,q->next->home,q->next->htel);

return SUCCESS;

}

int deleteinfo(pLink i)
{

pLink q = i;
char Tel[32] = {0};

printf("请输入要删除的联系人号码: \n");
scanf("%s",Tel);
while(strlen(Tel) != 11)
{
    strcpy(Tel,"\0");
	printf("您输入的号码不合法,请重新输入号码:\n");
	scanf("%s",Tel);
}
while(q->next != NULL )    
{
	if(0 == strcmp(q->next->tel,Tel))
	{
		break;
	}
	q = q->next;
}


if(q->next == NULL)
{
	printf("查无此人,请重新输入指令! \n");
	printf("Press any key to continue! \n");
	getchar();
	getchar();
	return FAILURE;
} 
                   //判断输入的号码长度是否合法
printf("Information  of %s has been deleted!\n,p->next->name" );
pLink n = q->next;
q->next = q->next->next;
free(n);

return SUCCESS;
}

int showinfo(pLink i)
{
pLink q = i->next;

while(NULL != q)
{
    printf("name:%s Tel:%s Age:%d Addr:%s Htel:%s\n",q->name,q->tel,q->age,q->home,q->htel);
	q = q->next;
}

printf("Press any key to continue!");
getchar();
getchar();
return SUCCESS;

}

int main()
{
int choice,ret;
pLink link; //设置了一个头结点指针

welcome();
ret = InitLink(&link); //初始化就是设置一个头结点link成为了头结点

if(SUCCESS == ret)
{
	while (1)
	{
		menu();
		scanf("%d", &choice);

		switch(choice)
		{
			case 1:
				ret = addinfo(link);
				if(SUCCESS == ret)
				{
					printf("Add Suuccess! \n");
				}
				else
				{
					printf("Add Failure! \n");
				}
				sleep(2);
				break;
			case 2:
				ret = modifyinfo(link);
				if(SUCCESS == ret)
				{
					printf("Modify Suuccess! \n");
				}
				else
				{
					printf("ModifyFailure! \n");
				}
				sleep(2);
				break;
			case 3:
				ret = searchinfo(link);
				if(SUCCESS == ret)
				{
					printf("Dearch Suuccess! \n");
				}
				else
				{
					printf("DearchFailure! \n");
				}
				sleep(2);
				break;
			case 4:
				ret = deleteinfo(link);
				if(SUCCESS == ret)
				{
					printf("Delete Suuccess! \n");
				}
				else
				{
					printf("Delete Failure! \n");
				}
				break;
			case 5:
				ret = showinfo(link);
				if(SUCCESS == ret)
				{
					printf("Show Over! \n");
				}
				else
				{
					printf("Show Failure! \n");
				}
				sleep(2);
				break;
			case 6:
				exit(0);
				break;                        //退出进程
            default:
				printf("Error!\n");
		}
	}
}

else
{
	printf("Init Failure!\n");
}

return 0;

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值