用C语言代码写班级通讯查询系统,基本要求,数据为本班全体同学信息,存储方式采用哈希表,可增、删、改信息,并可按电话号码和姓名查找设计内容 1、通过提示菜单选择操作 2、输入信息 3、显示所有信息,要求输出格式美观 4、可以按电话号码和姓名查找 5、插入一个学生通讯信息 6、查找指定学号的学生通讯信息 7、删除指定学生的学生通讯信息 设计要求 1、必须采用结构体数组实现 2、必须有菜单选项
时间: 2023-07-10 11:33:18 浏览: 53
好的,以下是用C语言实现班级通讯查询系统的代码,基本实现了你所提到的要求:
```c
#include <stdio.h>
#include <string.h>
#define MAX_SIZE 100 // 最大记录数
#define HASH_SIZE 101 // 哈希表大小
#define EMPTY "" // 空字符串
// 学生信息结构体
struct student {
char name[20]; // 姓名
char phone[12]; // 电话号码
char email[30]; // 邮箱地址
};
// 哈希表结构体
struct hash_table {
struct student data; // 学生信息
char key[20]; // 姓名作为关键字
int used; // 该位置是否被占用
};
struct hash_table hash_table[HASH_SIZE]; // 哈希表
// 哈希函数
unsigned int hash(char* key) {
unsigned int hash_val = 0;
while (*key != '\0') {
hash_val = (hash_val << 4) + *key++;
unsigned int x = hash_val & 0xf0000000L;
if (x != 0) {
hash_val ^= (x >> 24);
hash_val &= ~x;
}
}
return hash_val % HASH_SIZE;
}
// 输出学生信息
void print_student(struct student s) {
printf("%-20s %-12s %-30s\n", s.name, s.phone, s.email);
}
// 显示菜单
void show_menu() {
printf("1. 显示所有学生信息\n");
printf("2. 按姓名查找学生信息\n");
printf("3. 按电话号码查找学生信息\n");
printf("4. 插入学生信息\n");
printf("5. 删除学生信息\n");
printf("6. 修改学生信息\n");
printf("0. 退出程序\n");
}
// 显示所有学生信息
void show_all_students() {
printf("姓名 电话号码 邮箱地址\n");
printf("--------------------------------------------\n");
for (int i = 0; i < HASH_SIZE; i++) {
if (hash_table[i].used) {
print_student(hash_table[i].data);
}
}
}
// 按姓名查找学生信息
void find_student_by_name(char* name) {
unsigned int index = hash(name);
while (hash_table[index].used) {
if (strcmp(hash_table[index].key, name) == 0) {
print_student(hash_table[index].data);
return;
}
index = (index + 1) % HASH_SIZE;
}
printf("未找到该学生信息!\n");
}
// 按电话号码查找学生信息
void find_student_by_phone(char* phone) {
for (int i = 0; i < HASH_SIZE; i++) {
if (hash_table[i].used && strcmp(hash_table[i].data.phone, phone) == 0) {
print_student(hash_table[i].data);
return;
}
}
printf("未找到该学生信息!\n");
}
// 插入学生信息
void insert_student(struct student s) {
unsigned int index = hash(s.name);
while (hash_table[index].used) {
index = (index + 1) % HASH_SIZE;
}
hash_table[index].data = s;
strcpy(hash_table[index].key, s.name);
hash_table[index].used = 1;
printf("学生信息插入成功!\n");
}
// 删除学生信息
void delete_student(char* name) {
unsigned int index = hash(name);
while (hash_table[index].used) {
if (strcmp(hash_table[index].key, name) == 0) {
hash_table[index].used = 0;
printf("学生信息删除成功!\n");
return;
}
index = (index + 1) % HASH_SIZE;
}
printf("未找到该学生信息!\n");
}
// 修改学生信息
void update_student(char* name) {
unsigned int index = hash(name);
while (hash_table[index].used) {
if (strcmp(hash_table[index].key, name) == 0) {
printf("请输入新的电话号码:");
scanf("%s", hash_table[index].data.phone);
printf("请输入新的邮箱地址:");
scanf("%s", hash_table[index].data.email);
printf("学生信息修改成功!\n");
return;
}
index = (index + 1) % HASH_SIZE;
}
printf("未找到该学生信息!\n");
}
int main() {
int option = -1;
while (option != 0) {
show_menu();
printf("请选择操作:");
scanf("%d", &option);
switch (option) {
case 1:
show_all_students();
break;
case 2: {
char name[20];
printf("请输入要查找的学生姓名:");
scanf("%s", name);
find_student_by_name(name);
break;
}
case 3: {
char phone[12];
printf("请输入要查找的学生电话号码:");
scanf("%s", phone);
find_student_by_phone(phone);
break;
}
case 4: {
struct student s;
printf("请输入学生姓名:");
scanf("%s", s.name);
printf("请输入学生电话号码:");
scanf("%s", s.phone);
printf("请输入学生邮箱地址:");
scanf("%s", s.email);
insert_student(s);
break;
}
case 5: {
char name[20];
printf("请输入要删除的学生姓名:");
scanf("%s", name);
delete_student(name);
break;
}
case 6: {
char name[20];
printf("请输入要修改的学生姓名:");
scanf("%s", name);
update_student(name);
break;
}
case 0:
printf("程序已退出。\n");
break;
default:
printf("无效的操作!\n");
break;
}
}
return 0;
}
```
以上就是用C语言实现班级通讯查询系统的代码,其中使用了哈希表来存储学生信息,实现了增、删、改和查找等功能。菜单选项也比较清晰明了,可以根据需要进行操作。