0

Lo que quiero es que en la opción 2, lea los clientes que he guardado en la opción 1 pidiendo la cedula de cada cliente, es decir, sólo mostrar en pantalla los datos solo del cliente que se pida.

En la opción 1, logré guardar a los clientes con la cedula, y en el archivo de texto se va guardando bien. El único problema es en la opción 2, que no sé realmente cómo pedir un solo dato (cedula) para que me imprima solo a el cliente llamado.

Ahí intenté hacer algo, pero ya no pude encontrar nada en foros y videos. Y si es posible, hacer en la opción 3 y 4 lo mismo que en las 2 primeras.

/* Biblioteca de Peliculas*/
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#include<fstream>
using namespace std;


struct cliente{
       char nombre[20], apellido[20], nempresa[100], rif[10];
       char direccion[50];
       char sexo[10];
       char ci[10];

       int edad, telfijo, telmovil;

}cli;
struct inventario{
       char codigo[3], pelicula[100], duracion[100], genero[20], director[20], provedor[20];
       int cant, disp;
       float psi, po,pdetal,pmayor;
}inv;

int opc;

char tipoc[9], ci[10], rif[10], codigo[3];

void encabezado()
{
 printf("\t------------------------------------------------------\n");
 printf("\t-                   BLOCKBUSTER                      -\n");
 printf("\t-     Meb Escobedo, Av. Raul Salinas Lozano 297      -\n");
 printf("\t-              66050 Cd Gral Escobedo, N.L           -\n");
 printf("\t-               MOVIL: 81 8901 2437                  -\n");
 printf("\t-                 HORARIO: 10AM-8PM                  -\n");
 printf("\t-                                                    -\n");
 printf("\t------------------------------------------------------\n\n");
 }

 void ingresoc(){
      ofstream archivo;
      FILE*ar;
      system("cls");
      printf("\t OPCION 1: CREAR CLIENTES\n\n");
       if((ar = fopen("cliente.txt","a+")) ==NULL){
        printf("No se pudo abrir el archivo correctamente. Verifique por favor.");
        }
        else
        {
        fflush(stdin);
        printf("\n Cedula de identidad: ");
        gets(cli.ci);
        fprintf(ar,"%s\t",cli.ci);
        printf("\n Nombre(s): ");
        gets(cli.nombre);
        fprintf(ar,"%s\t",cli.nombre);
        printf("\n Apellido: ");
        gets(cli.apellido);
        fprintf(ar,"%s\t",cli.apellido);
        printf("\n Direccion: ");
        gets(cli.direccion);
        fprintf(ar,"%s\t",cli.direccion);
        printf("\n Sexo (M/F): ");
        gets(cli.sexo);
        fprintf(ar,"%s\t",cli.sexo);
        printf("\n Edad: ");
        scanf("%d",&cli.edad);
        fprintf(ar,"%d\t",cli.edad);
        printf("\n Telefono Movil: ");
        scanf("%d",&cli.telmovil);
        fprintf(ar,"%d\t",cli.telmovil);
        printf("\n Telefono Fijo: ");
        scanf("%d",&cli.telfijo);
        fprintf(ar,"%d\t",cli.telfijo);


        }

      }
      // Ver datos guardados de la opción 1
      void verDatos(){
           system("cls");
           FILE*ar;
           fflush(stdin);
            printf("\tOPCION 2. VER DATOS DE CLIENTES ");
           printf("\n\n  Ingrese Cedula:");
                gets(cli.ci);
                if((ar = fopen("cliente.txt","r")) ==NULL){
                printf("No se pudo abrir el archivo correctamente. Verifique por favor.");
                }
                else
                else
                {
                while(!feof(stdin)){
                fprintf(ar,"%s %s %d %d %d %s %s\n", cli.nombre,cli.apellido, cli.telfijo, cli.direccion, cli.sexo );
                }
            fclose(ar);
            }
        getch();

}
      void ingresoi(){
           int j=0;
      system("cls");
      printf("\t OPCION 3: CREAR INVENTARIO\n\n");
      fflush(stdin);
      printf("\n Equipo: #%d",j);
                                       printf("\n Codigo del producto: ");
                                       gets(inv.codigo);
                                        printf("\n Nombre de la pelicula: ");
                                       gets(inv.pelicula);
                                        printf("\n Duracion: ");
                                       gets(inv.duracion);
                                       printf("\n Genero: ");
                                       gets(inv.genero);
                                       printf("\n Director: ");
                                       gets(inv.director);
                                        printf("\n Cantidad: ");
                                       scanf("%d",&inv.cant);
                                        printf("\n Disponible: ");
                                       scanf("%d",&inv.disp);
                                       printf("\n Precio al detalle: ");
                                       scanf("%f",&inv.pdetal);
                                       printf("\n Precio al mayor: ");
                                       scanf("%f",&inv.pmayor);
                                        printf("\n Precio sin IVA: ");
                                       scanf("%f",&inv.psi);
                                       printf("\n Precio oferta: ");
                                       scanf("%f",&inv.po);
                                       printf("\n Proveedor:");
                                       gets(inv.provedor);
                                       getch();
                                       }
      void verinv(){
           system("cls");
           printf("\n 4.  VER INVENTARIO");
                            printf("\n\n  Ingrese Codigo:");
                            scanf("%s",&codigo);

                            if(strcmp(codigo,inv.codigo)==0){
                                     printf("\n Codigo del producto:",inv.codigo);
                                        printf("\n Nombre de la pelicula:",inv.pelicula);
                                        printf("\n Duracion:",inv.duracion);
                                       printf("\n Genero",inv.genero);
                                       printf("\n Director",inv.director);
                                        printf("\n Cantidad: %d",inv.cant);
                                        printf("\n Disponible:%d",inv.disp);
                                       printf("\n Precio al detal %.2f",inv.pdetal);
                                       printf("\n Precio al mayor: %.2f",inv.pmayor);
                                        printf("\n Precio sin IVA: %.2f",inv.psi);
                                       printf("\n Precio oferta: %.2f",&inv.po);
                                       printf("\n Proveedor:",inv.provedor);
           }
           getch();
           }


