Logo elrincondelc.com
curso de programación en c
Foros de programación en C
Inicio :: Código fuente
Usuario: Clave: Regístrate

Valoración
6

Archivos secuensiales

codigo enviada por: Gaona (2007-09-12 21:30:58)
Este programita te permite dar de altas y de bajas tanto fisicas y logicas de un archivo y tambien 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");
	}

Para enviar comentarios debes estar registrado.

(c) ElRincondelC.com, 1999-2007

Un proyecto de Urlan Heat : proyectos de Internet y soporte para el comercio electrónico.