你能用c语言写一个通讯录系统吗
时间: 2023-12-25 18:04:13 浏览: 93
我作为语言模型无法编写代码,但我可以提供一个通讯录系统的基本思路:
1. 定义一个结构体来存储联系人的信息,包括姓名、电话号码、地址等属性。
2. 使用链表或数组来存储联系人信息。
3. 实现添加、删除、修改、查询联系人信息的功能。
4. 可以将联系人信息保存到文件中,以便下次使用时快速加载数据。
5. 实现简单的交互界面,让用户能够方便地操作通讯录系统。
以下是一个简单的示例代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LEN 50
#define MAX_PHONE_LEN 20
#define MAX_ADDRESS_LEN 100
// 联系人结构体
typedef struct Contact {
char name[MAX_NAME_LEN];
char phone[MAX_PHONE_LEN];
char address[MAX_ADDRESS_LEN];
struct Contact* next;
} Contact;
Contact* head = NULL;
// 添加联系人
void addContact() {
Contact* newContact = (Contact*)malloc(sizeof(Contact));
printf("请输入姓名:");
scanf("%s", newContact->name);
printf("请输入电话号码:");
scanf("%s", newContact->phone);
printf("请输入地址:");
scanf("%s", newContact->address);
newContact->next = head;
head = newContact;
printf("添加成功。\n");
}
// 删除联系人
void deleteContact() {
char name[MAX_NAME_LEN];
printf("请输入要删除的联系人姓名:");
scanf("%s", name);
Contact* prev = NULL;
Contact* curr = head;
while (curr) {
if (strcmp(curr->name, name) == 0) {
if (prev) {
prev->next = curr->next;
} else {
head = curr->next;
}
free(curr);
printf("删除成功。\n");
return;
}
prev = curr;
curr = curr->next;
}
printf("未找到该联系人。\n");
}
// 修改联系人信息
void updateContact() {
char name[MAX_NAME_LEN];
printf("请输入要修改的联系人姓名:");
scanf("%s", name);
Contact* curr = head;
while (curr) {
if (strcmp(curr->name, name) == 0) {
printf("请输入新的电话号码:");
scanf("%s", curr->phone);
printf("请输入新的地址:");
scanf("%s", curr->address);
printf("修改成功。\n");
return;
}
curr = curr->next;
}
printf("未找到该联系人。\n");
}
// 查询联系人信息
void searchContact() {
char name[MAX_NAME_LEN];
printf("请输入要查询的联系人姓名:");
scanf("%s", name);
Contact* curr = head;
while (curr) {
if (strcmp(curr->name, name) == 0) {
printf("姓名:%s\n", curr->name);
printf("电话号码:%s\n", curr->phone);
printf("地址:%s\n", curr->address);
return;
}
curr = curr->next;
}
printf("未找到该联系人。\n");
}
// 保存联系人信息到文件
void saveToFile() {
FILE* fp = fopen("contacts.dat", "wb");
if (fp == NULL) {
printf("无法打开文件。\n");
return;
}
Contact* curr = head;
while (curr) {
fwrite(curr, sizeof(Contact), 1, fp);
curr = curr->next;
}
fclose(fp);
printf("保存成功。\n");
}
// 从文件中加载联系人信息
void loadFromFile() {
FILE* fp = fopen("contacts.dat", "rb");
if (fp == NULL) {
printf("无法打开文件。\n");
return;
}
Contact* curr = NULL;
Contact* prev = NULL;
while (!feof(fp)) {
curr = (Contact*)malloc(sizeof(Contact));
if (fread(curr, sizeof(Contact), 1, fp) != 1) {
free(curr);
break;
}
if (head == NULL) {
head = curr;
} else {
prev->next = curr;
}
prev = curr;
}
fclose(fp);
printf("加载成功。\n");
}
// 显示菜单
void showMenu() {
printf("请选择操作:\n");
printf("1. 添加联系人\n");
printf("2. 删除联系人\n");
printf("3. 修改联系人信息\n");
printf("4. 查询联系人信息\n");
printf("5. 保存到文件\n");
printf("6. 从文件加载\n");
printf("0. 退出\n");
}
int main() {
int choice = -1;
while (choice != 0) {
showMenu();
scanf("%d", &choice);
switch (choice) {
case 1:
addContact();
break;
case 2:
deleteContact();
break;
case 3:
updateContact();
break;
case 4:
searchContact();
break;
case 5:
saveToFile();
break;
case 6:
loadFromFile();
break;
case 0:
printf("谢谢使用。\n");
break;
default:
printf("无效的选择,请重新输入。\n");
break;
}
}
return 0;
}
```
阅读全文