单链表实现学生健康管理系统.docx

上传人:b****6 文档编号:7349493 上传时间:2023-01-23 格式:DOCX 页数:14 大小:246.80KB
下载 相关 举报
单链表实现学生健康管理系统.docx_第1页
第1页 / 共14页
单链表实现学生健康管理系统.docx_第2页
第2页 / 共14页
单链表实现学生健康管理系统.docx_第3页
第3页 / 共14页
单链表实现学生健康管理系统.docx_第4页
第4页 / 共14页
单链表实现学生健康管理系统.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

单链表实现学生健康管理系统.docx

《单链表实现学生健康管理系统.docx》由会员分享,可在线阅读,更多相关《单链表实现学生健康管理系统.docx(14页珍藏版)》请在冰豆网上搜索。

单链表实现学生健康管理系统.docx

单链表实现学生健康管理系统

【综设实验题目】

实现学生健康情况管理的几个操作功能(新建、插入、删除、从文件读取、写入文件和查询、屏幕输出等功能)。

健康表中学生的信息有学号、姓名、出生日期、性别、身体状况等。

实验内容

1.利用单链表来实现

2.系统的菜单功能项如下:

1------新建学生健康表

2------向学生健康表插入学生信息

3------在健康表删除学生信息

4------从文件中读取健康表信息

5------向文件写入学生健康表信息

6------在健康表中查询学生信息(按学生学号来进行查找)

7------在屏幕中输出全部学生信息

8-----退出

【中文摘要】这次实验主要用单链表来实现简单的学生健康管理系统,系统的功能包括:

向学生健康表插入学生信息,在健康表删除学生信息,从文件中读取健康表信息,向文件写入学生健康表信息,在健康表中查询学生信息(按学生学号来进行查找),在屏幕中输出全部学生信息等。

健康表中学生的信息有学号、姓名、出生日期、性别、身体状况等。

【关键词】单链表学生健康管理系统学生信息

【前言】

本次实验是为了进一步熟悉和掌握VC环境下的编译、调试和执行的方法及步骤,熟悉单链表存储的实现方式及其应用。

【实验设计】

以单链表为储存机制,可以方便的实现插入或删除学生信息。

每个学生的信息储存在一个结构体Sstudent中,并且这个结构体带有输出学生信息的函数ouput()。

然后以这个结构体作为单链表节点的数据类型,这样就实现了学生信息的储存。

为了方便管理,将链表元素按学号的先后进行排序。

在创建单链表对象时将已存储在文件中的学生信息写入链表,在析构函数里实现将学生信息写入文件。

【实验实现】

软件平台:

VC++6.0

硬件平台:

32位机器

主要功能模块分析:

1、储存一个学生的信息:

/*******************************************************************

Sstudent.h文件

*******************************************************************/

#ifndef_Sstudent_h_

#define_Sstudent_h_

#include

usingnamespacestd;

structbirthday//出生日期

{

unsignedshortday;

unsignedshortmonth;

unsignedshortyear;

};

structSstudent//一个学生的基本信息

{

charnumber[12];//学号

charname[12];//名字

structbirthdaybd;//出生日期

chargender[4];//性别

charhealthcase[10];//健康情况

voidinput();//输入学生的基本信息

voidoutput();//输出学生的基本信息

};

voidSstudent:

:

input()//输入一个学生的信息

{

cout<<"请输入学生信息:

"<

cout<<"请输入学生的学号:

";

cin>>number;

cout<<"请输入学生的名字:

";

cin>>name;

cout<<"请输入学生的性别:

";

cin>>gender;

cout<<"请输入学生生日的日期(年、月、日):

";

cin>>bd.year>>bd.month>>bd.day;

cout<<"请输入学生的健康情况(良好或差):

";

cin>>healthcase;

cout<

}

voidSstudent:

:

output()//输出一个学生的信息

{

cout<<"学号:

"<

<<"姓名:

"<

<<"性别:

"<

<<"生日:

"<

<<"健康情况:

"<

}

#endif

2、储存所有学生信息的链表类定义:

classLinkList

