学生信息管理系统C语言代码如何实现核心功能?

99ANYc3cd6
预计阅读时长 30 分钟
位置: 首页 C语言 正文

学生信息管理系统 (C语言实现)

下面是一个完整的学生信息管理系统的C语言代码实现,包含添加、删除、修改、查询和显示所有学生信息的功能。

学生信息管理系统c语言代码
(图片来源网络,侵删)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 100
#define MAX_NAME_LEN 50
#define ID_LEN 10
// 学生结构体
typedef struct {
    char id[ID_LEN];        // 学号
    char name[MAX_NAME_LEN]; // 姓名
    int age;                // 年龄
    float score;            // 成绩
} Student;
// 全局变量
Student students[MAX_STUDENTS];
int studentCount = 0;
// 函数声明
void addStudent();
void deleteStudent();
void modifyStudent();
void searchStudent();
void displayAllStudents();
void saveToFile();
void loadFromFile();
void displayMenu();
int main() {
    loadFromFile(); // 程序启动时加载数据
    int choice;
    do {
        displayMenu();
        printf("请输入您的选择: ");
        scanf("%d", &choice);
        getchar(); // 清除输入缓冲区中的换行符
        switch(choice) {
            case 1:
                addStudent();
                break;
            case 2:
                deleteStudent();
                break;
            case 3:
                modifyStudent();
                break;
            case 4:
                searchStudent();
                break;
            case 5:
                displayAllStudents();
                break;
            case 6:
                saveToFile();
                printf("数据已保存,程序退出,\n");
                break;
            default:
                printf("无效的选择,请重新输入,\n");
        }
    } while(choice != 6);
    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("=====================================\n");
}
// 添加学生信息
void addStudent() {
    if(studentCount >= MAX_STUDENTS) {
        printf("学生数量已达上限,无法添加,\n");
        return;
    }
    Student s;
    printf("请输入学号: ");
    scanf("%s", s.id);
    getchar(); // 清除输入缓冲区中的换行符
    // 检查学号是否已存在
    for(int i = 0; i < studentCount; i++) {
        if(strcmp(students[i].id, s.id) == 0) {
            printf("该学号已存在,添加失败,\n");
            return;
        }
    }
    printf("请输入姓名: ");
    scanf("%s", s.name);
    getchar();
    printf("请输入年龄: ");
    scanf("%d", &s.age);
    getchar();
    printf("请输入成绩: ");
    scanf("%f", &s.score);
    getchar();
    students[studentCount++] = s;
    printf("学生信息添加成功,\n");
}
// 删除学生信息
void deleteStudent() {
    if(studentCount == 0) {
        printf("没有学生信息可删除,\n");
        return;
    }
    char id[ID_LEN];
    printf("请输入要删除的学生学号: ");
    scanf("%s", id);
    getchar();
    int found = 0;
    for(int i = 0; i < studentCount; i++) {
        if(strcmp(students[i].id, id) == 0) {
            found = 1;
            // 将后面的学生前移
            for(int j = i; j < studentCount - 1; j++) {
                students[j] = students[j + 1];
            }
            studentCount--;
            printf("学生信息删除成功,\n");
            break;
        }
    }
    if(!found) {
        printf("未找到该学号的学生,\n");
    }
}
// 修改学生信息
void modifyStudent() {
    if(studentCount == 0) {
        printf("没有学生信息可修改,\n");
        return;
    }
    char id[ID_LEN];
    printf("请输入要修改的学生学号: ");
    scanf("%s", id);
    getchar();
    int found = 0;
    for(int i = 0; i < studentCount; i++) {
        if(strcmp(students[i].id, id) == 0) {
            found = 1;
            printf("当前学生信息:\n");
            printf("学号: %s, 姓名: %s, 年龄: %d, 成绩: %.2f\n", 
                   students[i].id, students[i].name, students[i].age, students[i].score);
            printf("请输入新的姓名(直接回车保持不变): ");
            char newName[MAX_NAME_LEN];
            fgets(newName, MAX_NAME_LEN, stdin);
            newName[strcspn(newName, "\n")] = '\0'; // 去除换行符
            if(strlen(newName) > 0) {
                strcpy(students[i].name, newName);
            }
            printf("请输入新的年龄(输入0保持不变): ");
            int newAge;
            scanf("%d", &newAge);
            getchar();
            if(newAge > 0) {
                students[i].age = newAge;
            }
            printf("请输入新的成绩(输入-1保持不变): ");
            float newScore;
            scanf("%f", &newScore);
            getchar();
            if(newScore >= 0) {
                students[i].score = newScore;
            }
            printf("学生信息修改成功,\n");
            break;
        }
    }
    if(!found) {
        printf("未找到该学号的学生,\n");
    }
}
// 查询学生信息
void searchStudent() {
    if(studentCount == 0) {
        printf("没有学生信息可查询,\n");
        return;
    }
    int choice;
    printf("请选择查询方式:\n");
    printf("1. 按学号查询\n");
    printf("2. 按姓名查询\n");
    printf("请输入选择: ");
    scanf("%d", &choice);
    getchar();
    if(choice == 1) {
        char id[ID_LEN];
        printf("请输入要查询的学生学号: ");
        scanf("%s", id);
        getchar();
        int found = 0;
        for(int i = 0; i < studentCount; i++) {
            if(strcmp(students[i].id, id) == 0) {
                printf("学号: %s, 姓名: %s, 年龄: %d, 成绩: %.2f\n", 
                       students[i].id, students[i].name, students[i].age, students[i].score);
                found = 1;
                break;
            }
        }
        if(!found) {
            printf("未找到该学号的学生,\n");
        }
    } else if(choice == 2) {
        char name[MAX_NAME_LEN];
        printf("请输入要查询的学生姓名: ");
        scanf("%s", name);
        getchar();
        int found = 0;
        for(int i = 0; i < studentCount; i++) {
            if(strcmp(students[i].name, name) == 0) {
                printf("学号: %s, 姓名: %s, 年龄: %d, 成绩: %.2f\n", 
                       students[i].id, students[i].name, students[i].age, students[i].score);
                found = 1;
            }
        }
        if(!found) {
            printf("未找到该姓名的学生,\n");
        }
    } else {
        printf("无效的选择,\n");
    }
}
// 显示所有学生信息
void displayAllStudents() {
    if(studentCount == 0) {
        printf("没有学生信息可显示,\n");
        return;
    }
    printf("\n%-10s %-20s %-5s %-5s\n", "学号", "姓名", "年龄", "成绩");
    printf("------------------------------------------------\n");
    for(int i = 0; i < studentCount; i++) {
        printf("%-10s %-20s %-5d %-5.2f\n", 
               students[i].id, students[i].name, students[i].age, students[i].score);
    }
}
// 保存数据到文件
void saveToFile() {
    FILE *file = fopen("students.dat", "wb");
    if(file == NULL) {
        printf("无法打开文件进行保存,\n");
        return;
    }
    fwrite(&studentCount, sizeof(int), 1, file);
    fwrite(students, sizeof(Student), studentCount, file);
    fclose(file);
}
// 从文件加载数据
void loadFromFile() {
    FILE *file = fopen("students.dat", "rb");
    if(file == NULL) {
        printf("未找到数据文件,将创建新文件,\n");
        return;
    }
    fread(&studentCount, sizeof(int), 1, file);
    fread(students, sizeof(Student), studentCount, file);
    fclose(file);
}

功能说明

  1. 添加学生信息:输入学号、姓名、年龄和成绩,系统会检查学号是否已存在
  2. 删除学生信息:通过学号删除学生记录
  3. 修改学生信息:通过学号查找学生并修改其信息(姓名、年龄、成绩)
  4. 查询学生信息:可以按学号或姓名查询学生信息
  5. 显示所有学生信息:以表格形式显示所有学生记录
  6. 保存并退出:将数据保存到二进制文件并退出程序

使用说明

  1. 编译并运行程序
  2. 使用菜单选择相应功能
  3. 按照提示输入相关信息
  4. 数据会自动保存到"students.dat"文件中,下次启动程序时会自动加载

扩展建议

  1. 可以添加按成绩排序功能
  2. 可以添加统计功能(如平均分、最高分等)
  3. 可以增加密码保护功能
  4. 可以改进用户界面,使其更友好

这个实现使用了简单的控制台界面,数据保存在二进制文件中,如果需要更复杂的功能或图形界面,可以在此基础上进行扩展。

学生信息管理系统c语言代码
(图片来源网络,侵删)
-- 展开阅读全文 --
头像
dede如何调用栏目名称?
« 上一篇 今天
织梦文章分页样式如何自定义修改?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

目录[+]