C语言学生管理系统(全部代码,复制即用)

前言

无套路,均已上机通过,求个关注求个赞,提供答疑解惑服务。

功能

本课题要求用C语言编写某班级学生学情管理系统。对一个有若干个学生的学院,每个学生有N门课程,系统实现对学生情况的管理。学生信息包括:学号、姓名、班级、身高、体重、身体健康,各门课程的成绩、家庭住址、本人联系电话、紧急联系人及联系电话、本人QQ号、本人特长、本人智育排名、任课教师姓名及手机号等信息。系统要求能够实现以下功能:

  • 1、 信息录入:建立学生情况记录数据库;
  • 2、 显示:按照学号顺序显示所有学生信息记录;
  • 3、 增加记录:增加学生的信息记录;
  • 4、 修改(要求先输入密码):可修改某个学生的基本信息(学号不可改变)。
  • 5、 删除:删除一个或多个学生的记录;
  • 6、 检索:可按“学号”、“姓名”或者“手机号”查询学生的记录,可提供模糊检索;
  • 7、 成绩统计:可显示某门课程最高成绩及其名单、最差成绩及其名单、平均成绩、及格人数、不及格人数、及格率;
  • 8、 智育排名序:按照智育排名排序,并将学生信息按顺序显示。

运行截图

在这里插入图片描述

所有代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct {
    char studentID[20];
    char name[20];
    float height;
    float weight;
    char address[50];
    char phoneNumber[15];
    char emergencyContact[20];
    char emergencyPhoneNumber[15];
    char qqNumber[15];
    char specialSkills[50];
    int intelligenceRank;
    char teacherName[20];
    char teacherPhoneNumber[15];
} Student;

typedef struct {
    char courseName[20];
    float score;
} Course;

typedef struct StudentNode {
    Student data;
    Course *courses; // 课程成绩数组
    struct StudentNode *next;
} StudentNode;

// Function Declarations
void displayMenu();

void loadStudentsFromFile(StudentNode **head);

void saveStudentsToFile(StudentNode *head);

void addStudentRecord(StudentNode **head);

void displayAllStudents(StudentNode *head);

void modifyStudentRecord(StudentNode *head);

void deleteStudentRecord(StudentNode **head);

void searchStudentRecord(StudentNode *head);

void gradeStatistics(StudentNode *head);

void rankByIntelligence(StudentNode *head);

void searchByStudentID(StudentNode *head, const char *targetID);

void searchByName(StudentNode *head, const char *targetName);

void freeMemory(StudentNode *head);

void searchByPhoneNumber(StudentNode *head, const char *targetPhoneNumber);

void gradeStatistics(StudentNode *head);

void gradeStatistics(StudentNode *head);

void searchByName(StudentNode *head, const char *targetName);

void gradeStatistics(StudentNode *head);

int main() {
    StudentNode *head = NULL;
    loadStudentsFromFile(&head);

    int choice;
    do {
        displayMenu();
        printf("请输入你的选择: ");
        scanf("%d", &choice);

        switch (choice) {
            case 1:
                addStudentRecord(&head);
                break;
            case 2:
                displayAllStudents(head);
                break;
            case 3:
                modifyStudentRecord(head);
                break;
            case 4:
                deleteStudentRecord(&head);
                break;
            case 5:
                searchStudentRecord(head);
                break;
            case 6:
                gradeStatistics(head);
                break;
            case 7:
                rankByIntelligence(head);
                break;
            case 8:
                saveStudentsToFile(head);
                break;
            case 0:
                printf("程序退出。再见!\n");
                break;
            default:
                printf("无效的选择,请重试。\n");
        }

    } while (choice != 0);

    freeMemory(head);

    return 0;
}

