C语言实现通讯录

1.通讯录的功能:

(1).存放100人的信息;

(2)每个人的信息包括:姓名,性别,年龄,电话,地址;

(3)增加联系人信息;

(4)删除指定联系人信息;

(5)查找指定联系人;

(6)修改指定联系人信息;

(7)显示联系人信息;

(8)对联系人的信息进行排序;

2.创建三个文件名:

  分别:text.c:测试通讯录的功能;

            contact.c:通讯录的实现模块;

            contact.h:申明;

3.首先创建通讯录的菜单:

     其中使用enum联合体使得代码可读性增强。(text.c)

#define _CRT_SECURE_NO_WARNINGS 1

#include "contact.h"

void menu()
{
	printf("************************\n");
	printf("***1.add    2.del ******\n");
	printf("***3.search  4.modify ***\n");
	printf("***5.show    6. sort  ****\n");
	printf("***0.exit            *****\n");
	printf("**************************\n");
}

enum option
{
	EXIT,
	ADD,
	DEL,
	SEARCH,
	MODIFY,
	SHOW,
	SORT,
};


int main()
{
	int input = 0;
	do
	{
		menu();
		printf("请输入要选择的项目\n");
		scanf("%d", &input);
		switch (input)
		{
		case ADD:
			break;
		case DEL:
			break;
		case SEARCH:
			break;
		case MODIFY:
			break; 
		case SHOW:
			break;
		case SORT:
			break;
		case EXIT:
			printf("退出成功\n");
			break;
		default:
			printf("输入错误\n");
			break;
		}

	} while (input);

	return 0;
}


4.表示一个人以及多个人的通讯录信息:使用结构体(contact.h)

#include<stdio.h>
#define MAX 100
#define MAX_NAME 20
#define MAX_SEX 5
#define MAX_TELE 12
#define MAX_ADDR 30

typedef struct PeoInfo
{
	char name[MAX_NAME];
	int age;
	char sex[MAX_SEX];
	int tele[MAX_TELE];
	char addr[MAX_ADDR];
}PeoInfo;

typedef struct contact
{
	PeoInfo date[MAX];//用来存放一百联系人的信息;
	int sz;//记录有效联系人的个数;
}contact,*pcontact;

5.初始化通讯录:

 (contact.h):

//通讯录的初始化:
void Initcontact(contact* pc);

(text.c):

(contact.c):

#include "contact.h"

void Initcontact(contact* pc)
{
	pc->sz = 0;
	memset(pc->date, 0, sizeof(pc->date));
}

6.增加指定联系人

(contact.h):

(text.c):

 (contact.c):

void Addcontact(contact* pc)
{
	if (pc->sz == MAX)
	{
		printf("通讯录已经存满\n");
		return 1;
	}
	printf("请输入名字\n");
	scanf("%s", pc->date[pc->sz].name);
	printf("请输入年龄\n");
	scanf("%s", pc->date[pc->sz].age);
	printf("请输入性别\n");
	scanf("%s", pc->date[pc->sz].sex);
	printf("请输入电话\n");
	scanf("%s", pc->date[pc->sz].tele);
	printf("请输入地址\n");
	scanf("%s", pc->date[pc->sz].addr);
	pc->sz++;
	printf("添加成功\n");
}

7.显示联系人的信息:

(contact.h):

 (text.c):

  (contact.c):

void Showcontact(const contact* pc)
{
	printf("%-10s %-4s %-5d %-12s %-30s\n", "姓名", "性别", "年龄", "电话", "住址");
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		printf("%-10s %-4s %-5d %-12s %-30s\n", pc->date[i].name,
			pc->date[i].sex, pc->date[i].age, pc->date[i].tele, pc->date[i].addr);
	}

}

8.查找指定联系人: 

(contact.h):

  (text.c):

   (contact.c):

static Findname(const contact* pc, char name)
{
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		if (0 == strcmp(pc->date[i].name, name))
		{
			return i;
		}
	}
	return -1;
}

void Searchcontact(const contact* pc)
{
	char name[MAX_NAME] = { 0 };
	int pos = Findname(pc, name);
	if (pos = -1)
	{
		printf("找不到相应联系人\n");
		return 1;
	}
	//找到了就打印找到的数据
	printf("%-10s %-4s %-5d %-12s %-30s\n", "姓名", "性别", "年龄", "电话", "住址");
	printf("%-10s %-4s %-5d %-12s %-30s\n",
		pc->date[pos].name,
		pc->date[pos].sex,
		pc->date[pos].age, 
		pc->date[pos].tele,
		pc->date[pos].addr);

}

9.删除指定联系人:

