学生信息管理系统C++语言程序代码Word格式文档下载.docx

上传人:b****8 文档编号:22502901 上传时间:2023-02-04 格式:DOCX 页数:199 大小:1.33MB
下载 相关 举报
学生信息管理系统C++语言程序代码Word格式文档下载.docx_第1页
第1页 / 共199页
学生信息管理系统C++语言程序代码Word格式文档下载.docx_第2页
第2页 / 共199页
学生信息管理系统C++语言程序代码Word格式文档下载.docx_第3页
第3页 / 共199页
学生信息管理系统C++语言程序代码Word格式文档下载.docx_第4页
第4页 / 共199页
学生信息管理系统C++语言程序代码Word格式文档下载.docx_第5页
第5页 / 共199页
点击查看更多>>
下载资源
资源描述

学生信息管理系统C++语言程序代码Word格式文档下载.docx

《学生信息管理系统C++语言程序代码Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《学生信息管理系统C++语言程序代码Word格式文档下载.docx(199页珍藏版)》请在冰豆网上搜索。

学生信息管理系统C++语言程序代码Word格式文档下载.docx

//指针函数*cancel()用来删除考生信息. 

student *find(student*head,longintnum);

 //指针函数*find()用来查找考生信息.

voidinorder(student*head);

//定义inorder()函数将考生的总分从大到小排列并输出 

 voidaverage(student*head);

//求学生成绩的平均分的函数 

voidsave(student*head);

//保存函数

 student *Read();

//读取函数

private:

student*p1,*p2,*p3,*head,st;

};

Information:

:

Information()//构造函数

cout<

<

” ******************************************************************************\n"

cout<

"

-—-—-------———---—----——〈<

欢迎您使用学生信息管理系统〉〉-————-—---——-—---—--—---\n"

cout<

〈”******************************************************************************\n\n";

 Information:

~Information()//构造函数

 {

cout<

<"

******************************************************************************\n"

cout<<

”—-—----——------——-—--—-—<〈谢谢您使用学生信息管理系统>〉--———-----—---—-——-—---—\n"

 cout<〈”******************************************************************************\n"

 }

student*Information:

creat(void)//定义一个指向struct student的结构体指针函数*creat()用来增加学生信息。

 charch[20];

n=0;

p1=p2=(student*)malloc(LEN);

//调用malloc()函数用来开辟一个新的存储单元 

 cout<<

" --—--—-—-—---〈〈请建立学生考试信息表,在姓名处输入!

结束输入。

〉〉--————--—-—---"〈<

endl;

cout〈〈"姓名:

";

 cin>>

ch;

head=NULL;

//给指针head赋初值 

while(strcmp(ch,"!

)!

=0)//调用字符比较函数strcmp()用来判断是否继续输入

