学生管理系统.docx
- 文档编号:26148948
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:26
- 大小:41.01KB
学生管理系统.docx
《学生管理系统.docx》由会员分享,可在线阅读,更多相关《学生管理系统.docx(26页珍藏版)》请在冰豆网上搜索。
学生管理系统
学生管理系统
附有源代码
使用说明在工程文件下面新建Student.txt文本文件实现对文件的操作。
本系统是在模板类的基础上利用链表实现的学生管理系统。
运行截图
实现功能有增,删,改,查,对文件的操作。
增加一个学生信息
查询学生的信息
删除学生信息
修改学生的信息
按平均成绩进行排序
1、增加一个学生的信息
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; s->next=p->next; p->next=s; } } 2、删除一个学生的 查询学生的信息 附件……源代码 LinkList.h #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 LinkList.cpp #include"LinkList.h" 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=L1.head->next;//指向第一个数据的节点 p2=L2.head->next; p3=L1.head;//指向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; deleteL2.head; L2.head=NULL; } template voidLinkList : Save(charfname[]) { ofstreamfout(fname); fout< Node p=head->next; while(p! =NULL) { fout< p=p->next; } fout.close(); } template voidLinkList : Open(charfname[]) { ifstreamfin(fname); intn; fin>>n; Titem; for(inti=0;i { //Node //fin>>p->data; fin>>item; Insert(i+1,item); } fin.close(); } 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; } } } Student.h #include"LinkList.h" #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(); }; Student.cpp #include"Student.h" #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>>stu.name; ost>>stu.sex; ost>>stu.brithday; ost>>stu.ID; ost>>stu.major; ost>>stu.ave; 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(stu.name==name) returnfalse; returntrue; } boolStudent: : operator>(Student&stu1) { if(stu1.ave>ave) returntrue; returnfalse; } stringStudent: : GetName() { returnname; } voidStudent: : EditPerson() { } main.cpp #include"LinkList.cpp" #include"Student.h" #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 list.Open("Student.txt"); 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"); //stu.EditPerson(); cout<<"请输入学生的姓名"< cin>>name; stu.SetName(name); cout<<"请输入学生的性别"< cin>>sex; stu.SetSex(sex); cout<<"请输入学生的生日"< cin>>brithday; stu.SetBrith(brithday); cout<<"请输入学生的学号"< cin>>ID; stu.SetID(ID); cout<<"请输入学生的专业"< cin>>major; stu.SetMajor(major); cout<<"请输入平均成绩"< cin>>ave; stu.SetAve(ave); list.Insert(1,stu); list.Save("Student.txt"); cout<<"请输入选择(帮助选项-->h): "< break; case'b': system("cls"); list.PrintLinkList(); cout<<"请输入选择(帮助选项-->h): "< break; case'c': system("cls"); cout<<"当前链表的长度为: "< length=list.ListLength(); cout<<"length="< cout<<"请输入选择(帮助选项-->h): "< break; case'd': system("cls"); cout<<"现有学生的名字: "< list.DisplayName(); cout< cout<<"请输入学生的姓名"< cin>>name; stu.SetName(name); delstu=list.Find(stu); cout< cout<<"请输入选择(帮助选项-->h): "< break; case'e': system("cls"); cout<<"现有学生的名字: "< list.DisplayName(); cout<<"请输入删除学生的姓名"; cin>>name; stu.SetName(name); pos=list.Locate(stu); delstu=list.Delete(pos); cout< list.PrintLinkList(); list.Save("Student.txt"); cout<<"请输入选择(帮助选项-->h): "< break; case'f': system("cls"); cout<<"现有学生的名字: "<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 管理 系统