C++链表.docx
- 文档编号:26519684
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:21
- 大小:18.01KB
C++链表.docx
《C++链表.docx》由会员分享,可在线阅读,更多相关《C++链表.docx(21页珍藏版)》请在冰豆网上搜索。
C++链表
C++语言课程设计报告-------学生成绩简单管理程序
要求必须用C++语言
一、系统菜单的主要功能
(1)输入若干条记录
(2)显示所有记录
(3)按学号排序
(4)按姓名查找,删除一条记录
(5)输出统计信息(新增)
(6)从正文中添加数据到结构体数组中
(7)将所有数据写入文件中
(8)退出程序
提问者:
波音989-一级
其他回答 共1条
设计题目:
成绩管理系统
有学生成绩信息,内容如下
姓名学号语文数学英语
张明明01677882
李成友02789188
张辉灿03688256
王露04564577
陈东明05673847
….......…
A、功能要求:
(1)信息维护:
要求:
学生信息数据要以文件的形式保存,能实现学生信息数据的维护。
此模块包括子模块有:
增加学生信息、删除学生信息、修改学生信息
(2)信息查询:
要求:
查询时可实现按姓名查询、按学号查询
(3)成绩统计:
要求:
A输入任意的一个课程名(如数学)和一个分数段(如60--70),
统计出在此分数段的学生情况。
(4)排序:
能对用户指定的任意课程名,
按成绩升序或降序排列学生数据并显示排序结果(使用表格的形式显示排序后的输出结果)
以前做的一个程序,基本符合你的要求,你可以自己改一下。
---------Bykuaidh00---2008/01/07----------
**********************************************/
//链表的练习。
#include
#include
#include
#include
usingnamespacestd;
structList
{
stringm_Name;
stringm_ID;//可能有的学号里有字母,所以用string类型。
shortintm_Chinese;
shortintm_Match;
shortintm_English;
structList*Next;//指针域。
};
typedefstructListNode;
typedefNode*Link;
//---------------函数声明-------------------
LinkCreate(LinkHead);
LinkSearch(LinkHead);
LinkSearch_front(LinkHead);
voidRelease(LinkHead);
voidDisplay(LinkHead);
voidDisplay_One(LinkHead);
voidDisplay(LinkHead,fstream&ofile);
LinkAddInfo(LinkHead);
LinkDelInfo(LinkHead);
LinkModify(LinkHead);
voidGrade_Stat(LinkHead);
LinkSort(LinkHead);
//---------------函数实现-------------------
LinkCreate(LinkHead)
{
/*构造一个头节点*/
Head=(Link)newNode;
if(!
Head)
{
cout<<"分配内存失败。
"< exit(-1); } Head->m_Name=""; Head->m_ID=""; Head->m_Chinese=0; Head->m_Match=0; Head->m_English=0; Head->Next=NULL; returnHead; } LinkSearch(LinkHead) { cout<<"1.按姓名查询2.按学号查询"< intselect; cin>>select; while(cin.fail()) { cout<<"请选择正确的菜单项: "; cin.clear(); fflush(stdin); cin>>select; } Linkptr; ptr=Head; if(select==1) { stringname; cout<<"请输入要查询的姓名: "; cin>>name; while(ptr! =NULL) { if(ptr->m_Name==name) { Display_One(ptr); returnptr; } ptr=ptr->Next; } cout<<"没找到,怎么办? "< } elseif(select==2) { stringID; cout<<"请输入要查询的学号: "; cin>>ID; while(ptr! =NULL) { if(ptr->m_ID==ID) { Display_One(ptr); returnptr; } ptr=ptr->Next; } cout<<"没找到,怎么办? "< } returnptr; } LinkSearch_front(LinkHead) {//返回前驱节点。 cout<<"1.按姓名删除2.按学号删除"< intselect; cin>>select; while(cin.fail()) { cout<<"请选择正确的菜单项: "; cin.clear(); fflush(stdin); cin>>select; } Linkptr; Linkfront; ptr=Head->Next; front=Head; if(select==1) { stringname; cout<<"请输入要删除的姓名: "; cin>>name; while(ptr! =NULL) { if(ptr->m_Name==name) { Display_One(ptr); returnfront; } ptr=ptr->Next; front=front->Next; } cout<<"没找到,怎么办? "< } elseif(select==2) { stringID; cout<<"请输入要删除的学号: "; cin>>ID; while(ptr! =NULL) { if(ptr->m_ID==ID) { Display_One(ptr); returnfront; } ptr=ptr->Next; front=front->Next; } cout<<"没找到,怎么办? "< } returnfront; } voidRelease(LinkHead) { Linkptr; while(Head! =NULL) { ptr=Head; Head=Head->Next; deleteptr; } } voidDisplay(LinkHead) { Linkptr; ptr=Head->Next; cout<<"----------------------------------------------------------------------"< cout<<"----------------------------所有学生信息--------------------------"< cout<<"---姓名--------学号-----------语文-----------数学-----------英语------"< while(ptr! =NULL) { cout< < < < < ptr=ptr->Next; } } voidDisplay(LinkHead,fstream&ofile) { Linkptr; ptr=Head->Next; ofile<<"----------------------------------------------------------------------"< ofile<<"----------------------------所有学生信息--------------------------"< ofile<<"---姓名--------学号-----------语文-----------数学-----------英语------"< while(ptr! =NULL) { ofile< < < < < ptr=ptr->Next; } } voidDisplay_One(LinkHead) { Linkptr; ptr=Head; cout<<"----------------------------------------------------------------------"< cout<<"----------------------------查询结果信息--------------------------"< cout<<"---姓名--------学号-----------语文-----------数学-----------英语------"< cout< < < < < } LinkAddInfo(LinkHead) { Linkptr; ptr=Head; while(ptr->Next! =NULL) { ptr=ptr->Next; } Linkptr2; charagain; do { ptr2=(Link)newNode; if(! ptr2) { cout<<"内存分配失败! "< exit(-1); } //数据域 stringName,ID; shortintChinese,Match,English; cout<<"输入姓名: "; cin>>Name; cout< "; cin>>ID; cout< "; cin>>Chinese; cout< "; cin>>Match; cout< "; cin>>English; ptr2->m_Name=Name; ptr2->m_ID=ID; ptr2->m_Chinese=Chinese; ptr2->m_Match=Match; ptr2->m_English=English; //指针域 ptr2->Next=NULL;//作为尾节点。 ptr->Next=ptr2;//连接入链表。 ptr=ptr2;//将ptr2作为下一次产生的节点的前驱节点. cout<<"是否继续输入? (Y/N)"; cin>>again; }while(again=='Y'||again=='y'); returnHead; } LinkDelInfo(LinkHead) { Linkptr; Linkptr2; ptr=Head; Linkf_ptr;//前驱节点。 f_ptr=Search_front(ptr); ptr2=f_ptr->Next; f_ptr->Next=f_ptr->Next->Next; deleteptr2; returnHead; } LinkModify(LinkHead) { Linkptr; ptr=Head; ptr=Search(ptr); cout<<"修改前信息为: "< Display_One(ptr); //cout<<"请选择你要修改的选项: A: 姓名B: 学号C: 语文成绩D: 数学成绩E: 英语成绩"< stringname,ID; floatChinese,Match,English; cout<<"输入新姓名: "; cin>>name; cout< "; cin>>ID; cout< "; cin>>Chinese; cout< "; cin>>Match; cout< "; cin>>English; ptr->m_Name=name; ptr->m_ID=ID; ptr->m_Chinese=Chinese; ptr->m_Match=Match; ptr->m_English=English; cout< "< Display_One(ptr); returnHead; } voidGrade_Stat(LinkHead) {//成绩统计。 Linkptr; ptr=Head; cout<<"请输入你要查询的课程名(chinese|match|english)和一个分数范围[min,max]."< stringname; shortintmin,max; intSwitchNum; cout<<"课程名: "; cin>>name; cout< "; cin>>min; cout< "; cin>>max; if(name=="chinese") SwitchNum=1; elseif(name=="match") SwitchNum=2; elseif(name=="english") SwitchNum=3; else { cout<<"请输入一个正确的课程名: "< return; } while(ptr! =NULL) { switch(SwitchNum) { case1: if(ptr->m_Chinese<=max&&ptr->m_Chinese>=min) Display_One(ptr); break; case2: if(ptr->m_Match<=max&&ptr->m_Match>=min) Display_One(ptr); break; case3: if(ptr->m_English<=max&&ptr->m_English>=min) Display_One(ptr); } } } LinkSort(LinkHead) {//我创建的是带头节点的链表。 用直接插入法。 cout<<"请输入你想排序的课程名(用中文): "; stringcourse_name; cin>>course_name; if((Head->Next==NULL)||(Head->Next->Next==NULL))//此步条件判断非常有价值。 { cout<<"数据节点数少于2个,不用排序! "< returnHead; } //-----------第二步; Linkptr; Linkptr_F; Linkptr_N; ptr=Head->Next->Next; ptr_F=Head; Head->Next->Next=NULL;//到此,分成了两个链表。 //第三步。 while(ptr) { ptr_N=ptr->Next; ptr_F=Head;//ptr_F的归位。 while(ptr_F->Next) { if(course_name=="语文") { if(ptr->m_Chinese>ptr_F->Next->m_Chinese) { ptr->Next=ptr_F->Next; ptr_F->Next=ptr; break; }//if else { ptr_F=ptr_F->Next; } } if(course_name=="数学") { if(ptr->m_Match>ptr_F->Next->m_Match) { ptr->Next=ptr_F->Next; ptr_F->Next=ptr; break; }//if else { ptr_F=ptr_F->Next; } } if(course_name=="英语") { if(ptr->m_English>ptr_F->Next->m_English) { ptr->Next=ptr_F->Next; ptr_F->Next=ptr; break; }//if else { ptr_F=ptr_F->Next; } } }//while(ptr_F->Next) if(ptr_F->Next==NULL) { ptr->Next=ptr_F->Next; ptr_F->Next=ptr;//表示插到有序链表的最后面了。 } ptr=ptr_N;//归位,准备下一次排序。 }//while(ptr) cout<<"从高到低,排序成功! "< returnHead; } //----------主函数---------------------- intmain() { fstreamofile; ofile.open("e: \\student.txt",ios_base: : out); if(! ofile) { cout<<"文件打开失败。 "< exit(-1); } Linkhead=0; head=Create(head); while (1) { cout<<"*****************************************************"< cout<<"***1.添加信息2.修改信息3.删除信息4.信息查询***"< cout<<"***5.成绩统计6.排序7.显示/保存0.退出***"< cout<<"*****************************************************"< cout<<"请选择正确的菜单项: "; intsel; cin>>sel; while(cin.fail()) { cout<<"请选择正确的菜单项: "; cin.clear(); fflush(stdin); cin>>sel; } switch(sel) { case0: exit(0); case1: head=AddInfo(head); break; case2: head=Modify(head); break; case3: head=DelInfo(head); break; case4: Search(head); break; case5: Grade_Stat(head); break; case6: Sort(head); break; case7: Display(head);//在标准显示器上显示。 Display(head,ofile);//在文件中显示。 break; default: break; } } Release(head); return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 链表