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(;i size;++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(;i size;++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(;i size;++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(;i size;++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(;i size;++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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。