用〈〈数据结构〉〉中的双向链表作数据结构,结合C语言基本知识。编写一个通讯录管理系统。以把所学数据结构知识应用到实际软件开发中去。 设计内容:本系统应完成一下几方面的功能: 1) 输入信息——enter(); 2) 显示信息———display( ); 3) 查找以姓名作为关键字 ———search( ); 4) 删除信息———delete( ); 5) 存盘———save ( ); 6) 装入———load( ) ; 设计要求: 1) 每条信息至包含 :姓名(NAME )街道(STREET)城市(CITY)邮编(EIP)国家(STATE)几项
时间: 2023-10-22 08:07:51 浏览: 51
信息;
2) 使用双向链表作为通讯录的数据结构,能够进行信息的增删改查等操作;
3) 输入信息时,要进行合法性校验,如姓名不能为空,邮编必须为数字等;
4) 显示信息时,可以按照姓名、城市、国家等关键字进行排序显示;
5) 查找信息时,可以根据姓名进行精确查找,也可以根据城市、国家等关键字进行模糊查找;
6) 删除信息时,可以根据姓名进行精确删除,也可以根据城市、国家等关键字进行批量删除;
7) 存盘和装入功能可以将通讯录数据保存到文件中,方便下一次使用时加载数据。
以上就是一个通讯录管理系统的基本设计要求,可以根据需要进行扩展和改进。
相关问题
数据结构(c语言)编写一个图书管理系统
好的,对于数据结构编写一个图书管理系统,我们可以使用链表来实现。首先,我们需要定义一个结构体来表示每一本书的信息,包括书名、作者、出版社、出版日期等等。然后,我们可以使用链表来存储这些书的信息,每个节点表示一本书。
具体实现的过程中,我们可以定义一个 Book 结构体,包含书名、作者、出版社、出版日期等信息。然后,我们可以定义一个 Node 结构体,包含一个指向 Book 结构体的指针,以及一个指向下一个节点的指针。接着,我们可以定义一个指向链表头节点的指针,来表示整个链表。
在实现图书管理系统的过程中,我们需要实现一些基本的操作,比如添加书籍、删除书籍、查找书籍等等。对于添加书籍操作,我们可以先创建一个新的 Book 结构体,然后将其插入到链表的末尾。对于删除书籍操作,我们可以先查找到要删除的书籍,然后将其从链表中删除。对于查找书籍操作,我们可以遍历整个链表,查找符合条件的书籍。
以上就是一个简单的图书管理系统的实现过程,当然还有很多细节需要考虑,比如如何处理重复书籍、如何排序等等。但是总体来说,链表是一个非常适合实现图书管理系统的数据结构。
用C语言编写通讯录系统代码,并采用数据结构知识
以下是一个基于链表数据结构的通讯录系统的C语言代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 联系人信息结构体
typedef struct {
char name[20]; // 姓名
char phone[20]; // 电话号码
char address[50]; // 地址
} Contact;
// 链表节点结构体
typedef struct Node {
Contact contact; // 联系人信息
struct Node *next; // 指向下一个节点的指针
} Node;
// 头节点指针
Node *head = NULL;
// 添加联系人
void addContact() {
Contact newContact;
printf("请输入联系人姓名:");
scanf("%s", newContact.name);
printf("请输入联系人电话号码:");
scanf("%s", newContact.phone);
printf("请输入联系人地址:");
scanf("%s", newContact.address);
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->contact = newContact;
newNode->next = NULL;
if (head == NULL) {
head = newNode;
} else {
Node *p = head;
while (p->next != NULL) {
p = p->next;
}
p->next = newNode;
}
printf("添加联系人成功!\n");
}
// 删除联系人
void deleteContact() {
char name[20];
printf("请输入要删除的联系人姓名:");
scanf("%s", name);
Node *p = head;
Node *prev = NULL;
while (p != NULL) {
if (strcmp(p->contact.name, name) == 0) {
if (prev == NULL) {
head = p->next;
} else {
prev->next = p->next;
}
free(p);
printf("删除联系人成功!\n");
return;
}
prev = p;
p = p->next;
}
printf("未找到该联系人!\n");
}
// 修改联系人
void modifyContact() {
char name[20];
printf("请输入要修改的联系人姓名:");
scanf("%s", name);
Node *p = head;
while (p != NULL) {
if (strcmp(p->contact.name, name) == 0) {
printf("请输入新的电话号码:");
scanf("%s", p->contact.phone);
printf("请输入新的地址:");
scanf("%s", p->contact.address);
printf("修改联系人成功!\n");
return;
}
p = p->next;
}
printf("未找到该联系人!\n");
}
// 查找联系人
void searchContact() {
char name[20];
printf("请输入要查找的联系人姓名:");
scanf("%s", name);
Node *p = head;
while (p != NULL) {
if (strcmp(p->contact.name, name) == 0) {
printf("姓名:%s\n电话:%s\n地址:%s\n", p->contact.name,
p->contact.phone, p->contact.address);
return;
}
p = p->next;
}
printf("未找到该联系人!\n");
}
// 显示所有联系人
void displayContacts() {
if (head == NULL) {
printf("通讯录为空!\n");
} else {
printf("所有联系人信息如下:\n");
Node *p = head;
while (p != NULL) {
printf("姓名:%s\n电话:%s\n地址:%s\n", p->contact.name,
p->contact.phone, p->contact.address);
p = p->next;
}
}
}
// 主函数
int main() {
int choice;
while (1) {
printf("请选择要进行的操作:\n");
printf("1. 添加联系人\n2. 删除联系人\n3. 修改联系人\n4. 查找联系人\n");
printf("5. 显示所有联系人\n6. 退出程序\n");
scanf("%d", &choice);
switch (choice) {
case 1:
addContact();
break;
case 2:
deleteContact();
break;
case 3:
modifyContact();
break;
case 4:
searchContact();
break;
case 5:
displayContacts();
break;
case 6:
return 0;
default:
printf("无效的选择!\n");
}
}
return 0;
}
```
以上代码实现了基本的添加、删除、修改、查找和显示所有联系人的功能。通过使用链表数据结构,可以方便地实现对联系人的添加、删除和修改等操作。