第一范文网 - 专业文章范例文档资料分享平台

高级语言程序设计

来源:用户分享 时间:2025/5/24 11:48:53 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

[在此处键入]

实训一 学生成绩管理系统

一、实训目的和要求

利用单链表结构实现学生成绩管理,了解数据库管理的基本功能,掌握C语言中的结构体、指针、函数、文件操作等知识,是一个C语言知识的综合应用。注意其中的难点,指针变量作函数参数、函数值为指向结构体的指针及单链表机构的应用等知识。

二、主要仪器设备

安装了Windows操作系统、Turbo C 或Visual C++的计算机。

三、实训内容和原理

设计一个学生成绩管理系统,该系统使用单链表结构管理学生成绩,具有输入记录、查询记录、更新记录、统计记录及输出记录等功能。

四、实训小结

1、功能描述: 输入记录模查询记录模 块 块 从 从按按文 键学姓件盘号名 读输查查 入 入 询 询 学生成绩管理系统 更新记录模块 统计记录模块 插入记录 排序记录 各最分不格数计 科高和及人统输出记录模块 修改记录 删除记录 输出至文件 输出至屏幕 (1)输入记录模块。输入记录模块主要完成将数据存入单链表中的工作。在此成绩管理系统中,记录可以从以二进制形式存储的数据文件中读入,也可以从键盘逐个输入学生记录。学生记录由学生的基本信息和成绩信息字段构成。当从数据文件中读入记录时,它就是在以记录为单位存储的数据文件中,将记录逐条复制到单链表中。

(2)查询记录模块。查询记录模块主要完成在单链表中查找满足相关条件的学生记录。在此成绩管理系统中,用户可以按照学生的学号或姓名在单链表中进行查找。若找到该学生的记录,则返回指向该学生记录的指针。否则,返回一个值为NULL的空指针,并打印出为找到该学生记录的提示信息。

(3)更新记录模块。更新记录模块主要完成对学生记录的维护。在此成绩管理系统中,它实现了对学生记录的修改、删除、插入和排序操作。一般而言,系统进行了这些操作之后,需要将修改的数据存入源数据文件。

(4)统计记录模块。统计记录模块主要完成对各门功课最高分和不及格人数的统计。 (5)输出记录模块。输出记录模块主要完成两个任务。第一,它实现对学生记录的存盘操作,即将单链表中的各节点中存储的学生记录信息写入数据文件中。第二,它实现将单链

表中存储的学生记录信息以表格的形式在屏幕上打印出来。

2、总体设计

(1)功能模块设计

1.主控main()函数执行流程

本成绩管理系统执行主流程如图(二)所示。它先以可读写的方式打开数据文件,此文件默认为“c:\\student”,若该文件不存在,则新建此文件。当打开文件操作成功后,从文件中一次读出一条记录,添加到新建的单链表中,然后执行显示主菜单和进入主循环操作,进行按键判断。

在判断键值时,有效的输入为0至9之间的任意数值,其他输入都被视为错误按键。若输入为0(即变量select=0),它会继续判断是否在对记录进行了更新操作之后进行了存盘操作,若未存盘,则全局变量saveflag=1,系统会提示用户是否需要进行数据存盘操作,用户输入Y或y,系统会进行存盘操作。最后,系统执行退出成绩管理系统的操作。 若选择1,则调用Add()函数,执行增加学生记录的操作;若选择2,则调用Del()函数,执行删除学生记录的操作;若选择3,则调用Qur()函数,执行查询学生记录的操作;若选择4,则调用Modify()函数,执行修改学生记录的操作;若选择5,则调用Insert()函数,执行插入学生记录的操作;若选择6,则调用Tongji()函数,执行统计学生记录的操作;若选择7,则调用Sort()函数,执行按降序排序学生记录的操作;若选择8,则调用Save()函数,执行将学生记录存入磁盘中的数据文件的操作;若选择9,则调用Disp()函数,执行将学生记录以表格形式打印输出至屏幕的操作;若选择为0~9之外的值,则调用Wrong()函数,给出按键错误的提示。

判断键值,调用相应函数,完成相应功能 是否已对修改进行了存盘 否 调用save()函数,进行写数据文件操作 结束 是 输入是否为0? 是 输入0~9中的一数值,选择相应操作 进入while(l)主循环 调用Menu()菜单函数 将此文件的内容读出,并存入一个新的单链表中 以可读写的方式打开一个数据文件 开始

2.输入记录模块。

