实验思路C++应用实验 利用线性表实现一个通讯录管理,通讯录的数据格式如下: struct DataType int ID; //编号 char name[10]; //姓名 char ch; //性别 char phone[13]; //电话 char addr[31]; //地址 要求: ·实现通讯录的建立、增加、删除、修改、查询等功能; ·能够实现简单的菜单交互,即可以根据用户输入的命令,选择不同的操作; ·能够保存每次更新的数据(选做); ·能够进行通讯录分类,比如班级类、好友类、黑名单等(选做); ·编写main()函数测试线性表的正确性。
时间: 2023-05-19 21:03:19 浏览: 47
这是一个很好的编程问题,我可以回答。实现通讯录管理可以使用线性表来存储数据,可以使用数组或链表来实现。以下是一个使用链表实现通讯录管理的示例代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct DataType {
int ID;
char name[10];
char ch;
char phone[13];
char addr[31];
};
struct Node {
struct DataType data;
struct Node *next;
};
struct Node *head = NULL;
void add() {
struct Node *new_node = (struct Node*)malloc(sizeof(struct Node));
printf("请输入编号:");
scanf("%d", &new_node->data.ID);
printf("请输入姓名:");
scanf("%s", new_node->data.name);
printf("请输入性别:");
scanf(" %c", &new_node->data.ch);
printf("请输入电话:");
scanf("%s", new_node->data.phone);
printf("请输入地址:");
scanf("%s", new_node->data.addr);
new_node->next = head;
head = new_node;
printf("添加成功!\n");
}
void delete() {
int id;
printf("请输入要删除的编号:");
scanf("%d", &id);
struct Node *prev = NULL;
struct Node *curr = head;
while (curr != NULL && curr->data.ID != id) {
prev = curr;
curr = curr->next;
}
if (curr == NULL) {
printf("没有找到该编号的记录!\n");
return;
}
if (prev == NULL) {
head = curr->next;
} else {
prev->next = curr->next;
}
free(curr);
printf("删除成功!\n");
}
void modify() {
int id;
printf("请输入要修改的编号:");
scanf("%d", &id);
struct Node *curr = head;
while (curr != NULL && curr->data.ID != id) {
curr = curr->next;
}
if (curr == NULL) {
printf("没有找到该编号的记录!\n");
return;
}
printf("请输入姓名:");
scanf("%s", curr->data.name);
printf("请输入性别:");
scanf(" %c", &curr->data.ch);
printf("请输入电话:");
scanf("%s", curr->data.phone);
printf("请输入地址:");
scanf("%s", curr->data.addr);
printf("修改成功!\n");
}
void search() {
int id;
printf("请输入要查询的编号:");
scanf("%d", &id);
struct Node *curr = head;
while (curr != NULL && curr->data.ID != id) {
curr = curr->next;
}
if (curr == NULL) {
printf("没有找到该编号的记录!\n");
return;
}
printf("编号:%d\n", curr->data.ID);
printf("姓名:%s\n", curr->data.name);
printf("性别:%c\n", curr->data.ch);
printf("电话:%s\n", curr->data.phone);
printf("地址:%s\n", curr->data.addr);
}
void display() {
struct Node *curr = head;
while (curr != NULL) {
printf("编号:%d\n", curr->data.ID);
printf("姓名:%s\n", curr->data.name);
printf("性别:%c\n", curr->data.ch);
printf("电话:%s\n", curr->data.phone);
printf("地址:%s\n", curr->data.addr);
printf("\n");
curr = curr->next;
}
}
void menu() {
printf("1. 添加记录\n");
printf("2. 删除记录\n");
printf("3. 修改记录\n");
printf("4. 查询记录\n");
printf("5. 显示所有记录\n");
printf("6. 退出程序\n");
}
int main() {
int choice;
do {
menu();
printf("请输入命令:");
scanf("%d", &choice);
switch (choice) {
case 1:
add();
break;
case 2:
delete();
break;
case 3:
modify();
break;
case 4:
search();
break;
case 5:
display();
break;
case 6:
printf("程序已退出!\n");
break;
default:
printf("无效命令!\n");
break;
}
} while (choice != 6);
return 0;
}
```
这个程序可以实现通讯录的建立、增加、删除、修改、查询等功能,可以根据用户输入的命令选择不同的操作。