problema estructura de datos tipo cola

Iniciado por charlyvaron, 23 Mayo 2015, 00:30 AM

0 Miembros y 1 Visitante están viendo este tema.

charlyvaron

Cordial saludo, alguien me puede ayudar con el siguiente ejercicio, esto es lo que tengo y esto es lo que pide el ejercicio:

Un menú con las siete opciones siguientes que permita en cualquier momento ingresar a:
•   Una interfaz inicial  que incluya la validación de una contraseña de acceso al menú de opciones con color de fondo y color de texto, que incluya a demás los datos básicos como: Nombre de la Universidad, el texto del escenario del problema, el nombre del estudiante,  nombre del grupo a que pertenece  y la fecha.
•   Una opción para Insertar registros a la Cola
•   Una opción para Visualizar los registros de la Cola
•   Una opción para Eliminar o suprimir registros  de la Cola
•   Una opción para Buscar un registro en la Cola
•   Una opción para mostrar el total recaudado para consignaciones y para retiros.
•   Una opción para Salir del programa

usuario:admin
contraseña: 123


#include <iostream>//librerias a emplear
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <cstdlib>

using namespace std;//instrucción para utilizar los operadosres cout y cin

struct datos{//se declara la estructura
   char nombrecliente[20];//esta estructura es de tipo char que recibe valores alfanumericos
   char cedula[20];
   char fecha[20];
   int consignacion;
   int retiro;

       datos *sgte;//puntero de la estructura
  }*inicio=NULL, *final=NULL, *aux=NULL, *ant=NULL;//apuntadores vacios
 
  char nombre_cliente[25];//variable que permite la busqueda de nombres
  float totalconsignacion=0;
  float totalretiro=0;
 
//de declaran las  funciones a emplear 
void menu();
void ingresar();
void visualizar();
void buscar();
void eliminar();   


void ingresar(){//función que permite ingresar datos
   system ("cls");//instrucción de borrado de pantalla
         
         aux=new datos;//reserva de memoria
   aux->sgte=inicio;
   if(inicio==NULL){
      inicio=final=aux;
      aux->sgte=NULL;
         
   }else{
      aux->sgte=NULL;
      final->sgte=aux;
      final=aux;
         
         
         
if(aux){//si existe información en el apuntador, se procede a mostrar en pantalla   
cout<<endl<<"\n\t Datos de asistentes \n"<<endl;//encabezado
cout<<"\nIngrese Cliente: ";//solicita el nombre
fflush (stdin);//libera el woofer
gets(aux->nombrecliente);//variable que permite almacenar información a traves del apuntador
cout<<"\nIngrese la cedula del cliente: ";//solicita el nit
fflush (stdin);//libera el woofer
gets(aux->cedula);//variable que permite almacenar información a traves del apuntador

cout<<"\nIngrese valor a consignar: ";//solicita la ciudad
fflush (stdin);//libera el woofer
cin>>aux->consignacion;//variable que permite almacenar información a traves del apuntador
totalconsignacion=totalconsignacion + inicio->consignacion;


cout<<"\nIngrese valor a retirar: ";//
fflush (stdin);//libera el woofer
cin>>aux->retiro;//variable que permite almacenar información a traves del apuntador
totalretiro=totalretiro + inicio->retiro;


cout<<"\nIngrese la fecha: ";//solicita el nombre
fflush (stdin);//libera el woofer
gets(aux->fecha);

aux->sgte=NULL;//ultimo dato ingresado, el campo apunta a nada
totalconsignacion=totalconsignacion + aux->consignacion;
   totalretiro=totalretiro + aux->retiro;
if (inicio==NULL)//si en el inicio de la lista no hay valores
{
   totalconsignacion=totalconsignacion + aux->consignacion;
   totalretiro=totalretiro + aux->retiro;
   inicio=aux;//inicio continua igual al apuntador aux
   final=aux;//final apunta a aux
   
}
   }   
   }
}
void visualizar(){//función que permite mostrar datos
   system ("cls");//instrucción de borrado de pantalla
cout<<"\n\tLista de Clientes\n\n"<<"\n";//encabezado
      if(inicio==NULL)//si en el inicio de la lista no hay valores
     {
       
          cout<<"No hay informacion para mostrar\n\n"<<endl;//mensaje que retorna sin valores
     }
      else
     {
        aux=inicio;//datos en aux es igual a inicio, permite buscar desde el primer nodo recorriendo la lista
         while(aux!=NULL)//si el apuntador no esta vacio, se recorre la lista
        {
          cout<<"\nNombre del cliente: "<<aux->nombrecliente<<endl;//se muestra el valor
          cout<<"\nCedula: "<<aux->cedula<<endl;//se muestra el nit
          cout<<"\nConsignado: "<<aux->consignacion<<endl;
        cout<<"\nRetirado: "<<aux->retiro<<endl;
        cout<<"\nFecha: "<<aux->fecha<<endl<<endl<<endl;//se muestra la ciudad
          aux=aux->sgte;//avanza al siguiente valor hasta llegar a un valor vacio
        }
  }
  }
 