void displayMenu() {
    printf("\n===== 学生信息管理系统 =====\n");
    printf("1. 添加学生记录\n");
    printf("2. 显示所有学生\n");
    printf("3. 修改学生记录\n");
    printf("4. 删除学生记录\n");
    printf("5. 搜索学生记录\n");
    printf("6. 成绩统计\n");
    printf("7. 智育排名\n");
    printf("8. 将学生信息保存到文件\n");
    printf("0. 退出\n");
}

void loadStudentsFromFile(StudentNode **head) {
    FILE *file = fopen("students.txt", "r");
    if (file == NULL) {
        printf("打开文件读取错误。\n");
        return;
    }

    while (!feof(file)) {
        StudentNode *newStudent = (StudentNode *) malloc(sizeof(StudentNode));
        if (newStudent == NULL) {
            printf("内存分配错误。\n");
            fclose(file);
            return;
        }

        fscanf(file, "学号: %s\n", newStudent->data.studentID);
        if (feof(file)) {
            free(newStudent);
            break; // 避免读取到文件末尾多分配一个节点
        }

        fscanf(file, "姓名: %s\n", newStudent->data.name);
        fscanf(file, "身高: %f\n", &newStudent->data.height);
        fscanf(file, "体重: %f\n", &newStudent->data.weight);
        fscanf(file, "地址: %s\n", newStudent->data.address);
        fscanf(file, "联系电话: %s\n", newStudent->data.phoneNumber);
        fscanf(file, "紧急联系人: %s\n", newStudent->data.emergencyContact);
        fscanf(file, "紧急联系电话: %s\n", newStudent->data.emergencyPhoneNumber);
        fscanf(file, "QQ号: %s\n", newStudent->data.qqNumber);
        fscanf(file, "特长: %s\n", newStudent->data.specialSkills);
        fscanf(file, "智育排名: %d\n", &newStudent->data.intelligenceRank);
        fscanf(file, "任课教师姓名: %s\n", newStudent->data.teacherName);
        fscanf(file, "任课教师联系电话: %s\n", newStudent->data.teacherPhoneNumber);

        newStudent->courses = (Course *) malloc(3 * sizeof(Course)); // 假设每个学生有三门课程
        if (newStudent->courses == NULL) {
            printf("内存分配错误。\n");
            free(newStudent);
            fclose(file);
            return;
        }

        for (int i = 0; i < 3; i++) { // 假设每个学生有三门课程
            fscanf(file, "课程: %s, 成绩: %f\n", newStudent->courses[i].courseName, &newStudent->courses[i].score);
        }

        newStudent->next = *head;
        *head = newStudent;
    }

    fclose(file);
}

void saveStudentsToFile(StudentNode *head) {
    FILE *file = fopen("students.txt", "w");
    if (file == NULL) {
        printf("打开文件写入错误。\n");
        return;
    }

    StudentNode *current = head;
    while (current != NULL) {
        fprintf(file, "学号: %s\n", current->data.studentID);
        fprintf(file, "姓名: %s\n", current->data.name);
        fprintf(file, "身高: %.2f\n", current->data.height);
        fprintf(file, "体重: %.2f\n", current->data.weight);
        fprintf(file, "地址: %s\n", current->data.address);
        fprintf(file, "联系电话: %s\n", current->data.phoneNumber);
        fprintf(file, "紧急联系人: %s\n", current->data.emergencyContact);
        fprintf(file, "紧急联系电话: %s\n", current->data.emergencyPhoneNumber);
        fprintf(file, "QQ号: %s\n", current->data.qqNumber);
        fprintf(file, "特长: %s\n", current->data.specialSkills);
        fprintf(file, "智育排名: %d\n", current->data.intelligenceRank);
        fprintf(file, "任课教师姓名: %s\n", current->data.teacherName);
        fprintf(file, "任课教师联系电话: %s\n", current->data.teacherPhoneNumber);

        for (int i = 0; i < 3; i++) { // 假设每个学生有三门课程
            fprintf(file, "课程: %s, 成绩: %.2f\n", current->courses[i].courseName, current->courses[i].score);
        }

        fprintf(file, "\n");

        current = current->next;
    }

    fclose(file);
}

