您的当前位置:首页正文

c++课设实验报告——学生信息管理系统

来源:筏尚旅游网
一、需求分析………………………………………………02 二、概要设计………………………………………………02 三、详细设计………………………………………………03 四、调试分析………………………………………………14 五、用户手册………………………………………………14 六、测试数据………………………………………………14 七、附 录……………………………………………………15

目录

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(;tif(strcmp(name,stusco[t].getname())==0) { u[j]=t; j++; }

验证学生姓名,和

2

for(;tif(number==stusco[t].getnumber())

验证学生学号,然后验证通过后显示学生信息和成绩。 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的数字\"<>n; cin.sync(); cin.clear(); switch(n) {

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<<\"输入成功!\"<cout<<\"继续输入请按Y,退出请按n\"<>p;

}while(p=='y' || p=='Y'); f = i;

cout<<\"重复输入相同学号的学生,学生增加失败!\"<3、查询函数 //成绩查询函数 void run::func2()

{

int m = f; int k;

cout<<\"===========[1]按姓名查询===========\"<if(k==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(;tif(strcmp(name,stusco[t].getname())==0)

{ u[j]=t;

j++; } if(j==0)

{ cout<<\"没有你要查询的学生的名字!\";//没有找到 cout<<\"退出请按n\"<>n;

if(n!='y')break;

} for(int b=0;bcout<<\" 学号 \"<<\" 姓名 \"<<\" 英语 \"<<\" 数学 \"<<\" c++ \"<cout<<\" \"<<(int)stusco[t].getnumber()<<\"

\"<<<\" \"<<(int)stusco[t].getenglish()<<\"

\"<<(int)stusco[t].getmath()

<<\" \"<<(int)stusco[t].getchinese()<<\"

\"<<(int)stusco[t].getcpp()<>n;

} else {

t=u[b];

6

语文 \"<<\"

}

}

}

}

if(k==2) {

char n='y'; while(n=='y') {

int j=0;

cout<<\"请输入要查询的学生的学号:\"; cin>>number; int t=0; for(;tif(number==stusco[t].getnumber()) {

cout<<\" 学号 \"<<\" 姓名 \"<<\" 英语 \"<<\" 数学 \"<<\" 语文 \"<<\" c++

\"<cout<<\" \"<<<\" \"<\"<}

if(number!=stusco[t].getnumber())

{ cout<<\"没有你要查询的学生!\"; cout<<\"退出请按n\"<cout<<\"是否继续查询(继续按y,退出按n)\"<>n; break;

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;tif(number==stusco[t].getnumber())

do{

b[j]=t;

cout<<\"请选择要修改的信息:\"<>d;

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<<\"没有您要找的学生!\"<>n;

f = m;

10

int i; if(m==0) { f = m; return;

}

for (i=0;isum1/=m; sum2/=m; sum3/=m; sum4/=m;

cout<<\"英语的平均分是\"<}

void run::func4() { int m = f;

cout<<\"显示各门分数大于90分的优秀学生信息:\"<cout<<\" 学号 \"<<\" 姓名 \"<<\" 英语 \"<<\" 数学 \"<<\" 11

语文\"<<\" c++ \"<for(int i=0;iif(stusco[i].getchinese()<90 || stusco[i].getmath()<90 || stusco[i].getenglish()<90 ||

stusco[i].getcpp()<90)continue;

cout<\"<void run::func5() {

int m = f;

cout<<\"显示各门分数小于60分的不及格学生的信息:\"<system(\"pause\"); f = m;

cout<<\" 学号 \"<<\" 姓名 \"<<\" 英语 \"<<\" 数学 \"<<\" 语文\"<<\" c++ \"<for(int i=0;iif(stusco[i].getchinese()>60 || stusco[i].getmath()>60 || stusco[i].getenglish()>60 ||

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;izcj[i] += stusco[i].getchinese(); zcj[i] += stusco[i].getmath(); zcj[i] += stusco[i].getenglish(); zcj[i] += stusco[i].getcpp(); for(a=0;attn = num[a];

13

}

}

}

}

}

num[a] = num[b]; num[b] = ttn; strcpy(ttx,xsm[a]); strcpy(xsm[a],xsm[b]); strcpy(xsm[b],ttx);

cout<<\"按总分成绩排名:\"<system(\"pause\"); f = m;

cout<<\" \"<四、调试分析

1、在排序的时候姓名学号等信息要和成绩信息一起排序,不然会导致信息错误。 2、在exit的函数中加入save函数,退出前保存输入信息和修改的信息。

五、用户手册

1、本程序为控制台程序,具有简单的界面。

2、初次进入本程序可以输入学生相关信息(输入相同学号无效),正常退出以正常保存所输入的信息。 3、各项功能可自行选择菜单完成。

4、保存的学生信息会保存在程序目录下,可以用记事本打开查看。

六、测试数据

14

七、附 录

完整程序

#include #include #include #include #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<<\" \"<19

{

cout<<\" \"<<<\" \"<<<\" \"<void setstuscore() {

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;

\"<float chinese2; float cpp1; float cpp2; public:

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;iwf<//主函数

//主菜单函数 void run::menu() {

cout<<\"欢迎使用学生信息管理系统!\"<cout<<\"**********************************************************************\"<cout<<\"**********************************************************************\"<cout<<\"****** 1.学生成绩录入 ******\"<cout<<\"****** 2.学生成绩查询 ******\"<cout<<\"****** 3.学生成绩修改 ******\"<cout<<\"****** 4.优秀学生信息 ******\"<23

cout<<\"****** 5.不及格学生信息 ******\"<cout<<\"****** 6.学生总成绩排名 ******\"<cout<<\"****** 7.各科目平均分 ******\"<cout<<\"****** 8.退出系统 ******\"<cout<<\"**********************************************************************\"<cout<<\"**********************************************************************\"<//录入成绩函数 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;

24

} } if(flag) {

cout<<\"输入成功!\"<cout<<\"重复输入相同学号的学生,学生增加失败!\"<cout<<\"继续输入请按Y,退出请按n\"<>p;

}while(p=='y' || p=='Y'); f = i; }

