通讯录管理系统。(用单链表或结构数组)
每一个联系人包含编号、姓名、手机、qq等信息,通讯录管理系统可以方便实现对通讯录的管理,如增加联系人,查找某人的联系方式,删除联系人,修改某个人的联系信息等功能,要求用文件保存通讯录中联系人的信息。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 联系人结构体
typedef struct Contact {
int id;
char name[50];
char phone[20];
char qq[20];
struct Contact* next;
} Contact;
// 全局变量,保存通讯录链表的头节点
Contact* contactList = NULL;
// 函数声明
void printMenu();
void addContact();
void searchContact();
void deleteContact();
void modifyContact();
void saveContacts();
void loadContacts();
int main() {
int choice;
loadContacts(); // 从文件中加载联系人信息
do {
printMenu();
printf("请输入选项:");
scanf("%d", &choice);
switch (choice) {
case 1:
addContact();
break;
case 2:
searchContact();
break;
case 3:
deleteContact();
break;
case 4:
modifyContact();
break;
case 5:
saveContacts();
break;
case 0:
printf("感谢使用通讯录管理系统,再见!\n");
break;
default:
printf("无效选项,请重新输入!\n");
break;
}
} while (choice != 0);
return 0;
}
void printMenu() {
printf("*************** 通讯录管理系统 ***************\n");
printf("1. 添加联系人\n");
printf("2. 查找联系人\n");
printf("3. 删除联系人\n");
printf("4. 修改联系人信息\n");
printf("5. 保存联系人到文件\n");
printf("0. 退出\n");
printf("********************************************\n");
}
void addContact() {
Contact* newContact = (Contact*)malloc(sizeof(Contact));
printf("请输入联系人编号:");
scanf("%d", &(newContact->id));
printf("请输入联系人姓名:");
scanf("%s", newContact->name);
printf("请输入联系人手机号码:");
scanf("%s", newContact->phone);
printf("请输入联系人QQ号码:");
scanf("%s", newContact->qq);
newContact->next = contactList;
contactList = newContact;
printf("联系人添加成功!\n");
}
void searchContact() {
char name[50];
printf("请输入要查找的联系人姓名:");
scanf("%s", name);
Contact* current = contactList;
while (current != NULL) {
if (strcmp(current->name, name) == 0) {
printf("编号:%d\n", current->id);
printf("姓名:%s\n", current->name);
printf("手机号码:%s\n", current->phone);
printf("QQ号码:%s\n", current->qq);
return;
}
current = current->next;
}
printf("未找到联系人:%s\n", name);
}
void deleteContact() {
char name[50];
printf("请输入要删除的联系人姓名:");
scanf("%s", name);
Contact* prev = NULL;
Contact* current = contactList;
while (current != NULL) {
if (strcmp(current->name, name) == 0) {
if (prev == NULL) {
contactList = current->next;
} else {
prev->next = current->next;
}
free(current);
printf("联系人删除成功!\n");
return;
}
prev = current;
current = current->next;
}
printf("未找到联系人:%s\n", name);
}
void modifyContact() {
char name[50];
printf("请输入要修改的联系人姓名:");
scanf("%s", name);
Contact* current = contactList;
while (current != NULL) {
if (strcmp(current->name, name) == 0) {
printf("请输入新的联系人编号:");
scanf("%d", &(current->id));
printf("请输入新的联系人手机号码:");
scanf("%s", current->phone);
printf("请输入新的联系人QQ号码:");
scanf("%s", current->qq);
printf("联系人信息修改成功!\n");
return;
}
current = current->next;
}
printf("未找到联系人:%s\n", name);
}
void saveContacts() {
char filename[100];
printf("请输入保存文件的路径和名称:");
scanf("%s", filename);
FILE* file = fopen(filename, "w");
if (file == NULL) {
printf("文件打开失败!\n");
return;
}
Contact* current = contactList;
while (current != NULL) {
fprintf(file, "%d,%s,%s,%s\n", current->id, current->name, current->phone, current->qq);
current = current->next;
}
fclose(file);
printf("联系人保存成功!\n");
}
void loadContacts() {
char filename[100];
printf("请输入要加载的联系人文件的路径和名称:");
scanf("%s", filename);
FILE* file = fopen(filename, "r");
if (file == NULL) {
printf("文件打开失败!\n");
return;
}
Contact* current = NULL;
Contact* prev = NULL;
char line[200];
while (fgets(line, sizeof(line), file) != NULL) {
Contact* newContact = (Contact*)malloc(sizeof(Contact));
sscanf(line, "%d,%[^,],%[^,],%s", &(newContact->id), newContact->name, newContact->phone, newContact->qq);
newContact->next = NULL;
if (prev == NULL) {
contactList = newContact;
} else {
prev->next = newContact;
}
prev = newContact;
}
fclose(file);
printf("联系人加载成功!\n");
}
基于ChatGPT4与博主叶秋学长的回答,望采纳!!!有其他问题也可以询问我哦💕:
这个问题是关于如何在C语言中创建一个通讯录管理系统。系统需要包含一些功能,比如添加、查找、删除和修改联系人。联系人的信息需要包含编号、姓名、手机和QQ等信息,而且需要将这些信息存储在文件中。
这是一个相当大的项目,它需要涉及到很多C语言的知识,包括结构体、文件操作、链表等等。我可以提供一个基本的框架和一些关键的代码段,但是完整的程序可能需要您自己进一步开发和调试。
首先,我们需要定义一个结构体来表示联系人:
typedef struct Contact {
int id; // 编号
char name[50]; // 姓名
char phone[20]; // 手机
char qq[20]; // QQ
struct Contact *next; // 单链表的下一个节点
} Contact;
我们可以使用这个结构体来创建一个单链表,每个节点代表一个联系人。链表可以让我们更容易地添加、删除和修改联系人。
我们可以用如下方式来添加联系人:
void add_contact(Contact **head, int id, char *name, char *phone, char *qq) {
Contact *new_contact = (Contact *)malloc(sizeof(Contact));
new_contact->id = id;
strcpy(new_contact->name, name);
strcpy(new_contact->phone, phone);
strcpy(new_contact->qq, qq);
new_contact->next = *head;
*head = new_contact;
}
删除联系人可能需要一些额外的逻辑,因为我们需要找到要删除的联系人,然后更新链表的链接:
void delete_contact(Contact **head, int id) {
Contact *prev = NULL;
Contact *current = *head;
while (current != NULL && current->id != id) {
prev = current;
current = current->next;
}
if (current == NULL) {
printf("No contact with id %d found.\n", id);
return;
}
if (prev == NULL) {
*head = current->next;
} else {
prev->next = current->next;
}
free(current);
}
修改联系人的信息可以用类似的方式实现。查找联系人的信息可以通过遍历链表来完成。
最后,我们需要在文件中保存和读取联系人的信息。我们可以用以下方式来保存信息:
void save_contacts(Contact *head, char *filename) {
FILE *file = fopen(filename, "w");
Contact *current = head;
while (current != NULL) {
fprintf(file, "%d,%s,%s,%s\n", current->id, current->name, current->phone, current->qq);
current = current->next;
}
fclose(file);
}
读取文件中的信息并创建联系人链表的逻辑稍微复杂一些,我们需要读取每一行,然后解析出各个字段的值:
void load_contacts(Contact **head, char *filename) {
FILE *file = fopen(filename, "r");
char line
```c
[256];
while (fgets(line, sizeof(line), file)) {
int id;
char name[50], phone[20], qq[20];
sscanf(line, "%d,%[^,],%[^,],%s", &id, name, phone, qq);
add_contact(head, id, name, phone, qq);
}
fclose(file);
}
以上就是一个基本的通讯录管理系统的框架。它包含了一些基本的功能,比如添加、删除、查找和修改联系人,以及将联系人的信息保存到文件中。但是这个系统还不完整,还需要添加用户界面、错误处理、输入验证等等功能。
在实际编程中,还需要考虑一些额外的问题,比如内存管理、错误处理等等。我提供的代码只是一个开始,还需要你自己去实现更多的功能和细节。
希望这个回答对你有所帮助!
这个很多啊
可参考
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 联系人结构体
typedef struct contact {
int id;
char name[50];
char phone[20];
char qq[20];
struct contact* next;
} Contact;
// 创建新的联系人节点
Contact* createContact(int id, char* name, char* phone, char* qq) {
Contact* newContact = (Contact*)malloc(sizeof(Contact));
newContact->id = id;
strcpy(newContact->name, name);
strcpy(newContact->phone, phone);
strcpy(newContact->qq, qq);
newContact->next = NULL;
return newContact;
}
// 在链表末尾添加联系人
void addContact(Contact** head, Contact* newContact) {
if (*head == NULL) {
*head = newContact;
} else {
Contact* current = *head;
while (current->next != NULL) {
current = current->next;
}
current->next = newContact;
}
}
// 根据姓名查找联系人
Contact* findContactByName(Contact* head, char* name) {
Contact* current = head;
while (current != NULL) {
if (strcmp(current->name, name) == 0) {
return current;
}
current = current->next;
}
return NULL;
}
// 根据姓名删除联系人
void deleteContact(Contact** head, char* name) {
Contact* current = *head;
Contact* prev = NULL;
while (current != NULL) {
if (strcmp(current->name, name) == 0) {
if (prev == NULL) {
*head = current->next;
} else {
prev->next = current->next;
}
free(current);
return;
}
prev = current;
current = current->next;
}
}
// 修改联系人信息
void modifyContact(Contact* contact, char* name, char* phone, char* qq) {
strcpy(contact->name, name);
strcpy(contact->phone, phone);
strcpy(contact->qq, qq);
}
// 打印联系人信息
void printContact(Contact* contact) {
printf("ID: %d\n", contact->id);
printf("Name: %s\n", contact->name);
printf("Phone: %s\n", contact->phone);
printf("QQ: %s\n", contact->qq);
}
// 保存联系人信息到文件
void saveContactsToFile(Contact* head, char* filename) {
FILE* file = fopen(filename, "w");
if (file == NULL) {
printf("打开文件失败!\n");
return;
}
Contact* current = head;
while (current != NULL) {
fprintf(file, "%d,%s,%s,%s\n", current->id, current->name, current->phone, current->qq);
current = current->next;
}
fclose(file);
}
// 从文件加载联系人信息
Contact* loadContactsFromFile(char* filename) {
FILE* file = fopen(filename, "r");
if (file == NULL) {
printf("打开文件失败!\n");
return NULL;
}
Contact* head = NULL;
char line[100];
while (fgets(line, sizeof(line), file)) {
int id;
char name[50];
char phone[20];
char qq[20];
sscanf(line, "%d,%[^,],%[^,],%s", &id, name, phone, qq);
Contact* newContact = createContact(id, name, phone, qq);
addContact(&head, newContact);
}
fclose(file);
return head;
}
int main() {
Contact* head = NULL;
// 从文件加载联系人信息
head = loadContactsFromFile("contacts.txt");
// 添加示例联系人
addContact(&head, createContact(1, "Alice", "123456789", "123456"));
addContact(&head, createContact(2, "Bob", "987654321", "654321"));
// 查找联系人
Contact* contact = findContactByName(head, "Alice");
if (contact != NULL) {
printContact(contact);
}
// 删除联系人
deleteContact(&head, "Bob");
// 修改联系人信息
contact = findContactByName(head, "Alice");
if (contact != NULL) {
modifyContact(contact, "Alice Smith", "987654321", "654321");
}
// 保存联系人信息到文件
saveContactsToFile(head, "contacts.txt");
// 释放链表内存
Contact* current = head;
while (current != NULL) {
Contact* next = current->next;
free(current);
current = next;
}
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:我需要更具体的问题描述以便给出帮助或解决方案。以上参考资料与通讯录管理系统无关,无法直接应用到该问题中。请提供更具体的问题或功能需求。