使用C语言完成简易通讯录的编程

本文介绍了一个简单的电子通讯录系统的实现,包括添加、显示、搜索和删除联系人的功能,并提供了完整的C语言代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求

制作一个电子通讯录,通过该通讯录能存入好友ID 号、姓名(英文)、手机号码、家庭住址、公司电话。

模块

l 主界面:主要显示软件功能。

A) 添加好友信息。

B) 列表好友信息。(包含排序功能)

C) 搜索好友

D) 删除好友

添加好友

用户输入 INSERT 命令后,让用户输入好友信息。添加成功或失败都需要提示用户

列表好友:

用户输入 DISPLAY 命令后,好友信息升序排列。

搜索好友:

用户输入 SEARCH 命令后,让用户输入将要搜索好友姓名查询。如果未搜索到请友好提示。如果搜索到,显示出该好友信息。

删除好友:

用户输入 DELETE 命令后,让用户输入将要删除好友姓名删除,如果存在同名的多个好友,则列表出,所有同名的好友信息,让用户通过输入 ID 号删除。提示用户删除成功。

//头文件
#ifndef __addresslist_H__
#define __addresslist_H__

#define TRUE  1
#define FALSE 0

typedef struct address
{
	int ID;
	char name[20];
	int telephone;
	char home[50];
	int Co;
	struct address* next;
}Node;

Node* Create_list();//头结点

int Insert(Node*h);//添加

void Display(Node*h);//排序显示

int Find(Node*h);//搜索好友

int Delete(Node*H);//删除好友
//功能模块函数
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "addresslist.h"



//主界面
void menu()
{
	printf("************通讯录**************\n");
	printf("*                              *\n");	
	printf("*         1:添加好友           *\n");	
	printf("*         2:列表好友           *\n");
	printf("*         3:搜索好友           *\n");
	printf("*         4:删除好友           *\n");
	printf("*         5:  退出             *\n");
	printf("*                              *\n");
	printf("********************************\n");
	printf("\n");
}

//创建头结点
Node* Create_list()
{
	Node*list = (Node*)malloc(sizeof(Node)/sizeof(char));
	if (list == NULL)
		return NULL;
	list->next = NULL;
	return list;
}

//添加好友
int Insert(Node*h)
{
	if (h == NULL)
	{
		return FALSE;
	}

	Node* node = (Node*)malloc(sizeof(Node)/sizeof(char));
	if (node == NULL)
	{
		printf("添加失败\n");
		return FALSE;
	}
	printf("*************添加好友************\n");
	printf("请输入好友信息\n");//一步步提示添加信息
	printf("好友ID:");
	scanf("%d", &node->ID);
	
	printf("好友姓名:");
	scanf("%s", node->name);
	
	printf("联系方式:");
	scanf("%d", &node->telephone);
	
	printf("家庭住址:");
	scanf("%s", node->home);
	
	printf("公司电话:");
	scanf("%d", &node->Co);
	
	Node*tmp = h;
	while(tmp->next)
	{
		tmp = tmp->next;
	}
	tmp->next = node;
	node->next = NULL;
	
	printf("添加成功\n");
	
	return TRUE;
}


//显示好友
void Display(Node*h)
{
	if (h->next == NULL)
	{
		printf("当前无好友\n");
		return;
	}
	
	Node*tmp = h->next;//h是头结点的地址,h->next是第一个结点的地址
	printf("***************好友列表****************\n");
	while (tmp)
	{
		printf("——————————————————————————\n");
		printf("\tID:%d\n", tmp->ID);
		printf("\t姓名:%s\n", tmp->name);
		printf("\t联系方式:%d\n", tmp->telephone);
		printf("\t家庭住址:%s\n", tmp->home);
		printf("\t公司电话:%d\n", tmp->Co);
		printf("——————————————————————————\n");
		printf("\n");
		
		tmp = tmp->next;
	}
	
	printf("\n");
	
}


//搜索好友
int Find(Node*h)
{
	char name[20];
	int count = 0;
	Node*tmp = NULL;
	if (h->next == NULL)
	{
		printf("当前无好友\n");
		return FALSE;
	}
	printf("**************查询*****************\n");
	putchar('\n');
	printf("请输入要查找的好友姓名:");
	scanf("%s", name);
	
	tmp = h->next;//h是头结点的地址,h->next是第一个结点的地址
	while(tmp)
	{
		if(strcmp(name, tmp->name) == 0)
		{
			printf("——————————————————————————\n");
			printf("\tID:%d\n", tmp->ID);
			printf("\t姓名:%s\n", tmp->name);
			printf("\t联系方式:%d\n", tmp->telephone);
			printf("\t家庭住址:%s\n", tmp->home);
			printf("\t公司电话:%d\n", tmp->Co);
			printf("——————————————————————————\n");
			printf("\n");
			
			count++;
		}
		tmp = tmp->next;
	}
	
	if(0 == count)
	{
		printf("当前未有此好友\n");
		return FALSE;
	}
	
	return TRUE;
}


