Hola amigos, tengo un pequeño problema, tengo como proyecto hacer una base de datos de calificaciones de alumnos, lo estoy haciendo con estructuras y uso listas enlazadas para las notas, el proceso de ingresar el nombre del alumno, el codigo, las notas y sacar promedio me va rebien, el problema es el siguiente, ademas de eso tengo que ordenar los promedios ascendente y descendente, bueno esto tambien lo hago pero por lo mismo que lo ordena de esa manera los datos pierden integridad, ademas tengo que ordenar por nombre y pues se me esta haciendo bastante dificil esta ultima parte.
El programa hace mas o menos esto
Juan 90
Carlos 60
Luis 85
Cuando lo ordena queda asi
Juan 60
carlos 85
luis 90
Dejo codigo a ver quien de ustedes me ilumina un poco!!
Saludetes..
El programa hace mas o menos esto
Juan 90
Carlos 60
Luis 85
Cuando lo ordena queda asi
Juan 60
carlos 85
luis 90
Dejo codigo a ver quien de ustedes me ilumina un poco!!
Saludetes..
Código (cpp) [Seleccionar]
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
#include <windows.h>
#define c 40
#define MAX 30
struct notas {
float nota1;
float nota2;
float nota3;
float promedio;
};
struct alumno
{
char nombre[c];
notas nota;
int numcuenta;
alumno();
void mostrar();
void comparar(int);
void ordenar_cadenas();
};
alumno::alumno()
{
nota.nota3=0;
}
void alumno::ordenar_cadenas()
{ alumno a[c];
int total=2;
char temp[100];
int i, j;
for(i=0; i < total-1; i++)
{
for(j=i+1; j < total; j++)
if(strcmp(a[i].nombre, a[j].nombre) > 0)
{
// Copia en variable temporal datos actuales
strcpy(temp, a[i].nombre);
// Intercambia informacion
strcpy(a[i].nombre, a[j].nombre);
strcpy(a[j].nombre, temp);
}
}
for(i=0;i<total;i++)
{
cout<<a[i].nombre<<endl;
}
}
void alumno::comparar(int cod)
{
if(cod!=numcuenta)
{
cout<<"\tContacto no existe"<<endl;
cout<<"\tEjecute el programa de nuevo"<<endl;
}
}
void alumno::mostrar()
{
cout<<endl;
cout<<"Num Cuenta \t"<<"Nombre\t"<<"Notas"<<"Promedio"<<endl;
cout<<numcuenta<<"\t\t"<<nombre<<"\t\t"<<nota.nota1<<" "<<nota.nota2<<" "<<nota.nota3<<"\t"<<fixed<<setprecision(2)<<nota.promedio<<endl;
}
int main()
{
char resp;
int cantidad, accion,cod, i;
alumno a[c];
alumno* ptr;
do{
system("CLS");
system("COLOR 97");
cout<<"PROGRAMA BASE DATOS TEMPORAL CALIFICACIONES"<<endl;
cout<<"QUE ACCION DESEA REALIZAR"<<endl;
cout<<"1.Consulta\n2. Ingreso Datos\n3. Actualizacion Datos\n4. Ordenar por Promedio Ascendete\n5. Ordenar por Promedio Descendente\n6. Ordenar nombre\n8. Salir"<<endl;
cin>>accion;
while( accion <1 || accion >8 )
{
system("CLS");
cout << "\n\tIngrese accion correcta\n\tElija entre 1 y 5: ";
cout<<"QUE ACCION DESEA REALIZAR"<<endl;
cout<<"1.Consulta\n2. Ingreso Datos\n3. Actualizacion Datos\n4. Ordenar por Promedio Ascendete\n5. Ordenar por Promedio Descendente\n6.Ordenar por Nombres\n8. Salir"<<endl;
cin >> accion;
}
switch(accion)
{
case 1:
cout<<"Contactos"<<endl;
if(a[0].nota.nota3!=0)
{
for (ptr=a; ptr->nota.nota3;ptr++)
{
ptr->mostrar();
}
}
else
cout<<"NO EXISTEN DATOS"<<endl;
break;//sale del case
case 2:
cout<<"Numero de contactos que desea ingresar ";
cin>>cantidad;
for(i=0;i<cantidad;i++)
{
cout<<"Numero de Cuenta";cin>>a[i].numcuenta;
cout<<"\nNombre ";fflush(stdin); gets(a[i].nombre);
cout<<"Nota 1 ";cin>>a[i].nota.nota1;
while(a[i].nota.nota1<0||a[i].nota.nota1>100)
{
cout<<"Error!!\nIngrese Calificacion entre 0 y 100"<<endl;
cout<<"Nota 1 ";cin>>a[i].nota.nota1;
}
cout<<"Nota 2 ";cin>>a[i].nota.nota2;
while(a[i].nota.nota2<0||a[i].nota.nota2>100)
{
cout<<"Error!!\nIngrese Calificacion entre 0 y 100"<<endl;
cout<<"Nota 3 ";cin>>a[i].nota.nota3;
}
cout<<"Nota 3 ";cin>>a[i].nota.nota3;
while(a[i].nota.nota3<0||a[i].nota.nota3>100)
{
cout<<"Error!!\nIngrese Calificacion entre 0 y 100"<<endl;
cout<<"Nota 3 ";cin>>a[i].nota.nota3;
}
a[i].nota.promedio=(a[i].nota.nota1+a[i].nota.nota2+a[i].nota.nota3)/3;
cout<<"Promedio"<<fixed<<setprecision(2)<<a[i].nota.promedio;
}
cout<<"\n\tINGRESO EXITOSO"<<endl;
break;
case 3:
if(a[0].nota.nota3!=0)
{
cout<<"Lista de contactos"<<endl;
for (ptr=a; ptr->nota.nota3;ptr++)
{
ptr->mostrar();
}
cout<<"\n\n\tElija contacto a modificar"<<endl;
cout<<"\n\n\tIngrese codigo del contacto que desea modificar ";cin>>cod;
ptr->comparar(cod);
for (ptr=a; ptr->numcuenta;ptr++)
{
if(ptr->numcuenta==cod)
{
cout<<"Modifique Su contacto"<<endl;
cout<<"Codigo"<<cod<<endl;
cout<<"Nombre "; cin>>ptr->nombre;
cout<<"Nota 1 ";cin>>ptr->nota.nota1;
while(ptr->nota.nota1<0||ptr->nota.nota1>100)
{
cout<<"Error!!\nIngrese Calificacion entre 0 y 100"<<endl;
cout<<"Nota 1 ";cin>>ptr->nota.nota1;
}
cout<<"Nota 2 ";cin>>ptr->nota.nota2;
while(ptr->nota.nota2<0||ptr->nota.nota2>100)
{
cout<<"Error!!\nIngrese Calificacion entre 0 y 100"<<endl;
cout<<"Nota 2 ";cin>>ptr->nota.nota2;
}
cout<<"Nota 3 ";cin>>ptr->nota.nota3;
while(ptr->nota.nota3<0||ptr->nota.nota3>100)
{
cout<<"Error!!\nIngrese Calificacion entre 0 y 100"<<endl;
cout<<"Nota 3 ";cin>>ptr->nota.nota3;
}
a[i].nota.promedio=(a[i].nota.nota1+a[i].nota.nota2+a[i].nota.nota3)/3;
cout<<"\nCONTACTO MODIFICADO"<<endl;
ptr->mostrar();
}//fin if
}//fin for
}
else
cout<<"NO EXISTEN DATOS"<<endl;
break;
case 4:
if(a[0].nota.nota3!=0)
{
int j,temp,temp2,temp3,temp4,temp5;
//compara las posiciones
for (ptr=a; ptr->nota.nota3;ptr++)
{
ptr->mostrar();
}
for(i=1;i<cantidad;i++)//ayuda a recorrer el vector
{
for(j=0;j<cantidad-1;j++)//compara elementos del vector por posiciones y busca la posicion anterior, por el -1
{
if(a[j].nota.promedio>a[j+1].nota.promedio)//Compara la primera posicion con la siguiente
{
//a[i].numcuenta=a[i].numcuenta;
temp=a[j].nota.promedio; //variable auxiliar que almacena la primera posicion
a[j].nota.promedio=a[j+1].nota.promedio;
a[j+1].nota.promedio=temp;
}
}
}
for (ptr=a; ptr->nota.nota3;ptr++)
{
ptr->mostrar();
}
}
else
cout<<"NO EXISTEN DATOS"<<endl;
break;
case 5:
if(a[0].nota.nota3!=0)
{
int j,temp;
//compara las posiciones
for(i=0;i<cantidad;i++)
{
cout<<a[i].nota.promedio<<endl;
}
for(i=1;i<cantidad;i++)//ayuda a recorrer el vector
{
for(j=0;j<cantidad-1;j++)//compara elementos del vector por posiciones y busca la posicion anterior, por el -1
{
if(a[j].nota.promedio<a[j+1].nota.promedio)//Compara la primera posicion con la siguiente
{
temp=a[j].nota.promedio; //variable auxiliar que almacena la primera posicion
a[j].nota.promedio=a[j+1].nota.promedio;
a[j+1].nota.promedio=temp;
}
}
}
cout<<"Vector ordenado"<<endl;//muestra las posiciones ordenadas
for(i=0;i<cantidad;i++)
{
cout<<a[i].nota.promedio<<endl;
}
}
else
cout<<"NO EXISTEN DATOS"<<endl;
break;
case 6:
for (ptr=a; ptr->nota.nota3;ptr++)
{
ptr->ordenar_cadenas();
}
break;
case 8:
system("PAUSE");
cout<<"Adios"<<endl;
return 0;
break;
}
cout<<"\n\n\tIR AL MENU PRINCIPAL [S/N]"<<endl;
cin>>resp;
}while(resp=='s' || resp=='S');
return 0;
}