链表+文件 一个初学者实现学生管理系统的心得

其实,用链表与文件写学生管理系统内容可分为两大模块:

模块一:一个完整的创建、遍历、添加、删除、修改的链表;

模块二:读取/写入数据到文件。

模块一

  一个链表,主要是malloc的正确使用。

定义一个带有结构指针的结构体,用malloc()动态开辟一个该结构体大小的内存用来作为节点,储存多个平行数据并且每动态开辟一个内存就要用这个内存里面的结构指针指向下一个开辟的内存(如果停止动态开辟内存,则需让这个指针指向NULL,作为Programmer都知道指针的潜在危险)。这个节点数量需用循环控制。malloc原型是 void* 类型,但在这里需要强制转换成结构类型使用。而且动态开辟内存不是每次都会成功,不成时mallco()会返回NULL,所以我们需要规范使用malloc()

 1 typedef struct stu //定义结构体变量
 2 {
 3         ...     //其他变量
 4     struct stu* pnext;      //结构体的内部指针
 5 }STU;
 6 STU* pNew
 7 if(NULL == (pNew = (STU*)malloc(sizeof(STU))))
 8 /*请使用if来判断,这是有必要的*/
 9 {
10     perror("error...");
11     exit(1);
12 }
13 pNew->pnext = NULL;
14 .../*其它代码*/
15 free(pNew);
16 pNew = NULL;/*请加上这句*/

另外有一点不能直接看出的区别是,malloc 只管分配内存,并不能对所得的内存进行初始化,所以得到的一片新内存中,其值将是随机的。

关于添加、删除、修改需要对指针的灵活运用。

如果在头部添加/删除,则要注意head的移动;

  在中间添加/删除,则注意利用循环定位准确;

  在尾部添加/删除,则要注意新/末尾结构体里的pnext(结构指针)指向NULL。

模块二

主要在于如何把链表写进指定文件里和如何把文件里的内容如何读取到链表里。

可直接单独写一个模块函数用fprintf格式化向文件里写入

 1 void PrintToTxt()
 2 {
 3         STU* pTemp = pStu->pnext;    //pStu为头指针pTemp为移动指针
 4
 5     if ((fp = fopen("学生信息管理.txt", "w")) == NULL)    //打开文件准备写入
 6     {
 7         printf("cannot open this file!\n");
 8         _getch();
 9         return;
10     }
11
12     while (pTemp != NULL)    //开始写入,pTemp为NULL时停止写入
13     {
14         fprintf(文件指针, "输出格式", 附加参数列表);
15         pTemp = pTemp->pnext;
16     }
17     fclose(fp);
18         printf("out save!");    //写入成功
19         exit(0);
20 }

但是若要从文件中读取并且形成链表的形式,则需要先建立链表再从文件中读取数据

 1 void ScanfTxt()
 2 {
 3     pStu = (STU*)malloc(sizeof(STU)); //动态开辟内存,创建链表
 4     pStu->pnext = NULL;
 5
 6     STU* pTemp = pStu;
 7     STU* pNew = NULL;
 8
 9     if ((fp = fopen("学生信息.txt", "r")) == NULL)
10     {
11         printf("cannot open this file\n!");
12         _getch();
13         exit(0);
14     }
15
16     while (1)        //读取数据,直到数据为空是跳出
17     {
18         pNew = (STU*)malloc(sizeof(STU));
19         pNew->pnext = NULL;
20         if (fscanf(文件指针, "格式字串符",
21             输入列表)==EOF)
22         {
23             free(pNew);    //释放多余开辟的内存
24             break;
25         }
26
27         pTemp->pnext = pNew;
28         pTemp = pTemp->pnext;
29     }
30     fclose(fp);
31
32 }
33     

这里并没有用到fread和fwrite

fread、fwrite是对二进制文件进行以二进制形式读写,以字节位计算长度,按照指定的长度和次数读取数据,遇到结尾或完成指定长度读取后停止。对于向文件里写入数据时所有字符都可以无效果的写入,比如遇见换行符则直接写入换行符并不会执行换行。

