17 C语言学生管理系统

学生管理系统

👍😂💯 项目代码

代码可能存在细节上的错误,希望大家可以指导意见。


#define _CRT_SECURE_NO_WARNINGS  1

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

#define MAX_STUDENTS 100

typedef struct {
    int id;
    char name[50];
    float score1;
    float score2;
    float score3;
    float average;
} Student;

Student students[MAX_STUDENTS];
int num_students = 0;

void display_menu() {
    printf("**********************************************\n");
    printf("              学生管理系统\n");
    printf("**********************************************\n");
    printf("                                          \n");
    printf(" 1.增加一位学生信息  2.删除一位同学信息      \n");
    printf(" 3.按学号查询学生    4.按姓名查询学生       \n");
    printf(" 5.修改学生信息      6.按姓名排序           \n");
    printf(" 7.按平均分排序      8.装入学生信息         \n");
    printf(" 9.保存学生信息      0.显示全部同学的信息   \n");
    printf("                                          \n");
    printf("按q或者Q退出系统                    \n");
    printf("**********************************************\n");
    printf("请选择操作:");
}

void add_student() {
    Student new_student;
    printf("输入学生的学号(-1 结束): ");
    scanf("%d", &new_student.id);

    if (new_student.id == -1) {
        return;
    }

    printf("输入学生的姓名: ");
    scanf("%s", new_student.name);
    printf("输入学生的高数成绩: ");
    scanf("%f", &new_student.score1);
    printf("输入学生的C语言成绩: ");
    scanf("%f", &new_student.score2);
    printf("输入学生的英语成绩: ");
    scanf("%f", &new_student.score3);
    new_student.average = (new_student.score1 + new_student.score2 + new_student.score3) / 3.0;
    students[num_students++] = new_student;
    printf("学生信息添加成功\n");
}

void delete_student() {
    int student_id;
    int i;
    printf("输入学生的学号: ");
    scanf("%d", &student_id);
    int index = -1;
    for (i = 0; i < num_students; i++) {
        if (students[i].id == student_id) {
            index = i;
            break;
        }
    }
    if (index == -1) {
        printf("学号不存在\n");
        return;
    }
    for (i = index; i < num_students - 1; i++) {
        students[i] = students[i + 1];
    }
    num_students--;
    printf("删除学生信息成功\n");
}

void search_by_id() {
    int student_id;
    int i;
    printf("输入学生的学号: ");
    scanf("%d", &student_id);
    int index = -1;
    for (i = 0; i < num_students; i++) {
        if (students[i].id == student_id) {
            index = i;
            break;
        }
    }

    if (index == -1) {
        printf("学号不存在\n");
        return;
    }
    printf("学号\t姓名\t课程1\t课程2\t课程3\t平均分\n");
    printf("%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",
           students[index].id, students[index].name, students[index].score1,
           students[index].score2, students[index].score3, students[index].average);
}

void search_by_name() {

    int found = 0;
    char student_name[50];
    int i;
    printf("输入学生的姓名: ");
    scanf("%s", student_name);
    printf("学号\t姓名\t课程1\t课程2\t课程3\t平均分\n");
    for (i = 0; i < num_students; i++) {
        if (strcmp(students[i].name, student_name) == 0) {
            printf("%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",
                   students[i].id, students[i].name, students[i].score1,
                   students[i].score2, students[i].score3, students[i].average);
            found = 1;
        }
    }

    if (!found) { printf("学生不存在\n"); }
}

void update_student() {
    int student_id;
    int index = -1;
    int i;
    printf("输入学生的学号: ");
    scanf("%d", &student_id);
    for (i = 0; i < num_students; i++) {
        if (students[i].id == student_id) {
            index = i;
            break;
        }
    }
    if (index == -1) {
        printf("学号不存在\n");
        return;
    }
    printf("输入学生的姓名: ");
    scanf("%s", students[index].name);
    printf("输入学生的课程1成绩: ");
    scanf("%f", &students[index].score1);
    printf("输入学生的课程2成绩: ");
    scanf("%f", &students[index].score2);
    printf("输入学生的课程3成绩: ");
    scanf("%f", &students[index].score3);
    students[index].average = (students[index].score1 + students[index].score2 + students[index].score3) / 3.0;
    printf("学生信息更新成功\n");
}

void sort_by_name() {
    int i, j;
    for (i = 0; i < num_students - 1; i++) {
        for (j = 0; j < num_students - 1 - i; j++) {
            if (strcmp(students[j].name, students[j + 1].name) > 0) {
                Student temp = students[j];
                students[j] = students[j + 1];
                students[j + 1] = temp;
            }
        }
    }
    printf("学号\t姓名\t课程1\t课程2\t课程3\t平均分\n");
    for (i = 0; i < num_students; i++) {
        printf("%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",
               students[i].id, students[i].name, students[i].score1,
               students[i].score2, students[i].score3, students[i].average);
    }
}

