Guardar archivos en C++ ejemplo

   1: /************************************************************************************************************
   2:  *                                                                                                          *
   3:  *                                              25 DE MARZO DE 2010                                         *
   4:  *                                                                                                            *
   5:  *  Programa que almacena los datos de los diferentes tipos de carros y los guarda en un archivo binario    *
   6:  *                                                                                                          *
   7:  *  Programador Julio Cesar Leyva Rodriguez            Instituto Tecnologico de Los Mochis                     *
   8:  *                                                                                                          *
   9:  ************************************************************************************************************/
  10:                                           
  11: #include <iostream.h>
  12: #include <stdio.h>
  13: #include <conio.h> 
  14: #include <stdlib.h>
  15:  
  16: /** Estructura de los datos de los datos */
  17: struct reg
  18: {
  19: int numeroV;
  20: char marca[10];
  21: int anio;
  22: char color[10];
  23: int matricula;
  24: char activo;
  25: }automoviles;
  26:  
  27: void noExiste()
  28: {
  29: cout<<"\nEl Registro no existe";
  30: }
  31:  
  32: void espacioOcupado()
  33: {
  34: cout<<"\nEspacio ocupado";
  35: }
  36:  
  37: void eliminado()
  38: {
  39: cout<<"\nEliminado correctamente";
  40: }
  41:  
  42: void registrado()
  43: {
  44: cout<<"\nRegistrado correctamente";
  45: }
  46:  
  47: void registrando()
  48: {
  49: printf("\n\t\t REGISTRO DE AUTOS \n");
  50: cout<<"Marca ";                    gets(automoviles.marca);
  51: cout<<"Año ";                cin>>automoviles.anio;
  52: cout<<"Matricula ";                     cin>>automoviles.matricula;
  53: cout<<"Color ";                gets(automoviles.color);
  54: automoviles.activo='a';
  55: }
  56:  
  57:  
  58:  
  59: /** Funcion para registrar los datos en el archivo */
  60: void registrar()                                                        
  61: {
  62: clrscr();
  63:  
  64: FILE *ra;
  65:  
  66: ra=fopen("automoviles.dat","rb+");
  67:  
  68: if(ra==NULL)     //Si no existe
  69:     {
  70:     FILE *n;
  71:         fclose(ra);
  72:     n=fopen("automoviles.dat","ab+");
  73:  
  74:     cout<<"\n\tINSERTE LOS DATOS DEL PRIMER AUTO\n";
  75:         automoviles.numeroV=1;
  76:  
  77:     registrando();
  78:     fwrite(&automoviles,sizeof(automoviles),1,n);
  79:     fclose(n);
  80:         registrado();
  81:     getch();
  82:     }
  83: else
  84:     {
  85:         fclose(ra);
  86:     FILE *c;
  87:  
  88:         c=fopen("automoviles.dat","rb+");
  89:  
  90:         int k;
  91:     cout<<"\nInserte el numero de auto que desee insertar ";    cin>>k;
  92:  
  93:     fseek(c,(k-1)*sizeof(automoviles),SEEK_SET);
  94:     fread(&automoviles,sizeof(automoviles),1,c);
  95:  
  96:     if(automoviles.activo==NULL)
  97:         {
  98:         automoviles.numeroV=k;
  99:         registrando();
 100:         fseek(c,(k-1)*sizeof(automoviles),SEEK_SET);
 101:         fwrite(&automoviles,sizeof(automoviles),1,c);
 102:         fclose(c);
 103:         registrado();
 104:         getch();
 105:         }
 106:     else
 107:         {
 108:         espacioOcupado();
 109:                 getch();
 110:         }
 111:         }
 112:  
 113: }
 114:  
 115:  
 116:  
 117:  
 118:  
 119: /** Muestra todos los registros del archivo en forma de reporte */
 120: void reporte()
 121: {
 122: clrscr();
 123: FILE *rep;
 124:  
 125: rep=fopen("automoviles.dat","rb+");
 126: fread(&automoviles,sizeof(automoviles),1,rep);
 127: printf("# VEHICULO \t\t MARCA \t\t AÑO \t MATRICULA \t COLOR");
 128:  
 129:     do
 130:     {
 131:     if(automoviles.activo=='a')
 132:         {
 133:         cout<<"\n "<<automoviles.numeroV<<"\t \t\t "<<automoviles.marca<<"\t\t "<<automoviles.anio<<"\t "<<automoviles.matricula<<"\t\t "<<automoviles.color;
 134:         }
 135:     fread(&automoviles,sizeof(automoviles),1,rep);
 136:     }while(!feof(rep));
 137: fclose(rep);
 138: getch();
 139: }
 140:  
 141: /** Consulta un solo registro en el archivo */
 142: void consultaVehiculo(int n)
 143: {
 144: FILE *rep;
 145:  
 146:  
 147:  
 148: rep=fopen("automoviles.dat","rb");
 149:  
 150: fseek(rep,(n-1)*(sizeof(automoviles)),SEEK_SET);
 151: fread(&automoviles,sizeof(automoviles),1,rep);
 152:  
 153: if(automoviles.activo!=NULL)
 154:     {
 155:     printf("\n # VEHICULO \t\t MARCA \t\t AÑO \t MATRICULA \t COLOR");
 156:     if(automoviles.activo=='a')
 157:         {
 158:         cout<<"\n "<<automoviles.numeroV<<"\t \t\t "<<automoviles.marca<<"\t\t "<<automoviles.anio<<"\t "<<automoviles.matricula<<"\t\t "<<automoviles.color;
 159:         }
 160:     else
 161:         {
 162:         noExiste();
 163:                 getch();
 164:         }
 165:     }
 166: else
 167:     {
 168:     noExiste();
 169:     getch();
 170:         }
 171: fclose(rep);
 172: }
 173:  
 174: /* Modifica un registro señalado */
 175: void modificar()
 176: {
 177: clrscr();
 178: FILE *reg;
 179: int d;
 180:  
 181: cout<<"Inserte el dato que desee modificar: ";    cin>>d;
 182:  
 183: reg=fopen("automoviles.dat","rb+");
 184:  
 185: printf("\t\t REGISTRO DE AUTOS \n");
 186: cout<<"Numero de vehiculo ";     cin>>automoviles.numeroV;
 187: cout<<"Marca ";                gets(automoviles.marca);
 188: cout<<"Año ";            cin>>automoviles.anio;
 189: cout<<"Matricula ";        cin>>automoviles.matricula;
 190: cout<<"Color ";            gets(automoviles.color);
 191:  
 192: automoviles.activo='a';
 193:  
 194: fseek(reg,(d-1)*(sizeof(automoviles)),SEEK_SET);
 195:  
 196: fwrite(&automoviles,sizeof(automoviles),1,reg);
 197: fclose(reg);
 198: }
 199:  
 200: /* Elimina el registro seleccionado "logicamente" */
 201: void eliminar()
 202: {
 203: FILE *reg;
 204: int d;
 205:  
 206: cout<<"Inserte el registro que desee Eliminar: ";    cin>>d;
 207:  
 208: reg=fopen("automoviles.dat","rb+");
 209:  
 210: fseek(reg,(d-1)*(sizeof(automoviles)),SEEK_SET);
 211: fread(&automoviles,(d)*(sizeof(automoviles)),1,reg);
 212: if(automoviles.activo!=NULL)
 213:         {
 214:     fread(&automoviles,(d)*(sizeof(automoviles)),1,reg);
 215:  
 216:  
 217:  
 218:  
 219:     automoviles.activo='b';
 220:  
 221:     fseek(reg,(d-1)*(sizeof(automoviles)),SEEK_SET);
 222:     fwrite(&automoviles,sizeof(automoviles),1,reg);
 223:     fclose(reg);
 224:     eliminado();
 225:         getch();
 226:         }
 227: else
 228:     {
 229:     noExiste();
 230:         getch();
 231:         }
 232: }
 233:  
 234:  
 235: /* Menu de opciones */
 236: void menuA()
 237: {
 238: int a;
 239: int op;
 240: while(op!=5)
 241:         {
 242:     automoviles.activo=NULL;
 243:         clrscr();
 244:     gotoxy(25,1);    cout<<"REGISTRO DE AUTOMOTORES";
 245:     gotoxy(1,3);    cout<<"1.- Registrar automotor";
 246:     gotoxy(1,5);    cout<<"2.- Reporte";
 247:     gotoxy(1,7);    cout<<"3.- Consultar";
 248:     gotoxy(1,9);    cout<<"4.- Eliminar";
 249:         gotoxy(1,11);    cout<<"5.- Regresar";
 250:     gotoxy(1,14);    cout<<"\t Eliga una opcion [   ]";
 251:     gotoxy(29,14);    cin>>op;
 252:     cout<<"\n";
 253:         eslogan();
 254:  
 255:     switch(op)
 256:                 {
 257:         case 1:
 258:             registrar();
 259:                         
 260:             break;
 261:         case 2:
 262:             reporte();                        
 263:                         break;
 264:         case 3:               
 265:             clrscr();
 266:                  cout<<"Inserte el numero de automovil que desee consultar";    cin>>a;    
 267:             consultaVehiculo(a);                      
 268:                         getch();
 269:             break;
 270:         case 4:
 271:             clrscr();
 272:                         eliminar();
 273:                 break;
 274:  
 275:         }
 276:     }
 277: }
 278:  
 279:  
 280:  
 281: struct registro4
 282: {
 283: int     numeroC;
 284: char     nombre[10];
 285: char     domicilio[10];
 286: float     estatura;
 287: float     peso;
 288: char     activo;
 289: }conductores;
 290:  
 291: void registrandoC()
 292: {
 293:  
 294: printf("\n\t\t REGISTRO DE CONDUCTORES \n");
 295: cout<<"Nombre ";                gets(conductores.nombre);
 296: cout<<"Domicilio ";            gets(conductores.domicilio);
 297: cout<<"Estatura ";            cin>>conductores.estatura;
 298: cout<<"Peso ";                cin>>conductores.peso;
 299: conductores.activo='a';
 300: }
 301:  
 302: void registrarConductor()
 303: {
 304: clrscr();
 305:  
 306: FILE *ra;
 307:  
 308: ra=fopen("conductores.dat","rb+");
 309:  
 310: if(ra==NULL)     //Si no existe
 311:     {
 312:     FILE *n;
 313:     fclose(ra);
 314:     n=fopen("conductores.dat","ab");
 315:  
 316:     cout<<"\n\tINSERTE LOS DATOS DEL PRIMER CONDUCTOR\n";
 317:     conductores.numeroC=1;
 318:  
 319:     registrandoC();
 320:     fwrite(&conductores,sizeof(conductores),1,n);
 321:     fclose(n);
 322:  
 323:     getch();
 324:     }
 325: else
 326:     {
 327:     fclose(ra);
 328:     FILE *c;
 329:  
 330:     c=fopen("conductores.dat","rb+");
 331:  
 332:     int k;
 333:     cout<<"\nInserte el numero de auto que desee insertar ";    cin>>k;
 334:  
 335:     fseek(c,(k-1)*sizeof(conductores),SEEK_SET);
 336:     fread(&conductores,sizeof(conductores),1,c);
 337:  
 338:     if(conductores.domicilio==NULL)
 339:         {
 340:         conductores.numeroC=k;
 341:         fseek(c,(k-1)*sizeof(conductores),SEEK_SET);
 342:         fwrite(&conductores,sizeof(conductores),1,c);
 343:         fclose(c);
 344:  
 345:         getch();
 346:         }
 347:     else
 348:         {
 349:  
 350:         getch();
 351:         }
 352:     }
 353:  
 354: }
 355:  
 356:  
 357:  
 358: void reporteConductores()
 359: {
 360: clrscr();
 361: FILE *rep;
 362:  
 363: rep=fopen("conductores.dat","rb");
 364: fread(&conductores,sizeof(conductores),1,rep);
 365: printf("# CONDUCTOR  \t NOMBRE \t\ DOMICILIO \t ESTATURA\tPESO");
 366:  
 367:     do
 368:     {
 369:     if(conductores.activo=='a')
 370:             {
 371:         cout<<"\n"<<conductores.numeroC<<"\t\t "<<conductores.nombre<<"\t\t "<<conductores.domicilio<<"\t\t "<<conductores.estatura<<"\t\t"<<conductores.peso;
 372:             }
 373:     fread(&conductores,sizeof(conductores),1,rep);
 374:     }while(!feof(rep));
 375: fclose(rep);
 376: getch();
 377: }
 378:  
 379: void consultaC(int n)
 380: {
 381:  
 382: FILE *rep;
 383:  
 384:  
 385: rep=fopen("conductores.dat","rb+");
 386:  
 387: fseek(rep,(n-1)*(sizeof(conductores)),SEEK_SET);
 388: fread(&conductores,sizeof(conductores),1,rep);
 389:  
 390: if(conductores.activo!=NULL)
 391:     {
 392:     printf("# CONDUCTOR  \t\t NOMBRE \t\t\ DOMICILIO \t ESTATURA");
 393:     if(conductores.activo=='a')
 394:         {
 395:         cout<<"\n"<<conductores.numeroC<<"\t\t\t "<<conductores.nombre<<"\t\t\t "<<conductores.domicilio<<"\t\t "<<conductores.estatura;
 396:             }
 397:     else
 398:         {
 399:         cout<<"\n El conductor no exite";
 400:                 getch();
 401:         }
 402:         
 403:     
 404:     }
 405: else
 406:     {
 407:     cout<<"\nEl registro no existe";
 408:     getch();
 409:     }
 410: fclose(rep);  
 411: }
 412:  
 413:  
 414:  
 415: void eliminarC()
 416: {
 417: FILE *reg;
 418: int d;
 419:  
 420: cout<<"Inserte el conductor que desee dar de baja: ";    cin>>d;
 421:  
 422: reg=fopen("conductor.dat","rb+");
 423:  
 424: fseek(reg,(d-1)*(sizeof(conductores)),SEEK_SET);
 425: fread(&conductores,sizeof(conductores),1,reg);
 426:  
 427: if(conductores.activo!=NULL)
 428:     {
 429:     conductores.activo='b';
 430:  
 431:     fseek(reg,(d-1)*(sizeof(conductores)),SEEK_SET);
 432:     fwrite(&conductores,sizeof(conductores),1,reg);
 433:     fclose(reg);
 434:     }
 435: else
 436:     {
 437:     cout<<"\nEl archivo no esta";
 438:     getch();
 439:         }
 440: }
 441:  
 442:  
 443: void menuC()
 444: {
 445: conductores.activo=NULL;
 446: int op;
 447: int b;
 448: while(op!=5)
 449:     {
 450:     clrscr();
 451:     gotoxy(25,1);    cout<<"REGISTRO DE CONDUCTORES";
 452:     gotoxy(1,3);    cout<<"1.- Registrar conductor";
 453:     gotoxy(1,5);    cout<<"2.- Reporte";
 454:     gotoxy(1,7);    cout<<"3.- Consulta";
 455:     gotoxy(1,9);    cout<<"4.- Eliminar";
 456:     gotoxy(1,11);    cout<<"5.- Regresar";
 457:     gotoxy(1,14);    cout<<"\t Eliga una opcion [   ]";
 458:     gotoxy(29,14);    cin>>op;
 459:  
 460:     switch(op)
 461:                 {
 462:         case 1:
 463:             registrarConductor();
 464:                         
 465:             break;
 466:         case 2:        
 467:             reporteConductores();
 468:                         break;
 469:         case 3:               
 470:             clrscr();
 471:             cout<<"Inserte el numero de conductor que desee consultar ";    cin>>b;
 472:             consultaC(b);
 473:             getch();
 474:             break;
 475:         case 4:
 476:             clrscr();
 477:                         eliminarC();
 478:                 break;
 479:  
 480:         }
 481:     }
 482: }
 483: void eslogan()
 484: {
 485: cout<<"   ******      **     *******   *******   ******** *******       **    ";
 486: cout<<"\n  **////**    ****   /**////** /**////** /**///// /**////**     ****   ";
 487: cout<<"\n **    //    **//**  /**   /** /**   /** /**      /**   /**    **//**  ";
 488: cout<<"\n/**         **  //** /*******  /*******  /******* /*******    **  //** ";
 489: cout<<"\n/**        **********/**///**  /**///**  /**////  /**///**   **********";
 490: cout<<"\n//**    **/**//////**/**  //** /**  //** /**      /**  //** /**//////**";
 491: cout<<"\n //****** /**     /**/**   //**/**   //**/********/**   //**/**     /**";
 492: cout<<"\n  //////  //      // //     // //     // //////// //     // //      // ";
 493: }
 494:  
 495:  
 496:  
 497: struct evento
 498: {
 499: int folio;
 500: int nC;
 501: int nV;
 502: int tiempo;
 503: }carrera;
 504:  
 505:  
 506:  
 507: void ultimo();
 508:  
 509:  
 510: void borrar()
 511: {
 512: carrera.folio=NULL;
 513: carrera.nC=NULL;
 514: carrera.nV=NULL;
 515: carrera.tiempo=NULL;
 516: }
 517: //REGISTRAR AUTO Y CONDUCTOR
 518:  
 519: void registrarParticipante()
 520: {
 521:  
 522: borrar();
 523: FILE *e;
 524: FILE *a;
 525: int size;
 526:  
 527: borrar();
 528: e=fopen("evento.dat","ab+");
 529: a=fopen("evento.dat","rb+");
 530:  
 531:  
 532: size=sizeof(carrera);
 533:  
 534: fseek(a,-size,SEEK_END);
 535: fread(&carrera,size,1,a);
 536:  
 537: carrera.tiempo=NULL;
 538: carrera.folio=(carrera.folio)+1;
 539:  
 540: cout<<"\nINSERTE EL NUMERO DEL PILOTO ";    cin>>carrera.nC;
 541:  
 542: cout<<"\nINSERTE EL NUMERO DEL VEHICULO ";    cin>>carrera.nV;
 543:  
 544: fwrite(&carrera,sizeof(carrera),1,e);
 545:  
 546: fclose(e);
 547: fclose(a);
 548:  
 549: }
 550: //REPORTE
 551:  
 552: void reporteEvento()
 553: {
 554: borrar();
 555: FILE *reporte1;
 556:  
 557: reporte1=fopen("evento.dat","rb+");
 558:  
 559: do
 560:     {
 561:         if(carrera.folio!=NULL)
 562:             {
 563:             consultaVehiculo(carrera.nV);
 564:             consultaC(carrera.nC);
 565:                         }
 566:     fread(&carrera,sizeof(carrera),1,reporte1);
 567:     }while(!feof(reporte1));
 568: }
 569:  
 570:  
 571:  
 572: void registrarTiempo()
 573: {
 574: FILE *tiempo;
 575: tiempo=fopen("evento.dat","rb+");
 576: int folio;
 577:  
 578: borrar();
 579: cout<<"\n\nINSERTE EL FOLIO DEL PILOTO QUE DESEE INGRESAR EL TIEMPO ";
 580: cin>>folio;
 581:  
 582: fseek(tiempo,(folio-1)*(sizeof(carrera)),SEEK_SET);
 583: fread(&carrera,sizeof(carrera),1,tiempo);
 584:  
 585: cout<<"\n\nINGRESE EL TIEMPO ";cin>>carrera.tiempo;
 586:  
 587: fseek(tiempo,(folio-1)*(sizeof(carrera)),SEEK_SET);
 588: fwrite(&carrera,sizeof(carrera),1,tiempo);
 589: fclose(tiempo);
 590: }
 591:  
 592:  
 593: /* Menu de opciones */
 594: void menuE()
 595: {
 596: int a;
 597: int op;
 598: while(op!=5)
 599:     {
 600:     automoviles.activo=NULL;
 601:     clrscr();
 602:     gotoxy(25,1);    cout<<"EVENTO";
 603:     gotoxy(1,3);    cout<<"1.- Registrar participante";
 604:     gotoxy(1,5);    cout<<"2.- Reporte";
 605:     gotoxy(1,7);    cout<<"3.- Modificar tiempo";
 606:     gotoxy(1,9);    cout<<"4.- Consulta participante";
 607:     gotoxy(1,11);    cout<<"5.- Regresar";
 608:     gotoxy(1,13);    cout<<"\t Eliga una opcion [   ]";
 609:     gotoxy(29,13);    cin>>op;
 610:  
 611:     switch(op)
 612:         {
 613:         case 1:
 614:             clrscr();
 615:             registrarParticipante();
 616:             getch();
 617:             break;
 618:         case 2:
 619:             reporteEvento();
 620:             getch();
 621:             break;
 622:         case 3:
 623:             clrscr();
 624:             registrarTiempo();
 625:             getch();
 626:             break;
 627:  
 628:         case 4:
 629:             cout<<"\n INSERTE EL NUMERO DEL PARTICIPANTE QUE DESEE CONSULTAR ";     cin>>a;
 630:             consultaVehiculo(a);
 631:             cout<<"\n";
 632:             getch();
 633:             consultaC(a);
 634:             cout<<"\nPresione cualquier tecla para continuar";
 635:             getch();
 636:             break;
 637:         case 5:
 638:                     break;
 639:         default:
 640:             cout<<"OPCION NO VALIDA";
 641:             getch();
 642:             break;
 643:         }
 644:     }
 645: }
 646:  
 647:  
 648:  
 649: void main()
 650: {
 651: int op;
 652: while(op!=5)
 653:     {
 654:     clrscr();
 655:     eslogan();
 656:     gotoxy(25,10);    cout<<"PRINCIPAL";
 657:     gotoxy(1,13);    cout<<"1.- Vehiculos";
 658:     gotoxy(1,15);    cout<<"2.- Conductores";
 659:     gotoxy(1,17);    cout<<"3.- Evento";
 660:     gotoxy(1,19);    cout<<"4.- Reporte";
 661:     gotoxy(1,21);    cout<<"\t Eliga una opcion [   ]";
 662:     gotoxy(29,21);    cin>>op;
 663:  
 664:     switch(op)
 665:         {
 666:         case 1:
 667:             clrscr();
 668:             menuA();
 669:  
 670:             break;
 671:         case 2:
 672:             menuC();                        
 673:                         break;
 674:         case 3:               
 675:             clrscr();
 676:             menuE();
 677:             break;
 678:         case 4:
 679:             clrscr();
 680:                         reporteEvento();
 681:             getch();
 682:             break;
 683:         case 5:
 684:                         clrscr();
 685:             cout<<"Salir";
 686:                         break;
 687:  
 688:         default:
 689:             cout<<"\nOPCION INCORRECTA";
 690:             break;
 691:  
 692:         }
 693:     }
 694: }
0