news 2026/10/15 13:03:22

通讯管理系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
通讯管理系统
#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; } //主函数(程序入口)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/16 12:03:48

一周回顾:勒索飙升、AI上阵、人形机器人被盯上

一周回顾&#xff1a;勒索飙升、AI上阵、人形机器人被盯上 本周全球网络安全态势呈现显著的“多线高压”&#xff1a;勒索软件赎金在过去三年累计突破 21 亿美元&#xff0c;显示产业化、专业化趋势持续加速&#xff1b;AI 被进一步武器化&#xff0c;日本出现高中生借助 Chat…

作者头像 李华
网站建设 2026/10/15 12:45:28

嵌入式FOTA进阶:文件系统直接升级+串口分段传输深度指南!

随着嵌入式设备对FOTA升级效率与稳定性的要求提升&#xff0c;文件系统直写与串口分段传输已成为核心进阶技术。前者通过精简数据写入路径&#xff0c;降低存储开销与升级耗时&#xff1b;后者利用串口的稳定通道&#xff0c;以分段方式保障升级包传输的可靠性。本文将系统拆解…

作者头像 李华
网站建设 2026/10/15 18:18:22

AutoGPT提示词工程技巧:提升任务拆解准确性

AutoGPT提示词工程技巧&#xff1a;提升任务拆解准确性 在智能体技术逐渐从“被动响应”迈向“主动执行”的今天&#xff0c;我们正见证一个关键转折点——AI不再只是回答问题的工具&#xff0c;而是能独立完成复杂目标的协作者。像AutoGPT这样的自主代理系统&#xff0c;已经展…

作者头像 李华
网站建设 2026/10/16 12:43:59

Stable Diffusion AIGC 视觉设计实战教程之 07-图生图

图生图生成逻辑 图生图生成逻辑概述 Stable Diffusion 图生图技术的底层逻辑主要基于深度学习&#xff0c;特别是生成对抗网络&#xff08;GAN&#xff09;和扩散模型&#xff08;Diffusion Model&#xff09;的结合&#xff0c;其核心思想是通过训练大量的数据来让模型学习如何…

作者头像 李华
网站建设 2026/10/15 19:46:59

当毕业论文不再是“一个人的深夜战场”:一位研究生眼中的AI科研协作者如何重塑写作流程

凌晨两点&#xff0c;寝室只剩下电脑屏幕的微光。你盯着文档里那句改了八遍的引言&#xff0c;焦虑感像潮水般涌来——文献综述逻辑松散、方法描述不够严谨、讨论部分缺乏深度……这不是某一个人的困境&#xff0c;而是每年数百万毕业生共同面对的“写作黑洞”。但最近&#xf…

作者头像 李华
网站建设 2026/10/15 10:49:19

统计提交svn代码行数,文件以及文档

本文介绍了如何使用Java开发一个小工具&#xff0c;以统计指定时间段内SVN用户提交的代码行数、文件数量以及文档变化。通过svn log和svn diff命令结合&#xff0c;实现对SVN提交记录的分析&#xff0c;满足对人员工作量可视化的需要。下面简述下自己的开发思想。 一。核心是sv…

作者头像 李华