[ Foro de C++ ]

ayuda con ejercicio

19-Sep-2020 18:02
Mateo Gabriel Alvarez Vicino
1 Respuestas

hola necesito ayuda con mi programa me carga a los clientes como inactivos y no me funcionan los buscadores de cliente ni el de borrar

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <conio.h>
#define M -1
#include <locale.h>
using namespace std;
struct cliente
{
   int id_Usuario;
   char fecha_creacion[10];
   bool activo = true;
   float importe_compras=0;
   char email [50];
};
struct compras
{
   char id_compra;
   char fecha_hora;
   float monto_compra;
   char id_usuario_correspondiente;
   char nro_articulo;
};


bool cargar_nuevo_cliente(void)
{
   FILE*f;
   cliente cli;
   if (f = fopen("Clientes.bin","ab"))
   {
       cout << "Ingrese Nro. Id del cliente :" << endl;
       cin >> cli.id_Usuario;
       while (cli.id_Usuario == M)
       {
           cout << "Valor de Id Invalido, vuelva a ingresarlo porfavor" << endl;
           cin >> cli.id_Usuario;
       }
       cout << "Ingrese Fecha de Creacion de legajo :" << endl;
       cin >> cli.fecha_creacion;
       cout << "Ingrese Email del cliente :" << endl;
       cin >> cli.email;
       fwrite(&cli, sizeof(cliente),1,f);
       fclose(f);
       return true;
   }
   return false;
}

int cargar_compra(FILE*c,cliente v[],int tam)
{

   compras comp;
   double montocompraxd;
   int id;
   if (c = fopen ("procesados.bin" , "ab" ))
   {
       cout << "Ingrese Id de compra: " << endl;
       cin >> comp.id_compra;
       cout << "Ingrese Fecha y Hora en formato AAAAMMDDHH:MM : " << endl;
       cin >> comp.fecha_hora;
       cout << "Ingrese Monto de la compra " << endl;
       cin >> comp.monto_compra;
       montocompraxd = comp.monto_compra;
       cout << "Ingrese Id del Cliente que esta comprando: " << endl;
       cin >> comp.id_usuario_correspondiente;
       id = comp.id_usuario_correspondiente;
       cout << "Ingrese Nro de Articulo " << endl;
       cin >> comp.nro_articulo;
       fwrite(&comp, sizeof(compras),1,c);
       fclose(c);
       v[id].importe_compras += montocompraxd;
       return 0;

   }
   return 1;
}

int borrar (int id_Usuario)
{
   FILE *f;
   int encontrado =0;
   cliente cli;
   if (f=fopen("Clientes.bin","rb+"))
   {
       while(!encontrado && fread(&cli,sizeof(cliente),1,f))
       {
           if ((id_Usuario, cli.id_Usuario)==0)
           {
               encontrado = 1;
               cli.activo = false;
               fseek(f,(-1)*sizeof(cliente), SEEK_CUR);
               fwrite(&cli,sizeof(cliente),1,f);
           }
       }
       if (!encontrado)
           cout << "No se encontro la persona a borrar." << endl;
       fclose(f);
       return 1;
   }
   return 0;
}

int buscar(int id_Usuario)
{
   FILE *f;
   int encontrado = 0;
   struct cliente cli;
   if (f=fopen("Clientes.bin","rb"))
   {
       while(fread(&cli,sizeof(struct cliente),1,f) && !encontrado)
       {
           if ((id_Usuario, cli.id_Usuario)==0)
           {
               encontrado = 1;
               cout << "****** Datos del cliente *******" << endl;
               cout << "Id Cliente: " << cli.id_Usuario << endl;
               cout << "Fecha de Creacion: " << cli.fecha_creacion << endl;
               cout << "Activo: " << cli.activo << endl;
               cout << "Total importe compras: " << cli.importe_compras << endl;
               cout << "eMail: " << cli.email<< endl;
           }
       }
       if (!encontrado)
           cout <<"No se encontro al cliente buscado" << endl;
       fclose(f);
       return 1;
   }
   return 0;
}

int buscar_mail(char email[])
{
   FILE *f;
   int encontrado =0;
   struct cliente cli;
   if (f=fopen("Clientes.bin","rb"))
   {
       while(fread(&cli,sizeof(struct cliente),1,f) && !encontrado)
       {
           if (strcmp(email, cli.email)==0)
           {
               encontrado = 1;
               cout << "****** Datos del cliente *******" << endl;
               cout << "Id Cliente: " << cli.id_Usuario << endl;
               cout << "Fecha de Creacion: " << cli.fecha_creacion << endl;
               cout << "Activo: " << cli.activo << endl;
               cout << "Total importe compras: " << cli.importe_compras << endl;
               cout << "eMail: " << cli.email<< endl;
           }
       }
       if (!encontrado)
           cout <<"No se encontro al cliente buscado" << endl;
       fclose(f);
       return 1;
   }
   return 0;
}

