C 语言课程设计
保存过新的数据,若没有,则全局变量 saveflage=1,系统会提示用户是否需要进行数据存盘
操作,用户输入 Y 或 y,系统会自动进行存盘操作后再执行退出成绩管理系统的操作。
若选择 1,则调用 Add()函数,执行增加学生记录操作;若选择 2,则调用 Del()函数,执
行删除学生记录操作;若选择 3,则调用 Qur()函数,执行查询学生记录操作;若选择 4,则
调用 Modify()函数,执行修改学生记录操作;若选择 5,则调用 Insert()函数,执行插入学生
记录操作;若选择 6,则调用 Tongji()函数,执行统计学生记录操作;若选择 7,则调用 Sort()
函数,执行按降序排序学生记录操作;若选择 8,则调用 Save()函数,执行将学生记录存入
数据文件的操作;若选择 9,则调用 Disp()函数,执行将学生记录以表格形式打印输出至屏幕
的操作;若输入为 0~9 之外的值,则调用 Wrong()函数,给出按键错误的提示。
2.2.3 输入记录模块
输入记录模块主要实现将数据存入单链表中。当从数据文件中读出记录时, 调 用
fread(p,sizeof(Node),1,fp)文件读取函数,执行一次从文件中读取一条学生成绩记录信息存入
指针变量 p 所指的节点中的操作,并且该操作在 main()函数中执行,即当成绩管理系统进入
显示菜单界面时,该操作已经执行了。若该文件中没有数据,系统会提示单链表为空,没有
任何学生记录可操作,此时,用户应选择 1,调用 Add()函数,进行学生记录的输入,即完成
在单链表 l 中添加记录的操作。值得一提的是,这里的字符串和数值的输入分别采用了函数
来实现,在函数中完成输入数据任务,并对数据进行条件判断,直到满足条件为止,这样一
来,大大减少了代码的重复和冗余,符合模块化程序设计的特点。
2.2.4 查询记录模块
查询记录模块主要实现了在单链表中按学号或姓名查找满足相关条件的学生记录。在查
询函数 Qur(l)中,l 为指向保存了学生成绩信息的单链表的首地址的指针变量。为了遵循模块
化编程的原则,我们将在单链表中进行的指针定位操作,设计成了一个单独的函数
Node *Locate(Link l,char findmess[],char nameornum[]),参数 findmess[]保存要查找的具体内容,
nameornum[]保存要查找的字段(值为字符串类型的 name 或者 num),若找到该记录,则返
回指向该节点的指针;否则,返回一个空指针。
2.2.5 更新记录模块
此模块主要实现了对学生记录的修改、删除、插入和排序操作。因为学生记录是以单链
表的结构形式存储的,所以这些操作都在单链表中完成。下面分别介绍着 4 个功能模块。
1 修改记录。该操作需要对单链表中目标节点的数据域中的值进行修改,它分两步完
成。
第一步,输入要修改的学号,输入后调用定位函数 Locate(),在单链表中逐个对节点数
据域中学号字段的值进行比较,直到找到该学号的学生记录;
第二步,若找到该学生记录,修改除学号字段之外的各字段值,并将存盘标记变量
saveflag 置 1,表示已经对记录进行了修改,但还未执行存盘操作。
2 删除记录。该操作完成删除指定学号或姓名的学生记录,它也分两步完成。
第一步,输入要删除的学号或姓名,输入后调用定位函数 Locate(),在单链表中逐个对
节点数据域中学号或姓名字段的值进行比较,直到找到该学号或姓名的学生记录,则返
回指向该学生记录的节点指针;
第二步,若找到该学生记录,将该学生记录所在节点的前驱节点的指针域,指向目标节
点的后继节点。
③ 插入记录。该操作完成在指定学号的随后位置插入新的学生记录。首先,要求用户输
入某个学生的学号,新的记录将插入在该学生记录之后;然后,提示用户输入一条新的
学生记录的信息,这些信息保存在新节点的数据域中;最后,将该节点插入在指定位置
4
评论0
最新资源