void buscar()//función que permite buscar datos
{
   system ("cls");//instrucción de borrado de pantalla
      aux=inicio;//datos en aux es igual a inicio, permite buscar desde el primer nodo recorriendo la lista
      cout<<"\n\tBuscar cliente\n\n";//cabecera
      cout<<"Nombre del cliente a buscar: ";//solicita el valor a buscar
      fflush(stdin);//libera el woofer
      gets(nombre_cliente);//muestra la información contenida
      if(inicio==NULL)//si en el inicio de la lista no hay valores
      {
          cout<<"\n\n NO HAY INFORMACION PARA MOSTRAR\n\n"<<endl;//mensaje que retorna sin valores
          return;//regresa a la función
      }
      else
      {
     aux=inicio;//datos en aux es igual a inicio, permite buscar desde el primer nodo recorriendo la lista
      while(aux!=NULL){//si el apuntador no esta vacio, se recorre la lista
          if (strcmp(aux->nombrecliente,nombre_cliente)==0)//comparador para verificar si existe un valor diferente a cero
        {
             cout<<endl<<"\n\t El nombre es: "<<aux->nombrecliente;//muestra la información contenida
              cout<<endl<<"\n\t El cedula es: "<<aux->cedula;//muestra la información contenida
              cout<<endl<<"\n\t El valor consignado es: "<<aux->consignacion;
           cout<<endl<<"\n\t El valor retirado es: "<<aux->retiro;
           cout<<endl<<"\n\t La fecha es: "<<aux->fecha<<endl<<endl;//muestra la información contenida
              return;//regresa a la función
          }
          aux=aux->sgte; //avanza al siguiente valor hasta llegar a un valor vacio
          cout<<endl<<"\n\t El nombre no fue encontrado\n\n";//mensaje que retorna sin valores
          return;//regresa a la función
     }
     }
}
            
