C语言结构体链表实现学生信息管理系统

咖啡半糖
咖啡半糖
发布时间:2026-10-15 | 4人浏览过
原创

使用C语言中的结构体结合动态链表技术,可以高效地管理学生的基础信息与课程成绩。本系统实现了数据的动态录入、按学号/姓名等多维度的查询与修改、删除记录以及文件自动保存功能,适用于初学者理解内存管理与基本算法逻辑。

一、系统设计思路

为了将学生的基本信息与各科成绩解耦管理,系统将整体划分为“学生档案管理”与“学生成绩管理”两个独立但关联的子模块。在数据结构上,利用链表的动态特性来应对人员数量的变动,每个节点代表一条完整的学生记录,并通过指针链接。

二、核心数据结构定义

在头文件 student.h 中,定义了用于承载信息的结构体与枚举类型。这种设计确保了同一学生在两个子系统中的 ID 能够对应,同时规范了输入格式。

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

// 定义日期结构体
struct Date {
    int year;
    int month;
    int day;
};

// 生源地枚举(0-7 代表不同地区)
enum Depart {sdjinan,sdqingdao,sdyantai,sdweifang,sdheze,sddezhou,sdbinzhou,sdweihai};

// 学生档案结构体,包含基础信息和指向下一个节点的指针
struct Stu_record {
    int id;                // 学号
    char name[20];         // 姓名
    char sex[10];          // 性别
    struct Date birth;     // 出生日期
    int clas;              // 班级
    enum Depart syd;       // 生源地
    struct Stu_record *next;
};

// 学生成绩结构体
struct Stu_score {
    int id;
    char name[20];
    int clas;
    double course1;   // 课程1成绩
    double course2;   // 课程2成绩
    double course3;   // 课程3成绩
    double avg;       // 平均分
    struct Stu_score *next;
};

三、关键功能实现说明

第1步:初始化主菜单系统

在主循环 main.c 中,首先输出欢迎界面,并提供进入档案或成绩系统的入口。该层设计使用了无限 while 循环配合 switch-case 语句维持控制台程序的持续运行。

第2步:录入与维护学生档案

进入档案管理后,最核心的操作是数据的录入与存储。

  • 录入流程: 调用 readin_record() 函数。程序提示输入总人数,随后通过循环逐个分配内存创建新节点,并将输入的信息(如学号、生日等)填入结构体。
  • 排序入库: 在插入链表时(insert` 函数),为了保证后续查找的高效性,新节点会被自动放置在学号比它大的前一个节点之前,从而实现链表按学号升序排列。
  • 文件保存: 每次录入完成后,使用 FILE* 指针以二进制追加模式打开 Tdata_new.txt,将内存中所有节点的数据序列化写入磁盘。

第3步:多维度信息查询

系统内置了多种检索机制以满足不同的搜索需求:

  • 精确匹配: id_inquiry_record() 与 name_inquiry_record() 遍历链表,比对目标节点的 ID 或字符串(strcmp),找到则打印信息。
  • 范围组合: clasSyd_inquiry_record() 支持同时筛选班级与生源地,当满足两个条件时输出结果。

第4步:数据处理与分析

除了基础的 CRUD(增删改查),系统还提供统计学计算。

  • 生源地统计: 遍历档案链表,使用数组下标对应枚举值计数,计算出各地区的百分比分布。
  • 学业分析: 在成绩模块中,根据三门课的成绩计算平均值并自动存储;提供按课程分析最低分、最高分及不及格人数的报表。

四、代码框架参考

以下是驱动整个控制台应用的核心入口与菜单分发逻辑示例。由于涉及大量重复的键盘输入验证(scanf 回圈处理)与文件 IO 操作,代码较为冗长,建议在实际开发中提取公共的 IO 模块。

int main() {
    while(1) {
        int n;
        menu1();  // 显示主菜单
        printf("请输入您的选择:\n");
        scanf("%d",&n);
        
        switch (n) {
            case 1: menu2_record(); break; // 进入档案管理
            case 2: menu2_score(); break;  // 进入成绩管理
            case 0: return 0;             // 退出系统
            default: printf("无效选项,请重试。\n");
        }
        system("pause");
        system("cls");
    }
    return 0;
}

以上就是C语言结构体链表和指针实现学生管理系统 的详细内容,更多关于C语言基础编程的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表