C语言课程设计:学生成绩管理系统

本项目是一个简单的学生成绩管理系统,使用C语言实现,能够进行学生信息的录入、查询、修改和删除等基本操作,并使用文件存储数据,方便用户管理学生信息。

功能概述

  • 录入学生信息: 输入学生学号、姓名、年龄和成绩,将信息存储到文件中。
  • 查询学生信息: 输入要查询的学号,从文件中读取并显示该学生的信息。
  • 修改学生信息: 输入要修改的学号,更新该学生的姓名、年龄和成绩信息。
  • 删除学生信息: 输入要删除的学号,从文件中删除该学生信息。

代码实现

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

// 定义学生结构体
typedef struct {
    char id[20];
    char name[20];
    int age;
    float score;
} Student;

// 函数声明
void displayMenu();
void addStudent();
void searchStudent();
void modifyStudent();
void deleteStudent();

int main() {
    int choice;
    
    while (1) {
        displayMenu();
        scanf('%d', &choice);
        
        switch (choice) {
            case 1:
                addStudent();
                break;
            case 2:
                searchStudent();
                break;
            case 3:
                modifyStudent();
                break;
            case 4:
                deleteStudent();
                break;
            case 5:
                printf('退出程序\n');
                exit(0);
            default:
                printf('无效的选项,请重新选择\n');
                break;
        }
    }
    
    return 0;
}

// 显示菜单
void displayMenu() {
    printf('====== 学生成绩管理系统 ======\n');
    printf('1. 录入学生信息\n');
    printf('2. 查询学生信息\n');
    printf('3. 修改学生信息\n');
    printf('4. 删除学生信息\n');
    printf('5. 退出程序\n');
    printf('请选择操作:');
}

// 录入学生信息
void addStudent() {
    Student student;
    
    printf('请输入学号:');
    scanf('%s', student.id);
    printf('请输入姓名:');
    scanf('%s', student.name);
    printf('请输入年龄:');
    scanf('%d', &student.age);
    printf('请输入成绩:');
    scanf('%f', &student.score);
    
    FILE *file = fopen('students.txt', 'a');
    if (file == NULL) {
        printf('文件打开失败\n');
        return;
    }
    
    fprintf(file, '%s %s %d %.2f\n', student.id, student.name, student.age, student.score);
    fclose(file);
    
    printf('学生信息录入成功\n');
}

// 查询学生信息
void searchStudent() {
    char id[20];
    
    printf('请输入要查询的学号:');
    scanf('%s', id);
    
    FILE *file = fopen('students.txt', 'r');
    if (file == NULL) {
        printf('文件打开失败\n');
        return;
    }
    
    Student student;
    int found = 0;
    
    while (fscanf(file, '%s %s %d %f', student.id, student.name, &student.age, &student.score) != EOF) {
        if (strcmp(student.id, id) == 0) {
            printf('学号:%s\n', student.id);
            printf('姓名:%s\n', student.name);
            printf('年龄:%d\n', student.age);
            printf('成绩:%.2f\n', student.score);
            found = 1;
            break;
        }
    }
    
    fclose(file);
    
    if (!found) {
        printf('未找到学号为%s的学生\n', id);
    }
}

// 修改学生信息
void modifyStudent() {
    char id[20];
    
    printf('请输入要修改的学号:');
    scanf('%s', id);
    
    FILE *file = fopen('students.txt', 'r+');
    if (file == NULL) {
        printf('文件打开失败\n');
        return;
    }
    
    Student student;
    int found = 0;
    
    while (fscanf(file, '%s %s %d %f', student.id, student.name, &student.age, &student.score) != EOF) {
        if (strcmp(student.id, id) == 0) {
            printf('请输入新的姓名:');
            scanf('%s', student.name);
            printf('请输入新的年龄:');
            scanf('%d', &student.age);
            printf('请输入新的成绩:');
            scanf('%f', &student.score);
            
            fseek(file, -sizeof(Student), SEEK_CUR);
            fprintf(file, '%s %s %d %.2f\n', student.id, student.name, student.age, student.score);
            
            found = 1;
            break;
        }
    }
    
    fclose(file);
    
    if (!found) {
        printf('未找到学号为%s的学生\n', id);
    } else {
        printf('学生信息修改成功\n');
    }
}

// 删除学生信息
void deleteStudent() {
    char id[20];
    
    printf('请输入要删除的学号:');
    scanf('%s', id);
    
    FILE *file = fopen('students.txt', 'r');
    if (file == NULL) {
        printf('文件打开失败\n');
        return;
    }
    
    FILE *tempFile = fopen('temp.txt', 'w');
    if (tempFile == NULL) {
        printf('文件打开失败\n');
        fclose(file);
        return;
    }
    
    Student student;
    int found = 0;
    
    while (fscanf(file, '%s %s %d %f', student.id, student.name, &student.age, &student.score) != EOF) {
        if (strcmp(student.id, id) == 0) {
            found = 1;
            continue;
        }
        
        fprintf(tempFile, '%s %s %d %.2f\n', student.id, student.name, student.age, student.score);
    }
    
    fclose(file);
    fclose(tempFile);
    
    if (!found) {
        printf('未找到学号为%s的学生\n', id);
    } else {
        remove('students.txt');
        rename('temp.txt', 'students.txt');
        printf('学生信息删除成功\n');
    }
}

使用说明

  1. 将代码保存为.c文件,例如 student_management.c
  2. 使用C语言编译器编译代码,例如 gcc student_management.c -o student_management
  3. 运行可执行文件,例如 ./student_management
  4. 根据菜单提示进行操作。

扩展功能

  • 可以添加更多学生信息字段,例如性别、班级等
  • 可以实现对学生信息进行排序
  • 可以使用图形界面进行操作,提高用户体验

总结

这是一个简单的学生成绩管理系统,可以作为C语言课程设计的参考。你可以根据自己的需要进行修改和扩展,实现更复杂的功能。

C语言课程设计:学生成绩管理系统

原文地址: https://www.cveoy.top/t/topic/rBj 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录