学生信息管理系统C++语言程序代码.docx

上传人:b****2 文档编号:25870817 上传时间:2023-06-16 格式:DOCX 页数:25 大小:23.35KB
下载 相关 举报
学生信息管理系统C++语言程序代码.docx_第1页
第1页 / 共25页
学生信息管理系统C++语言程序代码.docx_第2页
第2页 / 共25页
学生信息管理系统C++语言程序代码.docx_第3页
第3页 / 共25页
学生信息管理系统C++语言程序代码.docx_第4页
第4页 / 共25页
学生信息管理系统C++语言程序代码.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

学生信息管理系统C++语言程序代码.docx

《学生信息管理系统C++语言程序代码.docx》由会员分享,可在线阅读,更多相关《学生信息管理系统C++语言程序代码.docx(25页珍藏版)》请在冰豆网上搜索。

学生信息管理系统C++语言程序代码.docx

学生信息管理系统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]

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然后输出。

//统计学生人数的函数

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)〈name

<〈setw(8)〈〈p1—>sex

<〈setw(13)〈

〈〈setw(16)〈

<

<

<total〈〈endl;

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)〈score[3]

<〈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<

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 判决书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1