Dev - C++ - AYUDA Con Las CLASS

   
Vista:

AYUDA Con Las CLASS

Publicado por Josely Echavarri dj_josely@hotmail.com (1 intervención) el 13/04/2012 22:19:00
En Este Programa Tengo:
Una class Estudiante y Otra class Materia.... Estudiante es la Super class y Materia es La Sub class.

El Programa Debe De Ingresar X Materias Por X Estudiantes, Ademas Las Materias Tienen Sus Creditos, Notas, Indice etc.. Como Objetos de La Sub class Materia.

El Programa debe de Pedirme La Cantidad De Estudiantes Con Sus Matriculas, Despues El Programa Me Pregunta Cuantas Materias Tiene Cada Estudiante y Hay es cuando El Programa Entra En Si.

Mi PROBLEMA ES EL SIGUIENTE:
Cuando Trato De Ingresar Solo 1 Estudiante y X Numero de Sus Materias, El Programa Corre Perfectamente!.

Pero, Cuando Trato de Leer Mas de Un Estudiante y Sus Materias. El Programa Me Lee Perfectamente La Cantidad de Estudiante y Sus Materias, Pero Cuando Leo Las Materias Del Estudiante 2, ellas Sobreescriben Las Materias del Estudiante 1. OSEA "Las Materias Siguientes Sobreescriben La Anterior".
Y Asi Ocurre Con Todas Las Materias... NO IMPORTA Cuantos estudiantes Lea, El Programa Me Los Imprime PERFECTO pero todos los Estudiantes Me Los Imprime Con Las Materias Iguales.

Por Ejem:

Si Tengo 5 Estudiantes y Cada Uno Lleva Dos Materias, Todos Los Estudiantes Se Qudan Con Las Materias Del Estudiante 5... Porque fueron las ultimas que dijite, las ultimas con las que el Prog. Se Quedo. Cada Materia Siguiente Borra La Anterior.

y Eso es un Problema...

Aqui les Dejo el Codigo y Muchas Gracias De Ante Mano, Se Que Leer El Programa De Otra Persona Es Un Laberinto y Mas Buscar Un Error.... Se Los Agradesco


#include <iostream>
#include <string>

using namespace std;

class Estudiante
{//CLAS ESTUDIANTE

private:
string Nombre;
string Matricula;

public:
Estudiante(){Nombre=""; Matricula="";}
void LeerNombre(string Nomb){Nombre=Nomb;}
void LeerMatri(string Matri){Matricula=Matri;}
string OpenNombre(){return Nombre;}
string OpenMatri(){return Matricula;}
};//class ESTUDIANTE

class Materia: public Estudiante
{//Class Materia

private:
string NMateria;
int Credito;
int Cantidad;
int Nota1,Nota2,Nota3,Parti;

public:
Materia(){NMateria=""; Credito=0; Cantidad=0; Nota1=0; Nota2=0; Nota3=0; Parti=0;}
void LeerMateria(string Mat){NMateria=Mat;}
void LeerCred(int Cred){Credito=Cred;}
void LeerCantMat(int CantMat){Cantidad=CantMat;}
void LeerNota1(int N1){Nota1=N1;}
void LeerNota2(int N2){Nota2=N2;}
void LeerNota3(int N3){Nota3=N3;}
void LeerParti(int Pt){Parti=Pt;}
string OpenMateria(){return NMateria;}
int OpenCred(){return Credito;}
int OpenCant(){return Cantidad;}
int OpenNota1(){return Nota1;}
int OpenNota2(){return Nota2;}
int OpenNota3(){return Nota3;}
int OpenParti(){return Parti;}
int OpenNotaF(){return Nota1+Nota2+Nota3+Parti;}
int OpenIndice()
{//INDICE
int NF=0;
int Punto=0;
NF=Nota1+Nota2+Nota3+Parti;
if(NF<60) Punto=0*Credito;
else if(NF<70) Punto=1*Credito;
else if(NF<80) Punto=2*Credito;
else if(NF<90) Punto=3*Credito;
else Punto=4*Credito;
}//INDICE

};//Class Materia


