1、目 录一编程目的:2二设计要求:2三各函数功能说明:2四流程图:13五总结:14参考书目:15一 编程目的:编写一个学生成绩管理系统,每个学生应该包含如下信息:班级、学号、姓名、各科成绩、每个学生的平均分、名次以及班级各科平均分等。可以任意添加学生,删除学生,编辑学生信息,并且具有保存和读入学生息功能以及分别根据平均分排名情况和根据。班级、姓名、学号查找有关成绩情况。二设计要求:(1)能按学期、按班级完成对学生成绩的录入、修改(2)能按班级统计学生的成绩,求学生的总分及平均分,并能根据学生的平均成绩进行排序(3)能查询学生成绩,不及格科目及学生名单(4)能按班级输出学生的成绩单三各函数功能说明
2、:#include #include #include int N; /输入学生人数class student /建立一个student类private: char *name; int number,Class; int chinese,math,english,computer; public: student(); void putin(int cl,int nu,char n10,int ch,int en,int ma,int co) /输入学生相关信息 name=new charstrlen(n)+1; strcpy(name,n); number=nu; math=ma; eng
3、lish=en; chinese=ch; computer=co; Class=cl; ; void putna(char *x) name=new charstrlen(x)+1; strcpy(name,x); ; void putfour(int x,int y,int z,int h)/传四个成绩 chinese=x;english=y;math=z;computer=h; void putcl(int x)Class=x; / 赋一个值,下面同样 void putnu(int x)number=x; void putch(int x)chinese=x; void puten(int
4、 x)english=x; void putma(int x)math=x; void putco(int x)computer=x; int getcl()return Class; /返回一个值,下面同样 int getnu()return number; int getch()return chinese; int geten()return english; int getma()return math; int getco()return computer; char *getna()return(name); void putout() /返回学生全部信息coutClasssetw
5、(8)numbersetw(10)name setw(8)chinesesetw(11)englishsetw(9)mathsetw(8) computer; ; ; /* / 汇总 /* double average(student *p,char *na,int Cl)/每一个科目的平均分 float av=0,j1=1;int j=0; for(int i=0;iN;i+) if(strcmp(na,语文)=0&pi.getcl()=Cl) av=av+pi.getch();+j;j1=float(j); if(strcmp(na,英语)=0&pi.getcl()=Cl) av=av+p
6、i.geten();+j;j1=float(j); if(strcmp(na,C+程序设计)=0&pi.getcl()=Cl) av=av+pi.getco();+j;j1=float(j); if(strcmp(na,数学)=0&pi.getcl()=Cl) av=av+pi.getma();+j;j1=float(j); if(av=0) return 0; else return av/j1; int sum(student p) /每人的总分 int s=0; s=p.getch()+p.geten()+p.getco()+p.getma(); return s; /* int fin
7、d(student *p,int Cl,int Nu) /通过班级和学号,对要修改的对象返回它的对象里的值 int i=0,a=N+1; for(;iN;i+) if(pi.getcl()=Cl&pi.getnu()=Nu)a=i;break; else continue; if(a!=N+1)return a; else return N; int find(student *p,int Cl,char *Na) /通过班级和名字,对要修改的对象返回它的对象里的值 int i=0,a=N+1; for(;iN;i+) if(pi.getcl()=Cl&strcmp(pi.getna(),Na
8、)=0) a=i;break;if(a!=N+1)return a;else return N;int find(student *p,char *Na,int Nu) /通过名字和学号,对要修改的对象返回它的对象里的值 int i=0,a=N+1; for(;iN;i+)if(strcmp(pi.getna(),Na)=0&pi.getnu()=Nu)a=i;break;if(a!=N+1)return a;else return N;int find(student *p,int Cl) /通过班,对要修改的对象返回它的对象里的值 int i=0,a=N+1; for(;iN;i+) if
9、(pi.getcl()=Cl)a=i;break;if(a!=N+1)return a;else return N; /* / 查询成绩 /* void search(student *p,int Cl,char *Na) /通过班级和名字,来查询成绩 int j=find(p,Cl,Na);if(j=N) coutendl此人不存在!endl;elsecoutendl班级setw(6)学号setw(8)姓名setw(11) 语文setw(10)英语setw(8)数学setw(8) C+程序设计setw(8)总分setw(8)平均分endl; pj.putout(); coutsetw(7);
10、 int a4=sum(pj);float a5=float(a4)/4; couta4setw(8)a5endl; void search(student *p,char *Na,int Nu) /通过名字和学号,来查询成绩 int j=find(p,Na,Nu),a4;float a5;if(j=N) coutendl没有这个人:endl;else cout班级setw(6)学号setw(8)姓名setw(11)语文setw(10)英语setw(8)数学setw(8)C+程序设计setw(8)总分setw(8)平均分endl; pj.putout();coutsetw(7);a4=sum(
11、pj);a5=float(a4)/4;couta4setw(8)a5endl; void search(student *p,int Cl,int Nu) /通过班和号,来查询成绩 int j=find(p,Cl,Nu);if(j=N) coutendl没有这个人:endl;elsecout班级setw(6)学号setw(8)姓名setw(11)语文setw(10)英语setw(8)数学setw(8)C+程序设计setw(8)总分setw(8)平均分endl;pj.putout();coutsetw(7);int a4=sum(pj);float a5=float(a4)/4;couta4se
12、tw(8)a5endl; /8888888888888888888888888888888888888888888888888888888 void lank(student *p,int Cl) /按学号顺序排 int k1,k2,k3,k4,k5,k6;char *k7;for(int i=0;iN;i+)for(int j=i+1;jpj.getnu()/实现用学号来排序 k1=pi.getcl();pi.putcl(pi+1.getcl();pj.putcl(k1);k7=new charstrlen(pi.getna()+1;strcpy(k7,pi.getna();pi.putna
13、(pi+1.getna();pi+1.putna(k7);k2=pi.getnu();pi.putnu(pj.getnu();pj.putnu(k2);k3=pi.getch();pi.putch(pj.getch();pj.putch(k3);k4=pi.geten();pi.puten(pj.geten();pj.puten(k4);k5=pi.getma();pi.putma(pj.getma();pj.putma(k5);k6=pi.getco();pi.putco(pj.getco();pj.putco(k6);else continue; /* void search(studen
14、t *p,int Cl) /查某班级的成绩,是按学号顺序排 int k8=find(p,Cl);lank(p,Cl);if(k8=N) coutendl没有这个班:endl;elsecout班级setw(6)学号setw(8)姓名setw(10)语文setw(11)英语setw(8)数学setw(9)C+程序设计setw(8)总分setw(9)平均分endl;for(int i=0;iN;i+) /返回排序后的班的学生成绩 if(pi.getcl()=Cl)int A1;float A2;A1=sum(pi);A2=float(A1)/4;pi.putout();coutsetw(8)A1se
15、tw(9)A2endl; /* void change(student *p,int Cl,int Nu,char *Na) /修改成绩 int a=find(p,Cl,Nu);int C,B1,B2,B3,B4;if(a=N) coutendl没有这个人的资料:endl; else coutendl改语文请输入1,改英语请输入2,改数学请输入3,改C+程序设计请输入4,大于一科请输入5: C; switch(C) case 1:coutendlendl原来的值为:pa.getch()endl; coutB1;pa.putch(B1);coutendl结果是:endl;cout班级setw(6
16、)学号setw(8)姓名setw(10)语文setw(10)英语setw(10)数学setw(8) C+程序设计endl;pa.putout();coutendlendl;break;case 2:coutendlendl原来的值为:pa.geten()endl;coutB1;pa.puten(B1); coutendl结果是:endl;cout班级setw(8)学号setw(8)姓名setw(10)语文setw(10)英语setw(10)数学setw(8)C+程序设计endl; pa.putout();coutendlendl; break;case 3:coutendlendl原来的值为:
17、pa.getma()endl; coutB1;pa.putma(B1); coutendl结果是:endl; cout班级setw(8)学号setw(8)姓名setw(10) 语文setw(10)英语setw(10)数学setw(8)C+程序设计endl; pa.putout();coutendlendl; break;case 4:coutendlendl原来的值为:pa.getco()endl;coutB1;pa.putco(B1); coutendl结果是:endl; cout班级setw(8)学号setw(8)姓名setw(10)语文setw(10)英语setw(10)数学setw(8
18、)C+程序设计endl;pa.putout();coutendlendl; break;case 5:coutendlendl原来的值分别为:endl 语文:pa.getch()endl英语:pa.geten()endl 数学:pa.getma()endl C+程序设计:pa.getco()endl; coutendl; coutB1; coutB2; coutB3; coutB4; pa.putfour(B1,B2,B3,B4); coutendl结果是:endl; cout班级setw(8)学号setw(8)姓名setw(10) 语文setw(10)英语setw(10)数学setw(8)
19、C+程序设计endl; pa.putout();coutendl; break; /* void rank(student *p,int Cl) /通过比较来排名,查看某班的成绩 int k1,k2,k3,k4,k5,k6,k8;char *k7; lank(p,Cl); for(int i=0;iN;i+)for(int j=i+1;jN;j+)if(pi.getcl()=Cl&pj.getcl()=Cl&sum(pi)=sum(pj)/用学号来排序后,通过总分来比较排名 k1=pi.getcl();pi.putcl(pj.getcl();pj.putcl(k1); k7=new chars
20、trlen(pi.getna()+1; strcpy(k7,pi.getna();pi.putna(pj.getna();pj.putna(k7); k2=pi.getnu();pi.putnu(pj.getnu();pj.putnu(k2); k3=pi.getch();pi.putch(pj.getch();pj.putch(k3); k4=pi.geten();pi.puten(pj.geten();pj.puten(k4); k5=pi.getma();pi.putma(pj.getma();pj.putma(k5); k6=pi.getco();pi.putco(pj.getco()
21、;pj.putco(k6);else continue;k8=find(p,Cl);if(k8=N) coutendl没有这个班:endl;else cout名次setw(6)班级setw(8)学号setw(8)姓名setw(10) 语文setw(9)英语setw(10)数学setw(8) C+程序设计setw(8)总分setw(9)平均分endl; int j1=0;for(i=0;iN;i+) /返回通过总分排序后的学生成绩 if(pi.getcl()=Cl)int A1;float A2; j1+; A1=sum(pi);A2=float(A1)/4;coutj1setw(8); pi.
22、putout();coutsetw(7)A1setw(9)A2endl; /888888888888888888888888888888888888888888888888888888888888 void fun(student *pupil) for(int j=0;j+) /对系统的操作 coutendl查询成绩请输入2;修改成绩请输入3;退出请按其它键;a0; cout*endl; if(strcmp(a0,3)=0) /修改成绩for(int i=0;i+)coutendlendlp3; coutp4; coutp2; change(pupil,p3,p4,p2); coutendl
23、b0; if(strcmp(b0,Y)=0|strcmp(b0,y)=0) continue; else break;cout*;else if(strcmp(a0,2)=0) /查询成绩for(int i=0;i+) coutendl按班级和姓名查请按1,按班级和学号查按2, 按姓名和学号查按3endl查某一班的成绩请按4, 查某科的平均分请按5, 查排名按6:E2; switch(E2) case 1:for(i=0;i+)coutendlE4;coutE5; search(pupil,E4,E5); coutendlt3; if(strcmp(t3,Y)=0|strcmp(t3,y)=0
24、) continue; else break;break;case 2:for(i=0;i+) coutendlE4;coutE3; search(pupil,E4,E3); coutendlt2; if(strcmp(t2,Y)=0|strcmp(t2,y)=0) continue; else break;break;case 3:for(i=0;i+) coutendlE3; coutE5; search(pupil,E5,E3); coutendlt1; if(strcmp(t1,Y)=0|strcmp(t1,y)=0) continue; else break;break;case 4
25、:for(i=0;i+) coutendlE3;search(pupil,E3); coutendlm1; if(strcmp(m1,Y)=0|strcmp(m1,y)=0) continue; else break;break;case 5: for(i=0;i+)coutendl请输入你要查找的班和科目:endlendl; char h110;int h2; couth1; couth2; double a3=average(pupil,h1,h2); if(a3=0) coutendl没有你要查找的内容!endl; else couth1的平均分为:a3endl; coutendl还要查
26、科目平均分吗?,如果还要请输Y否则按其他键:h3; if(strcmp(h3,Y)=0|strcmp(h3,y)=0)continue; else break; break; case 6:for(i=0;i+) coutendlu0; rank(pupil,u0); coutendlu1; if(strcmp(u1,Y)=0|strcmp(u1,y)=0) continue; else break; break;coutendlb2; if(strcmp(b2,Y)=0|strcmp(b2,y)=0) cout*; continue; else break;else break; coute
27、ndlendlb1;if(strcmp(b1,Y)=0|strcmp(b1,y)=0)cout*endl; continue;else break; /* void main() coutendlendlN; student *pupil=new studentN+10; /用动态数组自己设空间 char (*Name)10=new charN+1010; /用动态数组自己设空间 int *CL=new intN+10,*NU=new intN+10,*CH=new intN+10,*EN=new intN+10,*MA=new intN+10,*CO=new intN+10; for(int
28、 i=0;iN;i+) /成绩录入 coutendlendl第i+1位学生:endl; coutCLi; coutNUi; coutNamei; coutendlCHi; coutENi; coutMAi; coutCOi; pupili.putin(CLi,NUi,Namei,CHi,ENi,MAi,COi); coutendlendl; cout*; coutendl; coutu; /888888888888888888888888888888888888888888888888888888888888888 for(i=0;i+)if(strcmp(u,Y)=0|strcmp(u,y)
29、=0) /添加和删除char u03;coutu0;if(strcmp(u0,1)=0)int u1;coutu1; N=N+u1; for(i=u1;i0;i-)coutendlendl第N-i+1位学生:endl;coutCLN-i; coutNUN-i; coutNameN-i; coutendlCHN-i; coutENN-i; coutMAN-i; coutCON-i; pupilN-i.putin(CLN-i,NUN-i,NameN-i,CHN-i,ENN-i,MAN-i,CON-i); coutendlendl;else if(strcmp(u0,2)=0)coutu2; for(i=0;iu2;i+)cout请输入第i+1u3; cout请输入第i+1u4; /查某班级的成绩,是按学号顺序排 u5=find(pupil,u3,u4); lank(pupil,u3); k1=pupilu5.getcl();pupilu5.putcl(pupilN-1.getcl();pupilN-1.putcl(k1);