[C con Clase] ayuda con ficheros y estructura porfiss :)

felician draghici felix1900toamna en yahoo.es
Lun Jun 3 17:17:38 CEST 2013


Hola tengo una duda con los ficheros y las estructuras,si alguien me puede echar una mano
Resulta que es un proyecto final y no se si esta bien utilizar una estructura para guardar todos los datos introducidos en un fichero o habra que utilizar una estructura de tipo array struct ejemplo estructura[]..ya sabeis,mi profe me esta volviendo un poco loco y necesito vuestra ayuda,tengo este programa de pedidos telefonicos(como por ejemplo un telecomida china),la pregunta es: si guardo todo en una estructura y se escribe luego en el fichero,luego puedo utilizar la misma estructura o habra que hacer una estructura "array"
,si se hace con una estructura nada mas los datos de ella deberan ser escritos en una fila del fichero o da igual de la escritora de este porque a mi me la escribe a continuacion y no puede hacer la comparacion entre numeros si los busco...gracias un saludo
 
 
 
 
 
/*Programa de pedidos telefonicos de comida rapida a domicilio
  -Almacenar numero de telefono
  -Almacenar la calle y el total de pedidos realizados junto con el precio 
  -Sacar pedidos de un fichero con el numero correspondiente a cada cosa
  -Imprimir la cantidad de cada cosa pedida y el precio de esta
  -Imprimir la cantidad total del pedido
  -Modificar el pedido entero
  -Total de pedidos mostrando los numeros de telefono
  -Utilizar las ultimas cuatro cifras del telefono para modificar el pedido
  -Mostrar la hora en pantalla cuando se ha realizado el pedido
  -Marcar suplemento adicional(poder cambiar cosas del menu y añadirle precio)
*/

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>

struct pedido introducir_datos(struct pedido telef);
int menu_programa(void);
int ver_menu(void);
void mostrar_pedidos(struct pedido telef);
struct pedido{
         char telefono[10];//numero de telefono del cliente
         char calle[40];//nombre de calle del cliente
         char portal[4];
         char piso[5];
         float pedidos;//valor pedido
         float total_pedidos;//valor total de los pedidos
       };

int main(void)
{
    struct pedido comanda, pedidos[50];
    int opcion,i=0;
    char tecla;
    FILE *fichero;
    
    do
    {
       opcion = menu_programa();
            
       switch(opcion)
       {
          case 1:do
                 {
                   comanda=introducir_datos(comanda);
                   printf("\nDesea introducir otro pedido?\n(S)i o (N)o: ");
                   tecla=tolower(getche());//convertir de mayusculas a minusculas
                  }while(tecla != 'n');
               break;
          case 2:
               break;
          case 3:
               break;
          case 4:ver_menu();
               break; 
          case 5:mostrar_pedidos(comanda);
               break;
          case 6:
               break;      
       }
    }while(opcion != 0);
    
 return 0;
}

int menu_programa(void)
{//FUNCION QUE PERMITE MOSTRAR EL MENU PRINCIPAL DEL PROGRAMA
    int var;
    system("cls");
    
    printf("\n\tMENU PRINCIPAL");
    printf("\n\n1) Insertar telefono ");
    printf("\n2) Modificar pedido(ultimos 4 digitos telefonicos) ");
    printf("\n3) Ver total dinero sacado en el dia ");
    printf("\n4) Consultar precios productos y modificarlos ");
    printf("\n5) Mostrar total pedidos(numeros de telefonos)");
    printf("\n6) Borrar pedido por pedido");
    printf("\n0) Salir programa"); 
    
    printf("\n\nTeclea opcion: ");
    scanf("%d",&var);
    fflush(stdin);
    
 return var;
getchar();       
}
struct pedido introducir_datos(struct pedido telef)
{//FUNCION QUE PERMITE AÑADIR DATOS EN EL FICHERO DE LOS PEDIDOS
      struct pedido {
         char num_tel[50];
         char direccion[50];
         char portal2[50];
         char piso2[50]; 
        }lectura;
    
     FILE *fichero;
     int a,b,encontrado=0;//contador
     char t,p,po,c;
    
     for(b=0;b<50;b++)
     { 
         lectura.direccion[b] = '\0';   
         lectura.piso2[b] = '\0';  
         lectura.portal2[b] = '\0';
         lectura.num_tel[b] = '\0'; 
     }
          