{

charstr[10];

intflag=0;

 p1=(student*)malloc(LEN);

//调用malloc()函数用来开辟一个新的存储单元 

strcpy(p1—>name,ch);

//将循环结构前面输入的姓名复制到结构体名为p1的数组name中

 cout<

〈" 性别:

";

cin>>

p1->

sex;

院系:

;

cin>〉str;

 cout<<

”学号(9位):

”;

 do{

cin>〉str;

if(atol(str)〉999999999|| atol(str)〈1)

cout〈〈”对不起,请正确输入!

\n"

;

 else

p1-〉id=atol(str);

flag=1;

 

}while(flag==0);

 flag=0;

cout〈〈"

语文成绩:

do{ 

cin>

〉str;

if(atoi(str)>100||atoi(str)〈1) 

cout<

”对不起,请输入1—100之间的数字!

!

\n”;

 else 

 {

p1->score[0]=atoi(str);

 flag=1;

} 

 }while(flag==0);

flag=0;

cout〈〈"

外语成绩:

do{ 

cin〉>str;

if(atoi(str)>100||atoi(str)〈1) 

cout<

”对不起,请输入1-100之间的数字!

\n”;

else

{p1—>

score[1]=atoi(str);

flag=1;

}while(flag==0);

flag=0;

cout<

〈"

数学成绩:

 do{ 

cin>

>str;

if(atoi(str)>

100||atoi(str)〈1) 

 cout<

〈”对不起,请输入1-100之间的数字!

\n";

else

{ p1—〉score[2]=atoi(str);

flag=1;

}while(flag==0);

 flag=0;

 cout〈〈"C++成绩:

cin>

>

str;

 if(atoi(str)>

100 || atoi(str)<1)

cout<

"对不起,请输入1-100之间的数字!

\n”;

{p1->

score[3]=atoi(str);

 flag=1;

} 

 }while(flag==0);

 flag=0;

p1—>total=p1->score[0]+p1->

score[1]+p1-〉score[2]+p1->score[3];

//计算总分

if(n==0)head=p1;

//如果是输入第一组学生考试信息就将指针p1赋给指针head 

elsep2->next=p1;

//否则将p1赋给p2所指结构体的next指针

p2=p1;

//将指针p1赋给指针p2

n++;

//将n的值加1 

 cout〈<

"姓名:

cin>

ch;

//将输入的姓名存放到字符数组ch中

p2->

next=NULL;

//将p2所指结构体的next指针重新赋空值 

return (head);

//将输入的第一组学生考试信息返回

voidInformation:

output(student *head)//定义output()函数将学生的信息从头指针所指内容开始输出

if(head==NULL)cout<

这是一个空表,请先输入考生成绩.\n"

else{

cout<<

—---—-—-——-----——----—---——————-——--—-———--—-——---—---—-————------———————--—-—-\n"

cout〈<

”*学生成绩信息表*\n";

cout<

〈”--——--—-—------——--———----—--------—-------—--—---—-——--—-—--——-—-—-—-—-—-—-———\n”;

cout<

学号  姓名性别 院系语文英语  数学  C++ 平均成绩   总分\n"

cout〈〈"-—-——--—---——-—--—-—-—-------—----—----——-———--—-————-—-——————----—-—----—--——-\n";

  

p1=head;

//将头指针赋给p

do

{ 

 cout〈〈setw(8)〈<p1->

id 

 <

〈setw(9)〈<

p1-〉name

〈<

setw(8)<

p1->

sex

 〈〈setw(13)<

〈p1->

score[0]

<〈setw(16)<

p1—>

score[1]

<<

setw(10)<〈p1->score[2] 

<

<setw(9)<<

p1-〉score[3]

<setw(6)〈<

p1—>

total/4.0 

 〈〈setw(11)〈〈p1—>total〈<endl;

 cout〈<

--—-—--------—————————-—-----—----—-----—-—---—---—---—---——---—-——--——-—----—-\n"

 p1=p1-〉next;

//将下一组学生信息的next指针赋给p

}while(p1!

=NULL);

//若指针p非空则继续,目的是把所有的学生信息都传给指针p然后输出。

}

//统计学生人数的函数

int Information:

count(struct student*head)//定义函数count()统计考生总数

if(head==NULL)//若指针head为空返回值为0

 return(0);

elsereturn(1+count(head->

next));

//函数的递归调用

//插入学生的成绩信息的函数

student*Information:

insert(student *head)//插入新结点定义一个指向structstudent的结构体指针函数*insert()用来添加考生信息.

char str[10];

 intflag=0;

cout〈<

”\t-—-———-—--—--———<

请输入新增学生成绩信息>

---—---—-—-——--—\n”<

<endl;

p1=(student*)malloc(LEN);

//使p1指向插入的新结点

cout<〈"

 姓名:

p1->name;

 //将输入的姓名存放到结构体名为p1的数组name中 

cout〈〈”性别:

 cin〉>

p1-〉sex;

cout〈<

"学号(9位):

do{

cin〉>

str;

if(atol(str)〉99999999||atol(str)<

1)

〈”对不起,请请正确输入!

\n"

else

{p1—>

id=atol(str);

flag=1;

}while(flag==0);

flag=0;

 cout<

 语文成绩:

do{

 cin〉〉str;

 if(atoi(str)>

100||atoi(str)<1)

cout〈〈"

对不起,请输入1—100之间的数字!

\n”;

 else

{p1-〉score[0]=atoi(str);

flag=1;

 }while(flag==0);

外语成绩:

do{ 

cin〉>str;

if(atoi(str)〉100||atoi(str)〈1)

 cout〈〈"

对不起,请输入1—100之间的数字!

else

{p1—〉score[1]=atoi(str);

 flag=1;

}while(flag==0);

flag=0;

数学成绩:

”;

cin〉〉str;

if(atoi(str)>100|| atoi(str)<

1) 

cout<<

对不起,请输入1-100之间的数字!

else 

{p1—>

score[2]=atoi(str);

flag=1;

}while(flag==0);

 flag=0;

cout<<

”C++成绩:

do{ 

cin〉>str;

if(atoi(str)>

100 ||atoi(str)〈1)

cout〈<

对不起,请输入1-100之间的数字!

 else

{ p1-〉score[3]=atoi(str);

 flag=1;

 }while(flag==0);

flag=0;

 p1->

total=p1—>

score[0]+p1->

score[1]+p1-〉score[2]+p1-〉score[3];

//计算总分

p2=head;

//将头指针赋给p2

if(head==NULL) //若没调用次函数以前的头指针head为空

head=p1;

p1->

next=NULL;

//则将p1赋给头指针head并将p1所指结构体成员指针next赋空值

 else

while((p1->

id>

p2->

id)&&

(p2->

next!

=NULL))

p3=p2;

//p3指向原p2指向的结点

p2=p2—>

next;

}//p2后移一个结点

if(p1->

id〈=p2—〉id)

if(head==p2)

p1-〉next=head;

 head=p1;

} //插入到第一个结点之前

{

p3-〉next=p1;

p1->

next=p2;

 }//插入到p3所指结点之后

 { 

p2—>next=p1;

p1—〉next=NULL;

 } //插入到尾结点之后

n++;

//将学生人数加1

"\t你输入的学生信息已经成功插入"

<endl;

return(head);

//删除学生信息函数

student*Information:

cancel(student*head,long intnum)//定义一个指向structstudent的结构体指针函数*delete()用来删除考生信息。

if(head==NULL)//若调用次函数以前的头指针head为空 

 return(head);

else

p1=head;

//否则将头指针赋给p1 

while(num!

=p1->id&

&p1—>

next!

=NULL)//寻找要删除的结点当p1所指的学号不是输入的学号并且p1所指的next指针不为空

p2=p1;

p1=p1—〉next;

//p2指向原p1指向的结点p1后移一个结点

if(num==p1—〉id)//如果输入的学生准考证号是p1所指的学号结点找到后删除

if(p1==head) head=p1->next;

//如果head指针和p1指针相等则将下一个结点赋给指针head

 p2->

next=p1-〉next;

//否则将p1所指结点赋给p2所指结点将要删除的学生信息跳过去

删除学号为"

〈<num〈<"

的学生\n"

n-—;

//将学生人数减1

 }

return(head);

//将头指针返回 

//查找学生信息函数 

student *Information:

find(student*head,long int num)//定义一个指向structstudent的结构体指针函数*find()用来查找学生信息.

{ 

if(head==NULL)//若调用次函数以前的头指针head为空

 cout<

〈”这是一个空表,请先输入考生成绩.\n”;

return(head);

else

p1=head;

//否则将头指针赋给p1

 while(num!

=p1->

id&

&

next!

=NULL)

//寻找结点当p1所指的学号不是输入的学生学号并且p1所指的next指针不为空 

p1=p1->

//p1后移一个结点

 if(num==p1->id)//如果要查找的学号是p1所指的学号 

cout〈<”-——--—-—-----——-----—---—-——--———------—-—-—-—-—------—--—————----—--—-—---—-—\n"

cout<〈”学号 姓名性别院系语文 英语 数学C++平均分总分\n";

cout<〈”-——--—----—-—-———--——-----—-——-—-———--—------———---——-----——-——-———-—-——----—-\n"

cout〈〈setw(8)〈〈p1->

id

〈〈setw(9)<

〈p1—〉name 

<<setw(8)<

p1->

〈<setw(13)<<

p1—〉score[0]

〈〈setw(16)<〈p1—>

score[1] 

setw(10)〈<

score[2]

setw(9)<<

p1—>score[3]

setw(6)<

〈p1—>

total/4.0

<setw(11)〈〈p1->

total〈<endl;

”—-——--—---————-—--——-----—---—--——--—--—-----------——-—-----—----—-—--———--—-—\n";

 没找到学号为"<

〈num<<"

的学生。

\n"

//结点没找到

return(head);

voidInformation:

inorder(student*head)//定义inorder()函数将考生的总分从大到小排列并输出

inti,k,m=0,j;

student*p[20];

//定义一个指向struct student的结构体指针数组p

if(head!

=NULL)//如果头指针是空则继续

{ m=count(head);

 cout〈〈"——---——-——--—------—-—-----———-—----—-——-——----—-—-—--—-----——--—---—----—----\n”;

cout<

”学生成绩统计表\n";

cout〈〈"

----—--————----——--———-—------—-—----—------—-----—-----—-—--—-----—-—-———--—-\n"

学号姓 名 性别  院系 语文英语 数学 C++平均分 总分 名次\n"

cout<<”-—-----—------——----—---—--———-——-----—-—--—--—-——-——-—--—----————-—————-----—\n”;

 p1=head;

for(k=0;

k〈m;

k++)

{ 

p[k]=p1;

 p1=p1-〉next;

for(k=0;

k〈m—1;

k++) //选择排序法 

 for(j=k+1;

j<

m;

j++)

if(p[k]—>

total〈p[j]->

total)

 p2=p[k];

p[k]=p[j];

p[j]=p2;

for(i=0;

i<

m;

i++)

{ 

<setw(8)〈<p1—〉id

〈〈setw(9)〈〈p1-〉name 

setw(8)〈<p1->sex

<setw(13)〈〈p1-〉score[0]

setw(16)<

〈p1-〉score[1] 

setw(10)<

score[2]

setw(9)<

〈p1—〉score[3]

<setw(6)〈<

p1->total/4。

0

 〈<setw(11)〈〈p1-〉total<

〈endl;

cout〈〈”---—----—-———---——--—--—-—----—---------—----—-----—-——-———------—-——---—-—---\n”;

 

 void Information:

average(student*head)//求各科平均成绩的函数

 intk,m;

 float arg1=0,arg2=0,arg3=0,arg4=0;

 if(head==NULL)//如果头指针是空则继续

 cout<

"这是一个空表,请先输入学生成绩。

\n”;

else 

m=count(head);

p1=head;

for(k=0;

k<m;

arg1+=p1—>score[0];

arg2+=p1—〉score[1];

 arg3+=p1->

score[2];

arg4+=p1->score[3];

p1=p1—>next;

} 

arg1/=m;

arg2/=m;

arg3/=m;

arg4/=m;

cout<<”全班单科成绩平均分\n”;

cout〈<"

-——-—-—-———-—-------—-——-—-—-—--—-—--——-—-———--————-—-———

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

当前位置:首页 > 党团工作 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1