int mostrarclientes(void)
{
   FILE *f;
   cliente cli;
   if (f=fopen("Clientes.bin","rb"))
   {
       fread(&cli,sizeof(cliente),1,f);
       while(!feof(f))
       {
               cout << "****** Datos del cliente *******" << endl;
               cout << "Id Cliente: " << cli.id_Usuario << endl;
               cout << "Fecha de Creacion: " << cli.fecha_creacion << endl;
               cout << "Activo: " << cli.activo << endl;
               cout << "Total importe compras: " << cli.importe_compras << endl;
               cout << "eMail: " << cli.email<< endl;
               fread(&cli,sizeof(struct cliente),1,f);
       }
       fclose(f);
       return 1;
   }
   return 0;
}

void inicializar_vector(cliente v[],int tam)
{
   for(int i=0; i<tam; i++)
   {
       v[i].id_Usuario = M;
   }
   return;
}

int contar_clientes (cliente v[], int tam)
{
   int x = 0;
   for (int i =0; i<tam; i++ )
   {
       if(v[i].id_Usuario != M)
           x++;
   }
   return x;
}

void ordenar_clientes (cliente v[], int tam)
{
   int i,j;
   cliente aux;
   for (i=0 ; i< tam -1 ; i++)
   {
       for(j=0 ; j< tam -1 -i ; j++)
       {
           if (v[j].importe_compras < v[j+1].importe_compras)
               aux = v[j];
               v[j] = v[j+1];
               v[j+1] = aux;
       }
   }
cout << "\nOrden ascendente" << endl;
for (i=0 ; i< tam -1 ; i++)
{
   cout << ordenar_clientes[i]<< "" ;
}
   cout<<"\n";



}
char menu()
{
   char opcion;
   cout << "Seleccione una opccion" << endl;
   cout << "1 - Cargar nuevo cliente" << endl;
   cout << "2 - Desactivar cliente existente" << endl;
   cout << "3 - Buscar un cliente por numero de ID" << endl;
   cout << "4 - Buscar un cliente por direccion de email" << endl;
   cout << "5 - Mostrar todos los clientes" << endl;
   cout << "6 - Mostrar lista de clientes activos" << endl;
   cout << "7 - Cargar una compra" << endl;
   cout << "8 - Ver compras de un cliente " << endl;
   cout << "9 - Esc - Salir" << endl;
   do
       opcion = getch();
   while (!(opcion > '0' && opcion < '6') && (opcion != 27));
   int id_cliente_desactivar;
   int numero_cliente_buscado;
   int email_cliente_buscado;
   switch(opcion)
   {
       case '1':
           if (cargar_nuevo_cliente ())
               cout << "El cliente fue cargado exitosamente" << endl;
           else
               cout << "Error al cargar el cliente" << endl;
       break;
       case '2':
           cout << "Ingrese el ID del cliente a desactivar :" << endl;
           cin >> id_cliente_desactivar;
           borrar (id_cliente_desactivar);
       break;
       case '3':
           cout << "Ingrese Id de cliente a buscar" << endl;
           cin >> numero_cliente_buscado;
           buscar(numero_cliente_buscado);
           if (!buscar(numero_cliente_buscado))
               cout << "Error al buscar el cliente"<< endl;
       break;
       case '4':
           cout << "Ingrese eMail de cliente a buscar" << endl;
           cin >> email_cliente_buscado;
           buscar(email_cliente_buscado);
           if (!buscar(email_cliente_buscado))
               cout << "Error al buscar el cliente"<< endl;
       break;
       case '5':
           if (!mostrarclientes())
               cout << "No hay clientes cargados en el sistema" << endl;
       break;
       case '6' :
           ordenar_clientes;
   }
}
int main()
{
setlocale (LC_ALL,"");
cliente vector_clientes[1000];
inicializar_vector(vector_clientes,1000);

char out;
   do
       out = menu();
   while (out != 27);
 return 0;
}


20-Sep-2020 04:09
Invitado (carlos Alfredo gaona )

hola en la funcion buscar por Id tienes que poner if(!encontrado) y en el segundo if((id_Usuario, cli.id_Usuario)==0) y te funciona.






Si ya eres usuario del sistema, puedes contestar desde tu cuenta y así ganar prestigio.

Si sólo eres un visitante, puedes optar por...