//删除好友
int Delete(Node*h)
{
	char name[20];
	Node*tmp = NULL;
	Node*p = NULL;
	int count = 0;
	int i;
	if (h->next == NULL)
	{
		printf("当前无好友\n");
		return FALSE;
	}
	printf("**************删除*****************\n");
	putchar('\n');
	printf("请输入要删除的好友姓名:");
	scanf("%s", name);
	
	tmp = h->next;
	while(tmp)
	{
		if(strcmp(name, tmp->name) == 0)
		{
			count++;
		}
		tmp = tmp->next;
	}
	
    if(count > 1)
	{
		tmp = h->next;
		while(tmp)
		{
			if(strcmp(name, tmp->name) == 0)
			{
				printf("——————————————————————————\n");
				printf("\tID:%d\n", tmp->ID);
				printf("\t姓名:%s\n", tmp->name);
				printf("\t联系方式:%d\n", tmp->telephone);
				printf("\t家庭住址:%s\n", tmp->home);
				printf("\t公司电话:%d\n", tmp->Co);
				printf("——————————————————————————\n");
				printf("\n");
			}
			tmp = tmp->next;
		}
		printf("请输入要删除好友的ID:");
		scanf("%d", &i);
		
		tmp = h;//找到要删好友的前一个好友
		while(tmp->next)
		{
			if(i == tmp->next->ID)//tmp指向要删好友的前一个好友
			{
				break;
			}
			tmp = tmp->next;
		}
		if(tmp->next == NULL)
		{
			printf("输入有误,删除失败\n");
			return FALSE;
		}
		p = tmp->next;//p指向要删好友
		tmp->next = p->next;
		free(p);
		printf("删除成功\n");
	}
	else if(count == 1)
	{
		tmp = h;//找到要删好友的前一个好友
		while(tmp->next)
		{
			if(strcmp(name, tmp->next->name) == 0)//tmp指向要删好友的前一个好友
			{
				break;
			}
			tmp = tmp->next;
		}
		p = tmp->next;//p指向要删好友
		tmp->next = p->next;
		free(p);
		printf("删除成功\n");
	}
	else
	{
		printf("当前无此好友\n");
	}
	
	return TRUE;
}
//主函数
#include <stdio.h>
#include <stdlib.h>
#include "addresslist.h"
int main()
{
	int func;//功能选项
	int top;
	Node* head = Create_list();
	if (head == NULL)
	{
		return -1;
	}
	
	while(1)
	{	
		func = 0;
		menu();
		printf("请输入您需要的功能选项:");
		scanf("%d", &func);
		switch(func)
		{
			case 1:
			{
				system("clear");
				Insert(head);//头插
				printf("返回主界面请按1:");
				scanf("%d", &top);
				if(top == 1)
				{
					break;
				}
				else
				{
					while(1)
					{
						printf("输入错误指令请重新输入!\n");
						scanf("%d", &top);
						if(top == 1)
						{
							break;
						}
					}
					break;
				}
			}
			case 2:
			{
				system("clear");
				Display(head);//按添加顺序排列
				printf("返回主界面请按1:");
				scanf("%d", &top);
				if(top == 1)
				{
					break;
				}
				else
				{
					while(1)
					{
						printf("输入错误指令请重新输入!\n");
						scanf("%d", &top);
						if(top == 1)
						{
							break;
						}
					}
					break;
				}
			}
			case 3:
			{
				system("clear");
				Find(head);
				printf("返回主界面请按1:");
				scanf("%d", &top);
				if(top == 1)
				{
					break;
				}
				else
				{
					while(1)
					{
						printf("输入错误指令请重新输入!\n");
						scanf("%d", &top);
						if(top == 1)
						{
							break;
						}
					}
					break;
				}
			}
			case 4:
			{
				system("clear");
				Delete(head);
				printf("返回主界面请按1:");
				scanf("%d", &top);
				if(top == 1)
				{
					break;
				}
				else
				{
					while(1)
					{
						printf("输入错误指令请重新输入!\n");
						scanf("%d", &top);
						if(top == 1)
						{
							break;
						}
					}
					break;
				}
			}
			case 5:
			{
				exit(0);
			}
			default:
				system("clear");
				printf("输入错误指令请重新输入!\n");
				sleep(1);
				printf("正在返回主界面\n");
				printf(".\n");
				sleep(1);
				printf("..\n");
				sleep(1);
				printf("...\n");
				sleep(1);
				break;
		}
	}
	return 0;
}




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值