目录
1
一、需求分析
1、用数组存储学生信息,包括姓名学号,各科目成绩。
2、在用户输入成绩时,需要分别输入平时成绩和期末成绩,在程序的aver函数中计算平时成绩和期末成绩所占百分比,算出最终成绩,并且在退出程序时保存。 3、查询学生成绩支持用学号查询或者用姓名查询。
4、修改成绩界面可以选择各科目,修改时要求分别输入平时成绩和期末成绩。
5、菜单选项可以查询并且显示各科优秀(大于90分)的学生和不及格(小于60分)的学生。 6、排名,把所有学生的最终成绩求和,按总分从大到小排序并且显示学生姓名学号总分。 7、各个科目平均分,每门科目的最终成绩相加除去学生人数。
8、退出并且保存用户输入,修改的数据,生成stu.dat,可以以记事本的方式打开查看学生成绩信息。
二、概要设计
1、程序结构较为简单,因此声名两个类:学生成绩类class score,学生信息类 class stu,前者处理学生成绩计算(求总分,排序,求平均分),后者完成学生信息输入查询和修改。
2、建立六个数组,分别存储姓名学号,四门科目,每门科目先通过平时成绩期末成绩,平时成绩百分比计算后放入各科目数组中。 3、查询学生信息时通过 int t=0;
int t=0;
for(;t 验证学生姓名,和 2 for(;t 验证学生学号,然后验证通过后显示学生信息和成绩。 4、输入学生成绩时通过 if(stusco[lo].getnumber()==stusco[i].getnumber()) { flag = 0; } 验证是否已经储存相同学号的学生,如果有,则显示信息添加失败。 三、详细设计 1、主函数 #include \"class.h\" #include \"head.h\" #include \"run.h\" void main() { run rd; int n; rd.load(); while(1) { system(\"cls\"); rd.menu(); cout<<\"请输入1~8的数字\"< 3 } } } case 1:rd.func1();break; case 2:rd.func2();break; case 3:rd.func3();break; case 4:rd.func4();break; case 5:rd.func5();break; case 6:rd.func6();break; case 7:rd.func7();break; case 8: rd.save(); exit(0); 2、录入函数 //录入成绩函数 void run::func1() { int m = f; int flag,lo; char p; i = f; do{ stusco[i].setstuscore(); flag = 1; for(lo=0;loif(stusco[lo].getnumber()==stusco[i].getnumber()) { } flag = 0; 4 } if(flag) { cout<<\"输入成功!\"< }while(p=='y' || p=='Y'); f = i; cout<<\"重复输入相同学号的学生,学生增加失败!\"< { int m = f; int k; cout<<\"===========[1]按姓名查询===========\"< cout<<\"请输入查询方式(1或者2)\"; cin>>k; { char n='y'; int u[10]; while (n=='y') { int j=0; cout<<\"请输入要查询的学生姓名:\"; 5 cin>>name; int t=0; for(;t { u[j]=t; j++; } if(j==0) { cout<<\"没有你要查询的学生的名字!\";//没有找到 cout<<\"退出请按n\"< if(n!='y')break; } for(int b=0;b \"< \"<<(int)stusco[t].getmath() <<\" \"<<(int)stusco[t].getchinese()<<\" \"<<(int)stusco[t].getcpp()< } else { t=u[b]; 6 语文 \"<<\" } } } } if(k==2) { char n='y'; while(n=='y') { int j=0; cout<<\"请输入要查询的学生的学号:\"; cin>>number; int t=0; for(;t cout<<\" 学号 \"<<\" 姓名 \"<<\" 英语 \"<<\" 数学 \"<<\" 语文 \"<<\" c++ \"< if(number!=stusco[t].getnumber()) { cout<<\"没有你要查询的学生!\"; cout<<\"退出请按n\"< 7 } } } } cin>>n; if(n!='y')break; f = m; 4、修改函数 void run::func3() { int m = f; int j=0,b[20]; int flag; char n='y'; while (n=='y') { cout<<\"请输入要修改成绩的学生学号:\"; cin>>number; flag=0; int d; for (int t=0;t do{ b[j]=t; cout<<\"请选择要修改的信息:\"< 8 if(d==1) { } else if(d==2) { cout<<\"请输入新的英语平时成绩:\"; cin>>english1; stusco[t].setenglish1(english1); cout<<\"请输入新的英语期末成绩:\"; cin>>english2; stusco[t].setenglish2(english2); cout<<\"请输入新的数学平时成绩:\"; cin>>math1; stusco[t].setmath1(math1); cout<<\"请输入新的数学期末成绩:\"; cin>>math2; stusco[t].setmath2(math2); } else if(d==3) { } else if(d==4) { cout<<\"请输入新的c++平时成绩:\"; cin>>cpp1; cout<<\"请输入新的语文平时成绩:\"; cin>>chinese1; stusco[t].setchinese1(chinese1); cout<<\"请输入新的语文期末成绩:\"; cin>>chinese2; stusco[t].setchinese2(chinese2); 9 stusco[t].setcpp1(cpp1); cout<<\"请输入新的c++期末成绩:\"; cin>>cpp2; stusco[t].setcpp2(cpp2); } } 5、成绩管理函数 void run::func7() { int m = f; int sum1=0; int sum2=0; int sum3=0; int sum4=0; stusco[t].aver(); flag=1; j++; }while(d<1||d>5); if (flag==0) { } else { } } cout<<\"是否继续修改(继续请按y,退出请按n)\"; cin>>n; cout<<\"没有您要找的学生!\"< f = m; 10 int i; if(m==0) { f = m; return; } for (i=0;i cout<<\"英语的平均分是\"< void run::func4() { int m = f; cout<<\"显示各门分数大于90分的优秀学生信息:\"< 语文\"<<\" c++ \"< stusco[i].getcpp()<90)continue; cout< int m = f; cout<<\"显示各门分数小于60分的不及格学生的信息:\"< cout<<\" 学号 \"<<\" 姓名 \"<<\" 英语 \"<<\" 数学 \"<<\" 语文\"<<\" c++ \"< stusco[i].getcpp()>60)continue; cout< system(\"pause\"); f = m; 12 void run::func6() { int m = f; int a,b; if(m==0) { f = m; return; } float zcj[20],ttz; char xsm[20][20],ttx[20]; int num[20],ttn; for(int i=0;i 13 } } } } } num[a] = num[b]; num[b] = ttn; strcpy(ttx,xsm[a]); strcpy(xsm[a],xsm[b]); strcpy(xsm[b],ttx); cout<<\"按总分成绩排名:\"< cout<<\" \"< 1、在排序的时候姓名学号等信息要和成绩信息一起排序,不然会导致信息错误。 2、在exit的函数中加入save函数,退出前保存输入信息和修改的信息。 五、用户手册 1、本程序为控制台程序,具有简单的界面。 2、初次进入本程序可以输入学生相关信息(输入相同学号无效),正常退出以正常保存所输入的信息。 3、各项功能可自行选择菜单完成。 4、保存的学生信息会保存在程序目录下,可以用记事本打开查看。 六、测试数据 14 七、附 录 完整程序 #include 15 class run; class Person; class Score; class stuscore; using namespace std; #include \"head.h\" //声明抽象类Person class Person { public: Person(){} ~Person(){} void setnumber(int num){number=num;} void setname(char *n){strcpy(name,n);} int getnumber(){return number;} char *getname(){return name;} void setstudent() //输入函数 { cout<<\"请输入学生学号:\"; cin>>number; cout<<\"请输入学生姓名;\"; cin>>name; } protected: char name[20]; //学生姓名 int number; //学生学号 friend class run; }; //声明成绩类 16 class Score { friend class run; public: Score(){}; ~Score(){}; void setenglish(float E){english=E;} void setenglish1(float E1){english1=E1;} void setenglish2(float E2){english2=E2;} void setmath(float M){math=M;} void setmath1(float M1){math1=M1;} void setmath2(float M2){math2=M2;} void setchinese(float C){chinese=C;} // E=E1*s+E2*(1-s) s=0.3 void setchinese1(float C1){chinese1=C1;} void setchinese2(float C2){chinese2=C2;} void setcpp(float cpp); float getenglish(){return english;} float getenglish1(){return english1;} float getenglish2(){return english2;} float getmath(){return math;} float getmath1(){return math1;} float getmath2(){return math2;} float getchinese(){return chinese;} float getchinese1(){return chinese1;} float getchinese2(){return chinese2;} float getcpp(){return cpp;} float getcpp1(){return cpp1;} float getcpp2(){return cpp2;} void setscore() //输入函数 17 { cout<<\"请输入英语平时成绩:\"; cin>>english1; cout<<\"请输入英语期末成绩:\"; cin>>english2; cout<<\"请输入数学平时成绩:\"; cin>>math1; cout<<\"请输入数学期末成绩:\"; cin>>math2; cout<<\"请输入语文平时成绩:\"; cin>>chinese1; cout<<\"请输入语文期末成绩:\"; cin>>chinese2; cout<<\"请输入c++平时成绩:\"; cin>>cpp1; cout<<\"请输入c++期末成绩:\"; cin>>cpp2; aver(); } void aver(){ english=english1*0.3+english2*0.7; chinese=chinese1*0.3+chinese2*0.7; math=math1*0.3+math2*0.7; cpp=cpp1*0.3+cpp2*0.7; } void setcpp1(float cpp1){} void setcpp2(float cpp2){} 18 protected: float english; float english1; float english2; float math; float math1; float math2; float chinese; float chinese1; float chinese2; float cpp; float cpp1; float cpp2; }; //声明学生成绩信息类 class stuscore:public Person,public Score //多重继承 { public: stuscore(){}; ~stuscore(){}; /*void printf1(){cout<<\" \"< { cout<<\" \"< setstudent(); setscore(); } }; #include \"head.h\" class run { stuscore stusco[20]; int f; int i; int number; char name[20]; float english1; float english2; float math1; float math2; float chinese1; \"< void menu(); void load(); void save(); void func1(); void func2(); void func3(); void func4(); void func5(); void func6(); void func7(); }; #include \"class.h\" #include \"head.h\" #include \"run.h\" void run::load() { int m = f; int i = 0; ifstream rf; rf.open(\"stu.dat\ if(!rf.is_open()) { f = 0; return; } while(!rf.eof()) 21 { rf>>stusco[i].name; rf>>stusco[i].number; rf>>stusco[i].chinese; rf>>stusco[i].english; rf>>stusco[i].math; rf>>stusco[i].cpp; stusco[i].chinese1 = stusco[i].chinese; stusco[i].chinese2 = stusco[i].chinese; stusco[i].english1 = stusco[i].english; stusco[i].english2 = stusco[i].english; stusco[i].math1 = stusco[i].math; stusco[i].math2 = stusco[i].math; stusco[i].cpp1 = stusco[i].cpp; stusco[i].cpp2 = stusco[i].cpp; if(rf.eof())break; i++; } f = i; } void run::save() { int m = f; int i = 0; ofstream wf; wf.open(\"stu.dat\ if(!wf.is_open()) { return; } 22 for(i=0;i //主菜单函数 void run::menu() { cout<<\"欢迎使用学生信息管理系统!\"< cout<<\"****** 5.不及格学生信息 ******\"< stusco[i].setstuscore(); flag = 1; for(lo=0;loif(stusco[lo].getnumber()==stusco[i].getnumber()) { flag = 0; 24 } } if(flag) { cout<<\"输入成功!\"< }while(p=='y' || p=='Y'); f = i; } //成绩查询函数 void run::func2() { int m = f; int k; cout<<\"===========[1]按姓名查询===========\"< if(k==1) { char n='y'; int u[10]; 25 while (n=='y') { int j=0; cout<<\"请输入要查询的学生姓名:\"; cin>>name; int t=0; for(;t { cout<<\"没有你要查询的学生的名字!\";//没有找到 cout<<\"退出请按n\"< for(int b=0;b cout<<\" 学号 \"<<\" 姓名 \"<<\" 英语 \"<<\" 数学 \"<<\" 语文 \"<<\" c++ \"< <<\" \"<<(int)stusco[t].getchinese()<<\" \"<<(int)stusco[t].getcpp()< 26 else { t=u[b]; } } } } if(k==2) { char n='y'; while(n=='y') { int j=0; cout<<\"请输入要查询的学生的学号:\"; cin>>number; int t=0; for(;t cout<<\" 学号 \"<<\" 姓名 \"<<\" 英语 \"<<\" 数学 \"<<\" 语文 \"<<\" c++ \"< 27 if(number!=stusco[t].getnumber()) { cout<<\"没有你要查询的学生!\"; cout<<\"退出请按n\"< if(n!='y')break; } } f = m; } //修改信息函数 void run::func3() { int m = f; int j=0,b[20]; int flag; char n='y'; while (n=='y') { cout<<\"请输入要修改成绩的学生学号:\"; cin>>number; flag=0; int d; for (int t=0;t 28 do{ b[j]=t; cout<<\"请选择要修改的信息:\"< cout<<\"请输入新的英语平时成绩:\"; cin>>english1; stusco[t].setenglish1(english1); cout<<\"请输入新的英语期末成绩:\"; cin>>english2; stusco[t].setenglish2(english2); } else if(d==2) { cout<<\"请输入新的数学平时成绩:\"; cin>>math1; stusco[t].setmath1(math1); cout<<\"请输入新的数学期末成绩:\"; cin>>math2; stusco[t].setmath2(math2); } else if(d==3) { cout<<\"请输入新的语文平时成绩:\"; cin>>chinese1; 29 f = m; stusco[t].setchinese1(chinese1); cout<<\"请输入新的语文期末成绩:\"; cin>>chinese2; stusco[t].setchinese2(chinese2); } else if(d==4) { cout<<\"请输入新的c++平时成绩:\"; cin>>cpp1; stusco[t].setcpp1(cpp1); cout<<\"请输入新的c++期末成绩:\"; cin>>cpp2; stusco[t].setcpp2(cpp2); } stusco[t].aver(); flag=1; j++; }while(d<1||d>5); if (flag==0) { cout<<\"没有您要找的学生!\"< cout<<\"是否继续修改(继续请按y,退出请按n)\"; cin>>n; } } 30 } void run::func7() { int m = f; int sum1=0; int sum2=0; int sum3=0; int sum4=0; int i; if(m==0) { f = m; return; } for (i=0;i sum1/=m; sum2/=m; sum3/=m; sum4/=m; cout<<\"英语的平均分是\"< system(\"pause\"); f = m; } void run::func4() { int m = f; cout<<\"显示各门分数大于90分的优秀学生信息:\"< cout< void run::func5() { int m = f; cout<<\"显示各门分数小于60分的不及格学生的信息:\"< for(int i=0;i cout< void run::func6() { int m = f; int a,b; if(m==0) { f = m; return; } float zcj[20],ttz; char xsm[20][20],ttx[20]; int num[20],ttn; for(int i=0;i zcj[i] += stusco[i].getchinese(); zcj[i] += stusco[i].getmath(); 33 zcj[i] += stusco[i].getenglish(); zcj[i] += stusco[i].getcpp(); for(a=0;a ttz = zcj[a]; zcj[a] = zcj[b]; zcj[b] = ttz; ttn = num[a]; num[a] = num[b]; num[b] = ttn; strcpy(ttx,xsm[a]); strcpy(xsm[a],xsm[b]); strcpy(xsm[b],ttx); } } } } cout<<\"按总分成绩排名:\"< void main() 34 \"< system(\"cls\"); rd.menu(); cout<<\"请输入1~8的数字\"< case 1:rd.func1();break; case 2:rd.func2();break; case 3:rd.func3();break; case 4:rd.func4();break; case 5:rd.func5();break; case 6:rd.func6();break; case 7:rd.func7();break; case 8: rd.save(); exit(0); } } } 35 因篇幅问题不能全部显示,请点此查看更多更全内容