目录:
1.通讯录的功能
a.存放好友信息(姓名,地址,电话,年龄)
b.添加联系人信息(增)
c.删除联系人信息(删)
d.修改联系人信息(改)
e.查找联系人信息(查)
f.查看所有联系人信息
g.保存联系人信息
满足日常存储信息的需求,可满足定量的通讯录信息管理,实现增删查改功能。
2.运行效果
(1)添加联系人信息(增)
(2)删除联系人信息(删)
(3)修改联系人信息(改)
(4)查找联系人信息(查)
(5)保存联系人信息(增)
关闭程序重新打开
3.源代码
(1)ContactBook.h声明函数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
#define NAME_MAX 30
#define ADDR_MAX 100
#define TEL_MAX 20
#define CONTACT_BOOK_MAX 200
//通信录中信息的数组
typedef struct information
{
char name[NAME_MAX];
char address[ADDR_MAX];
char telephone[TEL_MAX];
int age;
}information;
typedef struct ContactBook
{
//储存联系人的数组
information array[CONTACT_BOOK_MAX];
int size; //实际储存联系人的数量
}ContactBook;
//初始化
void ContactBookInit(ContactBook* pcb);
//添加
void ContactBookAdd(ContactBook* pcb, information* pc);
//删除
void ContactBookDel(ContactBook* pcb, char* name);
//修改
void ContactBookUpdate(ContactBook* pcb, information* pc);
//返回结构体的信息 查找
information* ContactBookSearch(ContactBook* pcb, char* name);
//展示
void ContactBookPrintf(ContactBook* pcb);
//写保存
void ContactBookSaveText(ContactBook* pcb,const char* file);
//读
void ContactBookLoadText(ContactBook* pcb, const char* file);
(2)ContactBook.c实现函数的功能
#include"ContactBook.h"
//通讯录初始化
void ContactBookInit(ContactBook* pcb)
{
assert(pcb);
pcb->size = 0;
memset(pcb->array, 0, sizeof(information)*CONTACT_BOOK_MAX);
}
//添加联系人
void ContactBookAdd(ContactBook* pcb, information* pc)
{
assert(pcb);
assert(pc);
if (pcb->size == CONTACT_BOOK_MAX)
{
printf("添加失败,通讯录已满\n");
return;
}
//拷贝一个information结构体的大小
memcpy(&pcb->array[pcb->size], pc, sizeof(information));
pcb->size++;
}
//展示联系人
void ContactBookPrintf(ContactBook* pcb)
{
if (pcb->size == 0)
{
printf("暂无联系人\n");
}
for (int i = 0; i < pcb->size; ++i)
{
printf("name:%s\n", pcb->array[i].name);
printf("address:%s\n", pcb->array[i].address);
printf("telephone:%s\n", pcb->array[i].telephone);
printf("age:%d\n", pcb->array[i].age);
printf("\n");
}
}
//根据姓名删除联系人
void ContactBookDel(ContactBook* pcb, char* name)
{
assert(pcb);
assert(name);
int i = 0;
for (int i = 0; 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(information));
break;
}
}
if (i == pcb->size)
{
printf("查无此人,删除失败!\n");
}
else
{
//删除一个联系人信息size要少一个
pcb->size--;
printf("删除成功!\n");
}
}
//根据姓名修改联系人信息
void ContactBookUpdate(ContactBook* pcb, information* pc)
{
assert(pcb);
assert(pc);
int i = 0;
for (int i = 0; i < pcb->size; ++i)
{
if (strcmp(pcb->array[i].name, pc->name) == 0)
{
memmove(pcb->array + i, pc,sizeof(information));
break;
}
}
if (i == pcb->size)
{
printf("查无此人,修改失败!\n");
}
else
{
printf("修改成功!\n");
}
}
//查找联系人
information* ContactBookSearch(ContactBook* pcb, char* name)
{
assert(pcb);
assert(name);
int i = 0;
for (int i = 0; i < pcb->size; ++i)
{
//要的是第i个结构体的指针&
return &pcb->array[i];
}
printf("查无此人,查找失败!\n");
return NULL;
}
//写联系人信息并保存
void ContactBookSaveText(ContactBook* pcb, const char* file)
{
//打开文件,读
FILE* fin = fopen(file, "w");
if (fin == NULL)
{
//打印出错误原因
printf("打开文件失败!:%s\n", strerror(errno));
//非正常退出
exit(-1);
}
for (int i = 0; i < pcb->size; ++i)
{
fprintf(fin,"%s\n%s\n%s\n%d\n", pcb->array[i].name, pcb->array[i].address, pcb->array[i].telephone, pcb->array[i].age);
}
fclose(fin);
}
//读取保存到通讯录的联系人信息
void ContactBookLoadText(ContactBook* pcb, const char* file)
{
FILE* fin = fopen(file, "r");
if (fin == NULL)
{
printf("打开文件失败!:%s\n", strerror(errno));
exit(-1);
}
int i = 0;
while (fscanf(fin, "%s\n%s\n%s\n%d\n", pcb->array[i].name, pcb->array[i].address, pcb->array[i].telephone, &pcb->array[i].age) != EOF)
{
++i;
pcb->size++;
}
}
(3)test.c测试
#include"ContactBook.h"
void Menu()
{
ContactBook cb;
ContactBookInit(&cb);
ContactBookLoadText(&cb, "ContactBook.text");
int option = 0;
do
{
printf("*****————————————————-***********\n");
printf("*****|1.添加联系人 2.删除联系人|***********\n");
printf("*****|3.修改联系人 4.查找联系人|***********\n");
printf("*****|5.展示联系人 6.保存信息 |***********\n");
printf("*****|0.退出 |***********\n");
printf("*****————————————————-***********\n");
printf("*************************************************\n");
printf("请选择:>");
scanf("%d", &option);
if (option == 1)
{
information in;
printf("请依次输入需要添加的联系人的姓名:>");
scanf("%s", in.name);
printf("请依次输入需要添加的联系人的地址:>");
scanf("%s", in.address);
printf("请依次输入需要添加的联系人的联系方式:>");
scanf("%s", in.telephone);
printf("请依次输入需要添加的联系人的年龄:>");
scanf("%d", &in.age);
ContactBookAdd(&cb,&in);
printf("添加成功\n");
}
else if (option == 2)
{
printf("请依次输入要删除联系人的姓名:>");
char name[NAME_MAX];
scanf("%s", &name);
ContactBookDel(&cb,name);
}
else if (option == 3)
{
information in;
printf("请依次输入需要修改信息的联系人的姓名:>");
scanf("%s", in.name);
printf("请依次输入需要修改的地址:>");
scanf("%s", in.address);
printf("请依次输入需要修改的联系方式:>");
scanf("%s", in.telephone);
printf("请依次输入需要修改的年龄:>");
scanf("%d", &in.age);
ContactBookUpdate(&cb, &in);
}
else if (option == 4)
{
printf("请依次输入要删除联系人的姓名:>");
char name[NAME_MAX];
scanf("%s", &name);
information* pc = ContactBookSearch(&cb, name);
if (pc != NULL)
{
printf("查找成功\n");
printf("name:%s\n", pc->name);
printf("address:%s\n", pc->address);
printf("telephone:%s\n", pc->telephone);
printf("age:%d\n", pc->age);
printf("\n");
}
}
else if (option == 5)
{
ContactBookPrintf(&cb);
}
else if (option == 6)
{
ContactBookSaveText(&cb, "ContactBook.text");
printf("保存成功\n");
}
else if (option != 0)
{
printf("非法输入,请重新输入!\n");
}
} while (option != 0);
}
int main()
{
Menu();
return 0;
}