c++数据结构学生管理系统方案_第1页
c++数据结构学生管理系统方案_第2页
c++数据结构学生管理系统方案_第3页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C+数据结构学生管理系统单链表实现用模板类实现,实现操作符的重载非常详细的代码及其操作1、Stude nt.h2、private:»string name; 姓名 string ID;/ 学号 string sex;/ 性别 string major;/ 专业 string brithday;/ 生日 int ave;/ 均分Stude nt();void SetName(stri ng& strn ame);void SetSex(stri ng& strsex);void SetBrith(stri ng& strbrith);void SetID(str

2、i ng& strID);void SetMajor(stri ng& strmajor);void EditPers on();bool operator !=(Stude nt& stu);bool operator>(Stude nt& stu);friend ostream& operator<<(ostream& ost,Stude nt& stu); friend ifstrea m& operator»(ifstream& ost,Stude nt& stu);friend

3、 ofstream& operator<<(ofstream& ost,Stude nt& stu);string GetName();2、核心代码ostream& operator<<(ostrea m& ost,Stude nt& stu) ost<<"Name "<<stu .n ame<<e ndl; ost<<"Sex"<<stu.sex<<e ndl;ost<<"Brithday

4、 "<<stu.brithday<<e ndl; ost<<"ID"<<stu.ID<<e ndl;ost<<"Major"<<stu.major<<e ndl;return ost;ifstream& operator»(ifstream& ost,Stude nt& stu)ost»stu .n ame;ost»stu.sex; ost»stu.brithday; ost»

5、stuD;ost»stu.major;return ost;Lfstrea m& operator <<(ofstrea m& ost,Stude nt& stu) ost<<stu .n ame<<e ndl; ost<<stu.sex<<e ndl; ost<<stu.brithday<<e ndl; ost<<st u.I D<<e ndl; ost<<stu.major<<e ndl; return ost;bool St

6、ude nt:operator !=(Stude nt& stu)if(stu .n ame=n ame)return false;return true;bool Student:operator >(Student& stu1) if(stu1.ave>ave)return true;return false;3、测试代码度 序_息4e排 信的息息行 生心皐 学槌的富绩生生生宓 -锂豈或盂于均 亠加印署專平©Hut pF-sr 、力 r>>n Lah cd g fsrE Q -1a ;es a csystem("cls"

7、);/stu.EditPerso n();cout<<"请输入学生的姓名"<<e ndl; cin»n ame;stu.SetName( name);cout<<"请输入学生的性别"<<e ndl;NaneSexBrltlida*;ajor veragecase'b':cin>>sex;stu.SetSex(sex);cout<<"请输入学生的生日"<<e ndl; cin> >brithday;stu.SetBr

8、ith(brithday);cout<<"请输入学生的学号"<<endl; cin> >ID;stu.SetlD(ID);cout<<"请输入学生的专业"<<endl; cin»m ajor;stu.SetMajor(major);cout<<"请输入平均成绩"<<endl;cin> >ave;stu.SetAve(ave);list.I nsert(1,stu);list.Save("Stude nt.txt"

9、;);cout<<"请输入选择(帮助选项 -> h ) : "<<endl; break;男1996-10-104物理85system("cls");list.Pri ntL in kList();cout<<"请输入选择(帮助选项 -> h ) : "<<endl; break;SexBrithday ID Major fl veirasfeName Sex Brithday ID Major A uerageName Sex Bpithday ID Maj op Rue

10、取Name Sex Bj*ithda.y IDajor uepae男4物理&5小张 男 l?95-10-i0英语S2女语文78严1994-10-101数学99case'c':cout<<"当前链表的长度为:"<<e ndl;len gth=list.ListLe ngth();当前犍表的长度貴;length=4请礙人选择(帮助选项一h ):case'd':system("cls");cout<<"现有学生的名字:"<<e ndl;list.Disp

11、layName();cout<<e ndl;cout<<"请输入学生的姓名"<<e ndl; cin»n ame;stu.SetName( name);delstu=list.Fi nd(stu);I庫入学生的姓名小杨Ge z男Dr-itID4Major物理请输入选择(帮助选项-h )=case'd':cout<<"现有学生的名字:"<<e ndl; list.DisplayName();cout<<e ndl;cout<<"请输入学生