//成绩查询函数 void run::func2() { int m = f; int k;

cout<<\"===========[1]按姓名查询===========\"<>k;

if(k==1) {

char n='y'; int u[10];

25

while (n=='y') { int j=0;

cout<<\"请输入要查询的学生姓名:\"; cin>>name; int t=0;

for(;tif(strcmp(name,stusco[t].getname())==0) { u[j]=t; j++; } if(j==0)

{ cout<<\"没有你要查询的学生的名字!\";//没有找到 cout<<\"退出请按n\"<>n; if(n!='y')break; }

for(int b=0;bif(j<2) { t=u[b];

cout<<\" 学号 \"<<\" 姓名 \"<<\" 英语 \"<<\" 数学 \"<<\" 语文 \"<<\" c++ \"<cout<<\" \"<<(int)stusco[t].getnumber()<<\" \"<<<\" \"<<(int)stusco[t].getenglish()<<\" \"<<(int)stusco[t].getmath()

<<\" \"<<(int)stusco[t].getchinese()<<\" \"<<(int)stusco[t].getcpp()<cout<<\"是否继续查询(继续按y,退出按n)\"<>n; }

26

else {

t=u[b]; } } } }

if(k==2) {

char n='y'; while(n=='y') {

int j=0;

cout<<\"请输入要查询的学生的学号:\"; cin>>number; int t=0; for(;tif(number==stusco[t].getnumber()) {

cout<<\" 学号 \"<<\" 姓名 \"<<\" 英语 \"<<\" 数学 \"<<\" 语文 \"<<\" c++ \"<cout<<\" \"<cout<<\"是否继续查询(继续按y,退出按n)\"<>n; break; } }

27

if(number!=stusco[t].getnumber())

{ cout<<\"没有你要查询的学生!\"; cout<<\"退出请按n\"<>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;tif(number==stusco[t].getnumber())

28

do{

b[j]=t;

cout<<\"请选择要修改的信息:\"<cout<<\"请选择1~4之间的数字:\"; cin>>d; if(d==1) {

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<<\"没有您要找的学生!\"<>n; } else {

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;isum1+=stusco[i].english; sum2+=stusco[i].math; sum3+=stusco[i].chinese; sum4+=stusco[i].cpp; }

sum1/=m; sum2/=m; sum3/=m; sum4/=m;

cout<<\"英语的平均分是\"<31

system(\"pause\"); f = m; }

void run::func4() {

int m = f;

cout<<\"显示各门分数大于90分的优秀学生信息:\"<cout<<\" 学号 \"<<\" 姓名 \"<<\" 英语 \"<<\" 数学 \"<<\" 语文\"<<\" c++ \"<for(int i=0;iif(stusco[i].getchinese()<90 || stusco[i].getmath()<90 || stusco[i].getenglish()<90 || stusco[i].getcpp()<90)continue;

cout<\"<system(\"pause\"); f = m; }

void run::func5() {

int m = f;

cout<<\"显示各门分数小于60分的不及格学生的信息:\"<cout<<\" 学号 \"<<\" 姓名 \"<<\" 英语 \"<<\" 数学 \"<<\" 语文\"<<\" c++ \"<32

for(int i=0;iif(stusco[i].getchinese()>60 || stusco[i].getmath()>60 || stusco[i].getenglish()>60 || stusco[i].getcpp()>60)continue;

cout<\"<system(\"pause\"); f = m; }

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;inum[i] = stusco[i].getnumber(); strcpy(xsm[i],stusco[i].getname()); zcj[i] = 0;

zcj[i] += stusco[i].getchinese(); zcj[i] += stusco[i].getmath();

33

zcj[i] += stusco[i].getenglish(); zcj[i] += stusco[i].getcpp(); for(a=0;afor(b=a+1;bif(zcj[a] < zcj[b]) {

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<<\"按总分成绩排名:\"<cout<<\"姓名 学号 成绩\"<cout<<\" \"<system(\"pause\"); f = m; }

void main()

34

\"<run rd; int n; rd.load(); while(1) {

system(\"cls\"); rd.menu();

cout<<\"请输入1~8的数字\"<>n; cin.sync(); cin.clear(); switch(n) {

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

因篇幅问题不能全部显示,请点此查看更多更全内容