Ver Mensaje Individual
  #5 (permalink)  
Antiguo 04/06/2015, 09:05
Srgy
 
Fecha de Ingreso: junio-2015
Ubicación: Murcia
Mensajes: 6
Antigüedad: 8 años, 11 meses
Puntos: 0
Respuesta: Programa para consultar datos struct

Queda claro, pero aún así creo que no lo estoy haciendo de modo correcto. Que el programa funcione a veces correctamente y otras no me da que pensar.

Sigo pensando que esa variable que tengo como localidad me está dando problemas por no depurarse cada vez que hago un ciclo. Es un programa que estoy haciendo para practicar las struct y las cadenas de caracteres (que siempre me dan una batalla...)


Código HTML:
#include <cstdlib>
#include <iostream>
#include <ctype.h>
#include <string.h>
#include <conio.h>

using namespace std;

main()
{
      int centinela=0; //variable que se hace 1 si localidad tiene coincidencia caracter a caracter
      char pass='0';
      char localidad[40];
      int num_of=0000;
       
       system("color 4F");
          struct oficina{
           int numero;
           long CP, tlf;
           char nombre[50];
           char ciudad[50];
           char direccion[60];
           char ciudad2[30];
           char municipio[30];
           };
    
    struct oficina lista[100];
    
    lista[0].numero = 210;
    lista[0].CP = 30008;
    lista[0].tlf = 968244316;
    strcpy(lista[0].nombre, "Murcia");
    strcpy(lista[0].direccion, "Plaza Circular, 6");
    strcpy(lista[0].ciudad, "Murcia");
    strcpy(lista[0].municipio, "MURCIA");
    
   //hay otras tantas variables de este tipo, no las pongo por no ocupar todo ese espacio.    
    
    
      int option=0;
      
      do{
      system("cls");
      cout<<"\n  BASE DE DATOS OFICINAS BSCAM MURCIA. Selecciona operacion\n\n\n\n\t1) Consulta por localidad\n\n\t2) Consulta por numero de oficina\n\n";
      cin>>option;
      cin.ignore(256,'\n');
           
      switch(option)
      {
      case 1: 
           do{      
          
           system("cls");          
           cout<<"Introduce nombre de localidad\n";
           gets(localidad);
           cin.ignore(256,'\n');
  
           
    //hacer minuscula lo introducido para comparar
    for(int i=0; i<strlen(localidad)-1; i++)
      localidad[i] = tolower(localidad[i]);
  
 
   
    for(int i=0; i<100; i++)
     { //For
      
         //hacer minuscula el campo .ciudad del struct para compararlo a localidad
         for(int z=0; z <strlen(localidad)-1; z++)
              {
              lista[i].ciudad[z] = tolower(lista[i].ciudad[z]);
              lista[i].ciudad2[z] = tolower(lista[i].ciudad2[z]);
              }
         //comparar los campos para comprobar si hay coincidencias en alguna struct
         for(int z=0; z <strlen(localidad)-1; z++)
           { //for de comparacion
           if((localidad[z] == lista[i].ciudad[z])||(localidad[z] == lista[i].ciudad2[z]))
           centinela = 1;
           else
              { //else
              centinela = 0;   

              break;
           } //else END
           } // for comparacion OFF

        //si la comparación ha sido existosa, se muestra el dato
        if(centinela ==1)
                   { //comparación OK
                            //hacer mayúsculas el campo .ciudad       
                            for(int z=0; z <strlen(lista[i].ciudad); z++)
                            {lista[i].ciudad[z] = toupper(lista[i].ciudad[z]);}
                            //Muestra de la información coincidente con la busqueda
                            {cout<<"_____________________________\n>>Oficina BS "<<toupper(lista[i].numero)<<"\n\n"<<lista[i].direccion<<"\n"<<lista[i].nombre<<"\n"<<"Telefono: "<<lista[i].tlf<<" CP:"<<lista[i].CP<<"\n("<<lista[i].ciudad<<") Municipio: "<<lista[i].municipio<<"\n";
                            }                 
                   } //comparación OK END
         else; //si no hay coincidencia, no hace nada de lo anterior y sigo comprobando con el for

      }//For END
     
           cout<<"\nDesea buscar otra oficina? (puse 'r') o desea volver a menu (pulse cualquier tecla";    
           cin>>pass;
           }while(pass =='r');
           
           break;
           
     case 2:
          
          num_of=0;
          centinela=0;
     
          do{
              system("cls");
               cout<<"Introduce numero de oficina...";
               cin>>num_of;
             
          for(int i=0;i<154;i++)
                    { if(lista[i].numero == num_of)
                       {
                       cout<<"Aqui muestro la oficina que coincide con el criterio de busqueda"<<toupper(lista[i].numero)<<"\n\n"<<lista[i].direccion<<"\n"<<lista[i].nombre<<"\n"<<"Telefono: "<<lista[i].tlf<<" CP:"<<lista[i].CP<<"\n("<<lista[i].ciudad<<") Municipio: "<<lista[i].municipio<<"\n";
                       centinela = 1;
                       } }
           if(centinela == 0)cout<<"\nEl numero no concuerda con ninguna oficina listada\n";
           
           cout<<"\nDesea buscar otra oficina? (puse 'r') o desea volver a menu?\n(pulse cualquier tecla)";    
           cin>>pass;
           }while(pass =='r');
           
       
          break;
          }//do
      
      }while(option != 3);//do-while principal
    system("PAUSE");
    return 0;
}
¿Como lo veis?

Suelo tener un error cuando en el case 1 me pregunta si deseo repetir ('r'), pasan cosas raras ahí, jeje.

PD. Perdón por el tochazo de librerías, aun no me aclaro con cuales me son útiles para estas funciones de caracteres y cuales no. .

A algun forero ya le he leído que alguna en concreto (la conio) no le gusta nada de nada, estaría bien saber su punto de vista y si conviene evitarlas.