C语言实现通讯录系统

C语言实现通讯录系统

本章我将和大家分享一个简单的通讯录系统
设计要求

我们设计的程序为手机通讯录系统,这是使用C语言写成。
本程序具有和一般的通讯录一样的功能,有最基本的数据添加、修改、查看、删除等功能。

功能设计

  1. 总体设计
    通讯录构架

  2. 详细设计

         1. 查找联系人
           通过总菜单选择查找联系人,输入需要查找的联系人姓名(或者该联系人姓,或者该联系人名)。
           若存在该联系人,则输出该联系人的信息,若通讯录中不存在此联系人,则输出查无此人,并且可以继续从总菜单选择所需要的功能。
         2. 添加联系人
          通过总菜单选择添加联系人,然后根据提示,依次输入要添加联系人的信息,中间用空格隔开。
         3. 删除联系人
          通过总菜单选择删除联系人,然后输入联系人的姓名,如通讯录中存在此联系人则输出删除成功,若不存在此联系人,则输出删除失败。
         4. 修改联系人
         通过总菜单选择修改联系人,然后输入联系人的信息,中间用空格隔开。
    
  3. 源代码

  • 建立头文件ContactBook.h
#include<assert.h>
#include<stdlib.h>
#include<string.h>

#define NAME_MAX 30
#define TEL_MAX 20
#define ADDR_MAX 100

#define CONTACT_BOOK_MAX 100

typedef struct Contact
{
    
    
	char name[NAME_MAX];
	char tel[TEL_MAX];
	char address[ADDR_MAX];
	int age;
}Contact;

typedef struct ContactBook
{
    
    
	Contact array[CONTACT_BOOK_MAX];
	int size;
}ContactBook;


void ContactBookInit(ContactBook* pcb);
void ContactBookAdd(ContactBook* pcb, Contact* pc);
void ContactBookDel(ContactBook* pcb, char* name);
void ContactUpdate(ContactBook* pcb,Contact* pc);
Contact* ContactBookSearch(ContactBook* pcb, char* name);
void ContactBookPrint(ContactBook* pcb);

  • ContactBook.c
#include"ContactBook.h"
#include<stdio.h>
void ContactBookInit(ContactBook* pcb)
{
    
    
	assert(pcb);
	pcb->size = 0;
	memset(pcb->array, 0, sizeof(Contact)*CONTACT_BOOK_MAX);
}
void ContactBookAdd(ContactBook*pcb, Contact* pc)
{
    
    
	assert(pcb);
	assert(pc);

	if (pcb->size == CONTACT_BOOK_MAX)
	{
    
    
		printf("通讯录已满\n");
		return;
	}
	memcpy(&pcb->array[pcb->size], pc, sizeof(Contact));
	pcb->size++;
}
void ContactBookPrint(ContactBook* pcb)
{
    
    
	for (int i = 0; i < pcb->size; ++i)
	{
    
    
		printf("name:%s\n", pcb->array[i].name);
		printf("addr:%s\n", pcb->array[i].address);
		printf("tel:%s\n", pcb->array[i].tel);
		printf("age:%d\n", pcb->array[i].age);
		printf("\n");

	}
}
void ContactBookDel(ContactBook* pcb, char* name)
{
    
    
	assert(pcb);
	assert(name);

	int i = 0;
	for (; i < pcb->size; ++i)
	{
    
    
		if (strcmp(pcb->array[i].name, name) == 0)
		{
    
    //删除
			memmove(pcb->array + i, pcb->array + i + 1, (pcb->size - i - 1)*sizeof(Contact));
			break;
		}
	}
	if (i == pcb->size)
	{
    
    
		printf("删除失败,查无此人\n");
	}
	else
	{
    
    
		pcb->size--;
		printf("删除成功\n");
	}

}

void ContactUpdate(ContactBook* pcb, Contact* pc)
{
    
    
	assert(pcb);
	assert(pc);

	int i = 0;
	for (; i < pcb->size; ++i)
	{
    
    
		if (strcmp(pcb->array[i].name, pc->name) == 0)
		{
    
    
			memcpy(pcb->array + i, pc,sizeof(Contact));
			break;
		}
	}
	if (i == pcb->size)
	{
    
    
		printf("修改失败,查无此人\n");
	}
	else
	{
    
    
		printf("修改成功\n");
	}
}
Contact* ContactBookSearch(ContactBook* pcb, char* name)
{
    
    
	for (int i = 0; i < pcb->size; ++i)
	{
    
    
		if (strstr(pcb->array[i].name, name) != NULL)
		{
    
    
			return &pcb->array[i];
		}
	}
	printf("查无此人\n");
	return NULL;
}
  • Test.c
#include"ContactBook.h"
#include<stdio.h>
void ContactBookTest()
{
    
    
	ContactBook cb;
	ContactBookInit(&cb);

	Contact ct1 = {
    
     "张飞", "18392977286", "绵竹", 40 };
	ContactBookAdd(&cb, &ct1);

	Contact ct2 = {
    
     "关羽", "15129187320", "荆竹", 45 };
	ContactBookAdd(&cb, &ct2);

	ContactBookPrint(&cb);
}
void Menu()
{
    
    
	ContactBook cb;
	ContactBookInit(&cb);

	Contact ct1 = {
    
     "张飞", "18392977286", "绵竹", 40 };
	ContactBookAdd(&cb, &ct1);

	Contact ct2 = {
    
     "关羽", "15129187320", "荆竹", 45 };
	ContactBookAdd(&cb, &ct2);

	int option = 0;

	do
	{
    
    
		printf("**********************************\n");
		printf("*******  1.添加联系人  ***********\n");
		printf("*******  2.删除联系人  ***********\n");
		printf("*******  3.修改联系人  ***********\n");
		printf("*******  4.查找联系人  ***********\n");
		printf("*******  5.展示联系人  ***********\n");
		printf("*******  0.退出        ***********\n");
		printf("**********************************\n");
		scanf("%d", &option);
		if (option == 1)
		{
    
    
			printf("请依次输入联系人的姓名、地址、联系方式、年龄:\n");
			Contact ct;
			scanf("%s", ct.name);
			scanf("%s", ct.address);
			scanf("%s", ct.tel);
			scanf("%d", &ct.age);

			ContactBookAdd(&cb, &ct);
			printf("添加成功\n");
		}
		else if (option == 2)
		{
    
    
			printf("请输入要删除联系人的姓名\n");
			char name[NAME_MAX];
			scanf("%s", name);
			ContactBookDel(&cb, name);
		}
		else if (option == 3)
		{
    
    
			printf("请依次输入联系人的姓名、地址、联系方式、年龄:\n");
			Contact ct;
			scanf("%s", ct.name);
			scanf("%s", ct.address);
			scanf("%s", ct.tel);
			scanf("%d", &ct.age);

			ContactUpdate(&cb, &ct);
		}
		else if (option == 4)
		{
    
    
			printf("请输入要查找联系人的姓名\n");
			char name[NAME_MAX];
			scanf("%s", name);
			Contact* pc = ContactBookSearch(&cb, name);
			if (pc)
			{
    
    
				printf("查找成功\n");
				printf("name:%s\n", pc->name);
				printf("addr:%s\n", pc->address);
				printf("tel:%s\n", pc->tel);
				printf("age:%d\n", pc->age);
				printf("\n");
			}

		}
		else if (option == 5)
		{
    
    
			ContactBookPrint(&cb);
		}
		else if (option != 0)
		{
    
    
			printf("无此选项,请重新输入\n");
		}

	} while (option != 0);
}
int main()
{
    
    
	Menu();
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_45796387/article/details/113006568