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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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<num<<"\t"<name<<"\t"<score<

p1=p1->next;

}while(p1!=NULL);

}

}

5、main.cpp文件清单

#include

#include"头文件.h"

void main()

{

student *headl;

cout<<"输入学生的成绩信息"<

cout<<"学号"<<"\t姓名"<<"\t成绩"<

headl=creatlist();

int k;

相关文档
最新文档