怎么将文件中的信息写入链表_第三十九章、用C语言打造学生信息库(第一部分)...

又是好几天过去了,我们接下来将对学生信息库进行归纳下,写完学生信息库基本上我们也可以算是入门了。同时大家私信回复"学生信息库",就可以获取源代码,这一次放出的就是介绍这一部分的内容。

1. 功能简介

我们的学生信息库通过文本文档来作为数据存储,使用链表来进行数据操作。

总共分为增加、查询、删除、更新、退出,几个功能,目录结构如下:

a3b53033c9b2fae7f5b1a3455d831c45.png

2. 主界面

我们既然做系统,就需要和用户进行交互,在这里我们简单的做一个交互界面,让用户选择各项功能,我们使用void Display();函数来实现:

992a29e74fd27e2cd91fd65fa67b5d99.png

3. 增加

增加的功能我放在insert.c中,我们这里对增加分成三部分来实现:

a、 第一部分如果数据文件中已有数据,则需要在系统运行前进行加载,我们通过student* Init();来初始化数据,主要实现函数为

student * insertReadStudentFile(student *stu,FILE *stfile)

该函数功能为从文件中读取学生信息插入学生链表,返回一个结构体指针,指向新插入的结构体,它需要一个结构体指针和一个文件指针作为参数.

b、 第二部分如果需要新增学生信息,则我们需要新增结点,在这里通过student * insertStudent(student *stu ,student s)函数来实现,该函数功能为插入学生信息,返回一个结构体指针,指向新插入的结构体,需要一个结构体指针和结构体变量作为参数,

c、 第三部分为第二部分的延伸,在第二部分插入链表中完成后还需要将数据插入数据文档中,我通过int insertFileStudentNode(student *node)函数来实现该功能,该函数返回0表示文件打开失败,返回1表示写入成功,返回2表示写入失败

接下来我们来看下插入的界面:

69d9a6e4c6328539b9f69c1525e36c27.png

4. 查询

作为一个系统比较常用的功能就是查询了,我将查询模块放在了select.c中,在这里我们做了按学号查询和按姓名查询两

a、 界面

既然有两种查询我们这里还是需要和用户进行交互下来确定使用哪一种查询方式,我们这里使用void DisplaySelect();来实现查询界面

b、 按学号查询

我们在这里学号是唯一的,所以在查询时只有两种情况,第一种就是能找到一个,第二种就是找不到,我们通过函数

student * selectID(student *stu,int id)来实现该功能,该函数实现按学号查询,找到返回该结点指针,否则返回NULL,

c、 按姓名查询

在一个学生库中,我们的学生有可能是同名同姓的,所以我们这里不能像按学号查询一样,在按学号查询中有这么几种可能,

a) 找不到

b) 找到一个

c) 找到好几个

那么这种情况我们在这里就需要对链表进行完整的遍历才能进行查询出来。

我通过student * selectName(student *stu,char *name)来实现查询姓名的功能,该函数找到相同姓名时返回该结点指针,否则返回NULL,

然后我们通过外部循环将返回的结构体指针的下一个作为参数在调用实现遍历查询。

我们来看下查询功能的截图:

129bcd7f51e9f8863d83627ef256cd6e.png

5. 退出

我们在主界面可以直接选择退出,退出时我们需要释放链表所使用的内存空间,在这里因为数据比较少,我将链表中的数据同时显示一下。通过以下两个函数实现:

a、 释放所有链表空间

释放链表空间的函数在freelist.c中,我们通过

void freelist(student *stu)函数实现。

b、 打印链表结点

打印链表结点函数在select.c中,我们通过void printStudentNode(student *stu)实现。

这一章就写到这里,其他功能下一章在介绍,同时大家关注一下,私信回复"学生信息库",就可以获取源代码,这一次放出的就是介绍这一部分的内容。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值