Archivos secuénciales

Este programita te permite dar de altas y de bajas tanto físicas y lógicas de un archivo y también permite imprimir texto.


#include"stdio.h"
#include"conio.h"
#include"ctype.h"

void menu(void);
void altas(void);
void bajas_log(void);
void bajas_fis(void);
void imprime(void);

struct registro
            {
         char clave[10];
             char nombre[20];
             char apeidos[20];
             char carrera[50];
             char activo;
            };

struct registro nuevo;

main()
            {
             char TECLA;
             int baja=0;
             textbackground(1);
             clrscr();

             do
              {
               menu();
               gotoxy(60,24);
               TECLA=toupper(getche());
               switch(TECLA)
                         {
                           case 'A':
                                       altas();
                                       break;
                           case 'B':
                                       baja=submenu();
                                       switch(baja)
                                                     {
                                                      case 1:
                                                                 bajas_log();
                                                                 break;
                                                      case 2:
                                                                 bajas_fis();
                                                                 break;
                                                     }
                                       clrscr();
                                       break;
                          case 'I':
                                       imprime();
                                       clrscr();
                                       break;
                         }

              }while(TECLA!='S');
            }
void imprime(void)
            {
              FILE *archivo;
              int leidos;
          archivo=fopen("C:Registro.txt","r");
              if(archivo==NULL)
               {
                gotoxy(26,12);printf("ERROR: Nose puede abrir el archivo");
                getch();
                exit(0);
               }
          while(!(feof(archivo)))
                  {
                   leidos=fread(&nuevo,sizeof(nuevo),1,archivo);
                   if(leidos)
                         {
                         if(nuevo.activo!='X')
                           {
                              clrscr();
                              gotoxy(25,10);printf("Nombre");
                              gotoxy(25,11);printf("Apeidos");
                              gotoxy(25,12);printf("Carrera");
                              gotoxy(25,13);printf("Clave");
                              gotoxy(26,8);printf("Los Datos del registro eliminado");
                              gotoxy(33,10);printf("%s",nuevo.nombre);
                              gotoxy(33,11);printf("%s",nuevo.apeidos);
                              gotoxy(33,12);printf("%s",nuevo.carrera);
                              gotoxy(33,13);printf("%s",nuevo.clave);
                              getch();
                           }
                         }
                  }
            }
void bajas_log(void)
            {
         FILE *archivo2;
             FILE *archivo;
             char claveles[10];
             int leidos;
             clrscr();
             archivo=fopen("C:Registro.txt","r");
             if(archivo==NULL)
               {
                gotoxy(26,12);printf("ERROR: Nose puede abrir el archivo");
                getch();
                exit(0);
               }
             archivo2=fopen("Registr.tmp","a");
             gotoxy(17,11);
             printf("Dame la clave del registro a dar de baja logica");
             getchar();gotoxy(30,12);gets(claveles);
             while(!(feof(archivo)))
                  {
                   leidos=fread(&nuevo,sizeof(nuevo),1,archivo);
                   if(leidos)
                         {
                         if(strcmp(nuevo.clave,claveles)!=0)
                           {
                    fwrite(&nuevo,sizeof(nuevo),1,archivo2);
                           }
                         else
                             {
                              if(nuevo.activo=='E')
                                   {
                                    nuevo.activo='X';
                                    fwrite(&nuevo,sizeof(nuevo),1,archivo2);
                                   }
                               else
                                     {
                                      clrscr();
                                      gotoxy(25,12);
                                      printf("El registro a sido eliminado anteriormente");
                                      fwrite(&nuevo,sizeof(nuevo),1,archivo2);
                                     }
                             }
                         }
                  }
             fclose(archivo);
             fclose(archivo2);
             remove("C:Registro.txt");
             rename("Registr.tmp","C:Registro.txt");
             getch();
            }
void bajas_fis(void)
            {
             FILE *archivo2;
             FILE *archivo;
             char claveles[10];
             int leidos;
             clrscr();
             archivo=fopen("C:Registro.txt","r");
             if(archivo==NULL)
               {
                gotoxy(26,12);printf("ERROR: Nose puede abrir el archivo");
                getch();
                exit(0);
               }
             archivo2=fopen("Registr.tmp","a");
             gotoxy(26,11);
             printf("Dame la clave a liminar");
             getchar();gotoxy(30,12);gets(claveles);
             while(!(feof(archivo)))
                  {
                   leidos=fread(&nuevo,sizeof(nuevo),1,archivo);
                   if(leidos)
                         {
                         if(strcmp(nuevo.clave,claveles)!=0)
                           {
                    fwrite(&nuevo,sizeof(nuevo),1,archivo2);
                           }
                         else
                             {
                              clrscr();
                              textcolor(15);
                              gotoxy(25,10);cprintf("Nombre");
                              gotoxy(25,11);cprintf("Apeidos");
                              gotoxy(25,12);cprintf("Carrera");
                              gotoxy(25,13);cprintf("Clave");
                              gotoxy(26,8);cprintf("Los Datos del registro eliminado");
                              textcolor(15);
                              gotoxy(33,10);cprintf("%s",nuevo.nombre);
                              gotoxy(33,11);cprintf("%s",nuevo.apeidos);
                              gotoxy(33,12);cprintf("%s",nuevo.carrera);
                              gotoxy(33,13);cprintf("%s",nuevo.clave);
                             }
                         }
                  }
             fclose(archivo);
             fclose(archivo2);
             remove("C:Registro.txt");
             rename("Registr.tmp","C:Registro.txt");
             getch();
            }
int submenu(void)
            {
              int opc;
              clrscr();

              do
               {
            gotoxy(40,10);
                printf("Menu");
                gotoxy(34,11);printf("1.-Baja logica");
                gotoxy(34,12);printf("2.-Baja fisica");
                scanf("%d",&opc);
                if(opc==1)
                  {
                   break;
                  }
                else
                if(opc==2)
                  {
                   break;
                  }
                else
                        {
                         clrscr();
                         gotoxy(26,12);
                         printf("Esta opcion no esta en el menu");
                         getch();
                         clrscr();
                        }
               }while(1);
            return opc;
            }
void altas(void)
            {
             FILE *archivo;
             long escribe;
             archivo=fopen("C:Registro.txt","a");
             if(archivo==NULL)
               {
                gotoxy(26,12);printf("ERROR: Nose puede abrir el archivo");
                getch();
                exit(0);
               }
              textcolor(15);
              gotoxy(1,5);cprintf("Nombre :");
              gotoxy(1,6);cprintf("Apeidos :");
              gotoxy(1,8);cprintf("Carrera :");
              gotoxy(1,9);cprintf("Numero de control :");
              textcolor(14);
              gotoxy(10,5);gets(nuevo.nombre);
              gotoxy(11,6);gets(nuevo.apeidos);
              getchar();
              gotoxy(11,8);gets(nuevo.carrera);
              gotoxy(21,9);gets(nuevo.clave);
              nuevo.activo='E';
              fwrite(&nuevo,sizeof(nuevo),1,archivo);
              fclose(archivo);
              clrscr();
            }
void menu(void)
            {
             textcolor(15);
             gotoxy(10,1);cprintf("ltas");
             gotoxy(40,1);cprintf("ajas");
             gotoxy(70,1);cprintf("alir");
             gotoxy(40,10);cprintf("mprime");
             gotoxy(21,24);cprintf("*** Elige una opcion del menu........[   ] ***");
             textcolor(14);
             gotoxy(9,1);cprintf("A");
             gotoxy(39,1);cprintf("B");
             gotoxy(69,1);cprintf("S");
             gotoxy(39,10);cprintf("I");

            }