用链表实现通讯录的基本功能

头文件

#ifndef _ADL_LINKLIST_H
#define _ADL_LINKLIST_H

#define N 20
#define M 100
#define FAILURE 10001
#define SUCCESS 10002


/*颜色管理*/
#define NONE         "\033[m"  
#define RED          "\033[0;32;31m"
#define LIGHT_RED    "\033[1;31m"
#define GREEN        "\033[0;32;32m"
#define LIGHT_GREEN  "\033[1;32m"
#define BLUE         "\033[0;32;34m"
#define LIGHT_BLUE   "\033[1;34m"
#define DARY_GRAY    "\033[1;30m"
#define CYAN         "\033[0;36m"
#define LIGHT_CYAN   "\033[1;36m"
#define PURPLE       "\033[0;35m"
#define LIGHT_PURPLE "\033[1;35m"
#define BROWN        "\033[0;33m"
#define YELLOW       "\033[1;33m"
#define LIGHT_GRAY   "\033[0;37m"
#define WHITE        "\033[1;37m"

struct LinkMan
{
	char name[N];
	char age[N];
	char sex[N];
	char phonenum[N];
	struct LinkMan * next;
};
typedef struct LinkMan linkman;

//函数申明
void welcome(); 
int menu(int e);
int Linklist_init(linkman **l);
int Addinfo(linkman *l, linkman *info);
int Showinfo(linkman *l);
int searchinfo(linkman *l, char *ptr);
int deleteinfo(linkman *l, char *ptr);
int changeinfo(linkman *l); 

#endif

自定义函数

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

//欢迎界面
void welcome()
{
	system("clear");
	printf("\n");
	printf(PURPLE"****\n"NONE);
	sleep(1);
	system("clear");
	printf("\n");
	printf(PURPLE"***********\n"NONE);
	sleep(1);
	system("clear");
	printf("\n");
	printf(PURPLE"*****************\n"NONE);
	sleep(1);
	system("clear");
	printf("\n");
	printf(PURPLE"************************\n"NONE);
	sleep(1);
	system("clear");
	printf("\n");
	printf(PURPLE"*****************************\n"NONE);
	sleep(1);
	system("clear");
	printf("\n");
	printf(PURPLE"********************************\n"NONE);
	sleep(1);
	system("clear");
	printf("\n");
	printf(PURPLE"*******"NONE);printf(YELLOW"加载完成,欢迎使用"NONE);printf(PURPLE"********\n"NONE);
	sleep(2);
}

//初始化一个链表
int Linklist_init(linkman **l)
{
	*l = (linkman *) malloc (sizeof(linkman) * 1);
	if(NULL == l)
	{
		return FAILURE;
	}
	
	(*l)->next = NULL;
	
	return SUCCESS;
}

//主菜单界面
int menu(int e)
{
	int num_select; //序号选择功能
	
	printf("\n");
	printf(YELLOW"*********************************\n"NONE);
	printf(GREEN"****------------*------------****\n"NONE);
	printf(BLUE"*  1、添加信息     2、查看信息  *\n"NONE);	
	printf(LIGHT_RED"*  3、查找信息     4、删除信息  *\n"NONE);
	printf(LIGHT_BLUE"*  5、修改信息     6、退出菜单  *\n"NONE);
	printf(GREEN"****------------*------------****\n"NONE);
	printf(YELLOW"*********************************\n"NONE);
	printf("\n");
	
	printf("输入序号选择功能: ");
	scanf("%d", &num_select);
	
	return num_select;	
}

//添加联系人
int Addinfo(linkman *l, linkman *info)
{
	if(NULL == l)
	{
		return FAILURE;
	}
	if(l->next == NULL)
	{
		l->next = info;
		info->next = NULL;
		return SUCCESS;
	}
	
	linkman *p = l;
	info->next = l->next;
	l->next = info;
	
	return SUCCESS;
}

//查看联系人
int Showinfo(linkman *l)
{
	if(NULL == l)
	{
		return FAILURE;
	}
	
	linkman *p = l;
	while(p->next != NULL)
	{
		p = p->next;
		printf("姓名: ");printf("%s\n",p->name);
		printf("年龄: ");printf("%s\n",p->age);
		printf("性别: ");printf("%s\n",p->sex);
		printf("号码: ");printf("%s\n",p->phonenum);
		printf("\n");
	}
	return SUCCESS;
}

