学生信息管理系统C++语言程序代码.docx
- 文档编号:8699807
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:20
- 大小:23.43KB
学生信息管理系统C++语言程序代码.docx
《学生信息管理系统C++语言程序代码.docx》由会员分享,可在线阅读,更多相关《学生信息管理系统C++语言程序代码.docx(20页珍藏版)》请在冰豆网上搜索。
学生信息管理系统C++语言程序代码
#include h> #include #include〈fstream> #include #include〈malloc。 h〉 #include #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〈〈”——-————-----—<<请建立学生考试信息表,在姓名处输入! 结束输入。 〉〉—-—-—--—-—-—-—"〈 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)〈 〈〈setw(13)〈 < 〈〈setw(10)<〈p1-〉score[2] < < <〈setw(11)< 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"< 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<〈"删除学号为"<〈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)< 〈〈setw(13)<〈p1—>score[0] 〈 〈〈setw(10)〈 <〈setw(9)<〈p1-〉score[3] 〈 < cout<〈”-—--—-—------———————--———-————————-—-——----———-----—---------——-—————-—-—-———-\n"; } else cout〈<"没找到学号为"〈〈num〈<”的学生。 \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〈p[j]->total) { p2=p[k]; p[k]=p[j]; p[j]=p2; } for(i=0;i〈m;i++) { cout〈 <〈setw(9)〈 〈〈setw(8)〈〈p1—〉sex < 〈〈setw(16)〈〈p1->score[1] < <〈setw(9)〈 < 0 〈〈setw(11)〈 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”; co
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 信息管理 系统 C+ 语言 程序代码