(contact.h):

  (text.c):

 (contact.c):

void Delcontact(pcontact pc)
{
	if (pc->sz == 0)
	{
		printf("通讯录信息为空无法删除\n");
		return ;
	}
	char name[MAX_NAME] = { 0 };
	printf("请输入要删除的联系人信息\n");
	scanf("%s", name);
	int pos = Findname(pc, name);
	if (-1 == pos)
	{
		printf("要删除的人不存在\n");
		return ;
	}
	int i = 0;
	for (i = pos; i < pc->sz - 1; i++)
	{
		pc->date[i] = pc->date[i + 1];

	}
	pc->sz--;
	printf("删除成功\n");
}

 9.修改指定联系人的信息:

(contact.h):

  (text.c):

 

  (contact.c):

void Modifycontact(contact* pc)
{
	char name[MAX_NAME] = { 0 };
	printf("请输入要修改联系人的信息\n");
	scanf("%s", name);
	int pos = Findname(pc, name);
	if (-1 == pos)
	{
		printf("要修改联系人的信息不存在\n");
		return;
	}
	//找到了就打印找到的数据
	printf("%-10s %-4s %-5d %-12s %-30s\n", "姓名", "性别", "年龄", "电话", "住址");
	printf("请输入姓名\n");
	scanf("%-10s", pc->date[pos].name);
	printf("请输入性别\n");
	scanf("%-4s", pc->date[pos].sex);
	printf("请输入年龄\n");
	scanf("%-5s", pc->date[pos].age);
	printf("请输入电话\n");
	scanf("%-12s", pc->date[pos].tele);
	printf("请输入地址\n");
	scanf("%-30s", pc->date[pos].addr);
	printf("修改成功\n");
}

 10.排序通讯录联系人:

(contact.h):

 (text.c):

   (contact.c):

void cmp_by_name(const void* e1, const void* e2)
{
	return strcmp(((PeoInfo*)e1)->name, ((PeoInfo*)e2)->name);
}


void Sortcontact(contact* pc)
{
	qsort(pc->date, pc->sz, sizeof(PeoInfo), cmp_by_name);
	printf("排序成功\n");
}

11.整体代码:

(contact.h):

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

#define MAX 100
#define MAX_NAME 20
#define MAX_SEX 5
#define MAX_TELE 12
#define MAX_ADDR 30

typedef struct PeoInfo
{
	char name[MAX_NAME];
	int age;
	char sex[MAX_SEX];
	int tele[MAX_TELE];
	char addr[MAX_ADDR];
}PeoInfo;

typedef struct contact
{
	PeoInfo date[MAX];//用来存放一百联系人的信息;
	int sz;//记录有效联系人的个数;
}contact,*pcontact;


//通讯录的初始化:
void Initcontact(contact* pc);//使用到通讯录的内容

//增加指定联系人
void Addcontact(contact* pc);//使用到通讯录的内容

//显示联系人信息
void Showcontact(const contact* pc);

//删除指定联系人
//void Delcontact(contact* pc);
void Delcontact(pcontact pc);//使用的pcontact是前面的结构体指针

//查找指定联系人
void Searchcontact(const contact* pc);

//修改指定联系人的信息
void Modifycontact(contact* pc);

//排序通讯录元素
void Sortcontact(contact* pc);

(text.c):

#define _CRT_SECURE_NO_WARNINGS 1

#include "contact.h"

void menu()
{
	printf("************************\n");
	printf("***1.add    2.del ******\n");
	printf("***3.search  4.modify ***\n");
	printf("***5.show    6. sort  ****\n");
	printf("***0.exit            *****\n");
	printf("**************************\n");
}

enum option
{
	EXIT,
	ADD,
	DEL,
	SEARCH,
	MODIFY,
	SHOW,
	SORT,
};


int main()
{
	int input = 0;
	contact con;//创建一个通讯录结构体名,后面直接调用con就行;
	Initcontact(&con);

	do
	{
		menu();
		printf("请输入要选择的项目\n");
		scanf("%d", &input);
		switch (input)
		{
		case ADD:
			Addcontact(&con);
			break;
		case DEL:
			Delcontact(&con);
			break;
		case SEARCH:
			Searchcontact(&con);
			break;
		case MODIFY:
			Modifycontact(&con);
			break; 
		case SHOW:
			Showcontact(&con);
			break;
		case SORT:
			Sortcontact(&con);
			break;
		case EXIT:
			printf("退出成功\n");
			break;
		default:
			printf("输入错误\n");
			break;
		}

	} while (input);

	return 0;
}

  (contact.c):

#define _CRT_SECURE_NO_WARNINGS 1
#include "contact.h"

