C++链表.docx

上传人:b****6 文档编号:14025452 上传时间:2023-06-20 格式:DOCX 页数:21 大小:18.01KB
下载 相关 举报
C++链表.docx_第1页
第1页 / 共21页
C++链表.docx_第2页
第2页 / 共21页
C++链表.docx_第3页
第3页 / 共21页
C++链表.docx_第4页
第4页 / 共21页
C++链表.docx_第5页
第5页 / 共21页
C++链表.docx_第6页
第6页 / 共21页
C++链表.docx_第7页
第7页 / 共21页
C++链表.docx_第8页
第8页 / 共21页
C++链表.docx_第9页
第9页 / 共21页
C++链表.docx_第10页
第10页 / 共21页
C++链表.docx_第11页
第11页 / 共21页
C++链表.docx_第12页
第12页 / 共21页
C++链表.docx_第13页
第13页 / 共21页
C++链表.docx_第14页
第14页 / 共21页
C++链表.docx_第15页
第15页 / 共21页
C++链表.docx_第16页
第16页 / 共21页
C++链表.docx_第17页
第17页 / 共21页
C++链表.docx_第18页
第18页 / 共21页
C++链表.docx_第19页
第19页 / 共21页
C++链表.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C++链表.docx

《C++链表.docx》由会员分享,可在线阅读,更多相关《C++链表.docx(21页珍藏版)》请在冰点文库上搜索。

C++链表.docx

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<m_Name

<m_ID

<m_Chinese

<m_Match

<m_English<

ptr=ptr->Next;

}

}

voidDisplay(LinkHead,fstream&ofile)

{

Linkptr;

ptr=Head->Next;

ofile<<"----------------------------------------------------------------------"<

ofile<<"----------------------------所有学生信息--------------------------"<

ofile<<"---姓名--------学号-----------语文-----------数学-----------英语------"<

while(ptr!

=NULL)

{

ofile<m_Name

<m_ID

<m_Chinese

<m_Match

<m_English<

ptr=ptr->Next;

}

}

 

voidDisplay_One(LinkHead)

{

Linkptr;

ptr=Head;

cout<<"----------------------------------------------------------------------"<

cout<<"----------------------------查询结果信息--------------------------"<

cout<<"---姓名--------学号-----------语文-----------数学-----------英语------"<

cout<m_Name

<m_ID

<m_Chinese

<m_Match

<m_English<

}

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;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2