利用单项链表实现简单的学生信息管理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
河北工业大学计算机软件技术基础(VC)课程设计报告
一、题目:
利用单项链表实现简单的学生信息管理(07)
二、设计思路
1、总体设计
1)分析程序的功能
创建单项链表保存学生的各项信息,学号、姓名、成绩。并能够完成学生信息的插入、删除及信息的显示功能。
2)系统总体结构:
按照程序要求的功能采用结构化的设计思想,划分为五个功能模块,即创建链表、插入函数、删除函数、显示函数和主函数。
2、各功能模块的设计:说明各功能模块的实现方法
①头文件:对自己定义的函数进行函数声明。
②主函数:进行函数的调用,实现各函数的功能,达到预期的目的。
③函数定义部分:定义各个功能函数,创建链表函数、插入新信息函数、删除信息函数、显
示信息函数。
3、设计中的主要困难及解决方案
1)在插入新信息时,有插入点在表头、中间、表尾三种情况,为此采用讨论的方法,把三种情况进行讨论使其分开进行。
2)在删除信息时,有删除的为头结点和中间结点的情况,采用讨论的方法,把两种情况分开来进行。
4、你所设计的程序最终完成的功能
1)创建链表、插入新信息、删除信息、显示信息。
2)测试数据
①输入的数据
③删除的数据
运行结果
三、程序清单
本程序包含creatlist.cpp、insert.cpp、del.cpp、output.cpp、main.cpp、头文件.h六个文件
1、creatlist.cpp文件清单
#include
#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++;
if(n==1) //将链表中第一个新建结点作为表头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
#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
#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: "< } else cout<<"not found"< return head; //返回表头 } 4、output.cpp文件清单 #include #include"头文件.h" void output(student *head) { if(head==NULL) //原链表是空表 cout<<"list is NULL\n"; else { student *p1; p1=head; cout<<"学生的成绩信息"< cout<<"学号"<<"\t姓名"<<"\t成绩\n"; do //输出链表中各个同学的信息 { cout< p1=p1->next; }while(p1!=NULL); } } 5、main.cpp文件清单 #include #include"头文件.h" void main() { student *headl; cout<<"输入学生的成绩信息"< cout<<"学号"<<"\t姓名"<<"\t成绩"< headl=creatlist(); int k;