• Lunes 16 de Diciembre de 2024, 04:42

Autor Tema:  Creacion Y Visualizacion Fichero  (Leído 1108 veces)

akiestudio

  • Miembro activo
  • **
  • Mensajes: 40
    • Ver Perfil
Creacion Y Visualizacion Fichero
« en: Jueves 14 de Febrero de 2008, 12:46 »
0
Hola buenos dias , estoy intentando crear y visualizar un fichero , pero no consigo crearlo , tengo este codigo alguna ayuda.



-----------------------------------------------------------------------------*/
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>

/* 1) *Declaracion del registro*/
struct REGISTRO{
       char almacen[10];
       char codpro[10];
       char descri[20];
       int exis;
       long precio;
}reg;

/* 2) Declaracion de fichero */

FILE *pf;
void Creacion(), Visualizacion(),Salir();
int  i , op;
char Titulo[80];

void main(){
     void Creacion(), Viusalizacion(),Salir();

    do{

      clrscr();
      gotoxy (35,2);printf("M E N U FICHERO");
      gotoxy (35,6);printf("1-C R E A C I O N");
      gotoxy (35,8);printf("2-V I S U A L I Z A C I O N");
      gotoxy (35,10);printf("4=Salir:");
      gotoxy (32,16);printf("Teclea opcion:");
      clreol(); fflush(stdin);scanf("%d",&op);

           if(op!=4)


      switch(op){
                case 1: clrscr();Creacion(); break;
                case 2: clrscr();Visualizacion();break;
                case 4: clrscr();Salir(); break;

      }
    }while(op!=4);
}
void Creacion(){

 // 3) Cabecera Titulo del proceso
 clrscr();
 printf(" CREACION DE FICHERO SECUENCIAL \n");
 printf("=============================== \n");

// 4) Apertura del fichero


 if ((pf=fopen("FALMACEN.DAT","wb"))== NULL)
  {
    printf(" No se puede abrir el archivo ...\n");
    exit(0);
  }

 while(1)
 {
 /*5)Tecleo de datos del registro para alamacebarlas en var.de memo,principal*/
 printf("Introduce ALMACEN (fin = f):");gets(reg.almacen);
 if(strcmp(reg.almacen,"f") == 0);
  printf("Introduce Cod.Pro  :");gets(reg.codpro);
  printf("Introduce Descripcion  :");gets(reg.descri);
  printf("Introduce Existencias :");scanf("%d",®.exis);
  printf("Introduce Precio_unit  :");scanf("%ld",®.exis);
  fflush(stdin);
 /* Grabacion del registro en el fichero */
 fwrite(®,sizeof(reg),1,pf);
 }
 /* Cierre delfichero */
 fclose(pf);
 printf("Fichero creado"); getch();

}
 void Visualizacion(){
      clrscr();
 printf("Dame Titulo de la Visualizacion: "); gets(Titulo);

 //2) visulaizamos el Titulo:
 clrscr();
 printf("%s\n",Titulo);
 for(i=0;i<strlen(Titulo);i++) printf("=");printf("\n\n");

 //3 Cabezeras Campos registro:
 printf("%-15s %-15s %-20s %10s %10s\n","ALMACEN","COD.PRO", "DESCRIPC.",
                                        "EXISTENCIAS","PRECIO");

 for(i=0;i<80;i++) printf("-");

 // 4)Apertura del archivo_

 if ((pf=fopen("FALMACEN.DAT","rb"))== NULL)
  {
    printf(" No se puede abrir el archivo ...\n");
    exit(0);
  }


 // 5) Lectura del primer registro:

 fread(®,sizeof reg,1,pf);
 while(!feof(pf))
 {

 //6) Visualizacion del registro
  printf("%-15s %-15s %-20s %10s %10s\n", reg.almacen,reg.codpro,
                                          reg.descri,reg.exis,reg.precio);


 // 7)Lectura de los siguientes registros.

   fread(®,sizeof reg,1,pf);
 }

 //8) Cierre del archivo

  fclose(pf);
  getch();
}
void Salir(){
}

akiestudio

  • Miembro activo
  • **
  • Mensajes: 40
    • Ver Perfil
Re: Creacion Y Visualizacion Fichero
« Respuesta #1 en: Viernes 22 de Febrero de 2008, 10:41 »
0
Por favor , no hay nadie que me pueda echar una mano ......gracias de nuevo

carmamezo

  • Miembro MUY activo
  • ***
  • Mensajes: 232
    • Ver Perfil
Re: Creacion Y Visualizacion Fichero
« Respuesta #2 en: Viernes 22 de Febrero de 2008, 11:45 »
0
Hola,
prueba con esto...
Código: Text
  1.  
  2. void Creacion()
  3. {
  4.   // 3) Cabecera Titulo del proceso
  5.   system(&#34;Cls&#34;);
  6.   printf(&#34; CREACION DE FICHERO SECUENCIAL &#092;n&#34;);
  7.   printf(&#34;=============================== &#092;n&#34;);
  8.  
  9.   // 4) Apertura del fichero
  10.   if ((pf=fopen(&#34;FALMACEN.DAT&#34;,&#34;wb&#34;))== NULL)
  11.   {
  12.     printf(&#34; No se puede abrir el archivo ...&#092;n&#34;);
  13.     exit(0);
  14.   }
  15.  
  16.   do
  17.   {
  18.     /*5)Tecleo de datos del registro para alamacebarlas en var.de memo,principal*/
  19.     printf(&#34;Introduce ALMACEN (fin = f):&#34;);
  20.       gets(reg.almacen);
  21.  
  22.     if(strcmp(reg.almacen,&#34;f&#34;) != 0)
  23.     {
  24.       printf(&#34;Introduce Cod.Pro :&#34;);gets(reg.codpro);
  25.       printf(&#34;Introduce Descripcion :&#34;);gets(reg.descri);
  26.       printf(&#34;Introduce Existencias :&#34;);scanf(&#34;%d&#34;,&reg.exis);
  27.       printf(&#34;Introduce Precio_unit :&#34;);scanf(&#34;%ld&#34;,&reg.exis);
  28.       fflush(stdin);
  29.       fwrite(&reg,sizeof(reg),1,pf);
  30.     }
  31.   }while(strcmp(reg.almacen,&#34;f&#34;)!=0);
  32.   /* Cierre delfichero */
  33.   fclose(pf);
  34.   printf(&#34;Fichero creado&#34;); getch();
  35.  
  36. }
  37.  
  38.  
  39.  
El system("Cls") es la variante de clrscr() del MS-DOS.
El resto del código no lo he mirado... de todas formas la operativa para crear un programa (dado que veo que no tienes mucha experiencia) es primero hacer la primera función y probarla hasta que funciona, luego la siguiente y así sucesivamente.  Si haces el programa completo y luego te pones a buscar fallos vas a tardar mucho en encontrarlos...  También te recomiendo que uses el debugger para buscar fallos (normalmente con F11 ejecutas el programa paso a paso...)  Te hubieras dado cuenta rápido de que habías creado un bucle infinito con While(1), y nunca salías de él...  Podrías haberlo solucionando poniendo un break debajo del if (que lo has puesto con un punto y coma y por tanto no hace nada de nada).  Por otra parte no te recomiendo que uses este método, usa siempre condiciones en los bucles while y do while....



Un saludo.
 :lightsabre:
No hay tonto más molesto que el ingenioso.