int main(){
    encabezado();
    while(opc!=5){
                  printf("******MENU******\n");
                  printf("\n1. CREAR CLIENTES");
                  printf("\n2. VER DATOS DE CLIENTES");
                  printf("\n3. CREAR INVENTARIO");
                  printf("\n4. VER INVENTARIO");
                  printf("\n5. SALIR ");
                  printf("\nIngrese opcion: ");
                  scanf("%d",&opc);

                  switch(opc){
                              case 1:{
                                   ingresoc();
                                   system("cls");
                                   encabezado();
                                   }break;
                              case 2:{
                                   verDatos();
                                   system("cls");
                                   encabezado();
                                   }break;
                              case 3:{
                                   ingresoi();
                                   system("cls");
                                   encabezado();
                                   }break;
                              case 4:{
                                   verinv();
                                   system("cls");
                                   encabezado();
                                   }break;
                  }
                  }
                 return 0;

           }        


introducir el código aquí
PaperBirdMaster
  • 44,474
  • 6
  • 44
  • 82
  • 1
    Haz el favor de colocar bien tu código porque así no hay quién entienda nada. Así para empezar, veo dos else seguidos en la función verDatos, que dudo que ni compilen. – SuperG280 Dec 04 '19 at 08:51
  • Este código no compila y parte de hacer una pregunta correcta es dar un ejemplo verificable. Qué error obtienes? – Alfabravo Dec 04 '19 at 11:30

1 Answers1

1

Lo que quiero es que en la opción 2, lea los clientes que he guardado en la opción 1 pidiendo la cedula de cada cliente, es decir, sólo mostrar en pantalla los datos solo del cliente que se pida.

Guarda los clientes en un mapa, clasificados por cédula.

struct cliente{
   std::string nombre, apellido, nempresa, rif;
   std::string direccion;
   std::string sexo;
   std::string ci;

   unsigned int edad;
   unsigned long telfijo, telmovil;
};

using clientes_t = std::map<std::string, cliente>;

clientes_t clientes;

De esta manera será muy fácil buscar clientes mediante su cédula:

std::string cedula;
std::cout << "Busca cliente: ";
std::cin >> cedula;

if (auto found = clientes.find(cedula); found != clientes.end())
    std::cout << "Cliente encontrado:\n" << *found << '\n';
else
    std::cout << "Cliente " << cedula << " no encontrado\n";

Observarás que he hecho varios cambios a tu código. Para empezar, dado que has etiquetado la pregunta como he cambiado todas las formaciones de caracteres a std::string la edad a entero sin signo y los teléfonos a entero largo sin signo (porque 232 es insuficiente para almacenar teléfonos con prefijo internacional) y además te estoy aconsejando usar std::map.

Dicho esto, tu código es un auténtico caos incomprensible: Mezclas cabeceras de C con cabeceras de C++, creas un flujo de salida a archivo (std::ofstream) para no usarlo a la vez que usas utilidades de C (FILE*, printf) y el sangrado de tu código y su distribución haría llorar a las pesadillas Lovecraftianas.

En resumen, tu código no tiene salvación, esta es mi…

Propuesta.

Crea las clases pertinentes con su correspondiente operador de lectura/escritura en flujo de datos:

struct cliente {
   std::string nombre, apellido, nempresa, rif;
   std::string direccion;
   std::string sexo;
   std::string ci;

   unsigned int edad
   unsigned long telfijo, telmovil;
};

// Escritura desde flujo de datos a cliente
std::istream &operator>>(std::istream &i, cliente &c) {
    std::cout << "Nombre: ";
    std::getline(i, c.nombre);

    // […] etc, etc

    std::cout << "Edad: ";
    i >> c.edad;

    // […] etc, etc

    return i;
}

// Lectura de cliente a flujo de datos
std::ostream &operator<<(std::ostream &o, const cliente &c) {
    o << c.nombre << '\n' << c.apellido << '\n' …

    // […] etc, etc

    return o;
}

Con ello, tus funciones de ingreso o búsqueda quedarían así:

void guardar(const clientes_t &clientes) {
    if (std::ofstream archivo{"cliente.txt"}) {
        for (const auto &c : clientes)
            archivo << c.second << '\n';
    } else {
        std::cout << "No se pudo abrir el archivo correctamente. Verifique por favor.\n";
    }
}

void cargar(clientes_t &clientes) {
    if (std::ifstream archivo{"cliente.txt"}) {
        while (archivo) {
            cliente c;
            archivo >> c;
            clientes.insert({c.ci, c});
        }
    } else {
        std::cout << "No se pudo abrir el archivo correctamente. Verifique por favor.\n";
    }
}

void ingresoc(clientes_t &clientes) {
    cliente c;
    std::cin >> c;

    if (auto found = clientes.find(c.ci); found != clientes.end()) {
        std::cout << "El cliente ya existe";
    } else {
        clientes.insert({c.ci, c});
        guardar(clientes);
    }
}

void verDatos(clientes_t &clientes) {
    std::string cedula;
    std::cin >> cedula;

    if (auto found = clientes.find(cedula); found != clientes.end())
        std::cout << "Cliente encontrado:\n" << found->second << '\n';
    else
        std::cout << "Cliente " << cedula << " no encontrado\n";
}

Puedes ver el código funcionando en Wandbox.

PaperBirdMaster
  • 44,474
  • 6
  • 44
  • 82