#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<conio.h>
#include <iostream>
using namespace std;
class nodo{
public:
void crear_lista(nodo* lista);
void ingresar_dato(char* nombre, int boleta, nodo* lista);
void mostrar_lista(nodo* lista);
void mostrar_nodo(nodo* elemento);
void menu(void);
void borrar_lista(nodo* lista);
void borrar_nodoxnombre(char *nombre, nodo* lista);
void borrar_nodoxnota(int boleta, nodo* lista);
void buscar_nodo(nodo* lista, char *caracter);
void ordenar_lista(nodo* lista);
};
class dato
{
public:
char nombre[80];
int nota;
dato *sig;
};
void nodo ::crear_lista(nodo* lista)
{
return (*lista = NULL);
}
void nodo ::ingresar_dato(char* nombre, int boleta, nodo* lista)
{
nodo *nuevo_dato;
nodo *auxiliar = NULL;
nuevo_dato
= (nodo
*)malloc(sizeof(nodo
));
if(nuevo_dato != NULL)
{
strcpy((nuevo_dato
->nombre
), nombre
); nuevo_dato->nota = boleta;
nuevo_dato->sig = NULL;
if(lista == NULL)
lista = nuevo_dato;
else
{
auxiliar = lista;
while(auxiliar->sig != NULL)
auxiliar = auxiliar->sig;
auxiliar->sig = nuevo_dato;
}
}
else
cout<<"\n\nNo se pudo reservar memoria\n\n";
return lista;
}
int nodo ::void mostrar_lista(nodo* lista)
{
nodo *auxiliar;
int contador = 0;
if(lista == NULL)
cout<<"\n\nLa lista esta vacia\n\n";
auxiliar = lista;
while(auxiliar != NULL)
{
cout<<"\n\nPersona"<<(contador+1);
cout<<"\nNombre y Apellido: "<<auxiliar->nombre;
cout<<"\n\nBoleta: "<< auxiliar->nota;
contador++;
auxiliar = auxiliar->sig;
}
cout<<"\nFin de lista\n\n";
}
void nodo::void borrar_lista(nodo* lista)
{
nodo *borra;
borra = lista;
while(borra)
{
lista = lista->sig;
borra = lista;
}
}
void nodo::void menu(void)
{
cout<<"\n\nLista_Practica_3 3CM7:\n\n";
cout<<"1) Ingresar dato\n";
cout<<"2) Mostrar lista\n";
cout<<"3) Borrar lista\n";
cout<<"4) Borrar por nombre\n";
cout<<"5) Borrar por boleta\n";
cout<<"6) Buscar en lista\n";
cout<<"7) Ordenar lista\n";
cout<<"0)SALIR\n\n";
}
void nodo ::borrar_nodoxnombre(char *nombre, nodo* lista)
{
if(lista != NULL)
{
nodo *ptraux;
nodo *ptranterior = NULL;
int cont;
ptraux = lista;
while(ptraux
!= NULL
&& (strcmp(ptraux
->nombre
, nombre
) != 0)) {
ptranterior = ptraux;
ptraux = ptraux->sig;
cont++;
}
if(cont == 1 && ptraux->sig == NULL)
{
lista = NULL;
}
if(ptraux == NULL)
cout<<"\n\nNo se encontro una persona con ese nombre\n\n";
else if(ptranterior == NULL)
{
lista = lista->sig;
}
else
{
ptranterior->sig = ptraux->sig;
}
}
return lista;
}
void nodo:: borrar_nodoxnota(int boleta, nodo* lista)
{
if(lista != NULL)
{
nodo *ptraux;
nodo *ptranterior = NULL;
int cont = 0;
ptraux = lista;
while(ptraux != NULL && ptraux->nota != boleta)
{
ptranterior = ptraux;
ptraux = ptraux->sig;
cont++;
}
if(cont == 1 && ptraux->sig == NULL)
{
lista = NULL;
}
if(ptraux == NULL)
cout<<"\n\nNo se encontro una persona con ese numero de boleta\n\n";
else if(ptranterior == NULL)
{
lista = lista->sig;
}
else
{
ptranterior->sig = ptraux->sig;
}
}
return lista;
}
void nodo:: buscar_nodo(nodo* lista, char *caracter)
{
nodo *aux;
char noabuscar[20];
char a[] = "a";
char b[] = "b";
int nabuscar;
if(lista != NULL)
{
{
cout<<"\n\nIngrese el nombre a buscar: ";
fgets(noabuscar
, 20, stdin
); aux = lista;
while(aux != NULL)
{
if(strcmp(aux
->nombre
, noabuscar
) == 0) return aux;
aux = aux->sig;
}
return aux;
}
else if(strcmp(caracter
,b
) == 0) {
cout<<"\n\nIngrese la nota a buscar: ";
cout<<nabuscar;
aux = lista;
while(aux != NULL)
{
if(aux->nota == nabuscar)
return aux;
aux = aux->sig;
}
return aux;
}
else
{
cout<<"\n\nOpcion no valida\n\n";
return 0;
}
}
}
void nodo::void mostrar_nodo(nodo* elemento)
{
nodo* nodoencontrado;
nodoencontrado = elemento;
if(nodoencontrado == NULL)
cout<<"\n\nNo se obtuvieron resultados\n\n";
else
{
cout<<"\n\nNodo encontrado:\n\n";
cout<<"\nNompre y apellido:"<< nodoencontrado->nombre;
cout<<"\nBoleta: "<< nodoencontrado->nota;
}
}
/* \n\n\n\n */
void nodo :: void ordenar_lista(nodo* lista)
{
nodo *anterior;
nodo *siguiente;
nodo temp;
anterior = lista;
while(anterior->sig != NULL)
{
siguiente = anterior->sig;
while(siguiente != NULL)
{
if(strcmp(anterior
->nombre
, siguiente
->nombre
) > 0) {
strcpy(temp.
nombre, siguiente
->nombre
); temp.nota = siguiente->nota;
strcpy(siguiente
->nombre
, anterior
->nombre
); siguiente->nota = anterior->nota;
strcpy(anterior
->nombre
, temp.
nombre); anterior->nota = temp.nota;
}
siguiente = siguiente->sig;
}
anterior = anterior->sig;
siguiente = anterior->sig;
}
cout<<"\n\nLista ordenada\n\n";
}
int main(int argc, char** argv)
{
Listas list;
nodo *inicio;
nodo *nodobuscado;
char nom[20];
char nomaborrar[20];
int nborrar;
int nota, i, cant, op;
char s[2];
inicio = list.crear_lista(inicio);
menu();
cin>>op;
while(op != 0)
{
switch(op)
{
case 1: cout<<"\n\nQue cantidad de datos ingresara: ";
cin>>cant;
cout<<"\n\n";
cout<<"Ingreso de datos:\n\n";
for(i=0 ; i < cant ; i++)
{
cout<<"Nombre y apellido: ";
cout<<"\nBoleta: ";
cin>>nota;
cout<<"\n\n";
inicio = list.ingresar_dato(nom, nota, inicio);
}
break;
case 2: list.mostrar_lista(inicio);
break;
case 3: list.borrar_lista(inicio);
cout<<"\n\nLista Borrada\n\n";
inicio = NULL;
break;
case 4: cout<<"\n\nIngrese el nombre a borrar\n\n";
fgets(nomaborrar
, 80, stdin
); inicio = list.borrar_nodoxnombre(nomaborrar, inicio);
break;
case 5: cout<<"\n\nIngrese la nota a borrar\n\n";
cin>>nborrar;
inicio = list.borrar_nodoxnota(nborrar, inicio);
break;
case 6: cout<<"\n\n('a') para buscar por nombre || ('b') para buscar por nota\n\n";
list.nodobuscado = buscar_nodo(inicio, s);
list.mostrar_nodo(nodobuscado);
break;
case 7: list.ordenar_lista(inicio);
break;
default: cout<<"\n\n \\Opcion incorrecta --- Intentelo nuevamente// \n\n";
}
menu();
cin>>op;
}
return (EXIT_SUCCESS);
}