void addStudentRecord(StudentNode **head) {
    StudentNode *newStudent = (StudentNode *) malloc(sizeof(StudentNode));
    if (newStudent == NULL) {
        printf("内存分配错误。\n");
        return;
    }

    printf("输入学号: ");
    scanf("%s", newStudent->data.studentID);

    // 检查是否已存在相同学号的记录,避免重复
    StudentNode *current = *head;
    while (current != NULL) {
        if (strcmp(current->data.studentID, newStudent->data.studentID) == 0) {
            printf("错误: 学号已存在。\n");
            free(newStudent);
            return;
        }
        current = current->next;
    }

    printf("输入姓名: ");
    scanf("%s", newStudent->data.name);
    printf("输入身高: ");
    scanf("%f", &newStudent->data.height);
    printf("输入体重: ");
    scanf("%f", &newStudent->data.weight);
    printf("输入地址: ");
    scanf("%s", newStudent->data.address);
    printf("输入联系电话: ");
    scanf("%s", newStudent->data.phoneNumber);
    printf("输入紧急联系人: ");
    scanf("%s", newStudent->data.emergencyContact);
    printf("输入紧急联系电话: ");
    scanf("%s", newStudent->data.emergencyPhoneNumber);
    printf("输入QQ号: ");
    scanf("%s", newStudent->data.qqNumber);
    printf("输入特长: ");
    scanf("%s", newStudent->data.specialSkills);
    printf("输入智育排名: ");
    scanf("%d", &newStudent->data.intelligenceRank);
    printf("输入任课教师姓名: ");
    scanf("%s", newStudent->data.teacherName);
    printf("输入任课教师联系电话: ");
    scanf("%s", newStudent->data.teacherPhoneNumber);

    newStudent->courses = (Course *) malloc(3 * sizeof(Course)); // 假设每个学生有三门课程
    if (newStudent->courses == NULL) {
        printf("内存分配错误。\n");
        free(newStudent);
        return;
    }

    for (int i = 0; i < 3; i++) { // 假设每个学生有三门课程
        printf("输入第 %d 门课程名称: ", i + 1);
        scanf("%s", newStudent->courses[i].courseName);
        printf("输入第 %d 门课程成绩: ", i + 1);
        scanf("%f", &newStudent->courses[i].score);
    }

    newStudent->next = *head;
    *head = newStudent;
    printf("学生记录添加成功。\n");
}

void displayAllStudents(StudentNode *head) {
    if (head == NULL) {
        printf("无可用学生记录。\n");
        return;
    }

    printf("\n===== 所有学生 =====\n");
    StudentNode *current = head;
    while (current != NULL) {
        printf("学号: %s\n", current->data.studentID);
        printf("姓名: %s\n", current->data.name);
        printf("身高: %.2f\n", current->data.height);
        printf("体重: %.2f\n", current->data.weight);
        printf("地址: %s\n", current->data.address);
        printf("联系电话: %s\n", current->data.phoneNumber);
        printf("紧急联系人: %s\n", current->data.emergencyContact);
        printf("紧急联系电话: %s\n", current->data.emergencyPhoneNumber);
        printf("QQ号: %s\n", current->data.qqNumber);
        printf("特长: %s\n", current->data.specialSkills);
        printf("智育排名: %d\n", current->data.intelligenceRank);
        printf("任课教师姓名: %s\n", current->data.teacherName);
        printf("任课教师联系电话: %s\n", current->data.teacherPhoneNumber);

        for (int i = 0; i < 3; i++) { // 假设每个学生有三门课程
            printf("课程: %s, 成绩: %.2f\n", current->courses[i].courseName, current->courses[i].score);
        }

        printf("\n");

        current = current->next;
    }
}