//查找联系人
int searchinfo(linkman *l, char *ptr)
{
	if(NULL == l)
	{
		return FAILURE;
	}

	linkman *p = l->next;
	
	while(p != NULL)
	{
		if(strcmp(ptr, p->name) == 0)
		{
			printf("姓名: ");printf("%s\n",p->name);
			printf("年龄: ");printf("%s\n",p->age);
			printf("性别: ");printf("%s\n",p->sex);
			printf("号码: ");printf("%s\n",p->phonenum);
			printf("\n");
		}
		p = p->next;
	}
	return SUCCESS;
}

//删除联系人
int deleteinfo(linkman *l, char *ptr)
{
	if(NULL == l)
	{
		return FAILURE;
	}
	linkman *q = NULL;
	linkman *p = l;
	while(p->next != NULL)
	{
		if(strcmp(ptr, p->next->name) == 0)
		{
			q = p->next;
			p->next = p->next->next;
			free(q);
			return SUCCESS;
		}
		p = p->next;
	}
	return FAILURE;
}

//修改联系人
int changeinfo(linkman *l)
{
	if(NULL == l)
	{
		return FAILURE;
	}
	char ptr[N];
	char new1[N];
	printf("选择要修改的姓名: ");
	scanf("%s",ptr);
	linkman *p = l;
	while(p->next != NULL)
	{
		if(strcmp(ptr, p->next->name) == 0)
		{
			printf("输入要修改的姓名:");
			scanf("%s",new1);
			strcpy(p->next->name,new1);
			strcpy(new1,"");
			
			printf("输入要修改的年龄:");
			scanf("%s",new1);
			strcpy(p->next->age,new1);
			strcpy(new1,"");
			
			printf("输入要修改的性别:");
			scanf("%s",new1);
			strcpy(p->next->sex,new1);
			strcpy(new1,"");
			
			printf("输入要修改的号码:");
			scanf("%s",new1);
			strcpy(p->next->phonenum,new1);
			strcpy(new1,"");
			
			return SUCCESS;
		}
		p = p->next;
	}
	return FAILURE;
}

main主函数

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


int main()
{	
	int ret;
	linkman *first = NULL;//头结点
	linkman *info = NULL;
	
	system("clear");
	printf("****初始化链表开始****\n");
	sleep(1);
	ret = Linklist_init(&first);
	if(FAILURE ==ret)
	{
		printf("初始化链表失败!\n");
		exit(0);
	}
	else
	{
		printf("初始化链表成功!\n");
		sleep(1);
		system("clear");
	}
	
	//welcome();
	while(1)
	{
		int e, num_choice;
		num_choice = menu(e);
		switch(num_choice)
		{
			case 1:
			{
				system("clear");
				info = (linkman *) malloc (sizeof(linkman) * M);
				if(NULL == info)
				{
					printf("Add the info Failure!\n");
				}
				
				printf("输入联系人姓名: ");
				scanf("%s",info->name);
				printf("\n");
				printf("输入联系人年龄: ");
				scanf("%s",&info->age);
				printf("\n");
				printf("输入联系人性别: ");
				getchar();
				scanf("%s",info->sex);
				printf("\n");
				printf("输入联系人号码: ");
				scanf("%s",info->phonenum);
				printf("\n");
				
				ret = Addinfo(first, info);
				if(FAILURE == ret)
				{
					printf("Add the info Failure!\n");
				}
				else
				{
					printf("Add the info Success!\n");
				}
				break;
			}
			case 2:
			{
				ret = Showinfo(first);
				if(FAILURE == ret)
				{
					printf("Show Failure!\n");
				}
				else
				{
					printf("Show Success!\n");
				}
				break;
			}
			case 3:
			{
				char *ptr;
				ptr = (char *) malloc (sizeof(char) * N);
				printf("输入要查找的联系人姓名:  ");
				getchar();
				scanf("%s", ptr);
				ret = searchinfo(first, ptr);
				if(FAILURE == ret)
				{
					printf("Search Failure!\n");
				}
				else
				{
					printf("Search Success!\n");
				}
				break;
			}
			case  4:
			{
				char *ptr;
				ptr = (char *) malloc (sizeof(char) * N);
				printf("输入要删除的联系人姓名:  ");
				getchar();
				scanf("%s", ptr);
			    ret = deleteinfo(first, ptr);
				if(FAILURE == ret)
				{
					printf("Delete Failure!\n");
				}
				else
				{
					printf("Delete Success!\n");
				}	
				break;
			}
			case 5:
			{
				ret = changeinfo(first);
				if(FAILURE == ret)
				{
					printf("Change Failure!\n");
				}
				else
				{
					printf("Change Success!\n");
				}
				break;
			}
			case 6:
			{
				printf("******退出系统中******\n");
				sleep(1);
				exit(0);
				break;
			}
			default:
			{
				printf("输入有误差! 请重新选择!\n");
			}
		}
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/wow66lfy/article/details/81459715