用c语言写一个通讯录管理系统,要求需要密码,通讯录内容存储在文件中,除开文件指针外不要用到指针,需要有添加联系人,删除联系人,查找联系人,修改联系人,显示所有联系人的功能,须有联系人的姓名,电话,地址
时间: 2024-04-24 09:26:07 浏览: 225
tongxunlu.rar_文件操作_Visual_C++_
好的,我可以帮您编写一个基于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" 的文件中,每个联系人占据一行,字段之间使用逗号分隔。
请注意,这只是一个简单的示例,可能还有一些功能和错误处理方面的改进可以进行。
阅读全文