学生信息管理系统C++语言程序代码.docx
- 文档编号:7007144
- 上传时间:2023-01-16
- 格式:DOCX
- 页数:18
- 大小:54.37KB
学生信息管理系统C++语言程序代码.docx
《学生信息管理系统C++语言程序代码.docx》由会员分享,可在线阅读,更多相关《学生信息管理系统C++语言程序代码.docx(18页珍藏版)》请在冰豆网上搜索。
学生信息管理系统C++语言程序代码
学生信息管理系统C++语言程序代码
LT
#include
#include
#include
#include
#include
#include
#include
#include
#include
#defineLENsizeof(structstudent)
usingnamespacestd;
intn=0;//定义一个全局变量统计学生人数
structstudent//定义一个学生信息的结构体
{
charname[20];//用来存放姓名的
charsex[20];//用来存放性别的
charyuanxi[20];//用来存放院系的
longintid;//用来存放学号的
intscore[4];//用来存放分数的
inttotal;//用来存放总分数的
structstudent*next;
};
vector
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[20];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<<"院系: "; 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{ return(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<<"学号(9位): "; 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;//p1后移一个结点 } if(num==p1->id)//如果要查找的学号是p1所指的学号 { cout<<"------------------------------------------------------------------------------\n"; cout<<"学号姓名性别院系语文英语数学C++平均分总分\n"; cout<<"------------------------------------------------------------------------------\n"; cout< < < < < < < < < cout<<"------------------------------------------------------------------------------\n"; } else cout<<"没找到学号为"< return(head); } } voidInformation: : inorder(student*head)//定义inorder()函数将考生的总分从大到小排列并输出 { inti,k,m=0,j; student*p[20];//定义一个指向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;k for(j=k+1;j if(p[k]->total total) { p2=p[k]; p[k]=p[j]; p[j]=p2; } for(i=0;i { cout< < < < < < < < < cout<<"------------------------------------------------------------------------------\n"; } } } voidInformation: : average(student*head)//求各科平均成绩的函数 { intk,m; floatarg1=0,arg2=0,arg3=0,arg4=0; if(head==NULL)//如果头指针是空则继续 { cout<<"这是一个空表,请先输入学生成绩.\n"; } else { m=count(head); p1=head; for(k=0;k { 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<<"------------------------------------------------------------------------------\n"; cout<<"语文平均分: "< <<"英语平均分: "< <<"数学平均分: "< <<"C++平均分: "< cout<<"------------------------------------------------------------------------------\n"; } } voidInformation: : save(student*head)//保存函数. { ofstreamout("data.txt",ios: : out); out< while(head! =NULL) {out< < < < < < < < head=head->next; } } student*Information: : Read()//读取函数的实现 {inti=0; p1=p2=(student*)malloc(LEN); head=NULL; ifstreamin("data.txt",ios: : out); in>>i; if(i==0){cout<<"data.txt文件中的数据为空,请先输入数据。 "< else{ cout<<"…………………………………………………………………………………………"< for(;i>0;i--) {p1=(student*)malloc(LEN); cin>>st.name>>st.id>>st.sex >>st.score[0]>>st.score[1]>>st.score[2]>>st.score[3] >>st.total; strcpy(p1->name,st.name); p1->id=st.id; strcpy(p1->sex,st.sex); p1->score[0]=st.score[0]; p1->score[1]=st.score[1]; p1->score[2]=st.score[2]; p1->score[3]=st.score[3]; p1->total=st.total; if(n==0)head=p1;//如果是输入第一组学生考试信息就将指针p1赋给指针head elsep2->next=p1;//否则将p1赋给p2所指结构体的next指针 p2=p1;//将指针p1赋给指针p2 n++;//将n的值加1 cout<<""< < < < < < < < cout<<"…………………………………………………………………………………………"< // } cout<<"数据已经成功读取完毕。 "< p2->next=NULL; return(head); } } intmain()//主函数. { system("color4f");//改变登陆界面颜色 Informationperson; student*head=NULL; charstr[5]; intflag=0; intchoice; longinti; charadmin[20]; charpass[30]; cout<<"请输入账号\n"; cin>>admin; cout<<"请输入密码\n"; cin>>pass; if(strcmp(admin,"1111")==0&&strcmp(pass,"222")==0) { do{ cout<<"***********************************************
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 信息管理 系统 C+ 语言 程序代码