C语言实现通讯录
本文实例为大家分享了C语言实现通讯录的具体代码,供大家参考,具体内容如下
实现的功能有:
1.初始化通讯录;
2.通讯录中增加条目;
3.删除通讯录中的指定条目;
4.按指定规则查找通讯录中特定条目;
5.打印通讯录中的所有信息;
6.修改通讯录的指定条目;
7.销毁通讯录;
8.将通讯录内容保存在文件;
9.将文件中的内容加载回内存。
**Addr_Book.h**
#pragmaonce #include#include #include #include #defineNAME_SIZE200 #definePHONE_SIZE200 #defineADDR_SIZE200 typedefstructPersonInfo{ charname[NAME_SIZE]; charphone[PHONE_SIZE]; charaddr[ADDR_SIZE]; }PersonInfo; #defineFILE_PATH"./data.txt" enum{ DISPLAY=1, ADD=2, ERASE=3, FIND=4, MODIFY=5, EXIT=0 }; typedefstructAddrBook{ PersonInfo*data;//内容 size_tsize;//联系人数量 size_tcapacity;//通讯录容量 }AddrBook; /** *@brief初始化通讯录 * *@paramaddr_book */ voidAddrBookInit(AddrBook*addr_book); /** *@brief通讯录中增加条目 * *@paramaddr_book */ voidAddrBookAdd(AddrBook*addr_book); /** *@brief删除通讯录中的指定条目 * *@paramaddr_book */ voidAddrBookErase(AddrBook*addr_book); /** *@brief按指定规则查找通讯录中特定条目 * *@paramaddr_book */ voidAddrBookFind(AddrBook*addr_book); /** *@brief打印通讯录中的所有信息 * *@paramaddr_book */ voidAddrBookDisplay(AddrBook*addr_book); /** *@brief修改通讯录的指定条目 * *@paramaddr_book */ voidAddrBookModify(AddrBook*addr_book); /** *@brief销毁通讯录 * *@paramaddr_book */ voidAddrBookDestroy(AddrBook*addr_book); /** *@brief将通讯录内容保存在文件 * *@paramaddr_book */ voidAddrBookSave(AddrBook*addr_book); /** *@brief将文件中的内容加载回内存. * *@paramaddr_book */ voidAddrBookLoad(AddrBook*addr_book);
**Addr_Book.c**
#define_CRT_SECURE_NO_WARNINGS1
#include"Addr_Book.h"
//打印通讯录
voidAddrBookDisplay(AddrBook*addr_book){
if(addr_book==NULL){
return;
}
printf("\n====================通讯录=========================\n");
printf("|姓名|号码|地址|\n");
printf("|----------------|---------------|----------------|\n");
size_ti=0;
for(;isize;++i){
printf("|%s|%s|%s|\n",
addr_book->data[i].name,addr_book->data[i].phone,addr_book->data[i].addr);
printf("|----------------|---------------|----------------|\n");
}
}
//初始化通讯录
voidAddrBookInit(AddrBook*addr_book){
if(addr_book==NULL){
return;
}
addr_book->size=0;
addr_book->capacity=1;
addr_book->data=(PersonInfo*)malloc(sizeof(PersonInfo)*addr_book->capacity);
}
//扩大内存
voidAddrBookRelloc(AddrBook*addr_book){
if(addr_book==NULL){
return;
}
addr_book->capacity=addr_book->capacity*2+1;//内存不够,扩大容量
PersonInfo*new_data=(PersonInfo*)malloc(sizeof(PersonInfo)*addr_book->capacity);//开辟新的空间大小
size_ti=0;
for(;isize;++i){
new_data[i]=addr_book->data[i];//将旧内存赋给新内存
}
free(addr_book->data);//释放旧内存
addr_book->data=new_data;
}
//添加联系人
voidAddrBookAdd(AddrBook*addr_book){
if(addr_book==NULL){
return;
}
if(addr_book->size>=addr_book->capacity){//内存不够需要扩大内存
AddrBookRelloc(addr_book);
}
size_tcur=addr_book->size;
++addr_book->size;
printf("添加联系人\n");
printf("输入姓名:");
scanf("%s",addr_book->data[cur].name);
printf("输入号码:");
scanf("%s",addr_book->data[cur].phone);
printf("输入地址:");
scanf("%s",addr_book->data[cur].addr);
printf("添加结束!\n");
}
//删除指定联系人
voidAddrBookErase(AddrBook*addr_book){
if(addr_book==NULL){
return;
}
chardelete_name[200]={0};
printf("输入要删除联系人姓名:");
scanf("%s",&delete_name);
size_ti=0;
for(;isize;++i){
if(strcmp(addr_book->data[i].name,delete_name)){
free(addr_book->data);
addr_book->size--;
printf("已删除!");
}
else{
printf("删除失败,请重新输入联系人!");
}
}
}
//保存内容
voidAddrBookSave(AddrBook*addr_book){
FILE*fp=fopen(FILE_PATH,"w");
if(fp==NULL){
printf("打开文件失败!\n");
return;
}
size_ti=0;
for(;isize;++i){
fprintf(fp,"|%s|%s|%s|\n",
addr_book->data[i].name,addr_book->data[i].phone,addr_book->data[i].addr);
}
fclose(fp);
}
//按姓名查找联系人
voidAddrBookFind(AddrBook*addr_book){
if(addr_book==NULL){
return;
}
chardelete_name[200]={0};
printf("输入所查找联系人姓名:");
scanf("%s",&delete_name);
size_ti=0;
for(;isize;++i){
if(strcmp(addr_book->data[i].name,delete_name)){
printf("找到了,该联系人信息为:姓名:%s,号码:%s,地址:%s\n",
addr_book->data[i].name,addr_book->data[i].phone,addr_book->data[i].addr);
}
else{
printf("此人不存在!\n");
}
}
}
//修改联系人信息
voidAddrBookModify(AddrBook*addr_book){
if(addr_book==NULL){
return;
}
charname[200]={0};
printf("输入要修改的联系人名字:");
scanf("%s",&name);
size_ti=0;
for(;isize;++i)
{
if(strcmp(addr_book->data[i].name,name)==0)
{
printf("这是第%lu个联系人:\n",i+1);
printf("此人信息为:\n姓名:%s,电话:%s,地址:%s\n",
addr_book->data[i].name,
addr_book->data[i].phone,
addr_book->data[i].addr);
}
}
size_tnum=0;
printf("输入要修改的联系人编号:");
scanf("%lu",&num);
charname2[200];
charphone[200];
charaddr[200];
printf("请输入新的姓名:");
scanf("%s",name2);
strcpy(addr_book->data[num-1].name,name2);
printf("请输入新的电话号码:");
scanf("%s",phone);
strcpy(addr_book->data[num-1].phone,phone);
printf("请输入新的地址:");
scanf("%s",addr);
strcpy(addr_book->data[num-1].addr,addr);
printf("修改成功!\n");
return;
}
//销毁通讯录
voidAddrBookDestroy(AddrBook*addr_book){
if(addr_book==NULL)
{
printf("addr_bookisnull\n");
return;
}
else
{
addr_book->size=0;
addr_book->capacity=0;
free(addr_book->data);
printf("销毁成功!\n");
}
}
//将文件中的内容加载回内存
voidAddrBookLoad(AddrBook*addr_book){
if(addr_book=NULL){
printf("通讯录为空!\n");
return;
}
FILE*fp=fopen(FILE_PATH,"r");
if(fp=NULL){
printf("打开文件失败!\n");
return;
}
while(!feof(fp)){
if(addr_book->size>=addr_book->capacity){
AddrBookRelloc(addr_book);
}
size_tcur=addr_book->size;
fscanf(fp,"%s%s%s\n",addr_book->data[i].name,addr_book->data[i].phone,addr_book->data[i].addr);
addr_book->size++;
}
fclose(fp);
}
//===============
//以下为测试代码
//===============
voidmenu(){
AddrBookaddr_book;
AddrBookInit(&addr_book);
AddrBookLoad(&addr_book);
while(1){
printf("============1.打印通讯录=============\n");
printf("============2.增加联系人=============\n");
printf("============3.删除联系人=============\n");
printf("============4.查找联系人=============\n");
printf("============5.修改联系人=============\n");
printf("============6.销毁通讯录=============\n");
printf("============0.退出通讯录=============\n");
intchoice=0;
printf("请输入所需功能:");
scanf("%d",&choice);
switch(choice){
caseDISPLAY:
AddrBookDisplay(&addr_book);
break;
caseADD:
AddrBookAdd(&addr_book);
AddrBookSave(&addr_book);
break;
caseERASE:
AddrBookErase(&addr_book);
break;
caseFIND:
AddrBookFind(&addr_book);
break;
caseMODIFY:
AddrBookModify(&addr_book);
AddrBookSave(&addr_book);
break;
caseDESTROY:
AddrBookDestroy(&addr_book);
break;
caseEXIT:
printf("退出通讯录!\n");
break;
default:
printf("请输入正确选择:");
break;
}
}
}
intmain(){
menu();
return0;
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。