而fscanf、fprintf是从磁盘文件中读取数据,可以是二进制,也可以是其他形式,并且进行格式化读写。比如遇见换行符则会执行换行读写并不会读出或写入换行符。

这里用fscanf、fprintf主要利用可进行换行、格式化读写。

时间: 2024-08-05 11:17:16

链表+文件 一个初学者实现学生管理系统的心得的相关文章

《一个小型的学生管理系统》

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>#define SIZE 2 //函数声明void add(); //添加学生信息函数void show(); //显示学生信息函数void fail(); //不及格学生信息函数void excellent(); //优秀学生信息函数void Delete(); //删除指定学生信息函数void Exit(); //退

js实现一个简单的学生管理系统

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" con

Java写一个简单学生管理系统

其实作为一名Java的程序猿,无论你是初学也好,大神也罢,学生管理系统一直都是一个非常好的例子,初学者主要是用数组.List等等来写出一个简易的学生管理系统,二.牛逼一点的大神则用数据库+swing来做一个有界面的学生管理系统.其实都并不会太难. 今天我就先写一个简单的用List来实现学生管理系统: 首先,管理系统是针对学生对象的,所以我们先把学生对象就写出来: package bean; public class Student { String name; String studentId;

JAVA入门到精通-第70讲-学生管理系统2-增删改

-完成一个mini版本学生管理系统 jude软件:很好使的,安装一下就可以用了: -学生管理系统的添加 .修改.删除.上下页分页 ---------------------------------------------- 上面是一个流布局,JPanel 下面是一个流布局,JPanel 中间是Border布局,边界布局,CENTER JTextField jtf; 先加JLable--->Jtf文本域->JButton按钮 ------------------------- mis 系统:信息

c语言学生管理系统链表(dev vs2012下可以运行)

struct student { char name[10]; char sex[5]; long int num;//学号 int xuhao; int age; float score[3]; float averange; char DJ;//存放等级哦 struct student *next; };//定义结构体变量保存 名字 性别 年龄 成绩] 结构体声明 int n;//存放学生人数 int man;//存放统计的男生数 float JY(float a)//校验成绩使范围0-10

C语言的指针、链表的原理及学生管理系统

指针原理: 指针就是指向一个特定内存地址的一个变量.简化了的内存空间模型是按照从0到某一个数(比如1048575=1M-1)的一维线性空间,其中的每一个数对应一个存储单元,即1个字节.指针有两个属性:指向性和偏移性.指向性指的是指针一定要有一个确定的指向,偏移性则是体现指针重要应用的方面,即指针可以按程序员的要求向前或向后偏移. 指针的应用往往与数组联系在一起,为了方便说明问题,不妨从数组开始解释指针的偏移.数组就是许多的变量,它的一个重要特征就是在内存空间中连续地存放,而且是按下标顺序存放.比

用链表写的学生管理系统 成绩的录入与查询都已经是实现了

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct teacher { char name[32]; int math; int english; int data; struct Node *next; }SLIST; int Creat_SList(); int SList_Print(); int SLis

使用python实现一个简单的学生信息管理系统

最近公司搬办公室,杂七杂八的事情比较多,又碰上业务要上线了...很多事情堆到一起来做,导致最近没什么时间学习,写博客.前两天胜利日放假,把以前用java写的学生信息管理系统用python重新写了一遍,以便于帮助python的学习. 好了,废话不多说,首先进行需求分析,下面是我根据需求画的系统结构图: 纯手工制图.....画的不好敬请谅解.从上图来看,整个系统分为main,add,delete,change,select,sort,io,print共八个模块,实现了对学生信息的增删改查排的功能,将

学生管理系统中的文件操作

这两天敲一个小例子--学生信息管理系统,其中需要用到对学习信息的保存和读取操作,这些有关文件操作如下: 1.将文件的信息读取到变量中 <span style="font-family:KaiTi_GB2312;font-size:24px;">//从文件d:/student.bin读取信息到变量中 void readfile( FILE *fp, int &StuAmount, Stu Student[] ) { if((fp=fopen("d:/stud