设计一个学生通信录,学生通迅录数据信息构成内容可自行设计(如:学号、姓名、电话号码、所在班级、寝室地址等)。 主要实现功能包括: (1)创建学生通讯录 (2)修改学生通讯录 (3)增删学生通讯录 (4)能够按多种方式进行查询(如:①按学号查询;②按所在班级查询) 用C语言
时间: 2024-12-17 20:42:28 浏览: 41
设计一个学生通信录系统,我们可以采用结构体来表示每个学生的个人信息,并使用数组或者链表来存储所有学生的信息。这里是一个简单的C语言实现方案:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义学生信息结构体
typedef struct {
int student_id; // 学号
char name[50]; // 姓名
char phone_number[20]; // 电话号码
char class_name[50]; // 所在班级
char dorm_address[100]; // 寝室地址
} Student;
// 创建一个动态大小的学生通讯录
typedef struct {
int size;
Student* students;
} AddressBook;
// 功能:创建学生通讯录
void createAddressBook(AddressBook* ab) {
ab->size = 0;
ab->students = malloc(sizeof(Student));
}
// 功能:添加学生到通讯录
void addStudent(AddressBook* ab, const Student* new_student) {
if (ab->size == sizeof(ab->students)/sizeof(Student)) {
Student* temp = realloc(ab->students, (ab->size + 1) * sizeof(Student));
if (!temp) {
printf("内存分配失败");
return;
}
ab->students = temp;
}
ab->students[ab->size] = *new_student;
ab->size++;
}
// 功能:修改学生信息
void modifyStudent(AddressBook* ab, int id, const Student* updated_student) {
for (int i = 0; i < ab->size; i++) {
if (ab->students[i].student_id == id) {
memcpy(&ab->students[i], updated_student, sizeof(Student));
break;
}
}
}
// 功能:删除学生
void deleteStudent(AddressBook* ab, int id) {
for (int i = 0; i < ab->size - 1; i++) {
if (ab->students[i].student_id == id) {
memmove(&ab->students[i], &ab->students[i+1], sizeof(Student)*(ab->size - i - 1));
ab->size--;
break;
}
}
}
// 功能:按学号查询学生
Student searchByID(const AddressBook* ab, int id) {
for (int i = 0; i < ab->size; i++) {
if (ab->students[i].student_id == id) {
return ab->students[i];
}
}
// 如果未找到,返回空学生
return (Student){0};
}
// 功能:按班级查询学生
Student searchByClass(const AddressBook* ab, const char* className) {
for (int i = 0; i < ab->size; i++) {
if (strcmp(ab->students[i].class_name, className) == 0) {
return ab->students[i];
}
}
return (Student){0};
}
int main() {
AddressBook address_book;
createAddressBook(&address_book);
// 添加学生并执行查询操作...
return 0;
}
```
阅读全文