单链表实现通讯录功能

头文件:

#ifndef _LINKLIST_H
#define _LINKLIST_H

#define FAILURE    10000
#define SUCCESS    10001
#define TRUE       10002
#define FALSE      10003
#define NONE                 "\e[0m"
#define BLACK                "\e[0;30m"
#define L_BLACK              "\e[1;30m"
#define RED                  "\e[0;31m"
#define L_RED                "\e[1;31m"
#define GREEN                "\e[0;32m"
#define L_GREEN              "\e[1;32m"
#define BROWN                "\e[0;33m"
#define YELLOW               "\e[1;33m"
#define BLUE                 "\e[0;34m"
#define L_BLUE               "\e[1;34m"
#define PURPLE               "\e[0;35m"
#define L_PURPLE             "\e[1;35m"
#define CYAN                 "\e[0;36m"
#define L_CYAN               "\e[1;36m"
#define GRAY                 "\e[0;37m"
#define WHITE                "\e[1;37m"

typedef int ElemType; 

struct node
{
	char name[20];
	ElemType old;   //数据域
	struct node *next;   //指针域
};

typedef struct node Node;

int LinkInit(Node **l);
void LinkInsert(Node *l);
void seek(Node *l);
void delete(Node *l);
void chglist(Node *l);

#endif

功能函数:

#include "LinkList.h"
#include <stdlib.h>
#include <stdio.h>

int LinkInit(Node **l)
{
	*l = (Node *)malloc(sizeof(Node) * 1);   //分配头结点   l 就是头指针
	if (NULL == *l)
	{
		return FAILURE;
	}

	(*l)->next = NULL;    //头结点指针域为空

	return SUCCESS;
}

void LinkInsert(Node *l)  //n 插入的位置
{

	char flag = 'y';
	
	Node *p = l;
	while(flag == 'y')
	{
		

		if (NULL == l)
		{
			printf("地址空间申请失败!\n");
			sleep(2);
			break;
		}

		while (p->next != NULL)
		{
			p = p->next;
			
		}


		Node *q = (Node *)malloc(sizeof(Node) * 1);
		if (NULL == q)
		{
			printf("malloc error!\n");
			sleep(2);
			break;
		}

		printf(L_PURPLE"请输入添加联系人的信息:name,old:\n"NONE);
		
		scanf("%s", q->name);
		getchar();
		scanf("%d",&q->old);
		q->next = p->next;
		p->next = q;
		
		printf("是否继续添加:y or n ?\n");
		getchar();
		
		scanf("%c", &flag);
	}
	
}

void LinkTraverse(Node *l)
{
	
	if (NULL == l)
	{
		printf("malloc error !\n");
	}
	Node *q = l;

	while (q->next)
	{
		q = q->next;
		printf("%s %d\n", q->name, q->old);
		
	}
	sleep(2);
}

void seek(Node *l)
{
		
	Node *q = l;
	char s[20] = {0};
	printf("请输入要查找的联系人的名字:\n");
	scanf("%s", s);
	
	while(q->next)
	{
		q = q->next;
		if(strcmp(s, q->name) == 0)
		{
			printf("此人信息如下:%s %d\n", q->name, q->old);
			break;
			
		}
		
	}
	if(q == NULL)
		printf("查无此人");
		sleep(2);
	
}

void delete(Node *l)
{
	char s[20] = {0};
	printf("请输入想要删除的联系人名字:\n");
	scanf("%s", s);
	Node *q = l;

	if (l == NULL)
	{
		printf("malloc error !\n");
		sleep(2);
	}
	
	while(q->next)
	{
		q = q->next;
		if(strcmp(s, (q->next)->name) == 0)
		{
			break;
			
		}
		
	}
	
	Node *n = q->next;
	q->next = n->next;
	free(n);

}

void chglist(Node *l)
{
	Node *q = l;
	char s[20] = {0};
	printf("请输入要修改的联系人的名字:\n");
	scanf("%s", s);
	
	while(q->next)
	{
		q = q->next;
		if(strcmp(s, q->name) == 0)
		{
			printf("请重新输入该联系人的信息:\n");
			scanf("%s", q->name);
			getchar();
			scanf("%d", &q->old);
			break;
			
		}
		
	}
	if(q == NULL)
		printf("查无此人");
		sleep(2);
	
}

void welcome()
{
	system("clear");

	printf(YELLOW"\n\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
	printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n"NONE);
	printf(L_BLUE"**________**________**_______**____\n"NONE);
	printf(L_PURPLE"\n     欢迎来到菲利普专用山寨机!\n"NONE);
	printf(L_BLUE"**________**________**_______**____\n"NONE);
	printf(YELLOW"\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
	printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n"NONE);
	
	sleep(2);
}

void menu()
{
	system("clear");
	
	printf(GREEN"\n\n\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n\n"NONE);
	printf(BLUE"        1、添加联系人                2、查看联系人信息\n"NONE);
	printf(PURPLE"        3、查找联系人                4、删除联系人信息\n"NONE);
	printf(L_GREEN"        5、GPS全球定位               6、一键导入联系人\n"NONE);
	printf(L_BLUE"        7、修改联系人                8、退出山寨菲利普\n"NONE);
	printf(GREEN"\n******************************************************************\n\n\n"NONE);
}

主函数:

#include "LinkList.h"
#include <stdio.h>
#include <stdlib.h>


int main()
{
	int ret, i, choice;
	Node *first = NULL;   //头指针
	system("clear");
	ret = LinkInit(&first);
	if (ret == FAILURE)
	{
		printf(YELLOW"\n\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
		printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n"NONE);
		printf(L_BLUE"**________**________**_______**____\n"NONE);
		printf(L_PURPLE"\n     系统空间不足,无法初始化通讯录!\n"NONE);
		printf(L_BLUE"**________**________**_______**____\n"NONE);
		printf(YELLOW"\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
		printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n"NONE);
		exit(0);
	}
	else
	{
		printf(YELLOW"\n\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
		printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n"NONE);
		printf(L_BLUE"**________**________**_______**____\n"NONE);
		printf(L_PURPLE"\n     通讯录初始化成功!即将进入系统服务。。。\n"NONE);
		printf(L_BLUE"**________**________**_______**____\n"NONE);
		printf(YELLOW"\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
		printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n"NONE);
	}
	
	sleep(3);
	
	
	welcome();

	while(1)
	{
		menu();

		printf("请输入功能选项:\n");
		printf("Please input:\n");

		scanf("%d", &choice);

		switch(choice)
		{
			case 1:
				LinkInsert(first);
				break;
			case 2:
				LinkTraverse(first);
				break;
			case 3:
				seek(first);
				break;
			case 4:
				delete(first);
				break;
			case 5:
				printf("抱歉,请联系客服充值会员即可享受此服务!\n");
				sleep (3);
				break;
			case 6:
				printf("此服务只有内部员工才可获得的福利,你没希望了!\n");
				sleep(3);
				break;
			case 7:
				chglist(first);
				break;
			case 8:
				printf("山寨机就是牛!\n");
				printf("\n\n\n因为牛b所以信赖!\n\n\n欢迎下次使用!\n\n\n");
				sleep(3);
				system("clear");
				exit(0);
				break;
		}
	}
	
	return 0;
}


猜你喜欢

转载自blog.csdn.net/weixin_42720703/article/details/81435712