标题:如何利用单向链表实现简单的学生信息管理
只看楼主
jcao
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-6-26
 问题点数:0 回复次数:0 
如何利用单向链表实现简单的学生信息管理

一、题目:利用单向链表实现简单的学生信息管理
二、目的与要求
1. 目的
培养学生综合利用C++语言进行程序设计的能力,加强函数的运用及学生对软件工程方法的初步认识,提高软件系统分析能力和程序文档建立、归纳总结的能力,培养学生利用系统提供的标准函数及典型算法进行设计。
2. 基本要求
(1) 要求用C++语言编程,在Visual C++环境下调试完成;
(2) 要求使用结构数组,各个功能分别使用函数来完成。
三、设计方法和基本原理
1.课题功能描述
本程序要求创建单向链表保存学生的各项信息,如学号、姓名和成绩等,并完成学生信息的插入、删除及信息的显示等功能。
2. 问题详细描述
某班有若干个学生,每个学生的成绩信息包括学号、姓名和某门课成绩。要求编写多个函数分别实现下列功能,而后在main函数中进行调用。
(1)创建链表函数creatList:建立单向链表,每个结点包括:学号(int num),姓名(char name[20]),成绩(double score)。按照学号顺序从小到大输入学生的信息。当输入学生学号为0时,表示输入结束。
学生信息表
学号 姓名 成绩
98023 LiLi 85
98044 WangTao 69
99764 ZhangXiaobao 72
99812 LiuLifang 91

(2)插入函数insert:给出某个同学的信息,按照学号的顺序将其插入该链表中,使原链表仍然有序。如插入学生信息为:
96085 WangLiping 77
98120 ZhangLi 75
99912 LiuHai 80
(3)删除函数delete:给定某个同学的学号,找到该同学的信息后,将其从链表中删除。如删除学号为98044的同学信息。
(4)显示函数output:输出链表中各个同学的信息。
3. 问题的解决方案
根据问题的描述,可以按照程序要求的功能采用结构化的设计思想,划分为五个功能模块。
(1) 采用结构体类型存储学生信息。
(2) 创建链表时,要给各个结点输入数据(每个结点存储一个学生的信息),并建立起前后结点相互联结的关系。
(3) 插入时使用new操作符开辟新的存储空间,用来存放新结点,而后找到与该学号对应的结点,将新结点插入到其后。删除时,先输入某一个学号,而后找到与该学号对应的结点将其从链表中删除,即将该结点从链表中分离出来,并释放其内存空间。
(4) 提供菜单选项,供用户选择各个功能模块,例如:
1. 插入新信息,请选择:1
2. 删除信息,请选择:2
3. 显示信息,请选择:3
4. 结束程序,请选择:4
选择1,执行插入操作时,应提示用户输入待插入的学生信息;选择2,执行删除操作时,提示用户输入要删除的学生学号。
四、主要技术问题的描述
根据三的分析,主要问题在于链表的创建、插入和删除。
(1)链表的创建
依据学号判断链表的建立过程是否结束。输入结束后,表尾结点所指向的下一个结点应为空。
(2)结点的插入
先根据学号找到新结点的位置,例如设指针变量q指向新结点,若要将其插入到指针变量p指向的结点后,可执行如下操作:
t=p->next; //t为指针变量
p->next=q;
q->next=t;
n++;//结点数目增加
这样就将该新结点插入到了指定位置,注意考虑要插入的结点可能位于最后的位置。
(3)结点的删除
删除时,要考虑待删除结点是否为第一个结点;若为中间结点,设指针变量p1指向待删除结点,p2指向其前一个结点,则删除p1结点的操作为:
p2->next=p1->next;
delete(p1);
五、创新要求
在基本要求达到后,进行创新设计:
(1)使用多文件,即主函数和各个函数分别存放在不同的.cpp文件中,在头文件中进行函数原型声明。
(2)对程序功能进行拓展,使其更加实用。例如,将该链表按照成绩进行排序。

搜索更多相关主题的帖子: 链表 信息管理 学生 
2007-06-26 15:44



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-150489-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.012781 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved