学生信息管理系统C++语言程序代码Word格式文档下载.docx
《学生信息管理系统C++语言程序代码Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《学生信息管理系统C++语言程序代码Word格式文档下载.docx(199页珍藏版)》请在冰豆网上搜索。
//指针函数*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〈<"
-——-—-—-———-—-------—-——-—-—-—--—-—--——-—-———--————-—-———