void modifyStudentRecord(StudentNode *head) {
    if (head == NULL) {
        printf("无可用学生记录。\n");
        return;
    }

    char targetID[20];
    printf("请输入要修改的学生学号: ");
    scanf("%s", targetID);

    StudentNode *current = head;
    while (current != NULL) {
        if (strcmp(current->data.studentID, targetID) == 0) {
            printf("学生找到,现在可以进行修改。\n");
            printf("请输入新的姓名: ");
            scanf("%s", current->data.name);
            printf("请输入新的身高: ");
            scanf("%f", &current->data.height);
            printf("请输入新的体重: ");
            scanf("%f", &current->data.weight);
            printf("请输入新的地址: ");
            scanf("%s", current->data.address);
            printf("请输入新的联系电话: ");
            scanf("%s", current->data.phoneNumber);
            printf("请输入新的紧急联系人: ");
            scanf("%s", current->data.emergencyContact);
            printf("请输入新的紧急联系电话: ");
            scanf("%s", current->data.emergencyPhoneNumber);
            printf("请输入新的QQ号: ");
            scanf("%s", current->data.qqNumber);
            printf("请输入新的特长: ");
            scanf("%s", current->data.specialSkills);
            printf("请输入新的智育排名: ");
            scanf("%d", &current->data.intelligenceRank);
            printf("请输入新的任课教师姓名: ");
            scanf("%s", current->data.teacherName);
            printf("请输入新的任课教师联系电话: ");
            scanf("%s", current->data.teacherPhoneNumber);

            for (int i = 0; i < 3; i++) {
                printf("请输入新的第 %d 门课程名称: ", i + 1);
                scanf("%s", current->courses[i].courseName);
                printf("请输入新的第 %d 门课程成绩: ", i + 1);
                scanf("%f", &current->courses[i].score);
            }

            printf("学生信息修改成功。\n");
            return;
        }
        current = current->next;
    }

    printf("未找到学生学号为 %s 的记录。\n", targetID);
}

void deleteStudentRecord(StudentNode **head) {
    if (*head == NULL) {
        printf("无可用学生记录。\n");
        return;
    }

    char targetID[20];
    printf("请输入要删除的学生学号: ");
    scanf("%s", targetID);

    StudentNode *current = *head;
    StudentNode *prev = NULL;

    while (current != NULL) {
        if (strcmp(current->data.studentID, targetID) == 0) {
            if (prev == NULL) {
                *head = current->next;
            } else {
                prev->next = current->next;
            }

            free(current->courses);
            free(current);
            printf("学生信息删除成功。\n");
            return;
        }

        prev = current;
        current = current->next;
    }

    printf("未找到学生学号为 %s 的记录。\n", targetID);
}

void searchStudentRecord(StudentNode *head) {
    if (head == NULL) {
        printf("无可用学生记录。\n");
        return;
    }

    int choice;
    printf("请选择搜索方式:\n");
    printf("1. 按学号搜索\n");
    printf("2. 按姓名搜索\n");
    printf("3. 按手机号搜索\n");
    printf("请输入你的选择: ");
    scanf("%d", &choice);

    char target[20];
    switch (choice) {
        case 1:
            printf("请输入要搜索的学生学号: ");
            scanf("%s", target);
            searchByStudentID(head, target);
            break;
        case 2:
            printf("请输入要搜索的学生姓名: ");
            scanf("%s", target);
            searchByName(head, target);
            break;
        case 3:
            printf("请输入要搜索的学生手机号: ");
            scanf("%s", target);
            searchByPhoneNumber(head, target);
            break;
        default:
            printf("无效的选择。\n");
            break;
    }
}