{

private:

Node*head;

intsize;

public:

LinkList();

~LinkList();

voidclear();//清空

Node*index(inti);//寻找指向第i个元素的指针

Sstudentgete(inti);//返回第i个元素

intleng();//求长度

intloct(charnum[]);//通过学号来查找

voidinst(Sstudent&el);//将el插入链表,同时保持链表的有序性

Sstudentdele(inti);//删除loc位置的数据元素

boolempt();//判断线性表是否为空

voidprint();//输出整个顺序表

};

3、用文件中的学生健康信息初始化链表

LinkList:

:

LinkList()

{

size=0;

head=newNode();

head->next=NULL;

Sstudents;

fstreamfile;

file.open("student.dat",ios:

:

in|ios:

:

binary);

if(!

file)

{

cerr<<"student.datcan'topen!

"<

abort();

}

while

(1)

{

file.read((char*)&s,sizeof(s));

if(!

file)

break;

inst(s);

}

file.close();

}

4、将链表中的学生信息写进文件

LinkList:

:

~LinkList()

{

fstreamfile;

file.open("student.dat",ios:

:

out|ios:

:

binary);

if(!

file)

{

cerr<<"student.datcan'topen!

"<

abort();

}

Node*p=head->next;

while(p!

=NULL)

{

file.write((char*)&(p->data),sizeof(p->data));

p=p->next;

}

file.close();

delete[]head;

}

5、向学生健康表插入学生信息

//功能为:

在带头结点的单链表中插入数据元素值为el的新结点,同时保持链表的有序性(升序);

voidLinkList:

:

inst(Sstudent&el)

{

Node*p=head;

while((p->next!

=NULL)

&&(strcmp(el.number,p->next->data.number)==1))//当el的学号大于p所指向元素的学号时

p=p->next;

Node*temp=newNode(el,p->next);

p->next=temp;

size++;

}

6、删除学生信息

/*

功能:

在单链表中删除第i个结点并返回该结点中的元素值.

形参:

传递一个整数i。

返回:

若由于i不合理而找不到相应的结点,则令el的生日的day为0,以作删除失败标志,同时返回el.

否则返回该结点中的元素值。

*/

SstudentLinkList:

:

dele(inti)

{

Sstudentel;

if((size==0)||(i<1)||(i>size))

{

cout<<"下标不合理!

(dele)"<

el.bd.day=0;

}

else

{

Node*p=index(i-1);//指针p指向第i个结点的前驱结点。

Node*q=p->next;//指针q指向第i个结点。

el=q->getdata();//el保存第i个结点的数据。

p->setnext(q->next);

size--;

deleteq;

}

returnel;

}

7、在屏幕中输出全部学生信息

//输出链表

voidLinkList:

:

print()

{

Node*p=head->next;

while(p!

=NULL)

{

p->data.output();

p=p->next;

}

}

8、用户界面

/*******************************************************************

main.cpp文件

*******************************************************************/

#include

#include"LinkList.h"

#include"Sstudent.h"

#include"Node.h"

usingnamespacestd;

intmain()

{

LinkListlink;//新建一个链表:

link

Sstudents;

charnum[12];

intchoice=1;//将choice初始化,使其不为0.

while(choice)

{

cout<<"请输入您要进行的操作:

"<

cout<<"1插入学生信息"<

<<"2删除学生信息"<

<<"3查询学生信息(按学生学号来进行查找)"<

<<"4在屏幕中输出全部学生信息"<

<<"0退出"<

cin>>choice;

switch(choice)

{

case1:

s.input();//输入学生信息

link.inst(s);

break;

case2:

cout<<"请输入要删除学生的学号:

";

cin>>num;

s=link.dele(link.loct(num));

if(s.bd.day!

=0)//若s的day为0,则说明删除失败

s.output();

break;

case3:

cout<<"请输入要查询学生的学号:

";

cin>>num;

s=link.gete(link.loct(num));

if(s.bd.day!

=0)//若s的day为0,则说明查找失败

s.output();

break;

case4:

link.print();

break;

case0:

break;

default:

cout<<"输入错误!

请重新输入。

"<

}

cout<

}

return0;

}

 

【结果及结果分析】

1、插入学生信息:

2、删除学生信息:

如上图所示,当要删除的学生信息不存在时就会发出错误信号。

 

3、按学号查询学生信息:

 

如上图所示,当要查找失败时就会发出错误信号。

 

4、输出链表中所有的学生信息:

 

【参考文献】

、《数据结构—C++描述》朱振元朱承编著

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1