c语言创建一个通讯录管理系统
时间: 2023-08-05 08:07:36 浏览: 115
好的,以下是一个简单的基于C语言的通讯录管理系统的实现思路:
1. 定义联系人结构体
```c
typedef struct {
char name[20]; // 联系人姓名
char phone[12]; // 联系人电话号码
char email[30]; // 联系人电子邮件
char address[50]; // 联系人地址
} Contact;
```
2. 定义联系人链表结构体
```c
typedef struct node {
Contact contact; // 联系人信息
struct node *next; // 指向下一个节点的指针
} ContactNode, *ContactList;
```
3. 实现添加联系人函数
```c
void addContact(ContactList *head) {
ContactNode *newNode = (ContactNode *)malloc(sizeof(ContactNode)); // 创建新节点
printf("请输入联系人姓名:");
scanf("%s", newNode->contact.name);
printf("请输入联系人电话号码:");
scanf("%s", newNode->contact.phone);
printf("请输入联系人电子邮件:");
scanf("%s", newNode->contact.email);
printf("请输入联系人地址:");
scanf("%s", newNode->contact.address);
newNode->next = NULL; // 新节点作为链表的末尾节点,将其next指针置为空
if (*head == NULL) { // 如果链表为空,将新节点作为链表的头节点
*head = newNode;
}
else { // 如果链表不为空,将新节点插入到链表的末尾
ContactNode *p = *head;
while (p->next != NULL) {
p = p->next;
}
p->next = newNode;
}
printf("添加联系人成功!\n");
}
```
4. 实现查找联系人函数
```c
void findContact(ContactList head) {
char name[20];
printf("请输入要查找的联系人姓名:");
scanf("%s", name);
ContactNode *p = head;
while (p != NULL) {
if (strcmp(p->contact.name, name) == 0) { // 如果找到了对应的联系人
printf("姓名:%s\n", p->contact.name);
printf("电话号码:%s\n", p->contact.phone);
printf("电子邮件:%s\n", p->contact.email);
printf("地址:%s\n", p->contact.address);
return;
}
p = p->next;
}
printf("没有找到对应的联系人!\n");
}
```
5. 实现删除联系人函数
```c
void deleteContact(ContactList *head) {
char name[20];
printf("请输入要删除的联系人姓名:");
scanf("%s", name);
ContactNode *p = *head;
ContactNode *pre = NULL; // 用于记录当前节点的前一个节点
while (p != NULL) {
if (strcmp(p->contact.name, name) == 0) { // 如果找到了对应的联系人
if (p == *head) { // 如果要删除的是头节点
*head = p->next;
} else {
pre->next = p->next;
}
free(p); // 释放当前节点的内存空间
printf("删除联系人成功!\n");
return;
}
pre = p;
p = p->next;
}
printf("没有找到对应的联系人!\n");
}
```
6. 实现修改联系人函数
```c
void modifyContact(ContactList head) {
char name[20];
printf("请输入要修改的联系人姓名:");
scanf("%s", name);
ContactNode *p = head;
while (p != NULL) {
if (strcmp(p->contact.name, name) == 0) { // 如果找到了对应的联系人
printf("请输入新的电话号码:");
scanf("%s", p->contact.phone);
printf("请输入新的电子邮件:");
scanf("%s", p->contact.email);
printf("请输入新的地址:");
scanf("%s", p->contact.address);
printf("修改联系人成功!\n");
return;
}
p = p->next;
}
printf("没有找到对应的联系人!\n");
}
```
7. 实现显示所有联系人函数
```c
void showAllContacts(ContactList head) {
if (head == NULL) { // 如果链表为空,直接返回
printf("联系人列表为空!\n");
return;
}
ContactNode *p = head;
int i = 1;
while (p != NULL) {
printf("联系人%d:\n", i++);
printf("姓名:%s\n", p->contact.name);
printf("电话号码:%s\n", p->contact.phone);
printf("电子邮件:%s\n", p->contact.email);
printf("地址:%s\n", p->contact.address);
p = p->next;
}
}
```
8. 实现主函数
```c
int main() {
ContactList head = NULL; // 初始化链表为空
int choice;
while (1) {
printf("请选择操作:\n");
printf("1. 添加联系人\n");
printf("2. 查找联系人\n");
printf("3. 删除联系人\n");
printf("4. 修改联系人\n");
printf("5. 显示所有联系人\n");
printf("6. 退出\n");
scanf("%d", &choice);
switch (choice) {
case 1:
addContact(&head);
break;
case 2:
findContact(head);
break;
case 3:
deleteContact(&head);
break;
case 4:
modifyContact(head);
break;
case 5:
showAllContacts(head);
break;
case 6:
exit(0);
default:
printf("输入有误,请重新输入!\n");
break;
}
}
return 0;
}
```
以上就是一个简单的基于C语言的通讯录管理系统的实现思路,希望能够帮到你。
阅读全文