请大家使用c语言完成电话号码查询系统。 设有一个电话号码薄
时间: 2024-09-08 10:01:42 浏览: 41
在C语言中,我们可以设计一个简单的电话号码查询系统,通常会使用结构体来存储电话簿信息,数组或链表来存储多个联系人。下面是一个基本的示例,使用关联数组(哈希表)来提高查询效率:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义联系人结构体
typedef struct {
char name[50];
char phone_number[20];
} Contact;
// 定义哈希函数,这里简单地取名字的首字母作为键
int hash_func(const char* key) {
return toupper(key[0]) % 10;
}
// 哈希表数组
Contact contacts[100];
// 添加联系人到电话簿
void add_contact(char* name, char* phone_number) {
int index = hash_func(name);
if (contacts[index].name[0] == '\0') { // 如果该位置为空,则添加
strcpy(contacts[index].name, name);
strcpy(contacts[index].phone_number, phone_number);
printf("Contact added successfully.\n");
} else {
printf("Name already exists in the directory.\n");
}
}
// 查询电话号码
char* find_phone_number_by_name(char* name) {
int index = hash_func(name);
if (contacts[index].name[0] != '\0') {
return contacts[index].phone_number;
} else {
printf("Name not found in the directory.\n");
return NULL; // 返回空指针表示未找到
}
}
int main() {
int choice;
do {
printf("\nMenu:\n1. Add contact\n2. Find phone number by name\n3. Exit\n");
scanf("%d", &choice);
switch (choice) {
case 1:
char name[50], phone_number[20];
printf("Enter contact's name: ");
fgets(name, sizeof(name), stdin); // 防止输入超长
name[strlen(name)-1] = '\0'; // 移除换行符
printf("Enter phone number: ");
fgets(phone_number, sizeof(phone_number), stdin);
phone_number[strlen(phone_number)-1] = '\0';
add_contact(name, phone_number);
break;
case 2:
char search_name[50];
printf("Search for a name: ");
fgets(search_name, sizeof(search_name), stdin);
search_name[strlen(search_name)-1] = '\0';
char* result = find_phone_number_by_name(search_name);
if (result != NULL) {
printf("Phone number for '%s': %s\n", search_name, result);
}
break;
case 3:
printf("Exiting the program...\n");
break;
default:
printf("Invalid choice. Please try again.\n");
break;
}
} while (choice != 3);
return 0;
}
```