void searchByPhoneNumber(StudentNode *head, const char *targetPhoneNumber) {
    if (head == NULL) {
        printf("无可用学生记录。\n");
        return;
    }

    int found = 0;
    StudentNode *current = head;
    while (current != NULL) {
        if (strcmp(current->data.phoneNumber, targetPhoneNumber) == 0 ||
            strcmp(current->data.emergencyPhoneNumber, targetPhoneNumber) == 0) {
            printf("\n===== 学生信息 =====\n");
            printf("学号: %s\n", current->data.studentID);
            printf("姓名: %s\n", current->data.name);
            printf("身高: %.2f\n", current->data.height);
            printf("体重: %.2f\n", current->data.weight);
            printf("地址: %s\n", current->data.address);
            printf("联系电话: %s\n", current->data.phoneNumber);
            printf("紧急联系人: %s\n", current->data.emergencyContact);
            printf("紧急联系电话: %s\n", current->data.emergencyPhoneNumber);
            printf("QQ号: %s\n", current->data.qqNumber);
            printf("特长: %s\n", current->data.specialSkills);
            printf("智育排名: %d\n", current->data.intelligenceRank);
            printf("任课教师姓名: %s\n", current->data.teacherName);
            printf("任课教师联系电话: %s\n", current->data.teacherPhoneNumber);

            for (int i = 0; i < 3; i++) {
                printf("课程: %s, 成绩: %.2f\n", current->courses[i].courseName, current->courses[i].score);
            }

            found = 1;
            break;
        }
        current = current->next;
    }

    if (!found) {
        printf("未找到联系电话为 %s 的学生记录。\n", targetPhoneNumber);
    }
}

void gradeStatistics(StudentNode *head) {
    if (head == NULL) {
        printf("无可用学生记录。\n");
        return;
    }

    char courseName[20];
    printf("请输入要统计的课程名称: ");
    scanf("%s", courseName);

    int countPass = 0;
    int countFail = 0;
    float sum = 0.0;
    float maxScore = -1.0;
    float minScore = 101.0;
    StudentNode *current = head;

    while (current != NULL) {
        for (int i = 0; i < 3; i++) {
            if (strcmp(current->courses[i].courseName, courseName) == 0) {
                float score = current->courses[i].score;
                sum += score;

                if (score >= 60.0) {
                    countPass++;
                } else {
                    countFail++;
                }

                if (score > maxScore) {
                    maxScore = score;
                }

                if (score < minScore) {
                    minScore = score;
                }
            }
        }
        current = current->next;
    }

    if (countPass + countFail == 0) {
        printf("该课程暂无学生成绩。\n");
    } else {
        float average = sum / (countPass + countFail);
        float passRate = (float)countPass / (countPass + countFail) * 100.0;

        printf("\n===== 成绩统计 =====\n");
        printf("最高分: %.2f\n", maxScore);
        printf("最低分: %.2f\n", minScore);
        printf("平均分: %.2f\n", average);
        printf("及格人数: %d\n", countPass);
        printf("不及格人数: %d\n", countFail);
        printf("及格率: %.2f%%\n", passRate);
    }
}

void rankByIntelligence(StudentNode *head) {
    if (head == NULL) {
        printf("无可用学生记录。\n");
        return;
    }

    // 计算链表长度
    int count = 0;
    StudentNode *current = head;
    while (current != NULL) {
        count++;
        current = current->next;
    }

    // 将链表数据提取到数组中以便排序
    Student *students = (Student *)malloc(count * sizeof(Student));
    if (students == NULL) {
        printf("内存分配错误。\n");
        return;
    }

    current = head;
    for (int i = 0; i < count; i++) {
        students[i] = current->data;
        current = current->next;
    }

    // 使用冒泡排序按照智育排名排序
    for (int i = 0; i < count - 1; i++) {
        for (int j = 0; j < count - i - 1; j++) {
            if (students[j].intelligenceRank < students[j + 1].intelligenceRank) {
                // 交换两个学生的位置
                Student temp = students[j];
                students[j] = students[j + 1];
                students[j + 1] = temp;
            }
        }
    }

    // 显示排序结果
    printf("\n===== 智育排名 =====\n");
    for (int i = 0; i < count; i++) {
        printf("排名 %d:\n", i + 1);
        printf("学号: %s\n", students[i].studentID);
        printf("姓名: %s\n", students[i].name);
        printf("智育排名: %d\n", students[i].intelligenceRank);
        printf("\n");
    }

    free(students);
}