12、的姓名"<<e ndl; cin»n ame;stu.SetName( name);delstu=list.Fi nd(stu); cout<<delstu;3、源代码入删除学生的姓名打關NameSexBritMav IDMajor Average NameSexBa* ithday ID joi* rveraseNar«SexB?it liday ID小张m1795-10-10玉语S2小李女1?9S-10-10备文78f王1数学1994-10-10case'f:system("cls");cout<<

13、;"现有学生的名字:"<<e ndl;list.DisplayName();cout<<"请输入修改的学生的姓名:"<<e ndl;cin»n ame;tu.SetName( name);delstu=list.Fi nd(stu);pos=list.Locate(stu);list.Delete(pos);cout<<"请输入学生的新的信息:"<<e ndl;cout<<e ndl;cout<<"请输入学生的姓名"<

14、;<e ndl;cin»n ame;stu.SetName( name);cout<<"请输入学生的性别"<<e ndl;cin> >sex;stu.SetSex(sex);cout<<"请输入学生的生日"<<e ndl;cin> >brithday;stu.SetBrith(brithday);cout<<"请输入学生的学号"<<endl;cin> >ID;stu.SetID(ID);cout<<&

15、quot;请输入学生的专业"<<endl;cin»m ajor;stu.SetMajor(major); .cout<<"请输入平均成绩"<<endl;cin> >ave;stu SetAve(ave);请输入学生的新的信息乗婁入学生的姓名 賞入学生的性别 書输入学生的生日1?6-10-10请输入学生的学号 祓入学生的专业请输入平均成绩Case'g':list.Sort();list .Prin tLin kList();Bitbday IDNaneSex:IDMajorAuerageMan

16、eSexBp-ithdavIDlaLjoi* u er-ajgre1996-10-10花学980王1994- 10-101数学小张男1995- 10-10黄语S5LinkList h#ifndef Lin kList_H#define Lin kList_H#in elude <win dows.h>#in clude<fstream> using n amespace std; template<class T> struct Node T data;Node<T> *n ext;template<class T> class Li

17、n kListNode<T> *head;public:Li nkList();Li nkList(T a,i nt n);void SetLinList(T a,int n);Li nkList();int ListLe ngth();T Get(i nt pos);元素值T Fi nd(T item); int Locate(T item);素的序号void PrintLin kList(); void Insert(int i,T item); T Delete(int i);个值void In vert();friend void Merge(LinkList<T&g

18、t; &L1, void DisplayNode(i nt i);void Save(char fname);void Open( char fname); void DisplayName();void Sort();/元素自身的信息,数据域/后继元素存储地址,地址域/单链表的头指针/求链表的长度/按位查找,取单链表中第POS个节点的/查找函数,以T类型的数据作为参数/按值查找,求单链表中值为 item的元/在i的位置插入元素 item/在单链表中删除第i个节点,并返回这/逆置函数> &L2);/归并链表/保存/显示名字/排序;#en difLin kList.cpp#

19、i nclude"L in kList.h"template<class T>/用于创建一个带有头结点的空链表Lin kList<T>:Li nkList()head=new Node<T> 私有head-next=NULL;template<class T>/*用于创建一个带有头结点的空链表*/Lin kList<T>:Li nkList(T a,i nt n)尾插法Node<T> *rear;rear=head; 指向当前单链表的最后一个节点for(i nt i=O;i< n; i+)Node

20、<T> *s;s=new Node<T>s->data=ai;rear- >n ext=s;/rear=head rear=s;/rear一直是指向单链表的最后一项rear-next=NULL;单链表创建结束,最后一个节点的指针置为空template<class T>void LinkList<T>:SetLinList(T a,int n)head=new Node<T>Node<T> *rear=head;for(i nt i=0;i< n; i+)Node<T> *s;s=new Nod

21、e<T>s->data=ai;rear->n ext=s;rear=s;rear-> next=NULL;单链表创建结束,最后一个节点的指针置为空template<class T>int Li nkList<T>:ListLe ngth()int num=0;Node<T> *p; p=head->n ext;while(p)p=p->n ext;nu m+; return num;template<class T>T Lin kList<T>:Get(i nt pos)Node<T&g

22、t; *p;int j=1;p=head-> next;/p指向头结点的下一个节点while(p&&j<pos)p=p->n ext;j+;if(!p|j>pos)cout<<"查找位置非法"exit(1);elsereturn p->data;template<class T>T LinkList<T>:Find(T item)Node<T> *p;p=head->n ext;while(p&&p->data!=item)p=p->n ext;i

