利用单项链表实现简单的学生信息管理

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

利用单项链表实现简单的学生信息管理
一、题目:
利用单项链表实现简单的学生信息治理(07)
二、设计思路
1、总体设计
1)分析程序的功能
创建单项链表储存学生的各项信息,学号、姓名、成绩。

并能够完成学生信息的插入、删除及信息的显示功能。

2)系统总体结构:
按照程序要求的功能采纳结构化的设计思想,划分为五个功能模块,即创建链表、插入函数、删除函数、显示函数和主函数。

2、各功能模块的设计:讲明各功能模块的实现方法
①头文件:对自己定义的函数进行函数声明。

②主函数:进行函数的调用,实现各函数的功能,达到预期的目的。

③函数定义部分:定义各个功能函数,创建链表函数、插入新信息函数、删除信息函数、显
示信息函数。

3、设计中的要紧困难及解决方案
1)在插入新信息时,有插入点在表头、中间、表尾三种情形,为此采纳讨论的方法,把三种情形进行讨论使其分开进行。

2)在删除信息时,有删除的为头结点和中间结点的情形,采纳讨论的方法,把两种情形分开来进行。

4、你所设计的程序最终完成的功能
1)创建链表、插入新信息、删除信息、显示信息。

2)测试数据
①输入的数据
99812 LiuLifang 91
学号姓名成绩
96085 WangLiPing 77
98120 ZhangLi 75
99912 LiuHai 80 ③删除的数据
学号姓名成绩
99812 liulifang 91
运行结果
三、程序清单
本程序包含creatlist.cpp、insert.cpp、del.cpp、output.cpp、main.cpp、头文件.h六个文件
#include<iostream.h>
#include"头文件.h"
int n;
student *creatlist()
{
student *head;
student *p1;
student *p2;
n=0;
head=NULL;
p1=new(student); //创建一个新结点
p2=p1;
cin>>p1->num>>p1->name>>p1->score;
while(p1->num!=0) //链表建立过程终止的判定条件{
n++;
head=p1;
else
p2->next=p1; //原链表结点指向新建结点p2=p1;
p1=new(student);
cin>>p1->num>>p1->name>>p1->score;
}
delete(p1);
p2->next=NULL;
return head; //返回表头
}
2、insert.cpp文件清单
#include<iostream.h>
#include"头文件.h"
student *insert(student *head,student *t)
{
student *p0; //待插入点
student *p1;
student *p2; //p0插入p1之前,p2之后p1=head;
p0=t;
if(p1==NULL) //原链表是空表
{
head=p0;
p0->next=NULL;
}
else
while((p0->num>p1->num)&&(p1->next!=NULL)) //查找待插入点
{
p2=p1;
p1=p1->next;
}
if(p0->num<=p1->num)
{
if(p1==head) //要插入的位置在表头
{
head=p0;
p0->next=p1;
}
else //要插入的位置不是表头
{
p2->next=p0;
p0->next=p1;
}
}
else //插入表尾结点之后
{
p1->next=p0;
p0->next=NULL;
}
}
return head; //返回表头
}
3、del.cpp文件清单
#include<iostream.h>
#include"头文件.h"
student *del(student *head,int num)
{
student *p1;
student *p2;
if(head==NULL) //原链表是空表
{
cout<<"List is NULL\n";
return head;
}
p1=head;
while((num!=p1->num)&&(p1->next!=NULL)) //查找带要删除的结点
{
p2=p1;
p1=p1->next;
if(num==p1->num)
{
if(p1==head) //要删除的是头结点
head=p1->next;
else //要删除的不是头结点
p2->next=p1->next;
delete(p1); //开释被删除结点所占的内存空间cout<<"delete: "<<num<<endl;
}
else
cout<<"not found"<<endl;
return head; //返回表头
}
4、output.cpp文件清单
#include<iostream.h>
#include"头文件.h"
void output(student *head)
{
if(head==NULL) //原链表是空表
cout<<"list is NULL\n";
else
{
student *p1;
p1=head;
cout<<"学生的成绩信息"<<endl;
cout<<"学号"<<"\t姓名"<<"\t成绩\n";
do //输出链表中各个同学的信息
{
cout<<p1->num<<"\t"<<p1->name<<"\t"<<p1->score<<endl;
p1=p1->next;
}while(p1!=NULL);
}
}
5、main.cpp文件清单
#include<iostream.h>
#include"头文件.h"
void main()
{
student *headl;
cout<<"输入学生的成绩信息"<<endl;
cout<<"学号"<<"\t姓名"<<"\t成绩"<<endl;
headl=creatlist();
int k;
{
cout<<endl;
cout<<"--------菜单选项---------"<<endl;
cout<<"1.插入新信息 ,请选择:1"<<endl;
cout<<"2.删除信息, 请选择:2"<<endl;
cout<<"3.显示信息, 请选择:3"<<endl;
cout<<"4.终止程序, 请选择:4"<<endl;
cout<<" 选择";
cin>>k;
if(k==1) //插入新信息
{
int m;
cout<<"输入插入学生人数"<<endl;
cin>>m;
cout<<"学号"<<"\t姓名"<<"\t成绩"<<endl;
for(int i=0;i<m;i++)
{
student *stu;
stu=new(student);
cin>>stu->num>>stu->name>>stu->score;
headl=insert(headl,stu);
}
}
else if(k==2) //删除信息
{
int num;
cout<<"输入要删除学生的学号\n";
cin>>num;
headl=del(headl,num);
}
else if(k==3) //显示信息
{
output(headl);
}
else //终止程序break;
};
}
6、头文件.h文件清单
struct student //定义结构体类型
{
int num;
char name[20];
student *next;
};
student *creatlist(); //创建链表函数原型讲明
student *insert(student * ,student * ); //插入函数原型讲明
student *del(student * ,int ); //删除函数原型讲明
void output(student * ); //显示函数原型讲明
四、对该设计题目有何更完善的方案
1、对自己完成程序进行自我评判。

完成了课程设计的差不多要求,同时在此基础上进行了一些创新,使用了多文件,使程序看起来更清晰更有条理。

但由于能力有限,以及对C++的认识不深,其中还有不够完善合理的地点。

2、对课题提出更完善的方案
增加按照成绩对链表进行排序的功能,使学生信息能够按照成绩的高低进行显示,能够更清晰地显示学生的学习情形
五、收成及心得体会
1、通过本次课程设计,自己在哪些方面的能力有所提高。

加深了对利用C++语言进行程序设计的明白得,提高了对函数的运用能力,提高了软件系统分析能力和使用多文件、归纳总结的能力。

2、收成和心得体会。

通过自己对单项链表的学习,熟悉了链表的建立、插入、删除等操作方法。

通过这次课程设计使我明白了自学的重要性,有了一些自学的学习方法和技巧,同时要积极的与其他同学共同讨论,在讨论中才能找到自己认识的不足,改正自己的错误。

日期:2018年6月20日。

相关文档
最新文档