cdl学生成绩管理系统编码日记.docx
《cdl学生成绩管理系统编码日记.docx》由会员分享,可在线阅读,更多相关《cdl学生成绩管理系统编码日记.docx(28页珍藏版)》请在冰豆网上搜索。
cdl学生成绩管理系统编码日记
2009届软件学院软件工程+电子商务1班程道雷
学号:
200921101101佃
第一阶段:
选择课题的阶段,刚开始老师布置下来大作业,一下子感觉到500行那么多,
不知道写什么才能写到500行,尝试了多种程序的编写,但结果都不尽如人意,最后听到三
班的张兄弟说要写一个图书馆的管理系统,我一下子就来了想法,想到写一个学生的成绩的
管理系统。
第二阶段:
我开始着手进行代码的编写,因为平时用的更多的是面向过程的程序,所以
刚开始写的时候就出现了好多问题目,比如说在继承的时候,有些调用就搞混了,这个时候
我写了几个小类一个大类,小类是s_class,math,english,it,chinese大类是STUDENT,下面具体把我的这一阶段的思路讲讲吧。
这个时候我的程序一开始遇到一个难题:
1就是怎么用类和对像来存储这么多的数据呢?
刚开始有尝试过对像数组之类的东西。
但是写好一段较完整的代码后怎么编译都通不过,
后来实现是没有办法,就重新拿起课本来看,看就看到上面有一首程序中是用类中的成员函
数和数据成员的组合来实现这个存储的,我一下子恍然大悟,一下子就把输入的程序写了出
来,但是编译的错误特别多,没有办法,只有一个一个地改了,把它给调试出来了。
下面是这什么编译的比较重要的代码:
classstudent:
publics_class‘publicmath,publicenglish,publicit,publicchinese{
public:
////////数据都是从这个函数中输入的
charname[81][81];
doublesum[81];
charnumber[81][20];
voidgetdata(intn)
{
doublescore;
intbanjii;
charxb;
for(inti=1;i<=n;i++)
{
sum[i]=0;
cout<<"请输入第"<
";
cin>>banjii;
s_class:
:
getdata(banjii,i);
/*
voidgetdata(intbj,inti)
{banji[i]=bj;}
intdisplay(inti)
{returnbanji[i];}
*/
cout<<"请输入学生的学号:
cin»number[i];
cout<<"请输入学生的名字:
";
cin»name[i];
cout<<"请输入学生的性别(f/m):
";
cin>>xb;
people:
:
getdata(xb,i);
cout<<"请输入数学的分数:
";
cin>>score;
sum[i]+=score;
math:
:
getdata(score,i);
cout<<"请输入英语的分数:
";
cin>>score;
sum[i]+=score;
english:
:
getdata(score,i);
cout<<"请输入IT的分数:
";
cin>>score;
sum[i]+=score;
it:
:
getdata(score,i);
cout<<"请输入语文的分数:
";
cin>>score;
sum[i]+=score;
chinese:
:
getdata(score,i);
}
}
voiddisplay1(intn)
{///用来排序的(后来编译成功运行时,才知道这个根本实现不了排序)
doublea,b,c,d,f,e,g,h,k,w,su;
intbanj,banjii;
charxh[20];〃学号
charxm[20];//姓名
charse,se1;//性别
for(inti=1;i<=n_1;i++)
for(intj=i+1;j<=n;j++)
{
if(sum[i]>sum[j])
{
su=sum[i];
sum[i]=sum[j];
sum[j]=su;
/////changethesum;
strcpy(xm,name[i]);
strcpy(name[i],name[j]);strcpy(name[j],xm);
/////changethenamestrcpy(xh,number[i]);
strcpy(number[i],number[j]);strcpy(number[j],xh);
///changethenumbera=math:
:
display(i);b=math:
:
display(j);math:
:
getdata(b,i);math:
:
getdata(a,j);
///changethescoreofmathc=it:
:
display(i);
d=it:
:
display(j);
it:
:
getdata(d,i);
it:
:
getdata(c,j);
////////changethescoreofit;
e=english:
:
display(i);f=english:
:
display(j);
english:
:
getdata(f,i);
english:
:
getdata(e,j);
/////changethescoreofenglish;g=chinese:
:
display(i);
h=chinese:
:
display(j);
chinese:
:
getdata(h,i);
chinese:
:
getdata(g,j);
/////changethescoreofchinese;se=people:
:
display(i);se1=people:
:
display(j);people:
:
getdata(se1,j);people:
:
getdata(se,i);
////changethesex;banj=s_class:
:
display(i);banjii=s_class:
:
display(j);s_class:
:
getdata(banj,j);s_class:
:
getdata(banjii,i);
///changethebanji;
}
voiddisplay2(intn)
{III这个函数是用来输出每个同学的信息的
cout<<"class:
\tname:
\tnumber:
\tmath:
\tenglish:
\tlT:
\tchinese:
\tsum:
"<for(inti=1;i<=n;i++)
{
/*chart=people:
:
display(i);
if(t=='f)cout<<"女";
elsecout<<"男";*/
cout<:
display(i)<<"\t"<<<"\t"<:
display(i)
<<"\t"<:
display(i)<<"\t\t"<:
display(i)
<<"\t"<:
display(i)<<"\t\t"<}
}
};
intmain()
{
students;
intnum;
cout<<"请输入学生的人数:
";
cin»num;
cout<<"theNO.ofthestudentis:
"<s.getdata(num);
II输入同学们的成绩
s.display1(num);
II对同学们的成绩按总分从大到小进行排序
s.display2(num);
II输出排序后的同学们的成绩列表
intnn;
}
第三阶段;这个阶段,我对程序的功能方面进行了相当的完善,主要是想开始实现这个
小系统的部分功能了,这阶段主要是在查找,修改,和计算方面的做了一些查试。
1、还有个问题目就是有些功能的实现特别原始,就拿修改分数来说吧,这个时候我采用的还是把改后的某门分数和总分一起输进去。
后来解决我是在switch中设计了自动计算的代码,就达到了一定的智能化,也就是你只要输入哪门科目改为多少分,他们就会自己生成新的总分了。
2、上图就是这个阶段遇到的又一个错误,函数太多,弄的乱七八糟了,连参数个数都搞乱
了。
voidstudent:
:
displayS(doublefenfdoubleweirintn){
■_.■r*n>U・h■F-Ri■'・1>L■FFTSlr-i-r-
riF
ileLog|
:
Debug|虱FindResults遛Dose|
|_Messajge
7prototypefor'voidstudent:
:
d.:
play5(doubleJdouble,mt)'doesnotmatchanyin"sludent1
3voidstudent:
.dhsplaySldoublt,mt)
vuxuu±spxciy4ruvuu丄tsyd±xenrjlh
voidstudent:
:
display3(char*s,intn)
{Illi/////huntforsomeone
inti,t;
for(i=1;i<=n;i++)
{
if(strcmp(name[i],s)==0)
{t=i;break;}
}
cout<<"class:
\tname:
\tnumber:
\tmath:
\tenglish:
\tlT:
\tchinese:
\tsum:
"</*chartt=people:
:
display(i);
if(tt=='f)cout<<"女";
elsecout<<"男";*///对英文输入汉字输出作的改进
cout<:
display(i)<<"\t"<<<"\t"<:
display(i)
<<"\t"<:
display(i)<<"\t\t"<:
display(i)
<<"\t"<:
display(i)<<"\t\t"<}
voidstudent:
:
display4(char*s,doublegaifen,intk,doubled,intn)〃
{/////////changethescore
inti,t;
for(i=1;i<=n;i++)
{
if(strcmp(name[i],s)==0)
{t=i;break;}
}
switch(k)///主要是用于转为哪一科目
case1:
math:
:
getdata(gaifen,t);sum[t]=d;break;
case2:
it:
:
getdata(gaifen,t);sum[t]=d;break;
case3:
chinese:
:
getdata(gaifen,t);sum[t]=d;break;
case4:
english:
:
getdata(gaifen,t);sum[t]=d;break;
}
}
voidstudent:
:
display5(doublefen,doublewei,intn)
{////算通过某分数段的通过率。
cout<<"class:
\tname:
\tnumber:
\tmath:
\tenglish:
\tlT:
\tchinese:
\tsum:
"<for(inti=1;i<=n;i++)
{
if(sum[i]>=fen&&sum[i]<=wei)
{++flag;
cout<:
display(i)<<"\t"<<<"\t"<:
display(i)
<<"\t"<:
display(i)<<"\t\t"<:
display(i)
<<"\t"<:
display(i)<<"\t\t"<}
}
cout<<"这个分数的通过率为:
"<}
////////////////////////////////////////////////////////////////////////////////////
intnn;
///1查找某个同学的信息:
1112,修改某个同学的信息;
///3在输入某个分数段就输出并算出通过率
///4
while(cin»nn)
{
if(nn==1)
{
charna[20];
cout<<"请输入要查找的人的姓名:
";
cin»na;
s.display3(na,num);
}
else
if(nn==2)
{
charsa[20];//要改的人的名字
intss;//改的科目
doublett,gg;//改后的分数是多少
cout<<"输入要改的人的名字:
";
cin>>sa;
cout<<"输入要改的人的改后的分数:
";
cin>>tt;
cout<<"输入要改的人的科目编号1math,2IT,3chinese,4english:
";
cin>>ss;
cout<<"输入修改后的总分:
";
cin>>gg;
//char*s,doublegaifen,intk,doubled
s.display4(sa,tt,ss,gg,num);
}
elseif(nn==3)
{
doublefen,wei;
cout<<"输入某个分数段就:
";
cin»fen>>wei;
if(fen>wei)
{
doublekk;
kk=fen;
fen=wei;
wei=kk;
}
s.display5(fen,wei,num);
}
}
return0;
}
第四阶段:
这个阶段终于把程序给运行起来了,便是出现了一个特别大的问题。
1、花了我好几十行的排序函数居然没能起到作用。
当时真的好想放弃这个函数的使用了,
因为这个函数我已经花了N长的时间了,没有办法,这个时候的就是怎么改进程序和增加
功能了,因为还没有到达500行呀。
2、这个时候也发现了好多其它的问题,比如说,当要搜索一个人的信息的时候,出来的信
息太少了。
后来我脆把姓名性别,总分排名,各科成绩全输出来了,加起来四百几十多行。
3、这中间遇到一个问题就是:
一次性把一个的人记录全输出来,是很难在一行间对齐的。
后来没有办法,我只好化成两部分分开输出了。
4、我还把性别用用英文输入转化为中文输出。
唯一的遗憾就是程序的排序没有实现。
但是加了好多功能。
查各个科目的平均分情况,查各科目的具体情况,而且还来了个小游戏。
5、加了一个SCHOOL类,只是想体现一现构造函数,用来构造这个系统的属性的。
6、加了一个进入系统的密码。
以下是这个阶段的代码:
#include
#include
classmath{
public:
inti;
doublescore[81];
voidgetdata(doubleval,inti)
{score[i]=val;}
doubledisplay(inti)
{returnscore[i];}
voidshow3(intn)〃增加的用来算各科目的平均分的。
{cout<<"输出所有人的IT成绩"<intg=0;
doublesum=0;
doubleav=0;
for(inti=1;i<=n;i++)
{cout<sum+=score[i];
if(score[i]>=60)g++;
}
cout<cout<<"这科的班级总分是:
"<cout<<"这科的平均分是:
"<cout<<"这科的及格率是:
"<<(double)g/*}
};
//////////////////////////////////////////////////////////////
voiddisplay3(char*s,intn);
voiddisplay4(char*s,doublegaifen,intk,doubled,intn);
voiddisplay5(doublefen,doublewei,intn);
voiddisplay6(intk,intn);
voiddisplay7(intn);
};
voidstudent:
:
display6(intk,intn)
{/////算各科目的平均分
doubleshuxue1=0;
doubleenglish1=0;
doubleIT仁0;
doublechinese1=0;
for(inti=1;i<=n;i++)
{
shuxue1+=math:
:
display(i);
english1+=english:
:
display(i);
IT1+=it:
:
display(i);
chinese1+=chinese:
:
display(i);
}
doublet;
if(t==1)
{
cout<<"数学平均分是:
";shuxue1/=n;cout<elseif(t==2)
{
cout<<"英语平均分是:
”;english1/=n;cout<}
elseif(t==3)
{cout<<"IT平均分是:
”;IT1/=n;cout<}
elseif(t==4)
{
cout<<"语文平均分是:
";chinese1/=n;cout<}
/*switch(k)
{
case1:
displaybreak;
case2:
cout<<"英语平均分是:
";t=english1/=n;break;
case3:
cout<<"英语平均分是:
";t=english1/=n;break;
case4:
cout<<"语文平均分是:
”;t=chinese1/=n;break;
}*/
}
intmain()
{
/*peoplepe;
s_classs_c;
mathma;
englishen;
chineseche;
itit1;
student*p;*/
students;
intnum;
charxiaoming[23];
schoolA(”华东交通大学");////为系统还增加了别的属性
cout<<"欢迎使用学生成绩管理系统"<cout<<"请您六位数输入密码"<charmima[20];
while(cin>>mima)
{
if(strcmp(mima,"123456")==0)
{
cout<<"欢迎进入!
"<}
else
cout<<"您输入的密码有误,请再输入一次!
"<}
cout<<"";
A.out();
cout<<"请输入学生的人数:
";
cin»num;
cout<<"theNO.ofthestudentis:
"<s.getdata(num);
//输入同学们的成绩
s.display1(num);
//对同学们的成绩按总分从大到小进行排序
s.display2(num);
//输出排序后的同学们的成绩列表
intnn;
///1查找某个同学的信息:
///2,修改某个同学的信息;
///3在输入某个分数段就输出并算出通过率
///4整个班的各科的平均分
///5各科成绩的具体情况;
//////6小游戏
while(cin»nn)
{
charye[5];
cout<<"您确定进入吗yesorno?
"<cin>>ye;
if(strcmp(ye,"yes")!
=O)continue;
if(nn==1)
{
charna[20];
cout<<"请输入要查找的人的姓名:
";
cin»na;
s.display3(na,num);
}
else
if(nn==2)
{
charsa[20];//要改的人的名字
intss;//改的科目
doublett,gg;//改后的分数是多少
cout<<"输入要改的人的名字:
";
cin>>sa;
cout<<"输入要改的人的改后的分数:
";
cin>>tt;
cout<<"输入要改的人的科目编号1math,2IT,3chinese,4english:
"
cin>>ss;
cout<<"输入修改后的总分:
";
cin>>gg;
//char*s,doublegaifen,intk,doubled
s.display4(sa,tt,ss,gg,num);
cout<<"是否输出修改后的数据(yes/no)"<chardd[4];
cin>>dd;
if(strcmp(dd,"yes")==0)s.display2(num);
}
else
if(nn==3)
{
doublefen,wei;
cout<<"输入某个分数段就:
";
cin»fen>>wei;
if(fen>wei)
{
doublekk;
kk=fen;
fen=wei;
wei=kk;
}
s.display5(fen,wei,num);
}
else
if(nn==4)
{
intct;
cin»ct;
s.display6(ct,num);
}
else
if(nn==5)
{
intsu;
cin>>su;
switch(su)
{
case1:
s.show3(num);break;//math
case2:
s.show4(num);break;〃english
case3:
s.show5(num);break;//it
case4:
s.show6(num)