单链表实现学生健康管理系统.docx
- 文档编号:7349493
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:14
- 大小:246.80KB
单链表实现学生健康管理系统.docx
《单链表实现学生健康管理系统.docx》由会员分享,可在线阅读,更多相关《单链表实现学生健康管理系统.docx(14页珍藏版)》请在冰豆网上搜索。
单链表实现学生健康管理系统
【综设实验题目】
实现学生健康情况管理的几个操作功能(新建、插入、删除、从文件读取、写入文件和查询、屏幕输出等功能)。
健康表中学生的信息有学号、姓名、出生日期、性别、身体状况等。
实验内容
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++描述》朱振元朱承编著
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单链表 实现 学生 健康 管理 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)