void freeMemory(StudentNode *head) {
    while (head != NULL) {
        StudentNode *temp = head;
        head = head->next;
        free(temp->courses);
        free(temp);
    }
}

void searchByStudentID(StudentNode *head, const char *targetID) {
    if (head == NULL) {
        printf("无可用学生记录。\n");
        return;
    }

    int found = 0;
    StudentNode *current = head;
    while (current != NULL) {
        if (strcmp(current->data.studentID, targetID) == 0) {
            printf("\n===== 学生信息 =====\n");
            printf("学号: %s\n", current->data.studentID);
            printf("姓名: %s\n", current->data.name);
            printf("身高: %.2f\n", current->data.height);
            printf("体重: %.2f\n", current->data.weight);
            printf("地址: %s\n", current->data.address);
            printf("联系电话: %s\n", current->data.phoneNumber);
            printf("紧急联系人: %s\n", current->data.emergencyContact);
            printf("紧急联系电话: %s\n", current->data.emergencyPhoneNumber);
            printf("QQ号: %s\n", current->data.qqNumber);
            printf("特长: %s\n", current->data.specialSkills);
            printf("智育排名: %d\n", current->data.intelligenceRank);
            printf("任课教师姓名: %s\n", current->data.teacherName);
            printf("任课教师联系电话: %s\n", current->data.teacherPhoneNumber);

            for (int i = 0; i < 3; i++) {
                printf("课程: %s, 成绩: %.2f\n", current->courses[i].courseName, current->courses[i].score);
            }

            found = 1;
            break;
        }
        current = current->next;
    }

    if (!found) {
        printf("未找到学号为 %s 的学生记录。\n", targetID);
    }
}

void searchByName(StudentNode *head, const char *targetName) {
    if (head == NULL) {
        printf("无可用学生记录。\n");
        return;
    }

    int found = 0;
    StudentNode *current = head;
    while (current != NULL) {
        if (strcmp(current->data.name, targetName) == 0) {
            printf("\n===== 学生信息 =====\n");
            printf("学号: %s\n", current->data.studentID);
            printf("姓名: %s\n", current->data.name);
            printf("身高: %.2f\n", current->data.height);
            printf("体重: %.2f\n", current->data.weight);
            printf("地址: %s\n", current->data.address);
            printf("联系电话: %s\n", current->data.phoneNumber);
            printf("紧急联系人: %s\n", current->data.emergencyContact);
            printf("紧急联系电话: %s\n", current->data.emergencyPhoneNumber);
            printf("QQ号: %s\n", current->data.qqNumber);
            printf("特长: %s\n", current->data.specialSkills);
            printf("智育排名: %d\n", current->data.intelligenceRank);
            printf("任课教师姓名: %s\n", current->data.teacherName);
            printf("任课教师联系电话: %s\n", current->data.teacherPhoneNumber);

            for (int i = 0; i < 3; i++) {
                printf("课程: %s, 成绩: %.2f\n", current->courses[i].courseName, current->courses[i].score);
            }

            found = 1;
            break;
        }
        current = current->next;
    }

    if (!found) {
        printf("未找到姓名为 %s 的学生记录。\n", targetName);
    }
}


  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
