标题:一个成绩管理系统自己写的,但是有一小点问题,向朋友们请教
只看楼主
师妃暄
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:805
专家分:107
注 册:2006-3-1
 问题点数:0 回复次数:2 
一个成绩管理系统自己写的,但是有一小点问题,向朋友们请教

这个程序没有明显的错误,可以编译连接,也可以进行正常的工作。但是有一点:屏幕上出现很多“-858993460”
不知道从那里来的,请高手指点一下,谢谢

在这里顺便谢谢下everajax ,帮我解决了“发牌程序”,呵呵。



#include<iostream>
#include<string>
using namespace std;

class students
{
private:
string name;
int number;
public:
void getdata()
{
cout<<"Input the student's NO:";
cin>>number;
cout<<"Input the student's name:";
cin>>name;
}
void showdata()
{
cout<<number<<" "<<name<<" ";
}
};

class mark:public students
{
public:
int English,Maths,Chinese,Total;
public:
void getdata()
{
students::getdata();
cout<<"Input the student's English score:";
cin>>English;
cout<<"Input the student's Chinese score:";
cin>>Chinese;
cout<<"Input the student's Maths score:";
cin>>Maths;
}
void sumdata()
{
Total=English+Maths+Chinese;
}
void showdata()
{
students::showdata();
cout<<English<<" "<<Chinese<<" "<<Maths<<" "<<Total<<endl;
}

};

int main()
{
int n=0;
int sumMaths=0;
int sumEnglish=0;
int sumChinese=0;
float Eaverage,Maverage,Caverage;
char choice;
const MAX=50;
mark stu[MAX];

do
{
stu[n].getdata();
sumMaths+=stu[n].Maths;
sumChinese+=stu[n].Chinese;
sumEnglish+=stu[n].English;
stu[n].sumdata();
n++;
done:
cout<<"Enter another?(y/n):";
cin>>choice;
if(choice!='y'&&choice!='n')
{
cout<<"Please choice y or n:"<<endl;
goto done;
}

}
while(choice!='n');

Eaverage=sumEnglish/n;
Maverage=sumMaths/n;
Caverage=sumChinese/n;

cout<<"number"<<" "<<"name"<<" "<<"English"<<" "<<"Chinese"<<" "<<"Maths"<<" "<<"Total"<<endl;

for(n=0;n<MAX;n++)
{
stu[n].showdata();
stu[n].sumdata();
}
cout<<"The average score of English is:"<<Eaverage<<endl;
cout<<"The average score of Maths is:"<<Maverage<<endl;
cout<<"The average score of Chinese is:"<<Caverage<<endl;

return 0;
}

搜索更多相关主题的帖子: 小点 系统 string 朋友 
2006-03-11 21:07
myajax95
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:30
帖 子:2978
专家分:0
注 册:2006-3-5
得分:0 
打印的时候你用的是for(n=0;n<MAX;n++)
这样把所有没赋值的学生都打印出来了。
简单的改应该写成for (int intStudentCount = 0; intStudentCount < n; intStudentCount++)
{
stu[intStudentCount].showdata(), stu[intStudentCount].sumdata();
}

另外前面输入学生成绩的时候为了防止溢出应将while(choice!='n');
改成while(choice != 'n' && n < MAX)

如果希望程序更结实一些,应该给students class 和mark class 加一个constructor.
students() : name(""), number(-1) {};
这样在showdata()的时候第一行你可以判断 如果number < 1,说明这个object还没有被输入过,就不打印了。

http://myajax95./
2006-03-12 00:57
师妃暄
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:805
专家分:107
注 册:2006-3-1
得分:0 
又是everajax,呵呵

根据你的提示,我明白了,我把原来的
for(n=0;n<MAX;n++)修改了一下。

重新定义了一个循环变量 j

for(j=0;j<n;j++)

这样就可以了。

另外你的建议while(choice != 'n' && n < MAX)非常好,我用上去了感觉好多了。

再次谢谢你。

有实力才会有魅力 实力来自坚持不懈的努力
2006-03-12 15:30



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-49839-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.186537 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved