当前位置: 首页 > news >正文

通讯管理系统

#include <stdio.h> #include <stdlib.h>//动态内存分配 #include <string.h> typedef struct Contact{ int id; char name[100]; char phone[100]; char email[100]; char group[100]; struct Contact*next; } Contact; //定义联系人结构体 typedef struct{ Contact*head; int count; int next_id; } AddressBook; //定义通讯录管理结构体 void initAddressBook(AddressBook*book){ book->head = NULL; book->count = 0; book->next_id = 1; } //初始化通讯录 void printMenu(){ printf("\n======================\n"); printf("\n====通讯录管理系统====\n"); printf("\n======================\n"); printf("\n======请选择操作======\n"); printf("1.添加联系人\n"); printf("2.显示联系人\n"); printf("3.搜索联系人\n"); printf("4.修改联系人\n"); printf("5.删除联系人\n"); printf("6.分组管理联系人\n"); printf("7.导出数据到文件 \n"); printf("8.导入数据\n"); printf("0.退出\n"); printf("\n请输入选项:"); } //打印菜单 void addContact(AddressBook*book){ printf("\n======添加联系人======\n"); Contact*newContact = (Contact*)malloc(sizeof(Contact)); if(newContact == NULL){ printf("内存分配失效!\n"); return; }//申请内存空间 newContact->id = book->next_id; book->next_id++;//给联系人编号 printf("请输入姓名:"); scanf("%s",newContact->name); printf("请输入电话:"); scanf("%s",newContact->phone); printf("请输入邮箱:"); scanf("%s",newContact->email); printf("请输入分组:"); scanf("%s",newContact->group);//获取用户输入 newContact->next = book->head; book->head = newContact; book->count++; printf("\n已成功添加联系人!ID:%d\n",newContact->id); } //添加联系人 void displayAllContacts(AddressBook*book){ printf("\n===所有联系人%d人===\n",book->count); if(book->count == 0) printf("通讯录为空\n"); else{ Contact*current = book->head; printf("ID\t姓名\t\t电话\t\t邮箱\t\t分组\n"); while(current!=NULL){ printf("%d\t%s\t\t%s\t\t%s\t\t%s\n", current->id,current->name,current->phone,current->email,current->group); current = current->next; } } } //显示所有联系人 void searchContact(AddressBook*book) { printf("\n====搜索联系人====\n"); printf("1.姓名搜索\n"); printf("2.电话搜索\n"); printf("3.分组搜索\n"); printf("请选择搜索方式:"); int choice; scanf("%d",&choice); char keyword[100]; printf("请输入关键词:"); scanf("%s",keyword); Contact*current = book->head; int found = 0; while(current!=NULL){ int match = 0; switch(choice){ case 1: if(strstr(current->name,keyword)!=NULL){ match = 1; } break; case 2: if(strstr(current->phone,keyword)!=NULL){ match = 1; } break; case 3: if(strcmp(current->group,keyword)==0){ match = 1; } break; } if(match){ if(!found){ printf("ID\t姓名\t\t电话\t\t邮箱\t\t分组\n"); found = 1; } printf("%d\t%s\t\t%s\t\t%s\t\t%s\n", current->id,current->name,current->phone,current->email,current->group); } current = current->next; } if(!found){ printf("未匹配到相关联系人\n"); } } //搜索联系人 void deleteContact(AddressBook*book){ printf("\n====删除联系人====\n"); if(book->count == 0){ printf("通讯录为空!\n"); return; } printf("请输入要删除的联系人ID:\n"); int id; scanf("%d",&id); Contact*current = book->head; Contact*prev = NULL; while(current != NULL && current->id != id){ prev = current; current = current->next; } if(current == NULL){ printf("未找出ID为%d的联系人",id); } else{ if(prev == NULL){ book->head = current->next; } else{ prev->next = current->next; } free(current); book->count--; printf("联系人删除成功!"); } } //删除联系人 void exportfile(AddressBook*book){ printf("\n====导出数据====\n"); char filename[100]; printf("请输入文件名:"); scanf("%s",filename); FILE*file = fopen(filename,"wb"); if(file == NULL){ printf("文件创建失败!\n"); return; } fwrite(&book->count,sizeof(int),1,file);//写入联系人数量 Contact*current = book->head; while(current!=NULL){ fwrite(current,sizeof(Contact),1,file); current = current->next;//写入每个联系人 } fclose(file); printf("数据导出成功!共导出%d个联系人到文件%s\n",book->count,filename); } //文件操作(导入、导出) int main(){ AddressBook book; initAddressBook(&book); int choice; do{ printMenu(); scanf("%d",&choice); switch(choice){ case 1: addContact(&book); break; case 2: displayAllContacts(&book); break; case 3: searchContact(&book); break; case 4: modifyContact(&book); break; case 5: deleteContact(&book); break; case 6: manageGroup(&book); break; case 7: exportfile(&book); break; case 8: importfile(&book); break; case 0: printf("\n退出系统ing...\n"); freeMemory(&book); break; default: printf("输入错误!请重新输入:"); break; } }while(choice!=0) return 0; } //主函数(程序入口)
http://www.jsqmd.com/news/93357/

