c数据结构学生管理系统.docx
- 文档编号:12859048
- 上传时间:2023-04-22
- 格式:DOCX
- 页数:31
- 大小:133.52KB
c数据结构学生管理系统.docx
《c数据结构学生管理系统.docx》由会员分享,可在线阅读,更多相关《c数据结构学生管理系统.docx(31页珍藏版)》请在冰豆网上搜索。
c数据结构学生管理系统
C++数据结构学生管理系统
单链表实现
用模板类实现,实现操作符的重载
非常详细的代码及其操作
1、
private:
stringname;//姓名
stringID;//学号
stringsex;//性别
stringmajor;//专业
stringbrithday;//生日
intave;//均分
2、
Student();
voidSetName(string&strname);
voidSetSex(string&strsex);
voidSetBrith(string&strbrith);
voidSetID(string&strID);
voidSetMajor(string&strmajor);
voidEditPerson();
booloperator!
=(Student&stu);
booloperator>(Student&stu);
friendostream&operator<<(ostream&ost,Student&stu);
friendifstream&operator>>(ifstream&ost,Student&stu);
friendofstream&operator<<(ofstream&ost,Student&stu);
stringGetName();
2、核心代码
ostream&operator<<(ostream&ost,Student&stu)
{
ost<<"Name"<<< ost<<"Sex"<<< ost<<"Brithday"<<< ost<<"ID"<<< ost<<"Major"<<< returnost; } 3、测试代码 Case’a’: case'b': system("cls"); (); cout<<"请输入选择(帮助选项-->h): "< break; cout<<"当前链表的长度为: "< length=(); case'c': case'd': system("cls"); cout<<"现有学生的名字: "< (); cout< cout<<"请输入学生的姓名"< cin>>name; (name); delstu=(stu); cout< cout<<"请输入选择(帮助选项-->h): "< break; case'd': cout<<"现有学生的名字: "< (); cout< cout<<"请输入学生的姓名"< cin>>name; (name); delstu=(stu); cout< 3、源代码 system("cls"); cout<<"现有学生的名字: "< (); cout<<"请输入修改的学生的姓名: "< cin>>name; (name); delstu=(stu); pos=(stu); case'f': delstu=(stu); pos=(stu); (pos); cout<<"请输入学生的新的信息: "< cout< cout<<"请输入学生的姓名"< cin>>name; (name); cout<<"请输入学生的性别"< cin>>sex; (sex); cout<<"请输入学生的生日"< cin>>brithday; (brithday); cout<<"请输入学生的学号"< cin>>ID; (ID); cout<<"请输入学生的专业"< cin>>major; (major); cout<<"请输入平均成绩"< cin>>ave; (ave); (pos,stu); (); (""); case'g': (); (); #ifndefLinkList_H #defineLinkList_H #include<> #include usingnamespacestd; template structNode { Tdata;//元素自身的信息,数据域 Node }; template classLinkList { Node public: LinkList(); LinkList(Ta[],intn); voidSetLinList(Ta[],intn); ~LinkList(); intListLength();//求链表的长度 TGet(intpos);//按位查找,取单链表中第POS个节点的元素值 TFind(Titem);//查找函数,以T类型的数据作为参数 intLocate(Titem);//按值查找,求单链表中值为item的元素的序号 voidPrintLinkList(); voidInsert(inti,Titem);//在i的位置插入元素item TDelete(inti);//在单链表中删除第i个节点,并返回这个值 voidInvert();//逆置函数 friendvoidMerge(LinkList voidDisplayNode(inti); voidSave(charfname[]);//保存 voidOpen(charfname[]); voidDisplayName();//显示名字 voidSort();//排序 }; #endif #include"" template //用于创建一个带有头结点的空链表 LinkList : LinkList() { head=newNode head->next=NULL; } template /* 用于创建一个带有头结点的空链表 */ LinkList : LinkList(Ta[],intn)//尾插法 { Node rear=head;//指向当前单链表的最后一个节点 for(inti=0;i { Node s=newNode s->data=a[i]; rear->next=s;//rear=head rear=s;//rear一直是指向单链表的最后一项 } rear->next=NULL;//单链表创建结束,最后一个节点的指针置为空 } template voidLinkList : SetLinList(Ta[],intn) { head=newNode Node for(inti=0;i { Node s=newNode s->data=a[i]; rear->next=s; rear=s; } rear->next=NULL;//单链表创建结束,最后一个节点的指针置为空 } template intLinkList : ListLength() { intnum=0; Node p=head->next; while(p) { p=p->next; num++; } returnnum; } template TLinkList : Get(intpos) { Node intj=1; p=head->next;//p指向头结点的下一个节点 while(p&&j { p=p->next; j++; } if(! p||j>pos) { cout<<"查找位置非法"; exit (1); } else returnp->data; } template TLinkList : Find(Titem) { Node p=head->next; while(p&&p->data! =item) { p=p->next; } if(! p) { cout<<"查找位置非法"; exit (1); } else returnp->data; } template intLinkList : Locate(Titem) { Node p=head->next; intj=1; while(p&&p->data! =item) { p=p->next; j++; } if(p) returnj; else return0; } template voidLinkList : PrintLinkList() { Node p=head->next; while(p) { cout< p=p->next; } } template voidLinkList : Insert(inti,Titem) { Node p=head; intj=0; while(p&&j { p=p->next; j++; } if(! p) { cerr<<"插入位置非法"; exit (1); } else { Node s->data=item; s->next=p->next; p->next=s; } } template TLinkList : Delete(inti) { Node Tx; p=head; intj=0; while(p&&j { p=p->next; j++; } if(! p||! p->next) { cerr<<"位置非法"; exit (1); } else { q=p->next; x=q->data; p->next=q->next; deleteq; returnx; } } /*利用头插法*/ template voidLinkList : Invert() { Node p=head->next; head->next=NULL;//将逆置后的单链表初始化为空表 while(p! =NULL) { Node p=p->next; q->next=head->next; head->next=q; } } template LinkList : ~LinkList() { Node while(head! =NULL) { q=head; head=head->next; deleteq; } } template voidMerge(LinkList { Node p1=>next;//指向第一个数据的节点 p2=>next; p3=;//指向L1的头结点 while((p1! =NULL)&&(p2! =NULL)) { if((p1->data)<(p2->data)) { p3->next=p1; p1=p1->next; p3=p3->next; } else { p3->next=p2; p2=p2->next; p3=p3->next; } } if(p1! =NULL)//p2为空的时候 p3->next=p1; if(p2! =NULL) p3->next=p2; delete; =NULL; } template voidLinkList : Save(charfname[]) { ofstreamfout(fname); fout< Node p=head->next; while(p! =NULL) { fout< p=p->next; } (); } template voidLinkList : Open(charfname[]) { ifstreamfin(fname); intn; fin>>n; Titem; for(inti=0;i { //Node //fin>>p->data; fin>>item; Insert(i+1,item); } (); } template voidLinkList : DisplayName() { Node p=head->next; while(p) { cout< p=p->next; } } template voidLinkList : Sort() { Node intlen=ListLength(); for(inti=1;i { p=head->next; for(intj=0;j { if(p->data>p->next->data) { Ttemp=p->data; p->data=p->next->data; p->next->data=temp; } p=p->next; } } } #include"" #include #include usingnamespacestd; classStudent; ostream&operator<<(ostream&os,Student&stu); ifstream&operator>>(ifstream&ost,Student&stu); ofstream&operator<<(ofstream&ost,Student&stu); classStudent { private: stringname;//姓名 stringID;//学号 stringsex;//性别 stringmajor;//专业 stringbrithday;//生日 intave;//均分 public: Student(); voidSetName(string&strname); voidSetSex(string&strsex); voidSetBrith(string&strbrith); voidSetID(string&strID); voidSetMajor(string&strmajor); voidSetAve(intstrave); voidEditPerson(); booloperator! =(Student&stu); booloperator>(Student&stu); friendostream&operator<<(ostream&ost,Student&stu); friendifstream&operator>>(ifstream&ost,Student&stu); friendofstream&operator<<(ofstream&ost,Student&stu); stringGetName(); }; #include"" #include usingnamespacestd; ostream&operator<<(ostream&ost,Student&stu) { ost<<"Name"<<< ost<<"Sex"<<< ost<<"Brithday"<<< ost<<"ID"<<< ost<<"Major"<<< ost<<"Average"<<< returnost; } ifstream&operator>>(ifstream&ost,Student&stu) { ost>>; ost>>; ost>>; ost>>; ost>>; ost>>; returnost; } ofstream&operator<<(ofstream&ost,Student&stu) { ost<<< ost<<< ost<<< ost<<< ost<<< ost<<< returnost; } Student: : Student() { } voidStudent: : SetName(string&strname) { name=strname; } voidStudent: : SetSex(string&strsex) { sex=strsex; } voidStudent: : SetBrith(string&strbrith) { brithday=strbrith; } voidStudent: : SetID(string&strID) { ID=strID; } voidStudent: : SetMajor(string&strmajor) { major=strmajor; } voidStudent: : SetAve(intstrave) { ave=strave; } boolStudent: : operator! =(Student&stu) { if==name) returnfalse; returntrue; } boolStudent: : operator>(Student&stu1) { if>ave) returntrue; returnfalse; } stringStudent: : GetName() { returnname; } voidStudent: : EditPerson() { } #include"" #include"" #include #include #include<> usingnamespacestd; voidmenu() { cout<<"a、增加一个学生信息"< cout<<"b、打印链表"< cout<<"c、获取当前链表的长度"< cout<<"d、查询学生的信息"< cout<<"e、删除学生信息"< cout<<"f、修改学生的信息"< cout<<"g、按平均成绩进行排序"< cout<<"h、帮助"< cout<<"o、退出"< } voidmain() { charch; LinkList (""); stringname,sex,ID,brithday,major,newname; intlength,pos,ave; Studentstu,delstu; menu(); cout<<"input"< do{ ch=getchar(); switch(ch) { case'h': system("cls"); menu(); break; case'a': system("cls"); //(); cout<<"请输入学生的姓名"< cin>>name; (name); cout<<"请输入学生的性别"< cin>>sex; (sex); cout<<"请输入学生的生日"< cin>>brithday; (brithday); cout<<"请输入学生的学号"< cin>>ID; (ID); cout<<"请输入学生的专业"< cin>>major; (major); cout<<"请输入平均成绩"< cin>>ave; (ave); (1,stu); (""); cout<<"请输入选择(帮助选项-->h): "< break; cas
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 学生 管理 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)