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

[SOLUCIONADO] Problema con la carga de ficheros

Estas en el tema de Problema con la carga de ficheros en el foro de C/C++ en Foros del Web. Hola a todos, soy nuevo en el foro pero espero poder ayudar un poco, pero ahora necesito ayuda yo. Soy estudiante de grado superior de ...
  #1 (permalink)  
Antiguo 05/10/2012, 02:52
 
Fecha de Ingreso: octubre-2012
Ubicación: Zaragoza
Mensajes: 6
Antigüedad: 11 años, 6 meses
Puntos: 0
Problema con la carga de ficheros

Hola a todos, soy nuevo en el foro pero espero poder ayudar un poco, pero ahora necesito ayuda yo.

Soy estudiante de grado superior de programación y me han mandado este ejercicio para hacer.

Una "gestion" en al que se tiene que guardar el nombre, apellido y DNI de los trabajadores, y luego una funcion, para listarlos por orden de DNI. para ello creo un mapa con una clave y una posicion que sera la que se ha guardado en el fichero, para que sea mas rapido a la hora de listar. Pues bien, no se si es problema del programa, del compilador o de que, pero a la hora de listarlos, solo me aparece el ultimo registro que introduzco, y ademas al salir del programa en el mapa no se cargan los datos, pero dos variables que utilizo para ver cuantos datos hay guardados si que se me guardan bien.

Dejo el codigo aqui. Cualquier duda de alguna parte del codigo avisarme.

