学生信息管理系统C++语言程序代码.docx
- 文档编号:25870817
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:25
- 大小:23.35KB
学生信息管理系统C++语言程序代码.docx
《学生信息管理系统C++语言程序代码.docx》由会员分享,可在线阅读,更多相关《学生信息管理系统C++语言程序代码.docx(25页珍藏版)》请在冰豆网上搜索。
学生信息管理系统C++语言程序代码
#include〈iostream。
h>
#include〈iomanip.h〉
#include
#include
#include〈malloc。
h〉
#include〈stdlib.h>
#include #include〈process。 h> #include #defineLENsizeof(structstudent) usingnamespacestd; intn=0;//定义一个全局变量统计学生人数 structstudent//定义一个学生信息的结构体 { charname[20];//用来存放姓名的 charsex[20];//用来存放性别的 charyuanxi[20];//用来存放院系的 longintid;//用来存放学号的 intscore[4];//用来存放分数的 inttotal;//用来存放总分数的 structstudent*next; }; vector〈student>stu; 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<〈”———-———-——-——〈〈请建立学生考试信息表,在姓名处输入! 结束输入。 〉〉-————————-—-—-”<〈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; 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{ 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);//将输入的第一组学生考试信息返回 } 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—〉sex 〈〈setw(13)〈〈p1-〉score[0] 〈〈setw(16)〈 〈〈setw(10)〈〈p1—>score[2] 〈 〈〈setw(6)〈〈p1—〉total/4.0 〈〈setw(11)<〈p1—〉total〈〈endl; cout〈〈"——--—-————--——-——--—-----——-————-——--——--———--—-—-—————-————-—————-——-——---————\n”; p1=p1—〉next;//将下一组学生信息的next指针赋给p }while(p1! =NULL);//若指针p非空则继续,目的是把所有的学生信息都传给指针p然后输出。 } } //统计学生人数的函数 intInformation: : count(structstudent*head)//定义函数count()统计考生总数 { if(head==NULL)//若指针head为空返回值为0 return(0); elsereturn(1+count(head—〉next));//函数的递归调用 } //插入学生的成绩信息的函数 student*Information: : insert(student*head)//插入新结点定义一个指向structstudent的结构体指针函数*insert()用来添加考生信息. { charstr[10]; intflag=0; cout<〈”\t———————————-——--<〈请输入新增学生成绩信息〉>—————————--—-———\n”<〈endl; 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你输入的学生信息已经成功插入”〈〈endl; 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<<”删除学号为”<〈num<〈”的学生\n"; 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<〈setw(8)<〈p1—>id <〈setw(9)〈 <〈setw(8)〈〈p1—>sex <〈setw(13)〈 〈〈setw(16)〈 < 〈 < < cout〈〈”——-—————-———-——-—--—--——-————---———————————-—-————————-———-——————-———--—-----—\n"; } else cout<<”没找到学号为”〈 \n";//结点没找到 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〈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 { p2=p[k]; p[k]=p[j]; p[j]=p2; } for(i=0;i { cout〈〈setw(8)〈〈p1—〉id <〈setw(9)<〈p1—>name < <〈setw(13)〈〈p1—>score[0] 〈〈setw(16)〈〈p1—〉score[1] 〈〈setw(10)<〈p1—〉score[2] 〈〈setw(9)〈 〈 <〈setw(11)〈〈p1—>total〈〈endl; 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〈m;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<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 信息管理 系统 C+ 语言 程序代码