This is the state now; I can start it, add students and everything is fine, but when I have added a few students, and go check on the statistics, the stats are all blank!
Example run:
Menu selection:
1.Add student data
2.Randomize student data
3.show statistics
4.Exit
1
Specify sex of student; 1 (girl) or 0 (boy): 0
Specify student grade: (1-5) 5
Menu selection:
1.Add student data
2.Randomize student data
3.show statistics
4.Exit
1
Specify sex of student; 1 (girl) or 0 (boy): 0
Specify student grade: (1-5) 1
Menu selection:
1.Add student data
2.Randomize student data
3.show statistics
4.Exit
3
Boys average score:
----------------------
Number of boys:0
Average score:0
Girls average score:
----------------------
Number of girls:0
Average score:0
Total average score:
----------------------
Number of students:0
Average score:0
My current code is:
main.cpp
Code:
#include <iostream>
#include "student.h"
#include "calc.h"
using std::cin;
using std::cout;
using std::endl;
int main(int argc, char *argv[])
{
int SEL, loop=1, x;
klass klass1; // Initiera ett objekt, "Klass", av klassen Klass
while(loop==1)
{
cout << "Menu selection:\n1.Add student data\n2.Randomize student data\n3.show statistics\n4.Exit" << endl;
cin >> SEL;
switch(SEL)
{
case 1:
klass1.addstudent();
break;
case 2:
cout << "not implemented yet!";
break;
case 3:
klass1.collect();
klass1.calcaverage();
cout << "Boys average score:\n----------------------\nNumber of boys:" << klass1.numBo() << "\nAverage score:" << klass1.AvGradeBoys() << endl << endl;
cout << "Girls average score:\n----------------------\nNumber of girls:" << klass1.numGi() << "\nAverage score:" << klass1.AvGradeGirls() << endl << endl;
cout << "Total average score:\n----------------------\nNumber of students:" << (klass1.numGi()+klass1.numBo()) << "\nAverage score:" << klass1.averagegrade() << endl;
cin.ignore(255,'\n');
cin.get();
case 4:
return 0;
default:
cout << "ERROR" << endl;
}
}
/*klass1.collect();
klass1.calcaverage();
cout << "Boys average score:\n----------------------\nNumber of boys:" << klass1.numBo() << "\nAverage score:" << klass1.AvGradeBoys() << endl << endl;
cout << "Girls average score:\n----------------------\nNumber of girls:" << klass1.numGi() << "\nAverage score:" << klass1.AvGradeGirls() << endl << endl;
cout << "Total average score:\n----------------------\nNumber of students:" << (klass1.numGi()+klass1.numBo()) << "\nAverage score:" << klass1.averagegrade() << endl;
*/
cin.ignore(255,'\n');
cin.get();
return 0;
}
calc.cpp
Code:
#include "calc.h"
#include "student.h"
using namespace std;
klass::klass() : numG(0), numB(0), AvGradeG(0), AvGradeB(0), totGrade(0), numofstud(0), Ggrade(0), Bgrade(0)
{
}
klass::~klass()
{
}
void klass::collect()
{
for(int i=(numG+numB);i>0;i--)
{
if(getGender()) // om getGender() är sann = tösabete...
{
Ggrade=Ggrade+getGrade();
numG++;
}
else // ...annars en hane
{
Bgrade=Bgrade+getGrade();
numB++;
}
}
}
void klass::calcaverage()
{
if(numG>0) // Inte dela med noll
AvGradeG=Ggrade/numG;
if(numB>0) // inte dela med noll
AvGradeB=Bgrade/numB;
if((numB+numG)>0) // inte dela med noll
totGrade=(Bgrade+Ggrade)/(numB+numG);
}
float klass::AvGradeGirls() // medelbetyg för tjejer
{
return AvGradeG;
}
float klass::averagegrade() // medelbetyg
{
return totGrade;
}
int klass::totalStudents()
{
return numG+numB;
}
float klass::AvGradeBoys() // medelbetyg för killar
{
return AvGradeB;
}
int klass::numBo() // Antal B
{
return numB;
}
int klass::numGi() // Antal G
{
return numG;
}
void klass::addstudent()
{
stud[numofstud].setGender();
stud[numofstud].giveGrade();
numofstud++;
}
student.cpp
Code:
#include "student.h"
using namespace std;
// Funktioner
void student::setGender() // FALSE=boy, TRUE=girl
{
bool done = false;
while (!done)
{
int num;
std::cout << "Specify sex of student; 1 (girl) or 0 (boy): ";
std::cin >> num;
switch( num )
{
case 0:
gender = false;
done = true;
break;
case 1:
gender = true;
done = true;
break;
default:
std::cout << "You must enter 0 or 1: " << endl;
}
}
}
void student::giveGrade()
{
std::cout << "Specify student grade: (1-5) ";
std::cin >> grade;
}
float student::getGrade()
{
return grade;
}
bool student::getGender()
{
return gender;
}
calc.h
Code:
#ifndef CALC_H
#define CALC_H
#include"student.h"
#define students 20
class klass : public student
{
public:
klass();
virtual ~klass();
float AvGradeGirls(); //{return AvGradeG;} medelbetyg för tjejer
float averagegrade(); //{return totGrade;} medelbetyg
float AvGradeBoys(); //{return AvGradeB;} medelbetyg för killar
void addstudent();
int numBo(); // Antal B
int numGi(); // Antal G
int totalStudents(); // Totala antalet studneter
void collect();
void calcaverage();
private:
student stud[students];
int Ggrade;
int Bgrade; // Tjejsor och killsars sammanlagda betyg (ej medelvärde)
int numofstud;
int numG;
int numB;
double AvGradeB; // Gossars betyg
double AvGradeG; // Flickors betyg
double totGrade; // Totala betyget
};
#endif // CALC_H
student.h
Code:
/* Skapar elever, tilldelar dem kön samt betyg */
#ifndef STUDENT_H
#define STUDENT_H
#include <iostream>
using std::cin;
using std::cout;
class student
{
public:
//student();
//~student();
void setGender(); // FALSE=boy, TRUE=girl
void giveGrade();
float getGrade(); //{return grade;}
bool getGender(); //{return gender;}
private:
bool gender;
double grade;
};
#endif // STUDENT_H