Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] editar registro c++

Estas en el tema de editar registro c++ en el foro de C/C++ en Foros del Web. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código C++: Ver original #include <iostream> #include <fstream> #include <cstdlib> #include <string.h>   using namespace std ;   class Cine {     ...
  #1 (permalink)  
Antiguo 13/10/2013, 01:35
 
Fecha de Ingreso: agosto-2009
Mensajes: 292
Antigüedad: 14 años, 8 meses
Puntos: 5
editar registro c++

Código C++:
Ver original
  1. #include <iostream>
  2. #include <fstream>
  3. #include <cstdlib>
  4. #include <string.h>
  5.  
  6. using namespace std;
  7.  
  8. class Cine {
  9.     public:
  10.         void capturar();
  11.         void mostrar();
  12.         void buscar_nombre();
  13.         void buscar_horario();
  14.         void vender();
  15.         void ventas();
  16.        
  17.     private:
  18.         int boletos;
  19.         float precio;
  20.         char nombre[ 22 ], horario[ 22 ], sala[ 22 ];  
  21. } c;
  22.  
  23. void Cine::vender() {
  24.     int contador = 0, compra_act;
  25.     float venta_act, pago_act;
  26.     char b_nombre[ 22 ];
  27.    
  28.     ifstream leer_archivo_boletos( "cine.txt", ios::in );
  29.    
  30.     if( leer_archivo_boletos.fail() ) {
  31.         cerr << "Error al leer el archivo cine.txt" << endl;
  32.         exit( 1 );
  33.     }
  34.    
  35.     cout << "Buscar nombre: "; cin >> b_nombre;
  36.    
  37.     while( !leer_archivo_boletos.eof() ) {
  38.         leer_archivo_boletos.read( ( char * )&c, sizeof( c ) );
  39.        
  40.         if( leer_archivo_boletos.eof() ) {
  41.             break;
  42.         }
  43.        
  44.         if( strcmp( b_nombre, nombre ) == 0 ) {
  45.             cout << "\nNombre: " << nombre << endl;
  46.             cout << "Boletos disponibles: " << boletos << endl;
  47.             cout << "Precio: $" << precio << endl;
  48.             cout << "Sala: " << sala << endl;
  49.             cout << "Horario: " << horario << endl << endl;
  50.            
  51.             contador++;
  52.        
  53.        
  54.             if( boletos > 0 ) {
  55.                 cout << "Cantidad de boletos a comprar: "; cin >> compra_act;
  56.                
  57.                 while( compra_act > boletos ) {
  58.                     cout << "\nCantidad de boletos no disponibles. Introdusca una cantidad menor de boletos: ";
  59.                     cin >> compra_act;
  60.                 }
  61.                
  62.                 venta_act = compra_act * precio;
  63.                
  64.                 cout << "Total a pagar: $" << venta_act << endl << endl;
  65.                 cout << "Introdusca su pago: $"; cin >> pago_act;
  66.                
  67.                 while( pago_act < venta_act ) {
  68.                     cout << "Pago insuficioente. Introdusca su pago nuevamento: $"; cin >> pago_act;
  69.                 }
  70.                
  71.                 cout << "Su cambio es de $" << pago_act - venta_act << ". Vuelva pronto!" << endl;
  72.                
  73.                
  74.             } else {
  75.                 cout << "Los boletos para esta pelicula estan agotados" << endl;
  76.             }
  77.         }
  78.     }
  79.    
  80.     leer_archivo_boletos.close();
  81.    
  82.     if( contador == 0 ) {
  83.         cout << "\nNo se encontro ninguna pelicula con el nombre buscado" << endl;
  84.     }
  85. }

hola que tal, lo que pasa es que tengo un programa que lo que hace es capturar el nombre de una película y demás datos. Tengo un objeto llamado vender y lo que hace es pedir el nombre de la película y si existe te pregunta cuantos boletos quieres comprar y si hay los suficientes boletos los vende y te muestra lo que tienes que pagar. Hasta aquí funciona todo correctamente, pero lo que quiero agregarle al programa es que cuando compres boletos se le vallan restando al archivo y se guarden.

Alguien sabe como puede hacer esto y con que funcion.

muchas gracias de antemano

Saludos
  #2 (permalink)  
Antiguo 15/10/2013, 06:27
 
Fecha de Ingreso: agosto-2009
Mensajes: 292
Antigüedad: 14 años, 8 meses
Puntos: 5
Respuesta: editar registro c++

Hola que tal, investigando encontré que con seekp podía editar un registro y lo que pasa es que no se como adaptarlo bien, en la parte de "( pos - sizeof( e ) ) + sizeof( id )" ya me posiciona bien pero el problema es que no me guarda el cambio de nombre. ¿Alguien sabe donde esta esta el error?

Les dejo el código abajo para ver si alguien me puede ayudar. Saludos y gracias de antemano

Código C++:
Ver original
  1. void Empleado::modificar() {
  2.     int contador = 0, pos = 0, opc;
  3.     char b_id[ 22 ], m_nombre[ 22 ];
  4.    
  5.     ifstream archivo_leer( "archivo.dat", ios::in );
  6.    
  7.     if( archivo_leer.fail() ) {
  8.         cerr << "Error al leer el archivo" << endl;
  9.         exit( 1 );
  10.     }
  11.    
  12.     cout << "Buscar ID: "; cin >> b_id;
  13.    
  14.     while( !archivo_leer.eof() ) {
  15.         archivo_leer.read( ( char * )&e, sizeof( e ) );
  16.        
  17.         pos = pos + sizeof( e );
  18.        
  19.         if( archivo_leer.eof() ) {
  20.             break;
  21.         }
  22.        
  23.         if( strcmp( b_id, id ) == 0 ) {
  24.             cout << "\nID: " << id << endl;
  25.             cout << "Nombre: " << nombre << endl;
  26.             cout << "Sexo: " << sexo << endl;
  27.             cout << "Estado civil: " << edo_civil << endl;
  28.             cout << "Departamento: " << departamento << endl;
  29.             cout << "Sueldo: $" << sueldo << endl << endl;
  30.            
  31.             cout << "Esta seguro que sea modificar este empleadp? 1) SI, 2) NO: "; cin >> opc;
  32.            
  33.             if( opc == 1 ) {
  34.                 cout << "\nModificar nombre: "; cin >> m_nombre;
  35.        
  36.                 ofstream archivo_escribir( "archivo.data", ios::binary | ios::app );
  37.                 archivo_escribir.seekp( ( pos - sizeof( e ) ) + sizeof( id ), ios::beg );
  38.                 archivo_escribir.write( ( char * ) &nombre, sizeof( nombre ) );
  39.                
  40.                 archivo_escribir.close();
  41.             }
  42.            
  43.             contador++;
  44.         }
  45.     }
  46.    
  47.     archivo_leer.close();
  48.    
  49.     if( contador == 0 ) {
  50.         cout << "\nNo se encontro ningun empleado con el ID: " << b_id << endl;
  51.     }  
  52. }

Etiquetas: funcion, int, nombre, programa, registro, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:29.