Hola, alguien podria ayudarme con este codigo de c++

Iniciado por orange43, 15 Marzo 2015, 21:22 PM

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

orange43

hola, tengo este codigo que me pide lo siguiente, ya corre el menu sin problemas, pero la problematica esta en los programas.

Una biblioteca necesita llevar el inventario de los libros que tiene y el usuario plantea los siguientes requerimientos.

a) El inventario consta de 4000 libros.
b) Se captura el ISBN del libro, la cual es la clave del libro y es numérico y el precio de dicho libro.
c) La captura puede ser terminada en cualquier momento
d) Poder ver en la pantalla los libros que haz capturado, mostrar el ISBN
e) Antes de mostrar los libros debemos validar que existan ya capturados
f) Tambien desea poder buscar, por el isbn algun libro
g) Que el programa muestre opciones en un menu y elegir la opcion deseada
h) Que el programa termine cuando yo le de la opcion de "terminar".
I) No permitir capturas duplicadas, en caso de que el usuario quiera  capturar un ISBN de un libro que ya existe capturado, que mande un mensaje de error y me pida el siguiente numero de libro.

MENU BIBLIOTECA.

1) Capturar el inventario de libros

2)Buscar un libro (por numero de isbn)

3) Mostrar el inventario capturado

4) Ordenar los libros capturados (Ascendente o descendente)

5) Salir


Puntos a considerar

para el punto 1: El usuario debe proporcionar el isbn del libro. No puede capturar mas de 4000 libros. Por cada captura, debemos preguntar si quiere seguir capturando libros, si no lo desea, mandar un mensaje de fin y terminar la captura. No pueden existir ISBN negativos.

para el punto 2: Solicitar al usuario que numero de libro quiere buscar en todos los libros que capturo. Y debe mostrar un mensaje indicando en que posicion se encuentra entre todos  los capturados si es que lo esta.

para el punto 3: Se deben mostrar los datos del ISBN del libro asi como su precio.

para el punto 4: Se deben ordenar en orden ascendente o descendente los libros capturados

para el punto 5: el menu debe repetirse hasta que se de la opcion 5, salir.


Y aqui tengo mi intento de codigo del programa no se si le falte algo o le retire algo.

Código (cpp) [Seleccionar]
#include <cstdlib>
#include <iostream>
#include <cctype>
#include <string>
using namespace std;
char menu();
void casos(int);
void captura();
void buscar();
void muestra() ;
void ordena();

int biblio[4000] ;

int main(int argc, char *argv[])
{
       char opcion = ' ' ;
   do{
   
   opcion= menu();
   casos(opcion);
}while (opcion!='E');  

   system("PAUSE");
   return EXIT_SUCCESS;
}


char menu()
{  char opcion = '  ';
cout <<"\nDepartamento de biblioteca\n";
cout <<"\n*******************************************\n";
  cout << "\nA) Capturador de libros\n";
  cout << "\nB) Buscar un libro\n";
  cout << "\nC) Muestra el inventario \n";
  cout << "\nD) Ordena los libros capturados \n";
  cout << "\nE) Salir";
  cout << "\n Dame la opcion :";  
  cin >> opcion;
  opcion = toupper(opcion);
  return opcion;
    }
   
   
void casos(int opcion)
{
 switch (opcion)
 {
    case 'A' :
         {
            captura();
            break ;
         }
 
 
      case 'B' :
         {
            buscar();
            break ;
         }
         
       
       case 'C' :
         {
            muestra();
            break ;
         }  
       
       case 'D' :
         {
              ordena();  
           
            break ;
         }  
         case 'E':
              {
         cout << "\n Gracias por usar nuestro programa\n";
             break;
             }
       default :
               {
                 cout << "\n Error en opcion \n";
                 break ;    
                }

}
return;
}


void captura(){
    int P,Q;
   int q[4000];
   
    cout <<"\n Estas en la sección de captura de libros \n";
    cout <<"\n ******************************************** \n\n";
   
     do{
        cout << "Inserta ISBN\n " ;
        cin >> biblio[4000];
    if(int len = ( sizeof(4000)/sizeof(biblio[0]) )){
           
           cout<<"error numero de ISBN REPETIDO!!!\n";
           }
           else{
           cout<<"hola";}
      fflush( stdin );
       
        cout<<"Quieres seguir capturando?...\n S=1/N=0\n";
        cin>>P;
             
         
         
         }while(P != 0) ;
 
       
 system("cls");

 return ;
}  
   
   
   
void buscar()
{
    float ISBN_a_buscar = 0.0;
    int alumnos = 0 ;
    cout <<"\n Estas en la sección de busqueda de libros \n";
    cout <<"\n ******************************************** \n";
    cout <<"\n Inserta ISBN del libro que estas buscando \n";
    cin >> ISBN_a_buscar;
   
    for (int x = 0 ; x < 4000 ; x++)
       {
         if ( ISBN_a_buscar == biblio[x])
            {
              ++alumnos;
            }
       }
       
   
       
  return  ;
   
   
   
   
    }
