已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C+数据结构学生管理系统单链表实现用模板类实现,实现操作符的重载非常详细的代码及其操作private:string name;/姓名string ID;/学号string sex;/性别string major;/专业string brithday;/生日int ave;/均分1、 Student.h2、Student();void SetName(string& strname);void SetSex(string& strsex);void SetBrith(string& strbrith);void SetID(string& strID);void SetMajor(string& strmajor);void EditPerson();bool operator !=(Student& stu);bool operator(Student& stu);friend ostream& operator(ifstream& ost,Student& stu);friend ofstream& operator(ofstream& ost,Student& stu);string GetName();2、核心代码ostream& operator(ostream& ost,Student& stu)ostName endl;ostSex stu.sexendl;ostBrithday stu.brithdayendl;ostID stu.IDendl;ostMajor stu.major(ifstream& ost,Student& stu);oststu.sex;oststu.brithday;oststu.ID;oststu.major;return ost;ofstream& operator (ofstream& ost,Student& stu)endl;oststu.sexendl;oststu.brithdayendl;oststu.IDendl;oststu.major(Student& stu1)if(stu1.aveave)return true;return false;3、测试代码Casea:system(cls);/stu.EditPerson();cout请输入学生的姓名name;stu.SetName(name);cout请输入学生的性别sex;cinsex;stu.SetSex(sex);cout请输入学生的生日brithday;stu.SetBrith(brithday);cout请输入学生的学号ID;stu.SetID(ID);cout请输入学生的专业major;stu.SetMajor(major);cout请输入平均成绩ave;stu.SetAve(ave);list.Insert(1,stu);list.Save(Student.txt);cout h ): endl;break;caseb:system(cls);list.PrintLinkList();cout h ): endl;break;cout当前链表的长度为:endl;length=list.ListLength();casec:cased:system(cls);cout现有学生的名字:endl;list.DisplayName();coutendl;cout请输入学生的姓名name;stu.SetName(name);delstu=list.Find(stu);coutdelstu;cout h ): endl;break;cased:cout现有学生的名字:endl;list.DisplayName();coutendl;cout请输入学生的姓名name;stu.SetName(name);delstu=list.Find(stu);coutdelstu;3、 源代码system(cls);cout现有学生的名字:endl;list.DisplayName();cout请输入修改的学生的姓名:name;tu.SetName(name);delstu=list.Find(stu);pos=list.Locate(stu);casef:delstu=list.Find(stu);pos=list.Locate(stu);list.Delete(pos);cout请输入学生的新的信息:endl;coutendl;cout请输入学生的姓名name;stu.SetName(name);cout请输入学生的性别sex;stu.SetSex(sex);cout请输入学生的生日brithday;stu.SetBrith(brithday);cout请输入学生的学号ID;stu.SetID(ID);cout请输入学生的专业major;stu.SetMajor(major);cout请输入平均成绩ave;stu.SetAve(ave);list.Insert(pos,stu);list.PrintLinkList();list.Save(Student.txt);caseg:list.Sort();list.PrintLinkList();LinkList.h#ifndef LinkList_H#define LinkList_H#include #includeusing namespace std;templatestruct NodeT data;/元素自身的信息,数据域Node *next;/后继元素存储地址,地址域 ;templateclass LinkListNode *head;/单链表的头指针public:LinkList();LinkList(T a,int n);void SetLinList(T a,int n);LinkList();int ListLength();/求链表的长度T Get(int pos);/按位查找,取单链表中第POS个节点的元素值T Find(T item);/查找函数,以T类型的数据作为参数int Locate(T item);/按值查找,求单链表中值为item的元素的序号void PrintLinkList();void Insert(int i,T item);/在i的位置插入元素itemT Delete(int i);/在单链表中删除第i个节点,并返回这个值void Invert();/逆置函数friend void Merge(LinkList &L1,LinkList &L2);/归并链表void DisplayNode(int i);void Save(char fname);/保存void Open(char fname);void DisplayName();/显示名字void Sort();/排序;#endifLinkList.cpp#includeLinkList.htemplate/用于创建一个带有头结点的空链表LinkList:LinkList()head=new Node;/私有head-next=NULL;template/*用于创建一个带有头结点的空链表*/LinkList:LinkList(T a,int n)/尾插法Node *rear;rear=head;/指向当前单链表的最后一个节点for(int i=0;in;i+)Node *s;s=new Node;s-data=ai;rear-next=s;/rear=headrear=s;/rear一直是指向单链表的最后一项rear-next=NULL;/单链表创建结束,最后一个节点的指针置为空templatevoid LinkList:SetLinList(T a,int n)head=new Node;Node *rear=head;for(int i=0;in;i+)Node *s;s=new Node;s-data=ai;rear-next=s;rear=s;rear-next=NULL;/单链表创建结束,最后一个节点的指针置为空templateint LinkList:ListLength()int num=0;Node *p;p=head-next;while(p)p=p-next;num+;return num;templateT LinkList:Get(int pos)Node *p;int j=1;p=head-next;/p指向头结点的下一个节点while(p&jnext;j+;if(!p|jpos)coutdata;templateT LinkList:Find(T item)Node *p;p=head-next;while(p&p-data!=item)p=p-next;if(!p)coutdata;templateint LinkList:Locate(T item)Node *p;p=head-next;int j=1;while(p&p-data!=item)p=p-next;j+;if(p)return j;elsereturn 0;templatevoid LinkList:PrintLinkList()Node *p;p=head-next;while(p)coutdatanext;templatevoid LinkList:Insert(int i,T item)Node *p;p=head;int j=0;while(p&jnext;j+;if(!p)cerr插入位置非法;exit(1);elseNode *s=new Node;s-data=item;s-next=p-next;p-next=s;templateT LinkList:Delete(int i)Node *p,*q;T x;p=head;int j=0;while(p&jnext;j+;if(!p|!p-next)cerrnext;x=q-data;p-next=q-next;delete q;return x;/*利用头插法*/templatevoid LinkList:Invert()Node *p;p=head-next;head-next=NULL;/将逆置后的单链表初始化为空表while(p!=NULL)Node *q=p;p=p-next;q-next=head-next; head-next=q;templateLinkList:LinkList()Node *q=new Node;while(head!=NULL)q=head;head=head-next;delete q;templatevoid Merge(LinkList &L1,LinkList &L2)/归并链表Node *p1,*p2,*p3;p1=L1.head-next;/指向第一个数据的节点p2=L2.head-next;p3=L1.head;/指向L1的头结点while(p1!=NULL)&(p2!=NULL)if(p1-data)data)p3-next=p1;p1=p1-next;p3=p3-next;elsep3-next=p2;p2=p2-next;p3=p3-next;if(p1!=NULL)/p2为空的时候p3-next=p1;if(p2!=NULL)p3-next=p2;delete L2.head;L2.head=NULL;templatevoid LinkList:Save(char fname)ofstream fout(fname);foutListLength()endl;Node *p;p=head-next;while(p!=NULL)foutdatanext;fout.close();templatevoid LinkList:Open(char fname)ifstream fin(fname);int n;finn;T item;for(int i=0;in;i+)/Node *p=new Node;/finp-data;finitem;Insert(i+1,item);fin.close();templatevoid LinkList:DisplayName()Node *p;p=head-next;while(p)coutdata.GetName()next;templatevoid LinkList:Sort()Node *p;int len=ListLength();for(int i=1;inext;for(int j=0;jdatap-next-data)T temp=p-data;p-data=p-next-data;p-next-data=temp;p=p-next;Student.h#includeLinkList.h#include#includeusing namespace std;class Student;ostream& operator(ifstream& ost,Student& stu);ofstream& operator (Student& stu);friend ostream& operator(ifstream& ost,Student& stu);friend ofstream& operator(ofstream& ost,Student& stu);string GetName();Student.cpp#includeStudent.h#includeusing namespace std;ostream& operator(ostream& ost,Student& stu)ostName endl;ostSex stu.sexendl;ostBrithday stu.brithdayendl;ostID stu.IDendl;ostMajor stu.majorendl;ostAverage stu.ave(ifstream& ost,Student& stu);oststu.sex;oststu.brithday;oststu.ID;oststu.major;oststu.ave;return ost;ofstream& operator (ofstream& ost,Student& stu)endl;oststu.sexendl;oststu.brithdayendl;oststu.IDendl;oststu.majorendl;oststu.ave(Student& stu1)if(stu1.aveave)return true;return false;string Student:GetName()return name;void Student:EditPerson()Test.cpp#includeLinkList.cpp#includeStudent.h#include#include#includeusing namespace std;void menu()couta、增加一个学生信息endl;coutb、打印链表endl;coutc、获取当前链表的长度endl;coutd、查询学生的信息endl;coute、删除学生信息endl;coutf、修改学生的信息endl;coutg、按平均成绩进行排序endl;couth、帮助endl;couto、退出endl;void main()char ch;LinkList list;list.Open(Student.txt);string name,sex,ID,brithday,major,newname;int length,pos,ave;Student stu,delstu;menu();coutinputendl;doch=getchar();switch(ch)caseh:system(cls);menu();break;casea:system(cls);/stu.EditPerson();cout请输入学生的姓名name;stu.SetName(name);cout请输入学生的性别sex;stu.SetSex(sex);cout请输入学生的生日brithday;stu.SetBrith(brithday);cout请输入学生的学号ID;stu.SetID(ID);cout请输入学生的专业major;stu.SetMajor(major);cout请输入平均成绩ave;stu.SetAve(ave);list.Insert(1,stu);list.Save(Student.txt);cout h ): endl;break;caseb:system(cls);list.PrintLinkList();cout h ): endl;break;casec:system(cls);cout当前链表的长度为:endl;length=list.ListLength();coutlength=lengthendl;cout h ): endl;break;cased:system(cls);cout现有学生的名字:endl;list.DisplayName();coutendl;cout请输入学生的姓名name;stu.SetName(name);delstu=list.Fi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 儿童发育指导师岗前实操水平考核试卷含答案
- 缩醛化药液配制工保密评优考核试卷含答案
- 熔融纺干燥操作工操作能力评优考核试卷含答案
- 锁具装配工岗前班组管理考核试卷含答案
- 仪表着陆系统、测距仪机务员班组安全水平考核试卷含答案
- 陶瓷工艺品彩绘师岗前安全素养考核试卷含答案
- 化纤后处理工复测模拟考核试卷含答案
- 银行综合柜员工作合规水平考核试卷含答案
- 客车检车员岗前安全行为考核试卷含答案
- 液晶显示器件彩膜制造工岗中可持续发展考核试卷含答案
- 2026年广西高考物理试题及答案
- 2026年中级注册安全工程师考试题库300道附参考答案(模拟题)
- 医院广告标识制作设计方案投标方案(技术标)
- 2025年道路运输企业安全生产管理人员复训题库及答案
- 阳光房施工技术总结
- GB/T 46237-2025信息技术数字孪生能力成熟度模型
- 全国矿业权评估师资格考试真题及答案矿业权评估实务
- 物流代理加盟合同范本
- 天然气运输管理方案
- 新老师做课件的步骤
- 工业自动化设备维护操作规范手册
评论
0/150
提交评论