【项目开发 | C语言项目 | C语言学生管理系统】

本项目是一个简易的学生信息管理系统,用户可以通过命令行界面完成学生信息的增加、删除、修改、查询、排序和列表展示等功能。数据以txt文件形式存储,实现了数据持久化。项目采用模块化设计,具有较好的可读性和扩展性。适用于初学者学习c语言,也适用于高校学生课程设计,毕业设计参考。

一,开发环境需求

  • 操作系统 :windows, linux

  • 开发环境工具 :qt ,vscode, visual studio

  • 技术要求

    • 语言: C
    • 数据结构: 链表
    • 文件操作: 文件读写操作

二,功能说明

在这里插入图片描述

三,功能实现

  1. 录入学生信息
void addStudent(StudentList *list) {
    Student newStudent;
    printf("请输入学生信息:\n");
    printf("学号: ");
    scanf("%d", &(newStudent.id));
    while(getchar() != '\n');
    printf("姓名: ");
    fgets(newStudent.name, sizeof(newStudent.name), stdin);
    newStudent.name[strlen(newStudent.name)-1] = '\0'; // remove the newline
    printf("年龄: ");
    scanf("%d", &(newStudent.age));
    while(getchar() != '\n');
    printf("性别: ");
    fgets(newStudent.gender, sizeof(newStudent.gender), stdin);
    newStudent.gender[strlen(newStudent.gender)-1] = '\0';
    printf("专业: ");
    fgets(newStudent.major, sizeof(newStudent.major), stdin);
    newStudent.major[strlen(newStudent.major)-1] = '\0';
    printf("班级: ");
    fgets(newStudent.class_name, sizeof(newStudent.class_name), stdin);
    newStudent.class_name[strlen(newStudent.class_name)-1] = '\0';
    printf("成绩: ");
    scanf("%f", &(newStudent.score));

    // add the new student to the list
    StudentNode *newNode = (StudentNode*)malloc(sizeof(StudentNode));
    newNode->data = newStudent;
    newNode->next = list->head;
    list->head = newNode;
    list->count++;

    printf("学生信息已添加成功!\n");
}

此函数用于添加学生信息。

  1. 删除学生信息
void deleteStudent(StudentList *list) {
    int id;
    printf("请输入要删除的学生的学号: ");
    scanf("%d", &id);

    StudentNode *current = list->head;
    StudentNode *previous = NULL;
    while (current != NULL) {
        if (current->data.id == id) {
            if (previous == NULL) {
                list->head = current->next;
            } else {
                previous->next = current->next;
            }
            free(current);
            list->count--;
            printf("学生信息已删除。\n");
            return;
        }
        previous = current;
        current = current->next;
    }
    printf("未找到该学生的信息。\n");
}

此函数用于删除指定学生信息。

3.s 修改学生信息

void modifyStudent(StudentList *list) {
    int id;
    printf("请输入要修改的学生的学号: ");
    scanf("%d", &id);

    StudentNode *current = list->head;
    while (current != NULL) {
        if (current->data.id == id) {
            printf("请输入新的学生信息:\n");
            printf("姓名: ");
            while(getchar() != '\n'); // clear buffer
            fgets(current->data.name, sizeof(current->data.name), stdin);
            current->data.name[strlen(current->data.name)-1] = '\0'; // remove newline
            printf("年龄: ");
            scanf("%d", &(current->data.age));
            printf("性别: ");
            while(getchar() != '\n');
            fgets(current->data.gender, sizeof(current->data.gender), stdin);
            current->data.gender[strlen(current->data.gender)-1] = '\0';
            printf("专业: ");
            while(getchar() != '\n');
            fgets(current->data.major, sizeof(current->data.major), stdin);
            current->data.major[strlen(current->data.major)-1] = '\0';
            printf("班级: ");
            while(getchar() != '\n');
            fgets(current->data.class_name, sizeof(current->data.class_name), stdin);
            current->data.class_name[strlen(current->data.class_name)-1] = '\0';
            printf("成绩: ");
            scanf("%f", &(current->data.score));
            printf("学生信息已修改。\n");
            return;
        }
        current = current->next;
    }
    printf("未找到该学生的信息。\n");
}

此函数用于修改指定学生信息。

  1. 查询学生信息
void queryStudent(const StudentList *list) {
    int id;
    printf("请输入要查询的学生的学号: ");
    scanf("%d", &id);

    StudentNode *current = list->head;
    while (current != NULL) {
        if (current->data.id == id) {
            printf("学号: %d\n", current->data.id);
            printf("姓名: %s\n", current->data.name);
            printf("年龄: %d\n", current->data.age);
            printf("性别: %s\n", current->data.gender);
            printf("专业: %s\n", current->data.major);
            printf("班级: %s\n", current->data.class_name);
            printf("成绩: %.2f\n", current->data.score);
            return;
        }
        current = current->next;
    }
    printf("未找到该学生的信息。\n");
}

此函数用于查询指定学生信息。

  1. 对学生信息排序
// 排序学生信息(这里以学号为例,升序排列)
void sortStudents(StudentList *list) {
    // 使用冒泡排序算法
    if (list->count < 2) return;

    StudentNode *i, *j;
    for (i = list->head; i->next != NULL; i = i->next) {
        for (j = list->head; j->next != NULL; j = j->next) {
            if (j->data.id > j->next->data.id) {
                // 交换数据
                Student temp = j->data;
                j->data = j->next->data;
                j->next->data = temp;
            }
        }
    }
    printf("学生信息已排序。\n");
}

此函数用于对学生信息进行排序。

  1. 列出所有学生信息
void displayAllStudents(const StudentList *list) {
    if (!list->head) {
        printf("没有学生信息可供显示。\n");
        return;
    }

    printf("学号   姓名       年龄 性别 专业                  班级       成绩\n");
    printf("-----------------------------------------------------------------\n");

    StudentNode *current = list->head;
    while (current != NULL) {
        printf("%-6d %-10s %-4d %-4s %-20s %-10s %.2f\n",
               current->data.id, current->data.name, current->data.age,
               current->data.gender, current->data.major, current->data.class_name,
               current->data.score);
        current = current->next;
    }

    printf("-----------------------------------------------------------------\n");
}

此函数用于显示所有学生的信息。

四,效果图

后续截图添加

五,源码

代码已开源,可访问gitee下载。

六,总结

本项目是一个简单的学生信息管理系统,通过命令行界面与用户交互。主要实现了学生信息的增、删、查、改等功能。项目中主要使用C语言进行开发,并使用链表作为主要数据结构。经过严格的测试和修正,现在可以正常运行并满足基本的需求。

七,声明

本项目大量使用AI编写,如有想法和疑问请联系作者

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值