相关文章:

  • 突破工业成像极限:AtikACIS系列精准捕捉每一细节
  • 喷砂除锈设备工作原理是什么?| 广东鑫百通喷砂机厂家
  • IT人力外包公司选型指南五大步骤精准匹配
  • hash
  • AutoGPT能否接入物联网设备?智能家居控制畅想
  • 大数据领域分布式计算的地理信息系统融合
  • Qwen3-14B Function Calling功能调用实战案例分享
  • SIP协议媒体协商深度研究报告:呼叫流向、负载对称性与Opus动态生态
  • AutoGPT能否自动注册账号?验证码识别限制说明
  • 第4.8章 自动驾驶融合定位方法总结(八):Apollo源码NDT地图生成——从点云到高精度定位地图的华丽转身
  • 计算机专业生打 CTF 的 4 大核心价值 + 入门到获奖全指南
  • AI开发神器:VSCode核心优势全解析
  • AutoGPT镜像弹性伸缩架构:应对流量高峰
  • 揭秘SVN:如何轻松统计提交人文件提交次数与数量
  • 性能测试脚本参数化方法指南
  • 2025年铜陵废铜回收公司权威推荐榜单:废铜金属回收‌/废铜收购‌/高价回收废铜源头公司精选 - 品牌推荐官
  • CTF 解题核心思维 + 新手入门全攻略
  • 博奥龙Hybridoma Feeder添加因子(含常见问题解答及客户评价)
  • 2025年质量好的充电桩直流接触器/储能直流接触器厂家选购指南与推荐 - 品牌宣传支持者
  • [Windows] Aiseesoft屏幕录制 - 专业高清录屏工具
  • 2025 年 12 月砂尘试验箱实力厂家权威推荐榜:军标砂尘试验箱/防尘试验箱,严苛环境模拟与可靠品质深度解析 - 品牌企业推荐师(官方)
  • 图算法:从基础到应用
  • 2025 年 12 月光亮退火厂家权威推荐榜:碳钢/真空退火处理,揭秘工艺精湛与品质卓越的行业标杆 - 品牌企业推荐师(官方)
  • 2025 年市场上四川花岗石厂家最新用户好评排行榜 - 朴素的承诺
  • Qwen3-14B镜像下载官网:全能型中型大模型的部署首选
  • 2025年优质的法式羽绒被/羽绒被品牌厂家排行榜 - 品牌宣传支持者
  • ollama下载配置Qwen3-8B后如何提升token生成速度?
  • 2025年口碑好的煤棚网架高评价厂家推荐榜 - 品牌宣传支持者
  • 莫凡电视:全国地方台全覆盖!解码优化 + 低延迟
  • 2025年热门的淄博节能潜水泵/淄博消防潜水泵厂家选购指南与推荐 - 品牌宣传支持者