Dev - C++ - necesito ayuda con este programa

 
Vista:

necesito ayuda con este programa

Publicado por carlos (1 intervención) el 02/06/2015 04:54:32
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
#include <stdio.h>
 
/* definición de la estructura datosCliente */
struct datosProducto {
   int codPro;          /* codigo de producto */
   char nomPro[ 30 ]; /* nombre de producto */
   char prePro[ 10 ];   /* precio de producto */
   double exist;        /* existencia */
}; /* fin de la estructura datos de producto */
 
/* prototipos */
int intOpcion( void );
void archivoTexto( FILE *ptrLee );
void actualizaRegistro( FILE *ptrF );
void nuevoRegistro( FILE *ptrF );
void eliminaRegistro( FILE *ptrF );
int main()
{
   FILE *ptrCf; /* apuntador de archivo credito.dat */
   int eleccion;  /* elección del usuario */
 
   /* fopen abre el archivo; si no se puede abrir, sale del archivo */
   if ( ( ptrCf = fopen( "producto.dat", "rb+" ) ) == NULL ) {
      printf( "El archivo no pudo abrirse.\n" );
   } /* fin de if */
   else {
   /* permite al usuario especificar una acción */
      while ( ( eleccion = intOpcion() ) != 5 ) {
 
         switch ( eleccion ) {
 
            /* crea el archivo desde el registro */
            case 1:
               archivoTexto( ptrCf );
               break;
 
            /* actualiza registro */
            case 2:
               actualizaRegistro( ptrCf );
               break;
 
            /* crea registro */
            case 3:
               nuevoRegistro( ptrCf );
               break;
            /* elimina el registro existente */
            case 4:
               eliminaRegistro( ptrCf );
               break;
 
            /* si el usuario no selecciona una opción válida, despliega un mensaje */
            default:
               printf( "Opcion incorrecta\n" );
               break;
 
         } /* fin de switch */
 
      } /* fin de while */
 
      fclose( ptrCf ); /* fclose cierra el archivo */
   } /* fin de else */
 
   return 0; /* indica terminación exitosa */
 
} /* fin de main */
 /* crea un archivo de texto con formato para impresión */
void archivoTexto( FILE *ptrLee )
{
   FILE *ptrEscribe; /* apuntador del archivo cuentas.txt */
 
   /* crea datosCliente con información predeterminada */
   struct datosProducto producto = { 0, "", "", 0.0 };
 
   /* fopen abre el archivo; si no se puede abrir, sale del archivo */
   if ( ( ptrEscribe = fopen( "producto.txt", "w" ) ) == NULL ) {
      printf( "No pudo abrirse el archivo.\n" );
   } /* fin de if */
   else {
      rewind( ptrLee ); /* establece el apuntador en el principio del archivo */
      fprintf( ptrEscribe, "%-6s%-16s%-11s%10s\n",
         "CodigoProducto", "NombreProducto", "PrecioProducto","Existencia" );
 
      /* copia todos los registros del archivo de acceso aleatorio dentro del archivo de texto */
      while ( !feof( ptrLee ) ) {
         fread( &producto, sizeof( struct datosProducto ), 1, ptrLee );
 
         /* escribe un registro individual en el archivo de texto */
         if ( producto.codPro != 0 ) {
            fprintf( ptrEscribe, "%-6d%-16s%-11s%10.2f\n",
               producto.codPro, producto.nomPro,
               producto.nomPro, producto.exist );
         } /* fin de if */
 
      } /* fin de while */
 
      fclose( ptrEscribe ); /* fclose cierra el archivo */
   } /* fin de else */
 
} /* fin de la función archivoTexto */
/* actualiza el saldo en el registro */
void actualizaRegistro( FILE *ptrF )
{
   int producto;         /* nombre de producto */
   double transaccion; /* monto de la transacción */
 
   /* crea datosCliente sin información  */
   struct datosProducto codPro = { 0, "","", 0.0 };
 
   /* obtiene el número de cuenta para actualización */
   printf( "Introduzca el nombre de producto para actualizacion ( 1 - 100 ): " );
   scanf( "%d", &producto );
 
   /* mueve el apuntador de archivo para corregir el registro del archivo */
   fseek( ptrF, ( producto - 1 ) * sizeof( struct datosProducto ),
      SEEK_SET );
 
   /* lee un registro del archivo */
   fread( &producto, sizeof( struct datosProducto ), 1, ptrF );
 
   /* despliega un error si la cuenta no existe */
   if ( producto.codPro == 0 ) {
      printf( "El producto #%d no tiene informacion.\n", producto );
   } /* fin de if */
   else { /* actualiza el registro */
      printf( "%-6d%-16s%-11s%10.2f\n\n",
         producto.codPro, producto.NombreProducto,
         producto.PrecioProducto, producto.existencia );
         /* pide al usuario el monto de la transacción */
      printf( "Introduzca el cargo ( + ) o el pago ( - ): " );
      scanf( "%lf", &transaccion );
      producto.existencia += transaccion; /* actualiza el saldo del registro */
 
    printf( "%-6d%-16s%-11s%10.2f\n",
         producto.codPro, producto.NombreProducto,
         producto.PrecioProducto, producto.existencia );
   /* mueve al apuntador de archivo al registro correcto en el archivo */
      fseek( ptrF, ( producto - 1 ) * sizeof( struct datosProducto ),
         SEEK_SET );
  /* escribe el registro actualizado sobre el registro anterior en el archivo */
      fwrite( &producto, sizeof( struct datosProducto ), 1, ptrF );
   } /* fin de else */
} /* fin de la función actualizaRegistro */
 
