C语言实现通讯录系统 【C语言实现通讯录系统】本章我将和大家分享一个简单的通讯录系统
设计要求
我们设计的程序为手机通讯录系统,这是使用C语言写成。
本程序具有和一般的通讯录一样的功能,有最基本的数据添加、修改、查看、删除等功能。
功能设计
- 总体设计
文章图片
- 详细设计
1. 查找联系人 通过总菜单选择查找联系人,输入需要查找的联系人姓名(或者该联系人姓,或者该联系人名)。 若存在该联系人,则输出该联系人的信息,若通讯录中不存在此联系人,则输出查无此人,并且可以继续从总菜单选择所需要的功能。 2. 添加联系人 通过总菜单选择添加联系人,然后根据提示,依次输入要添加联系人的信息,中间用空格隔开。 3. 删除联系人 通过总菜单选择删除联系人,然后输入联系人的姓名,如通讯录中存在此联系人则输出删除成功,若不存在此联系人,则输出删除失败。 4. 修改联系人 通过总菜单选择修改联系人,然后输入联系人的信息,中间用空格隔开。
- 源代码
- 建立头文件ContactBook.h
#include
#include
#include#define NAME_MAX 30
#define TEL_MAX 20
#define ADDR_MAX 100#define CONTACT_BOOK_MAX 100typedef 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
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
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;
}
推荐阅读
- 关于递归循环的总结(包含题目解析与思路)
- 随想随写|归并排序(MergeSort)
- [??]各种语言入门|[2021-08-11]C语言入门简明教程第6章-数组、字符串和指针
- 纸牌游戏-小猫钓鱼
- 啊哈算法—解救小哈(深度优先搜索)
- Linux服务器开发|记录一次腾讯c/c++ linux后台开发岗面试经历(面试题含答案)
- python|wasm转c调用实战
- ubuntu|ubuntu系统下gcc命令的执行与Makefile的简单使用
- ubuntu|Ubuntu系统里使用gcc和Makefile编译c程序