Código C++:
Ver original
  1. #include <iostream>
  2. #include <map>
  3. #include <fstream>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <time.h>
  7. #include <vector>
  8.  
  9. using namespace std;
  10.  
  11. typedef struct ficha
  12. {
  13.     int dni;
  14.     char nombre[25];
  15.     char apellidos[25];
  16. } persona;
  17.  
  18. typedef struct mapas
  19. {
  20.     int clave;
  21.     int pos;
  22. }mapa;
  23.  
  24. typedef struct posiciones
  25. {
  26.     int pa;
  27.     int pb;
  28. }punteros;
  29.  
  30. void construir (map <int,int> & claves,int & pa,int & pb,vector<int> pila);
  31. void guardar (map <int,int> claves,int pa,int pb,vector<int> pila);
  32. void altas(map<int,int> & claves, int & pa, int &pb,vector<int> pila);
  33. void bajas(map<int,int> & claves,int & pb, vector<int> pila);
  34. void listar(map<int,int> claves);
  35.  
  36. int main()
  37. {
  38.     int pa=0,pb=0,z;
  39.     map <int,int> claves;  //clave DNI, 2º campo posicion en la que se encuentra
  40.     vector<int> pila;
  41.     map<int,int>::iterator itm;
  42.  
  43.     construir(claves,pa,pb,pila);  //recupera los datos de los ficheros.
  44.  
  45.     do
  46.     {
  47.         system("cls");
  48.         cout<<"Elige la opcion a realizar."<<endl;
  49.         cout<<"1.- Alta de Trabajador."<<endl;
  50.         cout<<"2.- Baja de Trabajador."<<endl;
  51.         cout<<"3.- Listado de Trabajadores."<<endl; //lista de los trabajadores ordenados por DNI
  52.         cout<<"4.- Prueba de mapa."<<endl;
  53.         cout<<"0.- Salir."<<endl;
  54.         cin>>z;
  55.         switch(z)
  56.         {
  57.             case 1:
  58.                 system("cls");
  59.                 altas(claves,pa,pb,pila);       //dar de alta un usuario
  60.                 system("pause");
  61.                 break;
  62.  
  63.             case 2:
  64.                 system("cls");
  65.                 bajas(claves,pb,pila);      //dar de baja un usuario
  66.                 system("pause");
  67.                 break;
  68.  
  69.             case 3:
  70.                 system("cls");
  71.                 listar(claves);     //lista de los trabajadores ordenados por DNI
  72.                 system("pause");
  73.                 break;
  74.             case 4:                         //lista los registros que hay en el mapa.
  75.                 system("cls");
  76.                 for(itm=claves.begin();itm!=claves.end();itm++)
  77.                 {
  78.                     cout<<(*itm).first<<"---"<<(*itm).second<<endl<<endl;
  79.                 }
  80.                 system("pause");
  81.                 break;
  82.         }
  83.     }
  84.     while(z!=0);
  85.     system("cls");
  86.  
  87.     guardar(claves,pa,pb,pila);  //guarda los datos en los ficheros-
  88.     return 0;
  89. }
  90.  
  91. void construir (map <int,int> & claves,int & pa,int & pb,vector<int> pila)
  92. {
  93.     /*------------------------------------------------------Claves-----------------------------------------*/
  94.  
  95.     fstream fclave;
  96.     mapa modelo;
  97.     int pos;
  98.  
  99.     fclave.open("C:\\ficheros\\ejercicio3\\claves.txt",ios::in | ios::binary);
  100.     if(!fclave)
  101.     {
  102.         fclave.close();
  103.         fclave.open("C:\\ficheros\\ejercicio3\\claves.txt",ios::out | ios::binary);
  104.  
  105.     }
  106.     else
  107.     {
  108.         pos=0;
  109.         fclave.seekg((pos)*sizeof(mapa));
  110.         fclave.read(reinterpret_cast<char *>(&modelo), sizeof(mapa));
  111.         while(!fclave)
  112.         {
  113.             claves.insert(pair<int, int>(modelo.clave,modelo.pos));
  114.             fclave.read(reinterpret_cast<char *>(&modelo), sizeof(mapa));
  115.         }
  116.     }
  117.     fclave.close();
  118.  
  119.     /*-------------------------------------------------------Pila-----------------------------------------*/
  120.  
  121.     fstream fpila;
  122.  
  123.  
  124.     fpila.open("C:\\ficheros\\ejercicio3\\pila.txt",ios::in | ios::binary);
  125.     if(!fpila)
  126.     {
  127.         fpila.close();
  128.         fpila.open("C:\\ficheros\\ejercicio3\\pila.txt",ios::out | ios::binary);
  129.     }
  130.     else
  131.     {
  132.  
  133.         while(!fpila)
  134.         {
  135.             fpila.read(reinterpret_cast<char *>(&pos), sizeof(int));
  136.             pila.push_back(pos);
  137.         }
  138.     }
  139.     fpila.close();
  140.  
  141.     /*------------------------------------------------------Indices---------------------------------------*/
  142.  
  143.     fstream findices;
  144.     punteros punt;
  145.     findices.open("C:\\ficheros\\ejercicio3\\indices.txt",ios::in | ios::binary);
  146.     if(!findices)
  147.     {
  148.         findices.close();
  149.         findices.open("C:\\ficheros\\ejercicio3\\indices.txt",ios::out | ios::binary);
  150.         pa=0;
  151.         pb=0;
  152.     }
  153.     else
  154.     {
  155.         pos=0;
  156.         findices.seekg((pos)*sizeof(punteros));
  157.         findices.read(reinterpret_cast<char *>(&punt),sizeof(punteros));
  158.         pa=punt.pa;
  159.         pb=punt.pb;
  160.     }
  161.     findices.close();
  162.  
  163.  
  164.     cout <<"pa: "<<pa << " pb: " <<pb<<endl;
  165.     system("pause");
  166. }
  167. /*---------------------------------------------------------------------------------------------------------------------------------------*/
  168. void altas(map<int,int> & claves, int & pa,int & pb,vector<int> pila)
  169. {
  170.     persona trabajador;
  171.     fstream fdatos;
  172.     int pos;
  173.  
  174.     cout<<"Introduzca el DNI del trabajador"<<endl;
  175.     cin>>trabajador.dni;
  176.     cout<<"Introduzca el Nombre del trabajador"<<endl;
  177.     cin>>trabajador.nombre;
  178.     cout<<"Introduzca el Apellido del trabajador"<<endl;
  179.     cin>>trabajador.apellidos;
  180.  
  181.     if(pb==0)
  182.     {
  183.         pos=pa;
  184.         claves.insert(pair<int, int>(trabajador.dni, pos));
  185.         pa++;
  186.     }
  187.     else
  188.     {
  189.         pos=pila.back();
  190.         claves.insert(pair<int, int>(trabajador.dni, pos));
  191.         pb--;
  192.         pila.pop_back();
  193.     }
  194.  
  195.     fdatos.open("C:\\ficheros\\ejercicio3\\datos.txt",ios::out | ios::binary);
  196.  
  197.     fdatos.seekp((pos)*sizeof(persona));
  198.     fdatos.write(reinterpret_cast<char *>(&trabajador),sizeof(persona));
  199.  
  200.     fdatos.close();
  201.  
  202. }
  203. /*---------------------------------------------------------------------------------------------------------------------------------------*/
  204. void bajas(map<int,int> & claves,int & pb, vector<int> pila)
  205. {
  206.     persona trabajador;
  207.     map<int,int>::iterator itr;
  208.     cout<<"Introduzca el DNI del trabajador que desea dar de baja."<<endl;
  209.     cin>>trabajador.dni;
  210.  
  211.     itr=claves.find(trabajador.dni);
  212.     pila.push_back ((*itr).second);
  213.     claves.erase(itr);
  214.     pb++;
  215. }
  216. /*---------------------------------------------------------------------------------------------------------------------------------------*/
  217. void listar(map<int,int> claves)
  218. {
  219.     map<int,int>::iterator itr;
  220.     persona trabajador;
  221.     fstream fdatos;
  222.     fdatos.open("C:\\ficheros\\ejercicio3\\datos.txt",ios::in | ios::binary);
  223.     int pos;
  224.  
  225.     for(itr=claves.begin();itr!=claves.end();itr++)
  226.     {
  227.         pos=(*itr).second;
  228.  
  229.         fdatos.seekg((pos)*sizeof(persona));
  230.         fdatos.read(reinterpret_cast<char *>(&trabajador),sizeof(persona));
  231.  
  232.         cout<<"Nombre: "<<trabajador.nombre<<" "<<trabajador.apellidos<<endl<<"DNI: "<<trabajador.dni<<endl<<endl;
  233.     }
  234.     fdatos.close();
  235. }
  236. /*---------------------------------------------------------------------------------------------------------------------------------------*/
  237. void guardar (map <int,int> claves,int pa,int pb,vector<int> pila)
  238. {
  239.     fstream fclave;
  240.     mapa modelo;
  241.     map<int,int>::iterator itm;
  242.     punteros punt;
  243.     int pos=0;
  244.  
  245.     fclave.open("C:\\ficheros\\ejercicio3\\claves.txt",ios::out | ios::binary | ios::trunc);
  246.  
  247.     for(itm=claves.begin();itm!=claves.end();itm++)
  248.     {
  249.         modelo.clave=(*itm).first;
  250.         modelo.pos=(*itm).second;
  251.  
  252.         fclave.seekp((pos)*sizeof(mapa));
  253.         fclave.write(reinterpret_cast<char *>(&modelo),sizeof(mapa));
  254.         pos++;
  255.     }
  256.  
  257.     fclave.close();
  258.  
  259.     /*-------------------------------------------------------Pila-----------------------------------------*/
  260.     fstream fpila;
  261.     vector<int>::iterator itv;
  262.     pos=0;
  263.  
  264.     fpila.open("C:\\ficheros\\ejercicio3\\pila.txt",ios::out | ios::binary);
  265.  
  266.     for(itv=pila.begin();itv!=pila.end();itv++)
  267.     {
  268.         fpila.seekp((pos)*sizeof(int));
  269.         fpila.write(reinterpret_cast<char *>(&(*itv)),sizeof(int));
  270.         pos++;
  271.     }
  272.  
  273.     fpila.close();
  274.  
  275.     /*------------------------------------------------------Indices---------------------------------------*/
  276.  
  277.     fstream findices;
  278.  
  279.  
  280.     findices.open("C:\\ficheros\\ejercicio3\\indices.txt",ios::out | ios::binary);
  281.     pos=0;
  282.     punt.pa=pa;
  283.     punt.pb=pb;
  284.     findices.seekp((pos)*sizeof(punteros));
  285.     findices.write(reinterpret_cast<char *>(&punt),sizeof(punteros));
  286.     findices.close();
  287. }

Etiquetas: ficheros, funcion, int, map, programa, variables
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 15:12.