抱歉,我无法在这里提供完整的代码,因为这是一个需要编写的大型项目,而且我们不能在这里直接复制粘贴代码。但是,我可以给你提供一些思路和建议,以帮助你实现学生信息管理系统。 首先,你需要定义学生信息的结构体,包括学号、姓名、性别、年龄、成绩等信息。然后,你需要编写函数来实现添加、删除、修改和查询学生信息的功能。可以使用文件来存储学生信息,也可以使用内存来存储。 以下是一个简单的示例代码: ```c #include <stdio.h> #include <string.h> #define MAX_STUDENT 1000 struct student { char id[10]; char name[20]; char gender[5]; int age; float score; }; struct student students[MAX_STUDENT]; int count = 0; void add_student() { if (count >= MAX_STUDENT) { printf("No more space for new student!\n"); return; } struct student s; printf("Enter student id: "); scanf("%s", s.id); printf("Enter student name: "); scanf("%s", s.name); printf("Enter student gender: "); scanf("%s", s.gender); printf("Enter student age: "); scanf("%d", &s.age); printf("Enter student score: "); scanf("%f", &s.score); students[count++] = s; printf("Student added successfully!\n"); } void delete_student() { char id[10]; printf("Enter student id to delete: "); scanf("%s", id); int i, j; for (i = 0; i < count; i++) { if (strcmp(students[i].id, id) == 0) { for (j = i; j < count - 1; j++) { students[j] = students[j + 1]; } count--; printf("Student deleted successfully!\n"); return; } } printf("Student not found!\n"); } void update_student() { char id[10]; printf("Enter student id to update: "); scanf("%s", id); int i; for (i = 0; i < count; i++) { if (strcmp(students[i].id, id) == 0) { printf("Enter student name: "); scanf("%s", students[i].name); printf("Enter student gender: "); scanf("%s", students[i].gender); printf("Enter student age: "); scanf("%d", &students[i].age); printf("Enter student score: "); scanf("%f", &students[i].score); printf("Student updated successfully!\n"); return; } } printf("Student not found!\n"); } void find_student() { char id[10]; printf("Enter student id to find: "); scanf("%s", id); int i; for (i = 0; i < count; i++) { if (strcmp(students[i].id, id) == 0) { printf("Student info:\n"); printf("Id: %s\n", students[i].id); printf("Name: %s\n", students[i].name); printf("Gender: %s\n", students[i].gender); printf("Age: %d\n", students[i].age); printf("Score: %.2f\n", students[i].score); return; } } printf("Student not found!\n"); } void list_students() { int i; for (i = 0; i < count; i++) { printf("Student %d:\n", i + 1); printf("Id: %s\n", students[i].id); printf("Name: %s\n", students[i].name); printf("Gender: %s\n", students[i].gender); printf("Age: %d\n", students[i].age); printf("Score: %.2f\n", students[i].score); } } void save_students() { FILE *fp = fopen("students.dat", "wb"); if (fp == NULL) { printf("Failed to open file!\n"); return; } fwrite(students, sizeof(struct student), count, fp); fclose(fp); printf("Students saved to file!\n"); } void load_students() { FILE *fp = fopen("students.dat", "rb"); if (fp == NULL) { printf("Failed to open file!\n"); return; } count = fread(students, sizeof(struct student), MAX_STUDENT, fp); fclose(fp); printf("Students loaded from file!\n"); } int main() { int choice; do { printf("1. Add student\n"); printf("2. Delete student\n"); printf("3. Update student\n"); printf("4. Find student\n"); printf("5. List students\n"); printf("6. Save students to file\n"); printf("7. Load students from file\n"); printf("0. Exit\n"); printf("Enter your choice: "); scanf("%d", &choice); switch (choice) { case 1: add_student(); break; case 2: delete_student(); break; case 3: update_student(); break; case 4: find_student(); break; case 5: list_students(); break; case 6: save_students(); break; case 7: load_students(); break; case 0: break; default: printf("Invalid choice!\n"); } } while (choice != 0); return 0; } ``` 这是一个简单的例子,只实现了基本的添加、删除、修改、查询和列表功能。你可以根据需求进行修改和扩展。同时,你需要注意错误处理和数据验证,以确保程序的健壮性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亻乍屯页女子白勺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值