用c语言写一个通讯录管理系统,要求需要密码,通讯录内容存储在文件中,除开文件指针外不要用到指针,需要有添加联系人,删除联系人,查找联系人,修改联系人,显示所有联系人的功能,须有联系人的姓名,电话,地址

时间: 2024-04-24 09:26:07 浏览: 12
好的,我可以帮您编写一个基于C语言的通讯录管理系统。以下是一个简单的实现示例: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_CONTACTS 100 #define MAX_NAME_LENGTH 50 #define MAX_PHONE_NUMBER_LENGTH 20 #define MAX_ADDRESS_LENGTH 100 // 联系人结构体 typedef struct { char name[MAX_NAME_LENGTH]; char phone[MAX_PHONE_NUMBER_LENGTH]; char address[MAX_ADDRESS_LENGTH]; } Contact; // 全局变量 Contact contacts[MAX_CONTACTS]; int numContacts = 0; char password[20] = "123456"; // 设置初始密码 // 函数声明 void addContact(); void deleteContact(); void searchContact(); void modifyContact(); void displayContacts(); void saveContactsToFile(); void loadContactsFromFile(); void clearBuffer(); int main() { loadContactsFromFile(); // 从文件中加载联系人数据 char input[20]; printf("请输入密码: "); scanf("%s", input); if (strcmp(input, password) != 0) { printf("密码错误,程序退出!\n"); return 0; } int choice; while (1) { printf("\n通讯录管理系统\n"); printf("1. 添加联系人\n"); printf("2. 删除联系人\n"); printf("3. 查找联系人\n"); printf("4. 修改联系人\n"); printf("5. 显示所有联系人\n"); printf("6. 退出\n"); printf("请选择操作: "); scanf("%d", &choice); switch (choice) { case 1: addContact(); break; case 2: deleteContact(); break; case 3: searchContact(); break; case 4: modifyContact(); break; case 5: displayContacts(); break; case 6: saveContactsToFile(); // 保存联系人数据到文件 printf("程序已退出。\n"); return 0; default: printf("无效的选择,请重新输入。\n"); } } return 0; } // 添加联系人 void addContact() { if (numContacts >= MAX_CONTACTS) { printf("联系人已满,无法添加更多联系人。\n"); return; } Contact newContact; printf("\n添加联系人\n"); printf("请输入姓名: "); clearBuffer(); fgets(newContact.name, MAX_NAME_LENGTH, stdin); newContact.name[strcspn(newContact.name, "\n")] = '\0'; // 去除姓名末尾的换行符 printf("请输入电话号码: "); fgets(newContact.phone, MAX_PHONE_NUMBER_LENGTH, stdin); newContact.phone[strcspn(newContact.phone, "\n")] = '\0'; // 去除电话号码末尾的换行符 printf("请输入地址: "); fgets(newContact.address, MAX_ADDRESS_LENGTH, stdin); newContact.address[strcspn(newContact.address, "\n")] = '\0'; // 去除地址末尾的换行符 contacts[numContacts++] = newContact; printf("联系人已添加成功。\n"); } // 删除联系人 void deleteContact() { if (numContacts <= 0) { printf("通讯录为空,无法删除联系人。\n"); return; } char name[MAX_NAME_LENGTH]; printf("\n删除联系人\n"); printf("请输入要删除的联系人姓名: "); clearBuffer(); fgets(name, MAX_NAME_LENGTH, stdin); name[strcspn(name, "\n")] = '\0'; // 去除姓名末尾的换行符 int i, foundIndex = -1; for (i = 0; i < numContacts; i++) { if (strcmp(contacts[i].name, name) == 0) { foundIndex = i; break; } } if (foundIndex == -1) { printf("未找到该联系人。\n"); } else { for (i = foundIndex; i < numContacts - 1; i++) { contacts[i] = contacts[i + 1]; } numContacts--; printf("联系人已删除成功。\n"); } } // 查找联系人 void searchContact() { if (numContacts <= 0) { printf("通讯录为空,无法查找联系人。\n"); return; } char name[MAX_NAME_LENGTH]; printf("\n查找联系人\n"); printf("请输入要查找的联系人姓名: "); clearBuffer(); fgets(name, MAX_NAME_LENGTH, stdin); name[strcspn(name, "\n")] = '\0'; // 去除姓名末尾的换行符 int i, foundIndex = -1; for (i = 0; i < numContacts; i++) { if (strcmp(contacts[i].name, name) == 0) { foundIndex = i; break; } } if (foundIndex == -1) { printf("未找到该联系人。\n"); } else { Contact foundContact = contacts[foundIndex]; printf("姓名: %s\n", foundContact.name); printf("电话号码: %s\n", foundContact.phone); printf("地址: %s\n", foundContact.address); } } // 修改联系人 void modifyContact() { if (numContacts <= 0) { printf("通讯录为空,无法修改联系人。\n"); return; } char name[MAX_NAME_LENGTH]; printf("\n修改联系人\n"); printf("请输入要修改的联系人姓名: "); clearBuffer(); fgets(name, MAX_NAME_LENGTH, stdin); name[strcspn(name, "\n")] = '\0'; // 去除姓名末尾的换行符 int i, foundIndex = -1; for (i = 0; i < numContacts; i++) { if (strcmp(contacts[i].name, name) == 0) { foundIndex = i; break; } } if (foundIndex == -1) { printf("未找到该联系人。\n"); } else { Contact *contact = &contacts[foundIndex]; printf("请输入新的电话号码: "); fgets(contact->phone, MAX_PHONE_NUMBER_LENGTH, stdin); contact->phone[strcspn(contact->phone, "\n")] = '\0'; // 去除电话号码末尾的换行符 printf("请输入新的地址: "); fgets(contact->address, MAX_ADDRESS_LENGTH, stdin); contact->address[strcspn(contact->address, "\n")] = '\0'; // 去除地址末尾的换行符 printf("联系人已修改成功。\n"); } } // 显示所有联系人 void displayContacts() { if (numContacts <= 0) { printf("通讯录为空。\n"); return; } printf("\n所有联系人\n"); int i; for (i = 0; i < numContacts; i++) { Contact contact = contacts[i]; printf("姓名: %s\n", contact.name); printf("电话号码: %s\n", contact.phone); printf("地址: %s\n", contact.address); printf("\n"); } } // 保存联系人数据到文件 void saveContactsToFile() { FILE *file = fopen("contacts.txt", "w"); if (file == NULL) { printf("无法打开文件。\n"); return; } int i; for (i = 0; i < numContacts; i++) { Contact contact = contacts[i]; fprintf(file, "%s,%s,%s\n", contact.name, contact.phone, contact.address); } fclose(file); } // 从文件中加载联系人数据 void loadContactsFromFile() { FILE *file = fopen("contacts.txt", "r"); if (file == NULL) { printf("无法打开文件。\n"); return; } char line[200]; while (fgets(line, sizeof(line), file)) { char *token = strtok(line, ","); if (token == NULL) { continue; } strcpy(contacts[numContacts].name, token); token = strtok(NULL, ","); if (token == NULL) { continue; } strcpy(contacts[numContacts].phone, token); token = strtok(NULL, ","); if (token == NULL) { continue; } strcpy(contacts[numContacts].address, token); numContacts++; } fclose(file); } // 清空输入缓冲区 void clearBuffer() { int c; while ((c = getchar()) != '\n' && c != EOF) {} } ``` 这是一个简单的通讯录管理系统,使用了一个 Contact 结构体来存储联系人的姓名、电话和地址。通过一个全局的 Contact 数组来存储所有的联系人,最多支持存储 100 个联系人。密码默认为"123456",您可以根据需要进行修改。 系统提供了添加联系人、删除联系人、查找联系人、修改联系人和显示所有联系人的功能。联系人数据会保存在名为 "contacts.txt" 的文件中,每个联系人占据一行,字段之间使用逗号分隔。 请注意,这只是一个简单的示例,可能还有一些功能和错误处理方面的改进可以进行。