23、f(!p)cout<<"查找位置非法"exit(1);elsereturn p->data;template<class T>int Lin kList<T>:Locate(T item)Node<T> *p; p=head->n ext;int j=1;while(p&&p->data!=item)p=p->n ext;j+;if(p)return j;else return 0;template<class T>void Lin kList<T>:Pri nt

24、Li nkList()Node<T> *p; p=head->n ext;while(p)cout<<p->data<<"" p=p->n ext;template<class T>void Lin kList<T>:I nsert(i nt i,T item) Node<T> *p; p=head; int j=0;while(p&&j<i-1)p=p->n ext;j+; if(!p)cerr<<"插入位置非法" exit

25、(1);elseNode<T> *s=new Node<T>s->data=item;s->n ext=p->n ext;p_>n ext=s;template<class T>T Lin kList<T>:Delete(i nt i)Node<T> *p,*q;T x;p=head;int j=0;while(p&&j<i-1)p=p->n ext;j+;if(!p|!p-> next)cerr<<"位置非法"exit(1);elseq=p-&

26、gt;n ext;x=q->data;p_>n ext=q _>n ext;delete q;return x;/*利用头插法*/template<class T>void Lin kList<T>:I nvert()Node<T> *p;p=head->n ext;head-> next=NULL;将逆置后的单链表初始化为空表while(p!=NULL)Node<T> *q=p;p=p->n ext;q->n ext=head->n ext;head->n ext=q;template<

27、;class T>Lin kList<T>:Li nkList()Node<T> *q=new Node<T>while(head!=NULL)q=head;head=head->n ext;delete q;归并链表template<class T>void Merge(LinkList<T> &L1 ,LinkList<T> &L2)Node<T> *p1,*p2,*p3;p仁L1.head-> next;/指向第一个数据的节点p2=L2.head->n ext;p3

28、=L1.head; 指向L1的头结点 while(p1!=NULL)&&(p2!=NULL)if(p1->data)<(p2->data)p3->n ext=p1;p1=p1- >n ext;p3=p3->n ext;elsep3->n ext=p2;p2=p2->n ext;p3=p3->n ext;if(p1!=NULL)/p2 为空的时候p3->n ext=p1;if(p2!=NULL) p3->n ext=p2;delete L2.head;L2.head=NULL;template<class T

29、>void Li nkList<T>:Save(char fname) ofstream fout(fname); fout<<ListLe ngth()<<e ndl; Node<T> *p;p=head->n ext; while(p!=NULL)fout<<p->data<<e ndl; p=p->n ext;fout.close();template<class T>void Lin kList<T>:Ope n( char fname) ifstream fin(

30、fname);int n;fin»n;T item;for(i nt i=0;i< n; i+)/Node<T> *p=new Node<T>/fin> >p_>data;fin> >item;In sert(i+1,item);fin. close();template<class T>void Lin kList<T>:DisplayName()Node<T> *p;p=head->n ext;while(p)cout<<p->data.GetName()<

31、;<e ndl; p=p->n ext;template<class T>void Li nkList<T>:Sort()Node<T> *p;int len=ListLe ngth();for(i nt i=1;i<le n;i+)p=head->n ext;for(i nt j=O;j<le n_i;j+)if(p->data>p->n ext->data)T temp=p->data; p->data=p->n ext->data; p->n ext->data=

32、temp;p=p->n ext;Stude nt.h#i nclude"L in kList.h"#in clude<stri ng>#in clude<fstream>using n amespace std;class Stude nt;ostrea m& operator<<(ostream& os,Stude nt &stu); ifstream& operator>>(ifstream& ost,Stude nt& stu); ofstream& oper

33、ator <<(ofstream& ost,Stude nt& stu); class Stude ntprivate:stri ng n ame;姓名stri ng ID;/学号stri ng sex;/ 性别stri ng major;/ 专业stri ng brithday;/ 生日int ave;/ 均分public:Stude nt();void SetName(stri ng& strn ame);void SetSex(stri ng& strsex);void SetBrith(stri ng& strbrith);void

