[ Foro de C++ ]
#include<iostream>
#include<conio.h>
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
struct estudiante
{
int codigo_est;
string nom_estudiante;
float nota;
estudiante *ap_est;
} *nuevo_estudiante, *bus_est1, *bus_est2, *nota_repetida;
struct salon
{
int codigo_sal;
string desc_materia;
string nom_docente;
salon *ap_s;
estudiante *ap_e;
} *cab, *cola, *nuevo_sal, *busca1, *busca2, *ap_e_notarepetida;
// Fun.
void menu_salon(void);
void menu_estudiante(void);
//fun. salones
void ingresar_salon(void);
void listar_salon(void);
void borrar_salon(void);
void modificar_salon(void);
void reinsertar_salon(salon *new_salon);
void recorrer_salones(void);
//fun estudiantes
void ingresar_est(void);
void listar_est_general();
void listar_est_salon();
void listar_un_estudiante(void);
void listar_mejor_nota(void);
void listar_baja_nota(void);
void listar_promedio_salon(void);
void borrar_est(void);
void listar_est_notarepetida(void);
void menu(void)
{
int opc0;
opc0 = 9;
while ( opc0 != 0)
{
system("cls");
cout<<"\n MULTILISTAS "<<endl;
cout<<"\n 1 Menu Saloes ";
cout<<"\n 2 Menu Estudiantes";
cout<<"\n 0 Terminar";
cout<<"\n Ingrese Opcion ";
cin>>opc0;
fflush(stdin); //esta funcion libera la memoria
switch(opc0)
{
case 1:
menu_salon(); break;
case 2:
menu_estudiante(); break;
default:
cout <<"\n Opcion no Valida !! ";
break;
}
cout <<"\n\n Oprima una tecla para continuar";
getch();
}
}
void menu_salon(void)
{
int opc1;
opc1 = 9;
while ( opc1 != 0)
{
system("cls");
cout<<"\n MULTILISTAS SALONES"<<endl;
cout<<"\n 1 Adicionar ";
cout<<"\n 2 Listar";
cout<<"\n 3 Modificar";
cout<<"\n 4 Borrar";
cout<<"\n 0 Terminar";
cout<<"\n Ingrese Opcion ";
cin>>opc1;
fflush(stdin); //esta funcion libera la memoria
switch(opc1)
{
case 1:
ingresar_salon();break;
case 2:
listar_salon(); break;
case 3:
modificar_salon(); break;
case 4:
borrar_salon(); break;
case 0:
break;
default:
cout <<"\n Opcion no Valida !! ";
break;
}
cout <<"\n\n Oprima una tecla para continuar";
getch();
}
}
void ingresar_salon(void)
{
int inserto;
inserto = 0;
if ( !cab )
{
cab = new(salon);
cout <<"\n Digite Codigo Salon : ";
cin >>cab->codigo_sal;
fflush(stdin); //esta funcion libera la memoria
cout <<"\n Digite Descripcion Salon-Materia : ";
getline(cin,cab->desc_materia);
fflush(stdin); //esta funcion libera la memoria
cout << "\n Digite Nombre Docente : ";
getline(cin,cab->nom_docente);
fflush(stdin); //esta funcion libera la memoria
cola = new(salon);
cola = cab;
cab->ap_s = NULL;
cab->ap_e = NULL;
return;
}
nuevo_sal = new(salon);
cout <<"\n Digite Codigo Salon : ";
cin >>nuevo_sal->codigo_sal;
fflush(stdin); //esta funcion libera la memoria
cout <<"\n Digite Descripcion Salon-Materia : ";
getline(cin,nuevo_sal->desc_materia);
fflush(stdin); //esta funcion libera la memoria
cout << "\n Digite Nombre Docente : ";
getline(cin,nuevo_sal->nom_docente);
fflush(stdin); //esta funcion libera la memoria
nuevo_sal->ap_s = NULL;
nuevo_sal->ap_e = NULL;
if ( nuevo_sal->codigo_sal <= cab->codigo_sal ) // se inserta al inicio
{
nuevo_sal->ap_s = cab;
cab = nuevo_sal;
}
else
{
if ( nuevo_sal->codigo_sal >= cola->codigo_sal) // INSERTAR AL FINAL
{
cola->ap_s = nuevo_sal;
cola = nuevo_sal;
}
else
{
busca1 = new(salon); busca2 = new(salon);
busca1 = cab;
busca2 = busca1->ap_s;
//busca2 = cab->apuntador; esta opcion es igual a la anterior
while ( inserto == 0 )
{
if ( busca2->codigo_sal >= nuevo_sal->codigo_sal )
{
nuevo_sal->ap_s = busca2;
busca1->ap_s = nuevo_sal;
inserto = 2;
}
else
{
busca1 = busca2;
busca2 = busca1->ap_s;
//busca2 = busca2->apuntador; esta opcion es igual a la anterior
}
}
}
}
}
void listar_salon(void)
{
if ( !cab )
{
cout << " no hay salones creados "<<endl;
}
else
{
nuevo_sal = new(salon);
nuevo_sal = cab;
while ( nuevo_sal != NULL )
{
cout <<"\n Codigo Salon : "<<nuevo_sal->codigo_sal;
cout <<"\n Descripcion Clase : "<<nuevo_sal->desc_materia;
cout <<"\n Docente Clase : "<<nuevo_sal->nom_docente<<endl;
nuevo_sal = nuevo_sal->ap_s;
}
}
getch();
}
void borrar_salon(void)
{
int cod_sal_bor;
int encontro;
encontro = 0;
if ( !cab )
{
cout << " no hay salones creados para Borrar"<<endl;
}
else
{
cout <<"\n Digite Codigo Salon a Borrar : ";
cin >>cod_sal_bor;
fflush(stdin);
if ( cab->codigo_sal == cod_sal_bor )
{
if ( cab->ap_e != NULL )
{
cout <<"\n no se puede Borrar el salon por tener estudiantes ";
}
else
{
nuevo_sal = new(salon);
nuevo_sal = cab;
cab = cab->ap_s;
delete(nuevo_sal);
cout <<"\n se borro el nodo con el codigo :"<<cod_sal_bor;
}
}
else
{
busca1 = new(salon); busca2 = new(salon);
busca1 = cab;
busca2 = busca1->ap_s;
while( encontro == 0 && busca2 != NULL )
{
if ( busca2->codigo_sal = cod_sal_bor )
{
if ( busca2->ap_e != NULL )
{
cout <<"\n no se puede Borrar el salon por tener estudiantes ";
encontro = 4;
}
else
{
encontro = 3;
if ( busca2 == cola )
{
cola = busca1;
}
busca1->ap_s = busca2->ap_s;
delete(busca2);
}
}
else
{
if ( busca2->codigo_sal > cod_sal_bor )
{
cout<<"\n No Existe el codigo a borrar el la Lista ";
encontro = 2;
}
else
{
busca1 = busca2;
busca2 = busca1->ap_s;
}
}
}
}
}
}
void modificar_salon(void)
{
salon *aux_salon;
int cod_sal_mod;
int encontro;
encontro = 0;
if ( !cab )
{
cout << " no hay salones creados para Modificar"<<endl;
}
else
{
cout <<"\n Digite Codigo Salon a Borrar : ";
cin >>cod_sal_mod;
fflush(stdin);
if ( cab->codigo_sal == cod_sal_mod )
{
aux_salon = new(salon);
aux_salon->codigo_sal = cab->codigo_sal;
aux_salon->desc_materia = cab->desc_materia;
aux_salon->nom_docente = cab->nom_docente;
cout <<"\n Codigo Salon : "<<cab->codigo_sal;
cout <<"\n Descripcion Clase : "<<cab->desc_materia;
cout <<"\n Docente Clase : "<<cab->nom_docente<<endl;
cout <<"\n Digite Codigo Salon : ";
cin >>cab->codigo_sal;
fflush(stdin); //esta funcion libera la memoria
cout <<"\n Digite Descripcion Salon-Materia : ";
getline(cin,cab->desc_materia);
fflush(stdin); //esta funcion libera la memoria
cout << "\n Digite Nombre Docente : ";
getline(cin,cab->nom_docente);
fflush(stdin); //esta funcion libera la memoria
if ( cab != cola )
{
if ( cab->codigo_sal != aux_salon->codigo_sal )
{
nuevo_sal = new(salon);
nuevo_sal = cab;
cab = cab->ap_s;
nuevo_sal->ap_s = NULL;
reinsertar_salon(nuevo_sal);
}
}
}
else
{
busca1 = new(salon); busca2 = new(salon);
busca1 = cab;
busca2 = busca1->ap_s;
int encontro;
encontro = 0;
while( encontro == 0 && busca2 != NULL )
{
if ( busca2->codigo_sal == cod_sal_mod )
{
aux_salon = new(salon);
aux_salon->codigo_sal = busca2->codigo_sal;
aux_salon->desc_materia = busca2->desc_materia;
aux_salon->nom_docente = busca2->nom_docente;
cout <<"\n Codigo Salon : "<<busca2->codigo_sal;
cout <<"\n Descripcion Clase : "<<busca2->desc_materia;
cout <<"\n Docente Clase : "<<busca2->nom_docente<<endl;
cout <<"\n Digite Codigo Salon : ";
cin >>busca2->codigo_sal;
fflush(stdin); //esta funcion libera la memoria
cout <<"\n Digite Descripcion Salon-Materia : ";
getline(cin,busca2->desc_materia);
fflush(stdin); //esta funcion libera la memoria
cout << "\n Digite Nombre Docente : ";
getline(cin,busca2->nom_docente);
fflush(stdin); //esta funcion libera la memoria
if ( busca2->codigo_sal != aux_salon->codigo_sal )
{
nuevo_sal = new(salon);
busca1->ap_s = busca2->ap_s;
nuevo_sal = busca2;
nuevo_sal->ap_s = NULL;
if ( cola == busca2 )
{
cola = busca1;
}
reinsertar_salon(nuevo_sal);
}
}
}
}
}
}
void reinsertar_salon(salon *new_salon)
{
int inserto;
inserto = 0;
if ( new_salon->codigo_sal <= cab->codigo_sal ) // se inserta al inicio
{
new_salon->ap_s = cab;
cab = new_salon;
}
else
{
if ( new_salon->codigo_sal >= cola->codigo_sal) // INSERTAR AL FINAL
{
cola->ap_s = new_salon;
cola = new_salon;
}
else
{
busca1 = new(salon); busca2 = new(salon);
busca1 = cab;
busca2 = busca1->ap_s;
//busca2 = cab->apuntador; esta opcion es igual a la anterior
while ( inserto == 0 )
{
if ( busca2->codigo_sal >= new_salon->codigo_sal )
{
new_salon->ap_s = busca2;
busca1->ap_s = new_salon;
inserto = 2;
}
else
{
busca1 = busca2;
busca2 = busca1->ap_s;
//busca2 = busca2->apuntador; esta opcion es igual a la anterior
}
}
}
}
}
//************ fun. de estudiantes *******
void menu_estudiante(void)
{
int opc2;
opc2 = 99;
while ( opc2 != 0)
{
system("cls");
cout<<"\n MULTILISTAS SALONES"<<endl;
cout<<"\n 1 Adicionar Estudiante";
cout<<"\n 2 Listar General ";
cout<<"\n 3 Listar Estudiantes Nota Repetida";
cout<<"\n 4 Borrar";
cout<<"\n 0 Terminar";
cout<<"\n Ingrese Opcion ";
cin>>opc2;
fflush(stdin); //esta funcion libera la memoria
switch(opc2)
{
case 1:
ingresar_est(); break;
case 2:
listar_est_general(); break;
case 3:
listar_est_notarepetida(); break;
default:
cout <<"\n Opcion no Valida !! ";
break;
}
cout <<"\n\n Oprima una tecla para continuar";
getch();
}
}
void ingresar_est()
{
int cod_sal;
int encontro_salon;
encontro_salon = 0;
int encontro_est;
encontro_est = 0;
if ( !cab )
{
cout << " no hay salones creados para Adicionar estudiantes"<<endl;
}
else
{
cout <<"\n Digite Codigo Salon : ";
cin >>cod_sal;
fflush(stdin);
nuevo_sal = new(salon);
nuevo_sal = cab;
while ( nuevo_sal != NULL && encontro_salon == 0 )
{
if ( nuevo_sal->codigo_sal == cod_sal )
{
encontro_salon = 1;
nuevo_estudiante = new(estudiante);
cout << "\n Digite Codigo del Estudiante : ";
cin>>nuevo_estudiante->codigo_est;
fflush(stdin);
cout << "\n Digite Nombre del Estudiante : ";
getline(cin,nuevo_estudiante->nom_estudiante);
fflush(stdin);
cout << "\n Digite Nota del Estudiante : ";
cin>>nuevo_estudiante->nota;
fflush(stdin);
nuevo_estudiante->ap_est = NULL;
if ( nuevo_sal->ap_e == NULL )
{
nuevo_sal->ap_e = nuevo_estudiante;
}
else
{
bus_est1 = new(estudiante);
bus_est2 = new(estudiante);
bus_est1 = nuevo_sal->ap_e;
if (bus_est1->codigo_est >= nuevo_estudiante->codigo_est )
{
if (bus_est1->codigo_est == nuevo_estudiante->codigo_est )
{
cout <<"\n este codigo ya existe : ";
cout <<"\n Codigo estudiante : "<<bus_est1->codigo_est;
cout <<"\n Nombre Estudiante : "<<bus_est1->nom_estudiante;
cout <<"\n Nota Estudiante : "<<bus_est1->nota<<endl;
}
else
{
nuevo_estudiante->ap_est = bus_est1;
nuevo_sal->ap_e = nuevo_estudiante;
}
}
else
{
bus_est2 = bus_est1->ap_est;
while ( bus_est2 != NULL && encontro_est == 0 )
{
if (bus_est2->codigo_est >= nuevo_estudiante->codigo_est )
{
encontro_est = 1;
if (bus_est2->codigo_est == nuevo_estudiante->codigo_est )
{
cout <<"\n este codigo ya existe : ";
cout <<"\n Codigo estudiante : "<<bus_est2->codigo_est;
cout <<"\n Nombre Estudiante : "<<bus_est2->nom_estudiante;
cout <<"\n Nota Estudiante : "<<bus_est2->nota<<endl;
}
else
{
nuevo_estudiante->ap_est = bus_est2;
bus_est1->ap_est = nuevo_estudiante;
}
}
else
{
bus_est1 = bus_est2;
bus_est2 = bus_est2->ap_est;
}
}
if ( encontro_est == 0 )
{
bus_est1->ap_est = nuevo_estudiante;
}
}
}
}
nuevo_sal = nuevo_sal->ap_s;
}
if ( encontro_salon == 0 )
{
cout <<"\n Salon no se encontro ";
}
cout <<"\n <Enter> para continuar ";
getch();
}
}
void listar_est_general(void)
{
if ( !cab )
{
cout << " no hay salones creados para Adicionar estudiantes"<<endl;
}
else
{
nuevo_sal = new(salon);
nuevo_sal = cab;
while ( nuevo_sal != NULL )
{
cout<<"\n\n Codigo Salon : "<<nuevo_sal->codigo_sal;
cout<<"\n Materia : "<<nuevo_sal->desc_materia;
cout<<"\n Docente : "<<nuevo_sal->nom_docente;
nuevo_estudiante = new(estudiante);
nuevo_estudiante = nuevo_sal->ap_e;
while ( nuevo_estudiante != NULL )
{
cout<<"\n Estudiante codigo : "<<nuevo_estudiante->codigo_est;
cout<<"\n Estudiante nombre : "<<nuevo_estudiante->nom_estudiante;
cout<<"\n Estudiante nota : "<<nuevo_estudiante->nota;
nuevo_estudiante = nuevo_estudiante->ap_est;
}
nuevo_sal = nuevo_sal->ap_s;
}
}
}
void listar_est_notarepetida(void)
{
do
{
if (!cab)
{
cout << "No hay salones creados para mostrar estudiantes"<<endl;
}
else
{
nuevo_sal = (new salon);
nuevo_sal = cab;
while ( nuevo_sal != NULL)
{
cout<<"\n\n Codigo Salon : "<<nuevo_sal->codigo_sal<<endl;
cout<<"\n Materia : "<<nuevo_sal->desc_materia<<endl;
cout<<"\n Docente : "<<nuevo_sal->nom_docente<<endl;
bus_est1 = new(estudiante); bus_est2 = new(estudiante);
bus_est1 = nuevo_sal->ap_e; bus_est2 = bus_est1->ap_est;
while (bus_est1 != NULL)
{
if(bus_est1->nota == bus_est2->nota)
{
cout<<"\n Estudiante codigo : "<<nuevo_estudiante->codigo_est<<endl;
cout<<"Estudiante nombre : "<<nuevo_estudiante->nom_estudiante<<endl;
cout<<"Estudiante nota : "<<nuevo_estudiante->nota<<endl;
cout<<"Estudiante nota : "<<nuevo_estudiante->nota<<endl;
}
else
{
if(bus_est2 == NULL)
{
cout<<"No hay estudiantes con nota repetida en este salon"<<endl;
}
else
{
bus_est1 = bus_est2;
bus_est2 = bus_est1->ap_est;
}
}
}
nuevo_sal = nuevo_sal->ap_s;
}
}
}
while(nuevo_sal != NULL);
}
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)