基于 C 语言的教务管理系统,采用链表数据结构实现学生信息的增删改查、成绩统计与多算法排序。
- 增加学生信息(学号查重校验)
- 按姓名 / 学号删除学生
- 按姓名 / 学号修改学生信息(支持修改学号、姓名、各科成绩)
- 显示全部学生信息(Unicode 表格输出)
- 按姓名精确查询,输出学生详情卡片
- 按学号精确查询,输出学生详情卡片
- 输入任意课程名和分数区间,筛选并展示符合条件的学生
- 自动计算区间内的总分、平均分、最高分、最低分
- 升序排序 — 冒泡排序(链表节点交换,非值交换)
- 降序排序 — 归并排序(递归分治)
- 支持按任意课程名排序,排序后即时展示结果
| 模块 | 实现方式 |
|---|---|
| 数据结构 | 带头节点的单链表(全局头尾指针) |
| 数据持久化 | 文本文件读写(students.txt) |
| 升序排序 | 冒泡排序(链表节点交换) |
| 降序排序 | 归并排序(递归,快慢指针分割) |
| 终端表格 | Unicode Box Drawing 字符绘制 |
| 中文对齐 | UTF-8 字节序列解析,按显示宽度填充 |
| 输入安全 | scanf 宽度限定 + 缓冲区清理 |
小型教务管理系统/
├── 小型教务系统.c # 完整源代码(单文件实现)
├── students.txt # 学生数据文件(空格分隔)
└── README.md
students.txt 每行存储一条学生记录,字段以空格分隔:
学号 姓名 课程1 成绩1 课程2 成绩2 课程3 成绩3
示例:
2021001 张伟 语文 85.000000 数学 92.000000 英语 78.000000
2021002 李娜 语文 76.000000 数学 88.000000 英语 91.000000
- Windows 操作系统
- GCC 编译器(MinGW / MSYS2)或 MSVC
- 终端需支持 UTF-8 编码(程序已通过
SetConsoleOutputCP(65001)设置)
gcc -o 小型教务系统.exe 小型教务系统.c -Wall./小型教务系统.exe首次运行时,若目录下不存在 students.txt,系统将从空数据启动;退出时自动保存。
对链表执行冒泡排序,通过交换节点指针(而非节点值)实现排序,设置 swapped 标记进行提前终止优化。
采用快慢指针定位链表中点,递归拆分后按降序合并。时间复杂度 O(n log n),适合链表结构的高效排序。