int main()
{//INICIO MAIN

char Nomb[40]="", Matri[10]="",Mat[20]="";
float Indice=0;
int N1=0,N2=0,N3=0,Pt=0,CantMat=0,Cred=0,Sp=0,Sc=0;
int E=0,i=0,A=0,C=0;

cout<<endl<<"\tCuantos Estudiantes Procesa: "; cin>>E;
system("CLS");
Estudiante Est[E];
//Materia Mate[CantMat];
for(i=0;i<E;i++)
{//1
fflush(stdin);
cout<<endl<<"\tMatricula: "; cin.getline(Matri,sizeof(Matri));
cout<<endl<<"\tNombre y Ap: "; cin.getline(Nomb,sizeof(Nomb));

Est[i].LeerNombre(Nomb);
Est[i].LeerMatri(Matri);
}i=0;//1

cout<<endl<<"Estudiante: "<<endl;
cout<<"MATRICULA: "<<Est[i].OpenMatri()<<endl<<"NOMBRE: "<<Est[i].OpenNombre()<<endl;
cout<<endl<<"CUANTAS MATERIAS: ";
do{//INICIO DO

cin>>CantMat;
if(CantMat==0){
cout<<"\n\tERROR: Digite Por lo Menos Una Materia."<<endl;
system("PAUSE"); system("CLS");cout<<endl<<"Cuantas Materias: ";}
}while(CantMat==0);//FIN DO

Materia Mate[CantMat];
Mate[i].LeerCantMat(CantMat);
for(i=0;i<E;i++)
{//5
for(C=0;C<Mate[i].OpenCant();C++)
{//2

fflush(stdin);
cout<<endl<<"MATERIA: "; cin.getline(Mat,sizeof(Mat));
cout<<endl<<"CREDITOS: "; cin>>Cred;
cout<<endl<<"Nota Primer Parcial: "; cin>>N1;
cout<<endl<<"Nota Segundo Parcial: "; cin>>N2;
cout<<endl<<"Nota Tercer Parcial: "; cin>>N3;
cout<<endl<<"Nota PARTICIPACION: "; cin>>Pt;
Mate[C].LeerMateria(Mat);
Mate[C].LeerCred(Cred);
Mate[C].LeerNota1(N1);
Mate[C].LeerNota2(N2);
Mate[C].LeerNota3(N3);
Mate[C].LeerParti(Pt);
}//2
if(i==E-1)break;
cout<<endl<<"Estudiante: "<<endl;
cout<<"MATRICULA: "<<Est[i+1].OpenMatri()<<endl<<"NOMBRE: "<<Est[i+1].OpenNombre()<<endl;
cout<<endl<<"CUANTAS MATERIAS: ";
do{//INICIO DO

cin>>CantMat;
if(CantMat==0){
cout<<"\n\tERROR: Digite Por lo Menos Una Materia."<<endl;}
}while(CantMat==0);//FIN DO
fflush(stdin);
Mate[i+1].LeerCantMat(CantMat);
}//5

i=0; C=0;
for(i=0;i<E;i++)
{//3
cout<<"MATRICULA: "<<Est[i].OpenMatri()<<endl<<"NOMBRE: "<<Est[i].OpenNombre()<<endl;
cout<<endl<<"MATERIA\t\tCr.\t1P\t2P\t3P\t10P\tNF"<<endl;

for(C=0;C<Mate[i].OpenCant();C++)
{//4
fflush(stdout);

cout<<Mate[C].OpenMateria()<<"\t"<<Mate[C].OpenCred()<<"\t"<<Mate[C].OpenNota1();
cout<<"\t"<<Mate[C].OpenNota2()<<"\t"<<Mate[C].OpenNota3()<<"\t"<<Mate[C].OpenParti();
cout<<"\t"<<Mate[C].OpenNotaF()<<endl;
Sp=Sp+Mate[C].OpenIndice();
Sc=Sc+Mate[C].OpenCred();
}//4
Indice=(float)Sp/Sc;
cout<<endl<<"INDICE:"<<Indice<<endl<<endl;
Indice=0;
}//3
system("PAUSE");
return 0;
}//FIN MAIN
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder