使用c语言设计一个通讯录程序,实现通讯录信息的录入,添加删除显示的功能,使用结构体存储通讯录的记录信息,使用链表实现通讯录信息的增删及查询显示,使用文件储存通讯录
时间: 2024-03-18 13:42:13 浏览: 60
基于C++语言和单链表数据结构实现的通讯录管理系统,包含文件读取、文件保存、增删改查、排序、清空等功能.zip
5星 · 资源好评率100%
好的,这是一个比较全面的通讯录程序设计,需要多个功能的协调运作,需要一步一步来实现。
首先,我们需要定义一个结构体来存储通讯录的记录信息,包括姓名、电话号码、地址等等,如下所示:
```c
struct Contact {
char name[20];
char phone[20];
char address[50];
struct Contact *next;
};
```
其中,`next`是一个指向下一个联系人的指针,用于链表的实现。
接下来,我们需要实现通讯录信息的录入、添加、删除和显示等功能。这些功能可以封装在一个函数中,如下所示:
```c
void operateContacts(struct Contact **head) {
int choice;
while (1) {
printf("请选择操作:\n");
printf("1. 录入联系人信息\n");
printf("2. 添加联系人信息\n");
printf("3. 删除联系人信息\n");
printf("4. 显示所有联系人信息\n");
printf("5. 退出程序\n");
scanf("%d", &choice);
switch (choice) {
case 1:
createContact(head);
break;
case 2:
addContact(head);
break;
case 3:
delContact(head);
break;
case 4:
showContacts(*head);
break;
case 5:
writeContactsToFile(*head);
printf("已保存通讯录信息到文件,程序即将退出!\n");
return;
default:
printf("无效的选择,请重新输入!\n");
break;
}
}
}
```
其中,`head`是一个指向链表头的指针,表示通讯录中第一个联系人的位置。
接下来,我们需要实现具体的功能函数,如下所示:
```c
// 创建一个联系人
void createContact(struct Contact **head) {
struct Contact *p = (struct Contact *)malloc(sizeof(struct Contact));
printf("请输入联系人姓名:");
scanf("%s", p->name);
printf("请输入联系人电话:");
scanf("%s", p->phone);
printf("请输入联系人地址:");
scanf("%s", p->address);
p->next = NULL;
if (*head == NULL) {
*head = p;
} else {
struct Contact *q = *head;
while (q->next != NULL) {
q = q->next;
}
q->next = p;
}
printf("联系人信息已保存!\n");
}
// 添加一个联系人
void addContact(struct Contact **head) {
struct Contact *p = (struct Contact *)malloc(sizeof(struct Contact));
printf("请输入联系人姓名:");
scanf("%s", p->name);
printf("请输入联系人电话:");
scanf("%s", p->phone);
printf("请输入联系人地址:");
scanf("%s", p->address);
p->next = NULL;
if (*head == NULL) {
*head = p;
} else {
struct Contact *q = *head;
while (q->next != NULL) {
q = q->next;
}
q->next = p;
}
printf("联系人信息已添加!\n");
}
// 删除一个联系人
void delContact(struct Contact **head) {
char name[20];
printf("请输入要删除的联系人姓名:");
scanf("%s", name);
if (*head == NULL) {
printf("通讯录为空,无法删除!\n");
return;
}
struct Contact *p = *head;
struct Contact *q = NULL;
while (p != NULL) {
if (strcmp(p->name, name) == 0) {
if (q == NULL) {
*head = p->next;
} else {
q->next = p->next;
}
free(p);
printf("联系人信息已删除!\n");
return;
}
q = p;
p = p->next;
}
printf("未找到该联系人信息!\n");
}
// 显示所有联系人信息
void showContacts(struct Contact *head) {
if (head == NULL) {
printf("通讯录为空!\n");
return;
}
printf("姓名\t电话\t地址\n");
struct Contact *p = head;
while (p != NULL) {
printf("%s\t%s\t%s\n", p->name, p->phone, p->address);
p = p->next;
}
}
// 将通讯录信息保存到文件
void writeContactsToFile(struct Contact *head) {
FILE *fp = fopen("contacts.txt", "w");
if (fp == NULL) {
printf("文件打开失败!\n");
return;
}
struct Contact *p = head;
while (p != NULL) {
fprintf(fp, "%s %s %s\n", p->name, p->phone, p->address);
p = p->next;
}
fclose(fp);
}
```
最后,我们还需要实现从文件中读取通讯录信息的功能,如下所示:
```c
// 从文件中读取通讯录信息
void readContactsFromFile(struct Contact **head) {
FILE *fp = fopen("contacts.txt", "r");
if (fp == NULL) {
printf("文件打开失败!\n");
return;
}
char name[20];
char phone[20];
char address[50];
while (fscanf(fp, "%s %s %s", name, phone, address) != EOF) {
struct Contact *p = (struct Contact *)malloc(sizeof(struct Contact));
strcpy(p->name, name);
strcpy(p->phone, phone);
strcpy(p->address, address);
p->next = NULL;
if (*head == NULL) {
*head = p;
} else {
struct Contact *q = *head;
while (q->next != NULL) {
q = q->next;
}
q->next = p;
}
}
fclose(fp);
}
```
这样,我们就完成了一个包含录入、添加、删除、显示等功能的通讯录程序,并且将通讯录信息保存到了文件中。
阅读全文