1、学生信息管理系统C+语言程序代码include iostream。h #include iomanip.h #include include include malloc。h include stdlib.h include include stu; class Information public: Information() ; /构造函数。 Information() ; /析构函数。 student creat();/建立链表函数。 void output(student *head); int count(student head);/定义函数count()统计考生总数 studen
2、t *insert(studenthead);/指针函数*insert()用来添加考生信息. student cancel(student *head,long int num);/指针函数cancel()用来删除考生信息。 student find(student *head,long int num); /指针函数find()用来查找考生信息. void inorder(student *head);/定义inorder()函数将考生的总分从大到小排列并输出 void average( student *head);/求学生成绩的平均分的函数 void save(student *head
3、);/保存函数 student *Read();/读取函数 private: student p1,p2,*p3,head,st; ; Information:Information() /构造函数 cout-n”; cout” *nn”; Information:Information() /构造函数 cout *n”; cout” -n”; cout *n”; student Information:creat(void) /定义一个指向struct student的结构体指针函数*creat()用来增加学生信息。 char ch20;n=0; /用来存放姓名的 p1=p2=(studen
4、t )malloc(LEN);/调用malloc()函数用来开辟一个新的存储单元 cout” -请建立学生考试信息表,在姓名处输入 ! 结束输入。-”endl; coutname,ch); /将循环结构前面输入的姓名复制到结构体名为p1的数组name中 coutp1sex; cout”院系:” ; cinstr; coutstr; if(atol(str)999999999 atol(str)1) cout对不起,请正确输入!n”; else p1id=atol(str); flag=1; while(flag=0); flag=0; cout” 语文成绩:; do cinstr; if(at
5、oi(str)100 | atoi(str)1) coutscore0=atoi(str); flag=1; while(flag=0); flag=0; coutstr; if(atoi(str)100 | atoi(str)1) coutscore1=atoi(str); flag=1; while(flag=0); flag=0; coutstr; if(atoi(str)100 | atoi(str)1) coutstr; if(atoi(str)100 atoi(str)1) coutscore3=atoi(str); flag=1; while(flag=0); flag=0; p
6、1total=p1-score0+p1-score1+p1score2+p1-score3;/计算总分 if(n=0)head=p1;/如果是输入第一组学生考试信息就将指针p1赋给指针head else p2next=p1;/否则将p1赋给p2所指结构体的next指针 p2=p1;/将指针p1赋给指针p2 n+; /将n的值加1 coutnext=NULL;/将p2所指结构体的next指针重新赋空值 return (head);/将输入的第一组学生考试信息返回 void Information:output(student head) /定义output()函数将学生的信息从头指针所指内容开始
7、输出 if(head=NULL) cout” 这是一个空表,请先输入考生成绩。n”; else cout”-n”; cout” 学生成绩信息表*n”; cout”-n; cout”学号 姓 名 性别 院系 语文 英语 数学 C+ 平均成绩 总分n”; cout-n”; p1=head;/将头指针赋给p do coutsetw(8)p1id setw(9)p1-name setw(8)p1sex setw(13)p1-score0 setw(16)score2 setw(9)score3 setw(6)p1total/4.0 setw(11)p1totalendl; cout-n”; p1=p1
8、next;/将下一组学生信息的next指针赋给p while(p1!=NULL);/若指针p非空则继续,目的是把所有的学生信息都传给指针p然后输出。 /统计学生人数的函数 int Information::count(struct student head)/定义函数count()统计考生总数 if(head=NULL) /若指针head为空返回值为0 return(0); else return(1+count(headnext);/函数的递归调用 /插入学生的成绩信息的函数 student Information::insert( student head) /插入新结点定义一个指向str
9、uct student的结构体指针函数insert()用来添加考生信息. char str10; int flag=0; cout”t-n”endl; p1=(student )malloc(LEN); /使p1指向插入的新结点 coutp1-name; /将输入的姓名存放到结构体名为p1的数组name中 coutp1-sex; coutstr; if(atol(str)99999999 | atol(str)1) coutid=atol(str); flag=1; while(flag=0); flag=0; coutstr; if(atoi(str)100 | atoi(str)1) co
10、utscore0=atoi(str); flag=1; while(flag=0); flag=0; cout” 外语成绩:”; do cinstr; if(atoi(str)100 atoi(str)1) cout”对不起,请输入1100之间的数字!n”; else p1score1=atoi(str); flag=1; while(flag=0); flag=0; coutstr; if(atoi(str)100 atoi(str)1) coutscore2=atoi(str); flag=1; while(flag=0); flag=0; cout” C+成绩:”; do cinstr;
11、 if(atoi(str)100 atoi(str)1) cout”对不起,请输入1100之间的数字!!n”; else p1score3=atoi(str); flag=1; while(flag=0); flag=0; p1total=p1-score0+p1score1+p1score2+p1-score3;/计算总分 p2=head;/将头指针赋给p2 if(head=NULL) /若没调用次函数以前的头指针head为空 head=p1;p1-next=NULL;/则将p1赋给头指针head并将p1所指结构体成员指针next赋空值 else while(p1idp2id)&(p2nex
12、t!=NULL)) p3=p2;/p3指向原p2指向的结点 p2=p2next; /p2后移一个结点 if(p1idnext=p1; p1next=p2; /插入到p3所指结点之后 else p2next=p1; p1-next=NULL; /插入到尾结点之后 n+;/将学生人数加1 coutid&p1next!=NULL)/寻找要删除的结点当p1所指的学号不是输入的学号并且p1所指的next指针不为空 p2=p1; p1=p1next; /p2指向原p1指向的结点p1后移一个结点 if(num=p1id)/如果输入的学生准考证号是p1所指的学号结点找到后删除 if(p1=head) head
13、=p1-next;/如果head指针和p1指针相等则将下一个结点赋给指针head else p2next=p1next;/否则将p1所指结点赋给p2所指结点将要删除的学生信息跳过去 cout” 删除学号为”num”的学生n; n;/将学生人数减1 return(head);/将头指针返回 /查找学生信息函数 student Information::find(student head,long int num) /定义一个指向struct student的结构体指针函数find()用来查找学生信息. if(head=NULL)/若调用次函数以前的头指针head为空 coutnext; /p1后
14、移一个结点 if(num=p1-id)/如果要查找的学号是p1所指的学号 cout”-n”; cout”学号 姓名 性别 院系 语文 英语 数学 C+ 平均分 总分 n”; cout”-n”; coutsetw(8)id setw(9)name sex setw(13)p1score0 setw(16)p1score1 setw(10)p1score2 setw(9)p1score3 setw(6)p1total/4.0 setw(11)totalendl; cout”-n; else cout” 没找到学号为”num”的学生。n; /结点没找到 return(head); void Info
15、rmation::inorder(student *head) /定义inorder()函数将考生的总分从大到小排列并输出 int i,k,m=0,j; student p20;/定义一个指向struct student的结构体指针数组p if(head!=NULL)/如果头指针是空则继续 m=count(head); cout-n”; cout学生成绩统计表n”; cout”-n; cout”学号 姓 名 性别 院系 语文 英语 数学 C+ 平均分 总分 名次n; couttotalpjtotal) p2=pk; pk=pj; pj=p2; for(i=0;im;i+) coutsetw(8
16、)p1id setw(9)name setw(8)p1sex score0 setw(16)p1score1 setw(10)p1score2 setw(9)score3 setw(6)p1-total/4.0 totalendl; cout-n; void Information::average(student *head) /求各科平均成绩的函数 int k,m; float arg1=0,arg2=0,arg3=0,arg4=0; if(head=NULL)/如果头指针是空则继续 cout 这是一个空表,请先输入学生成绩.n”; else m=count(head); p1=head; for(k=0;km;k+) arg1+=p1score0; arg2+=p1-score1; arg3+=p1score2; arg4+=p1score3; p1=p1next; arg1/=m;arg2/=m;arg3/=m;arg4/=m; cout全班单科成绩平均分n; cout”-n; cout
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1