void eliminar(){//función que permite eliminar datos
   system ("cls");//instrucción de borrado de pantalla
   if (aux==NULL)//si en el apuntador aux no hay valores
   cout<<"\n\t lista vacia"<<endl<<endl;//mensaje que retorna sin valores

else{
   cout<<"Nombre del Cliente a eliminar: ";//solicita el valor a eliminar
   fflush(stdin);//libera el woofer
     gets(nombre_cliente);//verifica si el valor esta almacenado
     aux=inicio;//datos en aux es igual a inicio, permite buscar desde el primer nodo recorriendo la lista
     while(aux!=NULL)//si el apuntador no esta vacio, se recorre la lista
     {
     if(strcmp(aux->nombrecliente,nombre_cliente)!=0)//comparador para verificar si existe un valor diferente a cero
     {
        ant=aux;//apuntadores ant es igual a aux indicando que los nodos son iguales
        aux=aux->sgte;//avanza al siguiente valor hasta llegar a un valor vacio
        cout<<"\n\t el nombre no coincide"<<endl<<endl;//valor que retorna si no existe el dato
     }
    else{
       if (aux==inicio)//nodo actual si es igual al que se va a borrar
       {
       inicio=inicio->sgte;//avanza del primer nodo eliminado al siguiente
       }
   else{
      if(aux->sgte==NULL){//si este es el ultimo valor
   ant->sgte=NULL;//el apuntador anterior es el ultimo de la lista
   final=ant;//apuntadores final es igual al ant
      }
   delete(aux);//elimina la información contenida en el apuntador aux
   cout<<"Nombre eliminado"<<endl;; //valor que retorna al eliminar el dato
   return;//regresa a la función
   }
   }
     }
}
}

      
//solicitud de usuario y contraseña      
int main(){//función principal
{
   system ("color 97");
   cout <<"\t \t BANCO SANTANDER"<<endl<<"\n\n\n";
   string usuario("");
   string contrasena("");
   cout<<"usuario: ";
   cin>>usuario;
   cin.get();
   
   if (usuario.compare("admin")==0){
      cout<<"contrasena: ";
      cin>>contrasena;
      if (contrasena.compare("123")==0)
         cout<<"\n\n\t\tBienvenido"<<endl<<"\n\n\n";
      else
         cout <<"Contrasena incorrecta";
               
         }
         else
            
         cout <<"Usuario incorrecta";
            
      cin.get();
      cin.get();
      
               
}
//menu de opciones
    int opc=0;//esta variable permite navegar por el menu
     do{//ciclo do while
        system ("cls");//instrucción de borrado de pantalla
        system ("color 1a");
     cout<<endl<<"\n\t SEMINARIO MINTIC ";//cabecera
     cout<<endl<<"\n\t Menu de Opciones "<<endl;
     cout<<"\n\t 1. Ingresar Cliente";
     cout<<"\n\t 2. Mostrar lista";
     cout<<"\n\t 3. Buscar en lista";
     cout<<"\n\t 4. Total recaudado";
     cout<<"\n\t 5. Total retirado";
     cout<<"\n\t 6. Eliminar cliente";
     cout<<"\n\t 7. Salir";
     cout<<endl<<"\n\n\tIngrese una opcion: ";
     cin>>opc;//permite leer la opción elegida
         switch(opc)//permite recibir el valor digitado
    {
       //cada caso es llamado al elegir la opción en el menu
     case 1:
           ingresar();
           system ("cls");//instrucción de borrado de pantalla
         break;//corte
     case 2:
            visualizar();
            system ("pause");//pausa para mostrar el menú
            system ("cls");//instrucción de borrado de pantalla
            break;//corte
     case 3:
             buscar();
             system ("pause");//pausa para mostrar el menú
             system ("cls");//instrucción de borrado de pantalla
          break;//corte
    case 4:
             cout<<endl<<"Total recaudado: $"<<totalconsignacion<<endl;
             system ("pause");//pausa para mostrar el menú
               system ("cls");//instrucción de borrado de pantalla
          break;//corte
    case 5:
             cout<<endl<<"Total retirado: $"<<totalretiro<<endl;
             system ("pause");//pausa para mostrar el menú
               system ("cls");//instrucción de borrado de pantalla
          break;//corte
     case 6:
             eliminar();
             system ("pause");//pausa para mostrar el menú
               system ("cls");//instrucción de borrado de pantalla
          break;//corte
    case 7:
             exit(0);
             default: cout<<"\n\tOpcion no encontrada\n";
             system ("pause");//pausa para mostrar
             break; //corte
             
     }cout<<endl; //salto de linea
   
     }while(opc!=6);//variables diferentes al caso 7
     return EXIT_SUCCESS;//retorno a cero
}