     system("cls");
     fichero = fopen("C://c_files//proyecto//productos.txt","ab+");
     
     if(fichero==NULL)
     {
        printf("\nEl fichero esta vacio");
     }
     else
     {
        printf("\nMarque el numero de telefono: ");
        scanf("%s",&lectura.num_tel);
        fflush(stdin); 
        
       
        fread(&telef.telefono,sizeof(telef.telefono),1,fichero);
        
        //empieza el fichero desde el principio
      /*  do
        {
            
           //  fread(&telef.telefono,strlen(telef.telefono),1,fichero);
             if(strcmp(telef.telefono,num_tel)==0)
             {
                 printf("\nSi");
                 encontrado=1;           
             }
        }while(feof(fichero) == 0);*/
        
       fseek(fichero,0L,0); 
    /*   do
       {
         if(strcmp(telef.telefono,lectura.num_tel)==0)
         {
            encontrado=1;
         }
         fread(&telef.telefono,strlen(telef.telefono),1,fichero);
         fgets(telef.telefono,1,fichero);
         printf("\n%s",telef.telefono);
       }while(feof(fichero)==0);*/
       
       if(strcmp(telef.telefono,lectura.num_tel)!=0)
       //if(encontrado==0)
       {      
          printf("\nEscriba el nombre de la calle:");
          scanf("%s",&lectura.direccion);
          fflush(stdin);
          printf("\nPortal:");
          scanf("%s",&lectura.portal2);
          fflush(stdin);
          printf("\nPiso y letra:");
          scanf("%s",&lectura.piso2);
          fflush(stdin);
        
          strcpy(telef.telefono,lectura.num_tel);
          strcpy(telef.portal,lectura.portal2);
          strcpy(telef.piso,lectura.piso2);
          strcpy(telef.calle,lectura.direccion);
          fwrite(&telef.telefono,sizeof(telef.telefono),1,fichero);
          fwrite(&telef.calle,strlen(telef.calle),1,fichero);
          fwrite(&telef.portal,strlen(telef.portal),1,fichero);
          fwrite(&telef.piso,strlen(telef.piso),1,fichero);   
       }
       else
       {   
          fread(&telef.telefono,sizeof(telef.telefono),1,fichero); 
          fread(&telef.calle,strlen(telef.calle),1,fichero);
          fread(&telef.portal,strlen(telef.portal),1,fichero);
          fread(&telef.piso,strlen(telef.piso),1,fichero);
       //   fgets(telef.calle,1,fichero);
        //  fgets(telef.portal,1,fichero);
        //  fgets(telef.piso,1,fichero);
          printf("\nTelefono: %s",telef.telefono);
          printf("\nCalle: %s",telef.calle);
          printf("\nPortal: %s",telef.portal);
          printf("\nPiso: %s",telef.piso);   
       }
     }
     
    
 ///   }//fin operaciones con el fichero
     fclose(fichero);
     
     
getchar();     
}
//FUNCION PARA VER EL LISTADO DE LAS COMIDAS Y PRECIOS QUE HAY EN EL RESTAURANTE
int ver_menu(void)
{
     system("cls");
     FILE *fm;//fichero menu comidas
     char letra;
     
     fm = fopen("C://c_files//proyecto//comidas.txt","rb");
     
     if(fm==NULL)
     {
        printf("\nError de lectura de fichero menu");
     }
     else
     {
        letra = fgetc(fm); 
         while(feof(fm)==0)
         {
            printf("%c",letra);
            letra = fgetc(fm);
         }
     }
     
     fclose(fm);
    
 getchar();
return 0; 
}
//FUNCION QUE MUESTRA TODOS LOS PEDIDOS QUE SE HAN REALIZADO
void mostrar_pedidos(struct pedido telef)
{
     FILE *fichero;
     char l;
     
     fichero = fopen("C://c_files//proyecto//productos.txt","rb");
     system("cls");
     
     if(fichero == NULL)
     {
         printf("\nEl fichero no tiene pedidos");
     }
     else
     {
        // fread(&telef,sizeof(telef),1,fichero);
         l=fgetc(fichero);
         while(feof(fichero)==0)
         {
            printf("%c",l);
            l=fgetc(fichero);
         }
     }
     fclose(fichero);
     
getchar();
}
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20130603/95121cd6/attachment.html>


Más información sobre la lista de distribución Cconclase