/* elimina el registro existente */
void eliminaRegistro( FILE *ptrF )
{
   struct datosProducto producto; /* almacena los registros leídos en el archivo */
   struct datosProducto clienteEnBlanco = { 0, "", "", 0 }; /* cliente en blanco */
 int codProducto; /* número de cuenta */
 
   /* obtiene el número de cuenta para eliminarlo */
   printf( "Introduzca el codigo del producto a eliminar ( 1 - 100 ): " );
   scanf( "%d", &codProducto );
/* mueve el apuntador de archivo al registro correcto en el archivo */
   fseek( ptrF, ( codProducto - 1 ) * sizeof( struct datosProducto ),
      SEEK_SET );
/* lee el registro del archivo */
   fread( &producto, sizeof( struct datosProducto ), 1, ptrF );
    /* si el registro no existe, despliega un error */
   if ( producto.codPro == 0 ) {
      printf( "La cuenta %d no existe.\n", codProducto );
   } /* fin de if */
 else { /* elimina el registro */
 
      /* mueve el apuntador de archivo hacia el registro correcto en el archivo */
      fseek( ptrF, ( codProducto - 1 ) * sizeof( struct datosProducto ),
         SEEK_SET );
 
/* reemplaza el registro existente con un registro en blanco */
      fwrite( &clienteEnBlanco,
         sizeof( struct datosProducto ), 1, ptrF );
   } /* fin de else */
 } /* fin de la función eliminaRegistro */
 
/* crea e inserta un registro */
void nuevoRegistro( FILE *ptrF )
{
 /* crea datosCliente con información predeterminada */
   struct datosProducto producto = { 0, "", "", 0.0 };
int codProducto; /* número de cuenta */
/* obtiene el número de cuenta a crear */
   printf( "Introduzca el nuevo codigo del producto ( 1 - 100 ): " );
   scanf( "%d", &codProducto );
 /* mueve el apuntador de archivo hacia el registro correcto en el archivo  */
   fseek( ptrF, ( codProducto - 1 ) * sizeof( struct datosProducto ),
      SEEK_SET );
 /* lee el registro desde el archivo */
   fread( &producto, sizeof( struct datosProducto ), 1, ptrF );
 /* si la cuenta ya existe, despliega un error */
   if ( producto.codPro != 0 ) {
      printf( "El producto #%d ya contiene informacion.\n",
              producto.codPro );
   } /* fin de if */
 else { /* crea registro */
 
      /* el usuario introduce el apellido, el nombre y el saldo */
      printf( "Introduzca el NombreProducto, PrecioProducto, y la existencia\n? " );
      scanf( "%s%s%lf", &producto.NombreProducto, &producto.PrecioProducto,
         &producto.existencia );
    cliente.numCta = numCuenta;
 
      /* mueve el apuntador de archivo hacia el registro correcto en el archivo */
      fseek( ptrF, ( producto.codPro - 1 ) *
         sizeof( struct datosProducto ), SEEK_SET );
/* inserta el registro en el archivo */
      fwrite( &producto,
         sizeof( struct datosProducto ), 1, ptrF );
   } /* fin de else */
 } /* fin de la función nuevoRegistro */
 
/* inhabilita al usuario para introducir una opción de menú */
int intOpcion( void )
{
   int opcionMenu; /* variable para almacenar la opción del usuario */
 /* despliega las opciones disponibles */
   printf( "\nIntroduzca su opcion\n"
      "1 - Crear un archivo de texto con formato, de las cuentas llamadas\n"
      "    \"cuentas.txt\" para impresion\n"
      "2 - actualiza un producto\n"
      "3 - agrega un nuevo producto\n"
      "4 - elimina un producto\n"
      "5 - elimina un producto\n"
      "7 - fin del programa\n? " );
      scanf( "%d", &opcionMenu ); /* recibe la opción del usuario */
 
   return opcionMenu;
 
} /* fin de la función introduceOpcion */
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder