"点击上方“蓝色字”,关注我们哦(*^▽^*)!"
NO.1
篇幅较长,请空闲时观看
前言 整个项目包括三个文件 ——mylist.h | —mylist.c | —student.c mylist.h和mylist.c写有链表创建和文件读写,student.c则是写界面和功能。基于C语言的学生管理系统(含文件)(一) 上篇文章中主要讲了学生信息管理系统的界面内容,本文将重点介绍单链表的创建和文件的读写操作。 单链表什么是链表?
链表是一种链式存储的数据结构,与内存存储连续的数组不同,链表中以结点为单位,相邻结点用指针相连,结点在内存中也不是连续存储的。
结点包括数据域和指针域,每个结点只有一个链域的链表称为单链表。
节点结构
单链表结构
本文中单链表与项目结合讲解。
首先用结构体声明学生信息和链表结点,结点中又包括学生信息和指向结点的指针,这样结点即可以存放数据,又可以指向下一个结点。
struct student//学生信息
{
创建一个链表
链表有很多种,在这只介绍最简单的单链表(含空头结点)。首先创建一个空头结点,链表的增长都在这个头结点的基础上进行。
//创建一个有表头链表
创建一个新结点并插入到链表中
将结点插入链表分为两种情况:
一是链表中一个结点也没有,那么可以直接将新结点插入到头结点后面;
二是链表中已经有了结点,则不仅要将头结点指向新节点,还要将新结点指向先前头结点的下一个结点(头插法)。
单链表插入图形
//创建一个新结点
删除结点
从链表中删除指定结点,就是将结点从链表中摘除以及将删除结点所占的内存空间释放。
拆除结点只需将所删除结点的前驱结点直接指向所删除结点的后驱结点即可。
最终使用free()手动释放该结点。
项目中使用学号和姓名删除学生,源码类似,只展示按学号的代码。(下文查找,排序亦是如此)
单链表删除图形
//按学号删除学生信息
查找结点
从头结点开始遍历整个链表,将要查找的学生学号与结点数据域的学生学号一一对比,查找成功则返回该结点,并将该学生信息打印到界面上。
//按学号查找学生
//打印查找的学生信息
排序结点
采用冒泡排序将链表排序,即每次比较两个相邻的结点数据域,如果它们的顺序错误就把它们交换过来。
void sortList_byid(struct Node *StudentListhead)//按学号排序{
文件写入
创建文件指针使用fopen()关联指定文件,创建临时指针遍历链表,然后使用fprintf()将链表中的数据写入到文件中,最后关闭文件流。
//将学生信息存入文件
文件读取
创建文件指针使用fopen()关联指定文件,创建临时结构体变量,遍历文件,使用fscanf()读取文件中内容到临时变量,再将临时变量插入到链表中,最后关闭文件流。
//从文件中读取学生信息
以上便是项目的全部内容,希望对你有所帮助。
公众号后台回复"学生"即可获取源码
作者:瑾年辰良一位热爱生活的快乐青年"即见君子,云胡不喜?"