输入记录模块主要实现将数据存入单链表中。这部分的操作较为简单。当从数据文件中读出数据时,它调用了fread(p,sizeof(Node),1,fp)文件读取函数,执行一次从文件中读取一条学生成绩记录信息存入指针变量p所指的节点中的操作,并且这个操作在main()中执行,即当成绩管理系统进入显示菜单界面时,该操作已经执行了。若该文件中没有数据,系统会提示单链表为空,没有任何学生记录可操作,此时,用户应选择1,调用Add(1)函数,进行学生记录的输入,即完成在单链表1中添加节点的操作。值得一提的是,这里的字符串和数值的输入分别采用了函数来实现,在函数中完成输入数据任务,并对数据条件判断,直到满足条件为止,这样大大减少了代码的重复和冗余,符合模块化程序设计的特点。

3.查询记录模块。

查询记录模块主要实现了在单链表中按学号或姓名查找满足相关条件的学生记录。在查询函数Qur(1)中,1为指向保存了学生成绩信息的单链表的首地址的指针变量。为了遵循模块化编程的原则,我们将在单链表中进行的指针定位操作设计成了一个单独的函数Node* Locate(Link 1,char findmess[],char nameornum[]),参数findmess[]保存要查找的具体内容,nameornum[]保存要查找的字段(值为字符串类型的num或者name),若找到该记录,则返回指向该节点的指针;否则,返回一个空指针。 4.更新记录模块。

此模块主要实现了对学生记录的修改、删除、插入和排序操作。因为学生记录是以单链表的结构形式存储的,所以这些操作都在单链表中完成。下面分别介绍这4个功能模块。 1)修改记录

修改记录操作需要对单链表中目标节点的数据域中的值进行修改,它分两步完成。第一步,输入要修改的学号,输入后调用定位函数Locate()在单链表中逐个对节点数据域中学号字段的值进行比较,直到找到该学号的学生记录;第二步,若找到该学生记录,修改除学号之外的各字段的值,并将存盘标记变量saveflag置1,表示已经对记录进行了修改,但还未执行存盘操作。 2)删除记录

删除记录操作完成删除指定学号或姓名的学生记录,它也分两步完成。第一步,输入要删除的学号或姓名,输入后调用定位函数Locate()在单链表中逐个对节点数据域中学号或姓名字段的值进行比较,直到找到该学号或姓名的学生记录,返回指向该学生记录的节点指针;第二步,若找到该学生记录,将该学生记录所在节点的前驱节点的指针域指向目标节点的后继节点。

3)插入记录

插入记录操作完成在指定学号的随后位置插入新的学生记录。首先,它要求用户输入某个学生的学号,新的记录将插入在该学生记录之后;然后,提示用户输入一条新的学生记录的信息,这些信息保存在新的节点的数据域中;最后,将该节点插入在指定位置学号之后。它的具体插入执行过程如下图所示,图中q为位置学号所在的节点的指针变量,其中,p为q所指节点的后继节点的指针变量,q->next=p,指针变量i指向新的记录所在的节点,为插入节点i,依次执行的操作为:i->netx=q->next;q->next=i。 第二步 第一步 DATA DATA DATA

P q 插入记录

4)排序记录

有关排序的算法很多,如冒泡排序、插入排序等。针对单链表结构的特点,我们采用插入排序算法实现按总分的从高到低对学生记录进行排序,排序完成后之后,即可按顺序给名次字段赋值。

在单链表中,实现插入排序的基本步骤如下。

(1)新建一个单链表1,用来保存排序结果,其初值为待排序单链表中的头节点。

(2)从待排序链表中取出下一个节点,将其总分段值与单链表1中的各节点中总分字段的值

进行比较,直到在链表1中找到总分小于它的节点。若找到如此节点,系统将待排序表中取出的节点插入此节点之前,作为其前驱。否则,将取出的节点放在单链表1的尾部。

(3)重复第二(2)步,直到从待排序链表取出的节点的指针域为NULL,即此节点为链表的尾

部节点,排序完成。 5.统计记录模块

该模块的实现比较简单,它主要通过循环读取指针变量p所指的当前节点的数据域中各字段的值,并对各个成绩字段进行逐个进行判断的形式,完成单科最高分学生的查找和各科不及格学生人数的统计。 6.输出记录模块

当把记录输出至文件时,调用fwrite(p,sizeof(node),l,fp)函数,将p指针所指节点中的各字段值,写入文件指针fp所指的文件。当把记录输出至屏幕时,调用void Disp(Link l)函数,将单链表l中存储的学生记录信息以表格的形式在屏幕上打印出来。

(2)数据结构设计

1.学生成绩信息结构体

搜索更多关于: 高级语言程序设计 的文档
高级语言程序设计.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c4hwcr9kd3e7tdil036cc_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top