void sort_by_average() {
    int i, j;
    for (i = 0; i < num_students - 1; i++) {
        for (j = 0; j < num_students - 1 - i; j++) {
            if (students[j].average < students[j + 1].average) {
                Student temp = students[j];
                students[j] = students[j + 1];
                students[j + 1] = temp;
            }
        }
    }
    printf("学号\t姓名\t课程1\t课程2\t课程3\t平均分\n");
    for (i = 0; i < num_students; i++) {
        printf("%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",
               students[i].id, students[i].name, students[i].score1,
               students[i].score2, students[i].score3, students[i].average);
    }
}

void load_students() {
    FILE *file = fopen("student_info.bin", "rb");
    if (file == NULL) {
        printf("无法打开文件\n");
        return;
    }
    fread(&num_students, sizeof(int), 1, file);
    fread(students, sizeof(Student), num_students, file);
    fclose(file);
}

void save_students() {
    FILE *file = fopen("student_info.bin", "wb");
    if (file == NULL) {
        return;
    }
    fwrite(&num_students, sizeof(int), 1, file);
    fwrite(students, sizeof(Student), num_students, file);
    fclose(file);
    printf("学生信息保存成功\n");
}

void display_students() {
    int i;
    printf("学号\t姓名\t课程1\t课程2\t课程3\t平均分\n");
    for (i = 0; i < num_students; i++) {
        printf("%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n", students[i].id, students[i].name, students[i].score1,
               students[i].score2, students[i].score3, students[i].average);
    }
}

int main() {
    load_students();
    while (1) {
        display_menu();
        char choice;
        scanf(" %c", &choice);
        switch (choice) {
            case '1':
                add_student();
                break;
            case '2':
                delete_student();
                break;
            case '3':
                search_by_id();
                break;
            case '4':
                search_by_name();
                break;
            case '5':
                update_student();
                break;
            case '6':
                sort_by_name();
                break;
            case '7':
                sort_by_average();
                break;
            case '8':
                load_students();
                break;
            case '9':
                save_students();
                break;
            case '0':
                display_students();
                break;
            case 'q':
            case 'Q':
                printf("再见!\n");
                exit(0);
            default:
                printf("输入错误,请重新输入!\n");
                break;
        }
    }
    return 0;
}

项目运行展示





这段代码是一个简单的学生管理系统,它使用 C 语言编写,主要用于存储、管理和展示学生的基本信息及成绩。下面是对项目结构、逻辑结构和项目背景的详细描述:

项目结构

  1. 头文件和宏定义

    • #define _CRT_SECURE_NO_WARNINGS 1:这是为了防止在 Visual Studio 等编译器中出现关于不安全函数的警告。
    • #include 指令用于引入标准库,如 stdio.hstdlib.hstring.h,这些库提供了输入输出、内存操作和字符串处理等功能。
  2. 数据结构定义

    • Student 结构体定义了学生的信息,包括学号、姓名、三门课程的成绩和平均分。
  3. 全局变量

    • students 数组用于存储所有学生的信息。
    • num_students 变量用于跟踪当前存储的学生数量。
  4. 功能函数

    • display_menu():显示系统菜单。
    • add_student():添加学生信息。
    • delete_student():删除学生信息。
    • search_by_id()search_by_name():分别通过学号和姓名查询学生信息。
    • update_student():更新学生信息。
    • sort_by_name()sort_by_average():分别按姓名和平均分对学生进行排序。
    • load_students()save_students():从文件加载和保存学生信息。
    • display_students():显示所有学生信息。
  5. 主函数 main()

    • 初始化学生信息数组。
    • 进入一个无限循环,显示菜单并根据用户输入执行相应的操作。
    • 提供退出选项。

逻辑结构

  1. 初始化

    • main() 函数开始时,调用 load_students() 从文件加载已有的学生信息。
  2. 用户交互

    • 通过 display_menu() 函数显示操作选项。
    • 用户输入选择后,通过 switch 语句执行相应的功能函数。
  3. 数据处理

    • 每个功能函数都对 students 数组和 num_students 变量进行操作,以实现增加、删除、查询、更新、排序和显示学生信息的功能。
  4. 数据持久化

    • load_students()save_students() 函数通过二进制文件 student_info.bin 实现数据的持久化存储。
  • 17
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Forever love..

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

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

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

打赏作者

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

抵扣说明:

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

余额充值