vc学生信息管理系统.docx
《vc学生信息管理系统.docx》由会员分享,可在线阅读,更多相关《vc学生信息管理系统.docx(30页珍藏版)》请在冰豆网上搜索。
vc学生信息管理系统
vc学生信息管理系统
悬赏分:
0-解决时间:
2008-6-1116:
46
1)能够从屏幕上读取一个学生的信息并将信息存入到数据文件中。
2)能够将指定的信息从文件中删除。
3)能够按编号、姓名对学生的信息进行检索并将检索结果显示在屏幕上。
4)可以统计全部学生的总成绩,及其在班上的排名。
5)能够统计各科的平均成绩及及格率。
6)要求有错误提示功能,例如性别只能输入男女,输入错误提示重新输入。
7)如果检索不到相应的信息应提示用户。
#include
#include
#include
#include
#include
#include
#include
#include
#include
//#defineNULL0
intconstQ=20;
#defineLENsizeof(structstudent)
usingnamespacestd;
intn=0;//定义一个全局变量统计学生人数
//——--------->定义一个学生考试信息的结构体
structstudent
{
charname[Q];//用来存放姓名的
charsex[Q];//用来存放性别的
longintid;//用来存放准考证号的
intscore[4];//用来存放分数的
inttotal;//用来存放总分数的
structstudent*next;
};
//student向量容器
vectorstu;
//-------------->学生类
classInformation
{
public:
Information();//构造函数.
~Information();//析构函数.
student*creat();//建立链表函数。
voidoutput(student*head);
intcount(student*head);//定义函数count()统计考生总数
student*insert(student*head);//指针函数*insert()用来添加考生信息.
student*cancel(student*head,longintnum);//指针函数*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)
{//定义一个指向structstudent的结构体指针函数*creat()用来增加考生信息.
charch[Q];n=0;//用来存放姓名的
p1=p2=(student*)malloc(LEN);//调用malloc()函数用来开辟一个新的存储单元
cout<<"-------------<<请建立学生考试信息表,在姓名处键以!
结束输入。
>>--------------"<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;
cout<<"准考证号(8位):
";
do{
cin>>str;
if(atol(str)>99999999||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++成绩:
";
do{
cin>>str;
if(atoi(str)>100||atoi(str)<1)
cout<<"对不起,请输入1-100之间的数字!
!
\n";
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];//计算总分
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);//将输入的第一组学生考试信息返回
}
//--------------->定义output()函数将考生的信息从头指针所指内容开始输出
voidInformation:
:
output(student*head)
{
if(head==NULL)cout<<"这是一个空表,请先输入考生成绩.\n";
else{
cout<<"-------------------------------------------------------------------------------\n";
cout<<"*学生考试成绩信息表*\n";
cout<<"-------------------------------------------------------------------------------\n";
cout<<"准考证号姓名性别计算机组成原理概率统计英语C++平均分总分\n";
cout<<"-------------------------------------------------------------------------------\n";
p1=head;//将头指针赋给p
do
{
cout<id
<name
<sex
<score[0]
<score[1]
<score[2]
<score[3]
<total/4.0
<total<cout<<"-------------------------------------------------------------------------------\n";
p1=p1->next;//将下一组考生信息的next指针赋给p
}while(p1!
=NULL);//若指针p非空则继续,目的是把所有的考生信息都传给指针p然后输出.
}
}
//------------>统计学生人数的函数
intInformation:
:
count(structstudent*head)//定义函数count()统计考生总数
{
if(head==NULL)
return(0);//若指针head为空返回值为0
elsereturn(1+count(head->next));//函数的递归调用
}
//----------->插入学生的成绩的函数
student*Information:
:
insert(student*head)
//插入新结点定义一个指向structstudent的结构体指针函数*insert()用来添加考生信息.
{
charstr[10];
intflag=0;
cout<<"\t----------------<<请输入新增学生成绩信息>>----------------\n"<p1=(student*)malloc(LEN);//使p1指向插入的新结点
cout<<"姓名:
";
cin>>p1->name;//将输入的姓名存放到结构体名为p1的数组name中
cout<<"性别:
";
cin>>p1->sex;
cout<<"准考证号(8位):
";
do{
cin>>str;
if(atol(str)>99999999||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++成绩:
";
do{
cin>>str;
if(atoi(str)>100||atoi(str)<1)
cout<<"对不起,请输入1-100之间的数字!
!
\n";
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;
}//插入到第一个结点之前
else
{
p3->next=p1;
p1->next=p2;
}//插入到p3所指结点之后
}
else
{
p2->next=p1;
p1->next=NULL;
}//插入到尾结点之后
}
n++;//将学生人数加1
cout<<"\t你输入的学生信息已经成功插入"<return(head);
}
//------------>删除函数
student*Information:
:
cancel(student*head,longintnum)//定义一个指向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
else
p2->next=p1->next;//否则将p1所指结点赋给p2所指结点将要删除的学生信息跳过去
cout<<"删除准考证号为"<n--;//将学生人数减1
}
return(head);//将头指针返回
}
}
//------------>查找函数
student*Information:
:
find(student*head,longintnum)
//定义一个指向structstudent的结构体指针函数*find()用来查找考生信息.
{
if(head==NULL)//若调用次函数以前的头指针head为空
{
cout<<"这是一个空表,请先输入考生成绩.\n";
return(head);
}
else
{
p1=head;//否则将头指针赋给p1
while(num!
=p1->id&&p1->next!
=NULL)
//寻找结点当p1所指的学生准考证号不是输入的学生准考证号并且p1所指的next指针不为空
{
p1=p1->next;
}//p2指向原p1指向的结点p1后移一个结点
if(num==p1->id)//如果要查找的学生准考证号是p1所指的学生准考证号
{
cout<<"------------------------------------------------------------------------------\n";
cout<<"准考证号姓名性别计算机组成原理概率统计英语C++平均分总分\n";
cout<<"------------------------------------------------------------------------------\n";
cout<id
<name
<sex
<score[0]
<score[1]
<score[2]
<score[3]
<total/4.0
<total<cout<<"------------------------------------------------------------------------------\n";
}
else
cout<<"没找到准考证号为"<return(head);
}
}
//------------定义inorder()函数将考生的总分从大到小排列并输出
voidInformation:
:
inorder(student*head)
{
inti,k,m=0,j;
student*p[Q];//定义一个指向structstudent的结构体指针数组p
if(head!
=NULL)//如果头指针是空则继续
{m=count(head);
cout<<"------------------------------------------------------------------------------\n";
cout<<"学生考试成绩统计表\n";
cout<<"------------------------------------------------------------------------------\n";
cout<<"准考证号姓名性别计算机组成原理概率统计英语C++平均分总分名次\n";
cout<<"------------------------------------------------------------------------------\n";
p1=head;
for(k=0;k{
p[k]=p1;
p1=p1->next;
}
for(k=0;kfor(j=k+1;jif(p[k]->total
total)
{
p2=p[k];
p[k]=p[j];
p[j]=p2;
}//从大到小排列的指针
for(i=0;i{
cout<id
<name
<sex
<score[0]
<score[1]
<score[2]
<score[3]
<total/4.0
<total<cout<<"------------------------------------------------------------------------------\n";
}
}
}
//------------>求各科平均分成绩的函数
voidInformation:
:
aver