void Initcontact(contact* pc)
{
	pc->sz = 0;
	memset(pc->date, 0, sizeof(pc->date));
}

void Addcontact(contact* pc)
{
	if (pc->sz == MAX)
	{
		printf("通讯录已经存满\n");
		return ;
	}
	printf("请输入名字\n");
	scanf("%s", pc->date[pc->sz].name);
	printf("请输入年龄\n");
	scanf("%d", pc->date[pc->sz].age);
	printf("请输入性别\n");
	scanf("%s", pc->date[pc->sz].sex);
	printf("请输入电话\n");
	scanf("%s", pc->date[pc->sz].tele);
	printf("请输入地址\n");
	scanf("%s", pc->date[pc->sz].addr);
	pc->sz++;
	printf("添加成功\n");
}

void Showcontact(const contact* pc)
{
	printf("%-10s %-4s %-5s %-12s %-30s\n", "姓名", "性别", "年龄", "电话", "住址");
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		printf("%-10s %-4s %-5d %-12s %-30s\n",
			pc->date[i].name,
			pc->date[i].sex,
			pc->date[i].age,
			pc->date[i].tele,
			pc->date[i].addr);
	}

}

static Findname(const contact* pc, char name)
{
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		if (0 == strcmp(pc->date[i].name, name))
		{
			return i;
		}
	}
	return -1;
}

void Delcontact(pcontact pc)
{
	if (pc->sz == 0)
	{
		printf("通讯录信息为空无法删除\n");
		return;
	}
	char name[MAX_NAME] = { 0 };
	printf("请输入要删除的联系人信息\n");
	scanf("%s", name);
	int pos = Findname(pc, name);
	if (-1 == pos)
	{
		printf("要删除的人不存在\n");
		return;
	}
	int i = 0;
	for (i = pos; i < pc->sz - 1; i++)
	{
		pc->date[i] = pc->date[i + 1];

	}
	pc->sz--;
	printf("删除成功\n");
}

void Searchcontact(const contact* pc)
{
	char name[MAX_NAME] = { 0 };
	printf("请输入要查找人的信息\n");
	scanf("%s", name);
	int pos = Findname(pc, name);
	if (-1==pos)
	{
		printf("找不到相应联系人\n");
		return ;
	}
	//找到了就打印找到的数据
	printf("%-10s %-4s %-5s %-12s %-30s\n", "姓名", "性别", "年龄", "电话", "住址");
	printf("%-10s %-4s %-5d %-12s %-30s\n",
		pc->date[pos].name,
		pc->date[pos].sex,
		pc->date[pos].age, 
		pc->date[pos].tele,
		pc->date[pos].addr);

}


void Modifycontact(contact* pc)
{
	char name[MAX_NAME] = { 0 };
	printf("请输入要修改联系人的信息\n");
	scanf("%s", name);
	int pos = Findname(pc, name);
	if (-1 == pos)
	{
		printf("要修改联系人的信息不存在\n");
		return;
	}
	//找到了就打印找到的数据
	printf("%-10s %-4s %-5d %-12s %-30s\n", "姓名", "性别", "年龄", "电话", "住址");
	printf("请输入姓名\n");
	scanf("%-10s", pc->date[pos].name);
	printf("请输入性别\n");
	scanf("%-4s", pc->date[pos].sex);
	printf("请输入年龄\n");
	scanf("%-5s", pc->date[pos].age);
	printf("请输入电话\n");
	scanf("%-12s", pc->date[pos].tele);
	printf("请输入地址\n");
	scanf("%-30s", pc->date[pos].addr);
	printf("修改成功\n");
}

void cmp_by_name(const void* e1, const void* e2)
{
	return strcmp(((PeoInfo*)e1)->name, ((PeoInfo*)e2)->name);
}