void muestra()
{
    cout <<"\n Estas en la sección de muestra de captura de libros \n";
   
    cout <<"\n ******************************************** \n";
    for (int x = 0 ; x < 4000 ; x++)
       {
         cout << "\nLo capturado : " <<  biblio[x];
        }
  cout <<endl;
  system("pause");
  system("cls");
  return ;  
   
   
    }
void ordena()
{
    cout <<"\n Ordena de la forma que mas te agrade los libros capturados \n";
    cout <<"\n ******************************************** \n";
    int aux=0;
for(int x=0; x <4000 ; x++)
{
       for(int y=0;y<4000-1;y++)
       {
               if (biblio[y]>biblio[y+1])
               {
                                   aux=biblio[y];
                                   biblio[y]=biblio[y+1];
                                   biblio[y+1]=aux;
                                   }
                                   }
                                   }
                                   cout <<"\nSe han ordenado en forma Ascendente\n";
for(int x=0; x >4000 ; x++)
{
       for(int y=0;y>4000-1;y++)
       {
               if (biblio[y]>biblio[y+1])
               {
                                   aux=biblio[y];
                                   biblio[y]=biblio[y+1];
                                   biblio[y+1]=aux;
                                   }
                                   }
                                   }
                                   cout <<"\nSe han ordenado en forma Descendente\n";
                                                     
                                   
                                   
                                   return;
                                   }


espero que puedan ayudarme por favor

Mod: Al publicar código, usa las etiquetas GeSHi[/b]

LaThortilla (Effort)

#1
Cual es tu pregunta concreta? desde mi punto de vista tu programa cumple con lo que te han pedido.. no lo he calado

orange43

#2
Cita de: Effort en 15 Marzo 2015, 21:46 PM
Cual es tu pregunta concreta?
Es que el programa que estoy haciendo no realiza las funciones que solicito y no se en que este mal.


Cita de: Effort en 15 Marzo 2015, 21:46 PM
Cual es tu pregunta concreta? desde mi punto de vista tu programa cumple con lo que te han pedido.. no lo he calado

Cita de: Effort en 15 Marzo 2015, 21:46 PM
Cual es tu pregunta concreta? desde mi punto de vista tu programa cumple con lo que te han pedido.. no lo he calado

Mod: No hacer doble post, usa el boton modificar

LaThortilla (Effort)

#3
Cita de: orange43 en 15 Marzo 2015, 21:49 PM
el menu corre sin problemas, pero la problematica esta cuando lo utilizas


en el void buscar(), no me deja insertar el ISBN que busco.

en el void muestra(), no me muestra nada, como si no se hubiera guardado la captura y se buclea muchas veces.

en el void ordena(), solo aparecen los mensajes, pero no aparecen los ISBN entonces no me ordena nada.

espero y te haya quedado mas claro, espero y lo cales y veras el problema
Cita de: orange43 en 15 Marzo 2015, 21:49 PM
en el de void captura() lo que si funciona es la pregunta de que si quieres seguir capturando datos, pero el error es que no me marca error si anoto un dato repetido, y lo que quiero que haga es que si coloco un ISBN igual me marque un error.
Funcion capturar()
Código (cpp) [Seleccionar]
void captura(){
    int P,Q;
   int q[4000];

    cout <<"\n Estas en la sección de captura de libros \n";
    cout <<"\n ******************************************** \n\n";

     do{
        cout << "Inserta ISBN\n " ;
        cin >> biblio[4000];
    if(int len = ( sizeof(4000)/sizeof(biblio[0]) )){

           cout<<"error numero de ISBN REPETIDO!!!\n";
           }
           else{
           cout<<"hola";}
      fflush( stdin );

        cout<<"Quieres seguir capturando?...\n S=1/N=0\n";
        cin>>P;



         }while(P != 0) ;


 system("cls");

 return ;
}  


1- en la linea 16 estas almacenando todo en el mismo indice si no me equivoco.....
   
Código (cpp) [Seleccionar]
cin >> biblio[4000];
2- Esta validación no sirve..
 
Código (cpp) [Seleccionar]
if(int len = ( sizeof(4000)/sizeof(biblio[0]) )){// esto te retornara siempre la longitud del array(retorna espacios del array sin importar si están ocupados o no)

           cout<<"error numero de ISBN REPETIDO!!!\n";
           }

te recomiendo que uses el algoritmo para buscar que ya tienes y valides con eso....

Código (cpp) [Seleccionar]

     int existelibro(int ISBN){ // esta funcion te retornara el index del libro en el array o -1 si no existe
          int retorno = -1;
          for (int x = 0 ; x < 4000 ; x++)
          {
              if ( ISBN == biblio[x])
             {
               retorno = x;
              }
           }
       return retorno;
    }

3- te falta validar que la cantidad de registros no excedan 4000.....
   * necesitas un contador de registros
          - o lo incrementas cada vez que registres o cuando busques si existe cuentas ahi cuantos registros existen

déjame lo checo lo demas y te digo.. espero no tengas prisa por que ando algo ocupado....

orange43

#4
Cita de: Effort en 15 Marzo 2015, 23:29 PM
déjame lo checo y te digo.. espero no tengas prisa por que ando algo ocupado....
no te preocupes, la fecha limite que tengo para entregarlo es para mañana lunes antes de las 10 de la mañana, hora México, que en tu horario serian las 5 de la tarde