相关推荐

最新推荐

recommend-type

利用C语言替换文件中某一行的方法

大家都知道C语言提供了文件操作,但是替换文件的某一行比较麻烦,下面是我使用的一个方法,现在分享给大家,有需要的朋友们可以参考借鉴。
recommend-type

C语言课程设计 手机通讯录 管理系统

C语言课程设计 手机通讯录管理系统 适用于C语言的初学者 完成课程设计
recommend-type

基于C语言实现个人通讯录管理系统

之前利用C语言完成了一个关于个人通讯录管理系统的课题,主要是关于联系人的添加、查找、删除、修改、输出以及文件的写入与读出,还有一个甜点功能—模拟通话,它的实现原理也很容易理解,文章末尾会介绍到。...
recommend-type

C语言基于哈希表实现通讯录

主要为大家详细介绍了C语言基于哈希表实现通讯录,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

C语言实现简单航班管理系统

主要为大家详细介绍了C语言实现简单航班管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

用 Python 画一个可以动的爱心

好的,我可以帮助您使用Python来绘制一个动态的爱心。您可以使用turtle库来实现。以下是实现代码: ```python import turtle import math # 设置画布和画笔 canvas = turtle.Screen() canvas.bgcolor("black") pencil = turtle.Turtle() pencil.speed(0) pencil.color("red", "pink") pencil.pensize(3) # 定义爱心函数 def draw_love(heart_size, x_offset=0, y_offset=0):
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。