void Sortcontact(contact* pc)
{
	qsort(pc->date, pc->sz, sizeof(PeoInfo), cmp_by_name);
	printf("排序成功\n");
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用C语言实现通讯录管理系统的示例: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_CONTACTS 100 typedef struct { char name[50]; char phone[20]; char qq[20]; } Contact; Contact contacts[MAX_CONTACTS]; int numContacts = 0; void addContact() { if (numContacts >= MAX_CONTACTS) { printf("通讯录已满,无法添加新联系人。\n"); return; } Contact newContact; printf("请输入联系人姓名:"); scanf("%s", newContact.name); printf("请输入联系人电话号码:"); scanf("%s", newContact.phone); printf("请输入联系人QQ号码:"); scanf("%s", newContact.qq); contacts[numContacts] = newContact; numContacts++; printf("联系人添加成功!\n"); } void deleteContact() { if (numContacts == 0) { printf("通讯录为空,无法删除联系人。\n"); return; } char name[50]; printf("请输入要删除的联系人姓名:"); scanf("%s", name); int foundIndex = -1; for (int i = 0; i < numContacts; i++) { if (strcmp(contacts[i].name, name) == 0) { foundIndex = i; break; } } if (foundIndex == -1) { printf("未找到该联系人。\n"); return; } for (int i = foundIndex; i < numContacts - 1; i++) { contacts[i] = contacts[i + 1]; } numContacts--; printf("联系人删除成功!\n"); } void searchContact() { if (numContacts == 0) { printf("通讯录为空,无法查找联系人。\n"); return; } char keyword[50]; printf("请输入要查找的关键字:"); scanf("%s", keyword); int found = 0; for (int i = 0; i < numContacts; i++) { if (strstr(contacts[i].name, keyword) != NULL || strstr(contacts[i].phone, keyword) != NULL || strstr(contacts[i].qq, keyword) != NULL) { printf("姓名:%s\n", contacts[i].name); printf("电话号码:%s\n", contacts[i].phone); printf("QQ号码:%s\n", contacts[i].qq); printf("\n"); found = 1; } } if (!found) { printf("未找到匹配的联系人。\n"); } } void modifyContact() { if (numContacts == 0) { printf("通讯录为空,无法修改联系人。\n"); return; } char name[50]; printf("请输入要修改的联系人姓名:"); scanf("%s", name); int foundIndex = -1; for (int i = 0; i < numContacts; i++) { if (strcmp(contacts[i].name, name) == 0) { foundIndex = i; break; } } if (foundIndex == -1) { printf("未找到该联系人。\n"); return; } Contact modifiedContact; printf("请输入新的联系人姓名:"); scanf("%s", modifiedContact.name); printf("请输入新的联系人电话号码:"); scanf("%s", modifiedContact.phone); printf("请输入新的联系人QQ号码:"); scanf("%s", modifiedContact.qq); contacts[foundIndex] = modifiedContact; printf("联系人修改成功!\n"); } void browseContacts() { if (numContacts == 0) { printf("通讯录为空。\n"); return; } printf("通讯录中的联系人:\n"); for (int i = 0; i < numContacts; i++) { printf("姓名:%s\n", contacts[i].name); printf("电话号码:%s\n", contacts[i].phone); printf("QQ号码:%s\n", contacts[i].qq); printf("\n"); } } void clearContacts() { numContacts = 0; printf("通讯录已清空。\n"); } void sortContacts() { if (numContacts == 0) { printf("通讯录为空,无法排序。\n"); return; } for (int i = 0; i < numContacts - 1; i++) { for (int j = 0; j < numContacts - i - 1; j++) { if (strcmp(contacts[j].name, contacts[j + 1].name) > 0) { Contact temp = contacts[j]; contacts[j] = contacts[j + 1]; contacts[j + 1] = temp; } } } printf("通讯录已按姓名排序。\n"); } int main() { int choice; while (1) { printf("通讯录管理系统\n"); printf("1. 添加联系人\n"); printf("2. 删除联系人\n"); printf("3. 查找联系人\n"); printf("4. 修改联系人\n"); printf("5. 浏览联系人\n"); printf("6. 清空通讯录\n"); printf("7. 按姓名排序\n"); printf("0. 退出\n"); printf("请输入操作编号:"); scanf("%d", &choice); switch (choice) { case 1: addContact(); break; case 2: deleteContact(); break; case 3: searchContact(); break; case 4: modifyContact(); break; case 5: browseContacts(); break; case 6: clearContacts(); break; case 7: sortContacts(); break; case 0: printf("感谢使用通讯录管理系统,再见!\n"); exit(0); default: printf("无效的操作编号,请重新输入。\n"); break; } printf("\n"); } return 0; } ``` 该通讯录管理系统具有以下功能: 1. 添加联系人:输入联系人的姓名、电话号码和QQ号码,将其添加到通讯录中。 2. 删除联系人:根据联系人的姓名,从通讯录中删除对应的联系人。 3. 查找联系人:根据关键字,在通讯录中查找匹配的联系人,并显示其姓名、电话号码和QQ号码。 4. 修改联系人:根据联系人的姓名,修改对应联系人的姓名、电话号码和QQ号码。 5. 浏览联系人:显示通讯录中所有联系人的姓名、电话号码和QQ号码。 6. 清空通讯录:清空通讯录中的所有联系人。 7. 按姓名排序:按照联系人的姓名对通讯录进行排序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值