34、SetID(stri ng& strID);void SetMajor(stri ng& strmajor);void SetAve(i nt strave);void EditPers on();bool operator !=(Stude nt& stu);bool operator>(Stude nt& stu);friend ostrea m& operator<<(ostream& ost,Stude nt& stu); friend ifstream& operator>>(ifstrea

35、m& ost,Stude nt& stu);friend ofstream& operator<<(ofstrea m& ost,Stude nt& stu); stri ng GetName();Stude nt.cpp#i nclude"Stude nt.h"#in clude<iostream>using n amespace std;ostrea m& operator<<(ostream& ost,Stude nt& stu)ost<<"Nam

36、e"<<stu .n ame<<e ndl;ost<<"Sex"<<stu.sex<<e ndl;ost<<"Brithday "<<stu.brithday<<e ndl; ost<<"ID"<<stu.ID<<e ndl;ost<<"Major "<<stu.major<<e ndl; ost<<"Average

37、"<<stu.ave<<e ndl; return ost;ifstream& operator>>(ifstream& ost,Stude nt& stu)ost>>stu .n ame;ost>>stu.sex;ost>>stu.brithday; ost»stuD;ost>>stu.major; ost>>stu.ave;return ost;ofstream& operator <<(ofstream& ost,Stud

38、e nt& stu) ost<<stu .n ame<<e ndl;ost<<stu.sex<<e ndl; ost<<stu.brithday<<e ndl; ost<<st u.I D<<e ndl; ost<<stu.major<<e ndl; ost<<stu.ave<<e ndl;return ost;Stude nt:Stude nt()void Stude nt:SetName(stri ng& strn ame)n am

39、e=str name;void Stude nt:SetSex(stri ng& strsex)sex=strsex;void Stude nt:SetBrith(stri ng& strbrith)brithday=strbrith;void Stude nt:SetlD(stri ng& strID)ID=strID;void Stude nt:SetMajor(stri ng& strmajor)major=strmajor;void Stude nt:SetAve(i nt strave)ave=strave;bool Stude nt:operator

40、 !=(Stude nt& stu)if(stu .n ame=n ame)return false;return true;bool Stude nt:operator >(Stude nt& stu1)if(stu1.ave>ave)return true;return false;string Stude nt:GetName()return n ame;void Stude nt:EditPerso n()Test.cpp#i nclude"Li nkList.cpp"#i nclude"Stude nt.h"#in

41、clude<iostream>#in clude<stri ng>#in clude<wi ndows.h>using n amespace std;void menu()cout<<"a、增加一个学生信息 "<<endl; cout<<"b、打印链表"<<endl;cout<<"c、获取当前链表的长度 "<<endl; cout<<"d、查询学生的信息 "<<endl;cout<

42、;<"e、删除学生信息"<<endl; cout<<"f、修改学生的信息"<<endl;cout<<"g、按平均成绩进行排序"<<endl;cout<<"h、帮助"<<endl;cout<<"o、退出"<<endl;void mai n()char ch;LinkList<Student> list;list.Ope n("Stude nt.txt")

43、;string name,sex,ID,brithday,major,newname; int len gth,pos,ave;Stude nt stu,delstu;men u();cout<<"i nput"<<e ndl;doch=getchar();switch(ch)case'h':system("cls");men u();break;case'a':system("cls");/stu.EditPerso n();cout<<"请输入学生的姓名

44、"<<endl;cin»n ame;stu.SetName( name);cout<<"请输入学生的性别"<<endl; cin> >sex;stu.SetSex(sex);cout<<"请输入学生的生日"<<endl;cin> >brithday;stu.SetBrith(brithday);cout<<"请输入学生的学号"<<endl;cin> >ID;stu.SetlD(ID);cout&l

45、t;<"请输入学生的专业"<<endl;cin»m ajor;stu.SetMajor(major);cout<<"请输入平均成绩"<<endl;cin> >ave;stu.SetAve(ave);list.I nsert(1,stu);list.Save("Stude nt.txt");cout<<"请输入选择(帮助选项 -> h ) : "<<endl; break;case'b':system(&qu

46、ot;cls");list.Pri ntL in kList();cout<<"请输入选择(帮助选项 -> h ) : "<<endl; break;case'c':system("cls");cout<<"当前链表的长度为:"<<endl;len gth=list.ListLe ngth();cout<<"le ngth="<<le ngth<<e ndl;cout<<"请输入选择(帮助选项 -> h ) : "<<endl; break;case'd':system("cls");cout<<"现有学生的名字:"<<endl;list.DisplayName();cout<<e ndl;cout<<"请输入学生的姓名"<<

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论