《用链表与文件实现一个简单的学生成绩管理》由会员分享,可在线阅读,更多相关《用链表与文件实现一个简单的学生成绩管理(28页珍藏版)》请在金锄头文库上搜索。
1、 * 用链表和文件实现一个简单的学生成绩管理 第页 共 27页 用链表与文件实现一个简单的学生成绩管理学生姓名:* 指导老师:*摘 要 本课程设计主要解决在一个学校中,对学生成绩信息进行管理的问题, 通过建立一个相容,一致,易查和全面的学生成绩管理系统,实现对学生成绩信息的插 入,删除,显示和查询。在本课程设计中,系统开发平台为 Windows2000,程序设计语 言为 Visual C+6.0,程序运行平台为 Windws 98/2000/XP。在程序设计中采用了单链表 和文件相结合的方法实现对学生成绩管理。程序通过调试运行,初步实现了设计目标, 并且经过适当完善后,将可以应用在实际中解决问
2、题。关键词 程序设计;学生成绩管理; Visual C+6.0;单链表与文件 1 引 言 对于一个学校来说,学生成绩管理是一个很重要的问题,学生基本信息和成绩管理 问题的解决决定了一个学校在管理方面的运转效率。一个好的成绩管理系统可以大大的 提高学校的管理效率。 1.1 课题背景 随着信息时代的到来,各种信息日益丰富,信息迅速膨胀,加之学校规模的扩大, 对学生成绩信息的管理已经成为学校中重要的一环。在信息化未到来之前,都是采用人 工管理学生成绩的相关信息。但是随着市场经济的飞速发展,各种信息越来越繁杂。人 工管理学生成绩信息已经远远不能满足学校的需求。特别是对一些规模大的学校来说, 实现对学生
3、成绩高效、准确的管理是十分重要的。人工管理不仅速度慢而且容易出错。 这些大大的降低了学校管理的效率,甚至会因一些错误造成不必要的麻烦。所以通过建 立一个完整,透明,一致,高效,易查的学生成绩管理系统可以实现对学生成绩的有效 管理,大大的提高学校的管理效率。 数据结构是指相互之间存在一定关系的数据元素的集合。按照视点的不同,数据结 * 用链表和文件实现一个简单的学生成绩管理 第页 共 27页 构分为逻辑结构和存储结构。数据的逻辑结构(logical structure)是指数据元素之间逻辑关 系的整体。所谓逻辑关系是指数据元素之间的关联方式或邻接关系。根据数据元素之间 逻辑关系的不同,数据结构分
4、为四类:集合;线性结构;树结构;图结构。数据的逻辑 结构属于用户视图,是面向问题的,反映了数据内部的构成方式。为了区别于数据的存 储结构,常常将数据的逻辑结构称为数据结构。数据的存储结构(storage structure)又称 为物理结构,是数据及其逻辑结构在计算机中的表示,换言之,存储结构除了数据元素 之外,必须隐式或显示地存储数据元素之间的逻辑关系。通常有两种存储结构:顺序存 储结构和链接存储结构 1 。 线性表是一种最基本、最简单的数据结构,简称表,是具有零个或多个具有相同 类型的数据元素的优先序列,这些数据元素之间仅具有单一的前驱和后继关系。线性表 中的元素具有抽象(即不确定)的数据
5、类型,在设计具体的应用程序时,数据元素的抽 象类型将被具体的数据类型所取代。线性表的存储结构主要有顺序存储结构和链接存储 结构(即顺序表和单链表) 1 。 单链表是用一组任意的存储单元存放线性表的元素,这组存储单元可以连续也可 以不连续,甚至可以零散分布在内存中的任意位置,因此单链表中元素的逻辑次序和物 理次序不一定相同。为了能正确表示元素之间的逻辑关系,每个存储单元在存储数据元 素的同时,还必须存储其后继元素所在的地址信息,这个地址信息称为指针,这两部分 组成了数据元素的存储映像,称为节点(node) 1 。节点结构如图 1所示: data next 图1节点结构 文件是程序设计中的一个重要
6、概念。所谓“文件” ,一般是指存储在外部介质上的 数据的集合。一批数据是以文件的形式存放在外部介质上的。操作系统是以文件为单位 对数据进行管理的。要向外部介质上存储数据也必须先建立一个文件(以文件名为标识) ,才能向它输出数据。对用户来说,常用到的文件有两大类,一类是程序文件 (program file),如 C+的源程序文件、目标文件、可执行文件等。一类是数据文件, 在程序运行时,常常需要将一些数据(运行的最终结果或中间数据)输出到磁盘上存放 起来,以后需要时再从磁盘中输入到计算机内存。这种磁盘文件就是数据文件。程序中 的输入和输出的对象就是数据文件 2 。 1.2 课程设计目的 * 用链表
7、和文件实现一个简单的学生成绩管理 第页 共 27页 学生成绩管理系统是为了实现学校人力资源优化和学生成绩的科学管理而设计的, 通过建立一个相容,一致,易查和全面的学生成绩管理系统,使得学校学生成绩管理更 加高效,准确。更加科学化和正规化。 经过调试运行,可以更加有效的管理学生成绩 信息,其中包括学生的基本信息(学号、姓名、性别) ,成绩信息(数学成绩、英语成 绩、计算机成绩) 。并且具有信息的添加,查询,删除和显示的功能。 本课程设计主要是用链表和文件实现的,通过程序的编写、调试和运行可以进一步 掌握数据结构及算法的程序实现的基本方法。理解线性表的连接存储结构,单链表的基 本操作的实现,同时加
8、深对文件的概念的理解,掌握在程序中如何打开和关闭文件。 1.3 课程设计内容 本课程设计是用链表和文件完成学生成绩管理,其中学生的基本信息包括:学号、 姓名、性别;学生的成绩信息包括:数学成绩、英语成绩、计算机成绩。如图 2所示 : 学生成绩管理 学号 性别 姓名 数学成绩 英语成绩 计算机成绩 图 2学生成绩管理信息 程序的功能是实现对学生成绩信息的添加,查询,删除和显示。如图 3所示: 学 生 成 绩 录 入 学 生 成 绩 查 询 学 生 成 绩 删 除 学 生 成 绩 显 示 学生成绩管理 * 用链表和文件实现一个简单的学生成绩管理 第页 共 27页 图 3功能模块图 2 设计思路与方
9、案 2.1 设计思路 类是所有面向对象语言的共同特征,因此类是 C+中十分重要的概念,是实现面向 对象程序设计的基础。是 C+的灵魂。 C+支持面向过程的程序设计,也支持基于对象的程序设计,又支持面向对象的程 序设计。基于对象就是基于类,与面向过程的程序不同,基于对象的程序是以类和对象 为基础的,程序的操作是围绕对象进行的。在此基础上利用了继承机制和多态性,就成 为面向对象的程序设计。 C+中对象的类型称为类,类代表了某一批对象的共性和特征,类是对象的抽象, 而对象是类的具体实例。在类体中是类的成员列表,列出类中的全部成员。它是一种广 义的数据类型,除了数据部分以外,还包括了对这些数据操作的函
10、数。这体现了把数据 和操作封装在一起。 2.2 设计方案学生成绩管理问题中,操作对象是每个学生的成绩信息,各信息之间的关系可以用 线性表的顺序存储结构来实现,也可以用线性表的链接存储结构来实现。考虑到学生成 绩登记表一经建立,需要经常录入学生成绩,删除已经毕业的学生的成绩,同时学生要 对自己的成绩进行频繁的查询。而在单链表中进行插入和删除操作不需要移动元素,所 需的时间仅为 O(1)。在顺序表中进行插入和删除操作需要移动表长一半的元素,需要的 平均时间为 O(n)。所以采用链接存储结构来实现。在程序中需要把学生成绩信息的书面形式转化为具体的类。在本课程设计中总共定 义了三个类来实现学生成绩管理
11、。第一、定义 Student 类,用带参数的构造函数并用参 数初始化列表对数据成员进行初始化。在类中重载流插入运算符、流提取运算符和双目 运算符(”=”)分别用来输出 Student 类的对象的信息、输入 Student 类的对象的信息、 进行比较。 第二、定义 Menu 类,用来显示菜单,实现对学生成绩的插入,删除,查询和显示。第 三、定义单链表类 cjguanli,实现单链表的各个操作。cjguanli 类的定义如下所示: class cjguanli * 用链表和文件实现一个简单的学生成绩管理 第页 共 27页 public: cjguanli(); /建立只有头节点的空链表 cjgua
12、nli(T a ,int n); /建立有n个元素的单链表 cjguanli( ) ; /析构函数 void Insert(int i,T x); /在单链表第i个位置插入元素值为x的节点 T Delete(int i); /在单链表中删除第i个节点 T Get(int i); /取单链表中第i个节点的元素值 int GetLength() const; /求单链表的长度 void Printcj(); /遍历单链表,按序号依次输出各元素 int Find(const T /求单链表中值为x的元素序号 private: Node *first; int length; ; 3 详细实现 3.1
13、 建立 score.txt 文件 建立一个 score.txt 文件,在程序运行时,选择操作 4,就会显示出文件中已经存储 的学生成绩信息的内容。score.txt 文件内容如下表 1所示: 学号 姓名 性别 数学成绩 英语成绩 计算机成绩 2001 程云 女 85 89 84 2002 孟军 男 89 82 96 2003 陈刚 男 88 76 83 2004 胡凡 女 96 82 90 * 用链表和文件实现一个简单的学生成绩管理 第页 共 27页 2005 刘珊 女 85 78 88 2006 武明 男 84 87 78表 1 score.txt 文件 3.2 实现学生成绩的录入 定义学生
14、类 Student 的对象 stu, 输入对象 stu 的信息,调用单链表中的插入函数, 插入 stu 对象的信息,链表长度增加 1. 单链表插入操作的流程图如下图所示: 指针 p初始化,累加器 j 清零 查找第 i-1 个节点且使 p 指向改节点 判断插入位置是 否合理 抛出位置异常 将元素值 x插入 N Y 图 4 单链表插入操作流程图 3.3 实现学生成绩的删除 首先定义字符串学号,输出提示信息”输入学号”,然后输入学号,再调用单链表 中的Find函数进行查找,找出要删除学生在单链表中的位置,判断位置是否为0,若否, 再调用单链表中的Delete 函数,删除该学生的成绩信息。本操作的流程
15、图如下所示: * 用链表和文件实现一个简单的学生成绩管理 第页 共 27页 查找该学生在链表中的位置 判断位置是否为 0 N Y 删除学生成绩信息 输出没有该成员 图5 学生成绩删除流程图 3.4 实现学生成绩的查询 输出提示信息”输入学号”,输入要查询学生成绩的学号,调用单链表中的Find 函数,查找该学生在单链表中的位置,如果位置异常,输出提示信息”没有该成员”, 否则,调用单链表中的Get函数,求出该节点的值并输出。操作流程图如下所示: 输入要查询学生的学号 查找该学生在链表中的位置 判断位置是否为 0 输出没有该成员 输出该学生的成绩信息 Y N 图6 学生成绩查询流程图 3.5 实现学生成绩的显示 输入要删除学生的学号 * 用链表和文件实现一个简单的学生成绩管理 第页 共 27页 输出提示信息”输出学生成绩信息”,然后调用单链表中的函数Printcj。依次输出 单链表中所有数据元素。单链表中的输出操作流程图如下所示: 工作指针 p初始化 判断 p是否为空 N Y 输出节点数据,p指针后 移 退出图7 单链表输出操作流程图 4 运行环境与结果 4.1 运行环境 在本