Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Rilax

#1
ya lo solucione:

Código (cpp) [Seleccionar]
void ordenar(struct ferreteria datos)
{
      FILE *f;
      char clave[10];
      int nclaves=0;
      int valor1[23];

      int i,n,m,j,p;



      if((f=fopen(nombre,"r"))==NULL)
      {
         printf("\nEL FICHERO NO EXISTE.");
         getch();
         exit(0);
      }

      nclaves=0;

      fread(&datos, sizeof(datos),1,f);
      while(!feof(f))
      {
           
        valor1[nclaves]=atoi(datos.clave);
        fread(&datos, sizeof(datos),1,f);
        nclaves++;
      }


         

     for(i=0;i<nclaves;i++){
        for(j=0;j<nclaves-1;j++){
          if(valor1[i]<valor1[j]){
     m=valor1[i];
             valor1[i]=valor1[j];
     valor1[j]=m;
          }
        }
     }

    printf("Claves Ordenadas.....\n");   

    for (i=0;i<nclaves; i++)
    {
       printf("clave: %d  \n", valor1[i]);
    }
         getch();

   fclose(f);

}



Gracias por todas y cada una de sus respuestas ;)
#2
MIL gracias x sus respuestas sorry si les di un codigo con "basura" no me di cuenta es k como soy principiante pues cuando veo k no funciona simplente le pongo " / " e intento con otra cosa, aqui el codigo sin "basura"
Código (cpp) [Seleccionar]

#include <stdio.h>
#include <conio.h>         
#include <string.h>         
#include <graphics.h>       
#include <stdlib.h>
#include <process.h>
#define TAM 20
#include <ctype.h>
#include "graphics.h"
char nombre[20];
/****************************estructura principal************************/
  struct ferreteria
    {
     char articulo[TAM];
     char clave[10];
     char precio[10];
     char marca[10];
    }datos;
/***********************************funciones*******************************/
       void ordenar(struct ferreteria);
       void insertar(struct ferreteria );
       void visualizar(struct ferreteria );
       void buscar(struct ferreteria );
       void modificar(struct ferreteria );
       void borrar(struct ferreteria );
       void acerca();
       void articulo(struct ferreteria );
       void precio(struct ferreteria );
       void clave(struct ferreteria );
       void marca(struct ferreteria );
       int valido(char *, struct ferreteria );
/***************************iniciamos el menu principal******************/
       void main()
    {
   /*********************************iniciamos los graficos**************/

  int gdriver = DETECT, gmode, errorcode;
  int midx, midy, i;

   initgraph(&gdriver, &gmode, "");
   errorcode = graphresult();
   if (errorcode != grOk)
      {
       printf("Error de Graficos: %s\n", grapherrormsg(errorcode));
       printf("Presiona una tecla para continuar:");
       getch();
       exit(1);
      }

       char opcion;
       int salir=0;
     /**************************terminamos graficas********************/
       do
{

  clrscr();

  setfillstyle(SOLID_FILL,BLUE);
  bar(120,60,550,240);                /*primer bar 3d*/
/*sobre el primer*/

  printf("\n\n\n");
  printf("\n\n\t\tCONTROL DE FERRETERIA\n\n");
  printf("\t\t\t1. ALTAS\n"        );
  printf("\t\t\t2. MOSTRAR TODO\n" );
  printf("\t\t\t3. CONSULTAR\n"    );
  printf("\t\t\t4. MODIFICAR \n"   );
  printf("\t\t\t5. BAJAS\n"        );
  printf("\t\t\t6. INREGRANTE\n");
  printf("\t\t\t7. ORDENAR\n\n"    );
   moveto(250,300);outtext("PULSA ESC PARA SALIR");   /*pocision de esc*/
  setfillstyle(SOLID_FILL,7);       /*color de fondo 2*/
  bar(0,0,120,240);
  setbkcolor(BLUE);                    /*color de fondo3*/
  rectangle(120,60,550,240);
  rectangle(116,56,554,244);        /*rectangulo sobre otro*/
  rectangle(240,295,420,310);
  rectangle(236,291,424,314);

  opcion=getch();
  clrscr();
  switch(opcion)
   {
    case '1':  insertar(datos);
    break;

    case '2':  visualizar(datos);
    break;

    case '3':  buscar(datos);
    break;

    case '4':  modificar(datos);
    break;

    case '5':  borrar(datos);
    break;

    case '6':  acerca();
    break;

   case '7':
       ordenar(datos);

    case 27:  salir=1;
    break;
   }
}
    while(!salir);
}

/**************************insertar los datos en la estructura**************/
    void insertar(struct ferreteria datos)
   {
    clrscr();                                            /*limpiamos pantalla*/
    FILE *f;
    FILE *control;
    int result;
    char clave[10];
    printf("\t\t LOS DIRECTORIOS SON \n C: \n D: \n K: \n\n");

    printf("\n INTRODUCE EL NOMBRE DE EL ARCHIVO\n");

     gets(nombre);
    f=fopen(nombre,"at+");
    clrscr();
    if(!f)
{
printf("ERROR EN LA APERTURA DE EL ARCHIVO\n");
getch();
exit(1);
}


/*************************************************/
printf("PARA TERMINAR LA INTRODUCCION DE REGISTROS, EN CLAVE ESCRIBE '*'\n");
printf("CLAVE:");
gets(clave);   fflush(stdin);
fclose(f);
result=valido(clave, datos);
f=fopen(nombre,"at+");
while(!result)
    {
    printf("LA CLAVE YA EXISTE\n");
    printf("CLAVE: ");
    gets(clave);   fflush(stdin);
    fclose(f);
    result=valido(clave, datos);
    f=fopen(nombre,"at+");
    } strcpy(datos.clave,clave);
while(strcmp(datos.clave,"*"))
{

printf("ARTICULO: ");
gets(datos.articulo);   fflush(stdin);
printf("PRECIO ");
gets(datos.precio);   fflush(stdin);

printf("MARCA: ");
gets(datos.marca);   fflush(stdin);

fwrite(&datos,sizeof(datos),1,f);
fprintf(control,"%s",datos.clave);
fprintf(control,"%s\t\t",datos.articulo);
fprintf(control,"%s\t\t",datos.precio);
fprintf(control,"%s\t\t\n",datos.marca);

clrscr();
printf("PARA TERMINAR LA INTRODUCCION DE REGISTROS, EN CLAVE ESCRIBE '*'\n");

printf("CLAVE:");
gets(clave);   fflush(stdin);
fclose(f);
result=valido(clave, datos);
f=fopen(nombre,"at+");
while(!result)
    {
    printf("LA CLAVE YA EXISTE\n");
    printf("CLAVE: ");
    gets(clave);   fflush(stdin);
    fclose(f);
    result=valido(clave, datos);
    f=fopen(nombre,"at+");
    } strcpy(datos.clave,clave);

}
    fclose(f);
    fclose(control);
}
/**********************************ver los datos introducidos***************/
void visualizar(struct ferreteria datos)
{
    clrscr();
    FILE *f;

    f=fopen(nombre,"rt+");
    if(!f)
{
printf("ERROR EN LA APERTURA DE EL ARCHIVO\n");
getch();
exit(1);
}
    while(fread(&datos,sizeof(datos),1,f))
{
printf("ARTICULO: %s\n", datos.articulo);
printf("CLAVE: %s\n", datos.clave);
printf("PRECIO: %s\n", datos.precio);
printf("MARCA: %s\n", datos.marca);
getch();
clrscr();
}
    fclose(f);
}

void buscar(struct ferreteria datos)
{
    clrscr();
    char opcion;
    int salir=0;
    do
{
  clrscr();
setfillstyle(SOLID_FILL,BLUE);
bar(0,0,640,120);
printf("\t\t\t\tBUSCAR\n");
printf("\t\t\t\t------\n");
printf("\t\t\t1. ARTICULO\n");
printf("\t\t\t2. CLAVE\n");
printf("\t\t\t3. PRECIO\n");
printf("\t\t\t4. MARCA\n\n");
moveto(250,300);outtext("PULSA ESC PARA SALIR");
rectangle(240,295,420,310); //rectan de salir
rectangle(236,291,424,314); //rectan1 de salir
rectangle(0,0,638,120);


opcion=getch();
switch(opcion)
    {
    case '1':  articulo(datos);
    break;
    case '2':  clave(datos);
    break;
    case '3':  precio(datos);
    break;
    case '4':  marca(datos);
    break;
    case 27:  salir=1;
    break;
    }
}
    while(!salir);
}
/**************************FUNCION PARA MODIFICAR FERRETERIA...************/
void modificar(struct ferreteria datos)
{
    clrscr();
    FILE *f;
    FILE *control;
    char opcion, articulo[TAM],clave[10];
    int salir=0,salirf=0, encontrado=0;
    do
{
system("cls");
f=fopen(nombre,"rt+");

printf("INGRESA LA CLAVE A MODIFICAR: ");
gets(clave);   fflush(stdin);
fread(&datos,sizeof(datos),1,f);
while(!feof(f)&&!salir)
    {
    if(!strcmp(datos.clave,clave))
{
printf("ARTICUL0 (antiguo): %s\n", datos.articulo);
printf("ARTICULO (nuevo): ");
gets(datos.articulo);   fflush(stdin);
printf("CLAVE (antiguo): %s\n", datos.clave);
printf("CLAVE (nuevo): ");
gets(datos.clave);   fflush(stdin);
printf("PRECIO (antiguo): %s\n", datos.precio);
printf("PRECIO(nuevo): ");
gets(datos.precio);   fflush(stdin);
printf("MARCA (antiguo): %s\n", datos.marca);
printf("MARCA (nuevo): ");
gets(datos.marca);   fflush(stdin);
fseek(f,-(long)sizeof(datos),SEEK_CUR);
fwrite(&datos,sizeof(datos),1,f);

fwrite(&datos,sizeof(datos),1,control);
encontrado=1;
salir=1;
}
    else
fread(&datos,sizeof(datos),1,f);

    }
if(!encontrado)
    printf("NO SE HA ENCONTRADO EL REGISTRO QUE BUSCA\n");
fclose(f);

printf("¨DESEA MODIFICAR OTRO REGISTRO? (S/N)?\n");
opcion=toupper(getch());
if(opcion=='N')
    salirf=1;
else
    salir=0;
}
    while(!salirf);
}

void borrar(struct ferreteria datos)
{
    clrscr();
    FILE *f, *f_temp;
    char opcion, clave[10];
    int salir=0;
    do
{
system("cls");
f=fopen(nombre,"rt+");
f_temp=fopen("ferreteria_temp","wt+");
if(!f)
    {
    printf("ERROR EN LA APERTURA DEL ARCHIVO\n");
    getch();
    exit(1);
    }
if(!f_temp)
    {
    printf("ERROR EN LA APERTURA DEL ARCHIVO TEMPORAL\n");
    getch();
    exit(1);
    }
printf("INGRESA LA CLAVE A BORRAR: ");
gets(clave);   fflush(stdin);
fread(&datos,sizeof(datos),1,f);
while(!feof(f))
    {
    if(strcmp(clave,datos.clave))
fwrite(&datos,sizeof(datos),1,f_temp);
    fread(&datos,sizeof(datos),1,f);
    }
fclose(f);
fclose(f_temp);
remove(nombre);
rename("ferreteria_temp",nombre);
printf("¨DESEA BORRAR OTRO REGISTRO? (S/N)\n");
opcion=toupper(getch());
if(opcion=='N')
    salir=1;
}
    while(!salir);
}

void acerca()
{   clrscr();
setfillstyle(SOLID_FILL,BLUE);
bar(26,76,604,184);
rectangle(26,76,604,184);
gotoxy(5,5); printf("PROYECTO PARA EXTRAORDENARIO POR:\n\n");
printf("\tLuis Antonio Vallejo Salgado\n");
rectangle(30,80,600,180);
moveto(250,300);outtext("PULSA ESC PARA SALIR");
rectangle(240,295,420,310);
rectangle(236,291,424,314);
getch();
}
/***********************************funcion de el articulo a escribir*******/
   void articulo(struct ferreteria datos)
     {
clrscr();
FILE *f;
char articulo[TAM], opcion;
int salir=0, encontrado=0;
      do
{
system("cls");
f=fopen(nombre,"rt+");
if(!f)
    {
    printf("ERROR EN LA APERTURA DEL ARCHIVO\n");
    getch();
    exit(1);
    }
printf("INGRESA EL ARTICULO A BUSCAR: ");
gets(articulo);   fflush(stdin);
while(fread(&datos,sizeof(datos),1,f))
    {
    if(!strcmp(datos.articulo,articulo))
{
printf("ARTICULO %s\n", datos.articulo);
printf("CLAVE: %s\n", datos.clave);
printf("PRECIO: %s\n", datos.precio);
printf("MARCA: %s\n\n", datos.marca);
encontrado=1;
}
    }
if(!encontrado)
    printf("NO SE HA ENCONTRADO EL REGISTRO SOLICITADO\n");
    printf("¨DESEA BUSCAR OTRO REGISTRO? (S/N)\n");
    opcion=toupper(getch());
    if(opcion=='N')
    salir=1;
else
    encontrado=0;
fclose(f);
}
    while(!salir);
}
/***************************funcion de el precio *************************/
      void precio(struct ferreteria datos)
      {
   clrscr();
   FILE *f;
   char opcion, precio[10];
   int salir=0, encontrado=0;
do
  {
   system("cls");
   f=fopen(nombre,"rt+");
   if(!f)
    {
     printf("ERROR EN LA APERTURA DE EL ARCHIVO\n");
     getch();
     exit(1);
    }
  printf("INTRODUCE EL PRECIO A BUSCAR: ");
  gets(precio);   fflush(stdin);
  while(fread(&datos,sizeof(datos),1,f))
    {
     if(!strcmp(precio,datos.precio))
{
printf("ARTICULO: %s\n", datos.articulo);
printf("CLAVE: %s\n", datos.clave);
printf("PRECIO: %s\n", datos.precio);
printf("MARCA: %s\n\n", datos.marca);
encontrado=1;
}
    }
if(!encontrado)
    printf("NO SE HA ENCONTRADO EL REGISTRO SOLICITADO\n");
printf("¨DESEA BUSCAR OTRO REGISTRO (S/N)\n");
opcion=toupper(getch());
if(opcion=='N')
    salir=1;
else
    encontrado=0;
fclose(f);
}
    while(!salir);
}
/**************************funcion para el campo clave y todo su desarrollo**/
void clave(struct ferreteria datos)
{
    clrscr();
    FILE *f;
    char opcion, clave[10];
    int salir=0, encontrado=0;
    do
{
system("cls");
f=fopen(nombre,"rt+");
if(!f)
    {
    printf("ERROR EN LA APERTURA DE EL ARCHIVO\n");
    getch();
    exit(1);
    }
printf("INGRESA LA CLAVE A BUSCAR: ");
gets(clave);   fflush(stdin);
while(fread(&datos,sizeof(datos),1,f))
    {
    if(!strcmp(clave,datos.clave))
{
printf("ARTICULO: %s\n", datos.articulo);
printf("CLAVE: %s\n", datos.clave);
printf("PRECIO: %s\n", datos.precio);
printf("MARCA: %s\n\n", datos.marca);
encontrado=1;
}
    }
if(!encontrado)
    printf("NO SE HA ENCONTRADO EL REGISTRO SOLICITADO\n");
printf("¨DESEA BUSCAR OTRO REGISTRO? (S/N)\n");
opcion=toupper(getch());
if(opcion=='N')
    salir=1;
else
    encontrado=0;
fclose(f);
}
    while(!salir);
}
/**********************************funcion  para el campo marca*************/
       void marca(struct ferreteria datos)
      {
       FILE *f;
       char opcion, marca[10];
       int salir=0, encontrado=0;
       do
{
  system("cls");
  f=fopen(nombre,"rt+");
  if(!f)
      {
       printf("ERROR EN LA APERTURA DE EL ARCHIVO\n");
       getch();
       exit(1);
      }
       printf("INGRESA LA MARCA A BUSCAR: ");
       gets(marca);   fflush(stdin);
       while(fread(&datos,sizeof(datos),1,f))
{
if(!strcmp(marca,datos.marca))
      {
printf("ARTICULO: %s\n", datos.articulo);
printf("CLAVE: %s\n", datos.clave);
printf("PRECIO: %s\n", datos.precio);
printf("MARCA: %s\n\n", datos.marca);
encontrado=1;
      }
}
if(!encontrado)
    printf("NO SE HA ENCONTRADO EL REGISTRO SOLICITADO\n");
printf("¨DESEA BUSCAR OTRO REGISTRO? (S/N)?\n");
opcion=toupper(getch());
if(opcion=='N')
    salir=1;
else
    encontrado=0;
fclose(f);
}
    while(!salir);
}

/***********esta funcion es para ver si el archivo esta bien hecho o no****/
int valido(char clave[], struct ferreteria datos)
{
    FILE *f;
    int esvalido=1;
    f=fopen(nombre,"rt+");
    fread(&datos,sizeof(datos),1,f);
    while(!feof(f)&&esvalido)
{
if(!strcmp(clave,datos.clave))
    esvalido=0;
else
    fread(&datos,sizeof(datos),1,f);
}
    fclose(f);
    return esvalido;
}


/***************************ordenar las claves por m. de burbuja*************************************/


void ordenar(struct ferreteria datos)
       {

FILE *f;
int p, aux;
int nclaves=1;
int arreglo1[50];
int arreglo2[50];
int valor[200];
int x,i=1,j=2, temp;
int a;


int valor1[23];


if((f=fopen(nombre,"rt+"))==NULL)
{
  printf("\nEL FICHERO NO EXISTE.");
  getch();
  exit(0);
  }

  while(!feof(f)&&!exit)
{
  fread(&datos, sizeof(datos),1,f);


  valor1[nclaves]=atoi(datos.clave);
  nclaves=nclaves+1;
}

  if(valor1[i]>valor1[j])
    {
     valor[j]=aux;
     valor[i]=valor[j];
     valor[j]=valor[i];
     j++;
     i++;
    }
  else
   {
    i++;
    j++;
   }

   for(i=1;i<=nclaves;i++)
    {
     printf("%d",valor[i]);
    }

fclose(f);
getch();


   }


Littlehorse, se ve k sabes mucho, e checar lo que me dijste y pus sigue sin jalar :S

sobre lo de
Código (cpp) [Seleccionar]
valor[j]=aux;
     valor[i]=valor[j];
     valor[j]=valor[i];


Segun yo sta bien...
#3
no no no ordena anda le doy a la opcion de ordenas y me sale un numero asi: -213666 y ya es todo lo k me sale...

lo k tengo en ordenacion es:
Código (cpp) [Seleccionar]
void ordenar(struct ferreteria datos)
       {

FILE *f;
int p, aux;
int nclaves=1;
int arreglo1[50];
int arreglo2[50];
int valor[200];
int x,i=1,j=2, temp;
int a;


int valor1[23];





if((f=fopen(nombre,"rt+"))==NULL)
{
  printf("\nEL FICHERO NO EXISTE.");
  getch();
  exit(0);
  }

  while(!feof(f)&&!exit)
{
  fread(&datos, sizeof(datos),1,f);


  valor1[nclaves]=atoi(datos.clave);
  nclaves=nclaves+1;
}

  if(valor1[i]>valor1[j])
    {
     valor[j]=aux;
     valor[i]=valor[j];
     valor[j]=valor[i];
     j++;
     i++;
    }
  else
   {
    i++;
    j++;
   }

   for(i=1;i<=nclaves;i++)
    {
     printf("%d",valor[i]);
    }

fclose(f);
getch();


   }


Es que el programa crea un archivo .txt y despues desde ese archivo deve de ordenarlos en el programa es lo k no me sale.. Y gracias por responder hermano ;)
#4
Hola a todos, bueno quieresa ver si me echan la mano para hacer que corra bien un programita que ya me saco CANAS tras CANAS no ya sta la mayoria lo uniko k me falta es el metodo de ordenacion que no me corre en la Universidad el Ingeniero nos dijo que por el metodo de ordenacion que queramos y yo lo ise por el de la burbuja pero no me sale no se si alguien de ustedes me podria ayudar si lo hacen MIL gracias o si ven en donde esta mi error DIGANME por que yo ya no doy mas xD saluditos y espero respuesta aqui les dejo el codigo (lo corri en Turbo C)

#include <stdio.h>         
#include <conio.h>         
#include <string.h>         
#include <graphics.h>       
#include <stdlib.h>
#include <process.h>
#define TAM 20
#include <ctype.h>
#include "graphics.h"
char nombre[20];
/****************************estructura principal************************/
  struct ferreteria
    {
     char articulo[TAM]; /*c articulo*/
     char clave[10];
     char precio[10]; /* precio*/
     char marca[10];    //otro
    }datos;
/***********************************funciones*******************************/
       void ordenar(struct ferreteria);
   //    void crear();
       void insertar(struct ferreteria );
       void visualizar(struct ferreteria );
       void buscar(struct ferreteria );
       void modificar(struct ferreteria );
       void borrar(struct ferreteria );
       void acerca();
       void articulo(struct ferreteria );
       void precio(struct ferreteria );
       void clave(struct ferreteria );
       void marca(struct ferreteria );
       int valido(char *, struct ferreteria );
/***************************iniciamos el menu principal******************/
       void main()
    {
   /*********************************iniciamos los graficos**************/

  int gdriver = DETECT, gmode, errorcode;
  int midx, midy, i;

   initgraph(&gdriver, &gmode, "");
   errorcode = graphresult();
   if (errorcode != grOk)
      {
       printf("Error de Graficos: %s\n", grapherrormsg(errorcode));
       printf("Presiona una tecla para continuar:");
       getch();
       exit(1);
      }

       char opcion;
       int salir=0;
     /**************************terminamos graficas********************/
       do
{

  clrscr();

  setfillstyle(SOLID_FILL,BLUE);
  bar(120,60,550,240);                /*primer bar 3d*/
/*sobre el primer*/

  printf("\n\n\n");
  printf("\n\n\t\tCONTROL DE FERRETERIA\n\n");
// printf("\n\n\t0. CREAR\n"        );
  printf("\t\t\t1. ALTAS\n"        );
  printf("\t\t\t2. MOSTRAR TODO\n" );
  printf("\t\t\t3. CONSULTAR\n"    );
  printf("\t\t\t4. MODIFICAR \n"   );
  printf("\t\t\t5. BAJAS\n"        );
  printf("\t\t\t6. INTEGRANTES\n");
  printf("\t\t\t7. ORDENAR\n\n"    );
   moveto(250,300);outtext("PULSA ESC PARA SALIR");   /*pocision de esc*/
  setfillstyle(SOLID_FILL,7);       /*color de fondo 2*/
  bar(0,0,120,240);
  setbkcolor(BLUE);                    /*color de fondo3*/
  rectangle(120,60,550,240);
  rectangle(116,56,554,244);        /*rectangulo sobre otro*/
  rectangle(240,295,420,310);
  rectangle(236,291,424,314);

  opcion=getch();
  clrscr();
  switch(opcion)
   {
    case '1':  insertar(datos);
    break;

    case '2':  visualizar(datos);
    break;

    case '3':  buscar(datos);
    break;

    case '4':  modificar(datos);
    break;

    case '5':  borrar(datos);
    break;

    case '6':  acerca();
    break;

   case '7':
       ordenar(datos);

    case 27:  salir=1;
    break;
   }
}
    while(!salir);
}

/**************************insertar los datos en la estructura**************/
    void insertar(struct ferreteria datos)
   {
    clrscr();                                            /*limpiamos pantalla*/
    FILE *f;
    FILE *control;
    int result;
    char clave[10];
    printf("\t\t LOS DIRECTORIOS SON \n C: \n D: \n K: \n\n");

    printf("\n INTRODUCE EL NOMBRE DE EL ARCHIVO\n");

     gets(nombre);
    f=fopen(nombre,"at+");
    //control=fopen("contro.doc","w+");
    clrscr();
    if(!f)
{
printf("ERROR EN LA APERTURA DE EL ARCHIVO\n");
getch();
exit(1);
}


/*************************************************/
printf("PARA TERMINAR LA INTRODUCCION DE REGISTROS, EN CLAVE ESCRIBE '*'\n");
// fprintf(control,"clave");      /* l clave l producto l precio l marca l */
  // fprintf(control,"\t\t producto");   /* l_______l__________l________l_______l */
    // fprintf(control,"\t\t precio");
      // fprintf(control,"\t\t marca\n");             /*imprimimos con formato*/
printf("CLAVE:");
gets(clave);   fflush(stdin);
fclose(f);
result=valido(clave, datos);
f=fopen(nombre,"at+");
while(!result)
    {
    printf("LA CLAVE YA EXISTE\n");
    printf("CLAVE: ");
    gets(clave);   fflush(stdin);
    fclose(f);
    result=valido(clave, datos);
    f=fopen(nombre,"at+");
    } strcpy(datos.clave,clave);
while(strcmp(datos.clave,"*"))
{




printf("ARTICULO: ");
gets(datos.articulo);   fflush(stdin);
printf("PRECIO ");
gets(datos.precio);   fflush(stdin);

printf("MARCA: ");
gets(datos.marca);   fflush(stdin);

fwrite(&datos,sizeof(datos),1,f);
fprintf(control,"%s",datos.clave);
fprintf(control,"%s\t\t",datos.articulo);
fprintf(control,"%s\t\t",datos.precio);
fprintf(control,"%s\t\t\n",datos.marca);

       // system("cls");

clrscr();
printf("PARA TERMINAR LA INTRODUCCION DE REGISTROS, EN CLAVE ESCRIBE '*'\n");

printf("CLAVE:");
gets(clave);   fflush(stdin);
fclose(f);
result=valido(clave, datos);
f=fopen(nombre,"at+");
while(!result)
    {
    printf("LA CLAVE YA EXISTE\n");
    printf("CLAVE: ");
    gets(clave);   fflush(stdin);
    fclose(f);
    result=valido(clave, datos);
    f=fopen(nombre,"at+");
    } strcpy(datos.clave,clave);

}
    fclose(f);
    fclose(control);
}
/**********************************ver los datos introducidos***************/
void visualizar(struct ferreteria datos)
{
    clrscr();
    FILE *f;

    f=fopen(nombre,"rt+");
    if(!f)
{
printf("ERROR EN LA APERTURA DE EL ARCHIVO\n");
getch();
exit(1);
}
    while(fread(&datos,sizeof(datos),1,f))
{
printf("ARTICULO: %s\n", datos.articulo);
printf("CLAVE: %s\n", datos.clave);
printf("PRECIO: %s\n", datos.precio);
printf("MARCA: %s\n", datos.marca);
getch();
clrscr();
}
    fclose(f);
}

void buscar(struct ferreteria datos)
{
    clrscr();
    char opcion;
    int salir=0;
    do
{              /*metemos el do while para seguir buscando*/
  clrscr();
setfillstyle(SOLID_FILL,5);
bar(0,0,640,120);
printf("\t\t\t\tBUSCAR\n");
printf("\t\t\t\t------\n");
printf("\t\t\t1. ARTICULO\n");
printf("\t\t\t2. CLAVE\n");
printf("\t\t\t3. PRECIO\n");
printf("\t\t\t4. MARCA\n\n");
moveto(250,300);outtext("PULSA ESC PARA SALIR");
rectangle(240,295,420,310); //rectan de salir
rectangle(236,291,424,314); //rectan1 de salir
rectangle(0,0,638,120);


opcion=getch();
switch(opcion)
    {
    case '1':  articulo(datos);
    break;
    case '2':  clave(datos);
    break;
    case '3':  precio(datos);
    break;
    case '4':  marca(datos);
    break;
    case 27:  salir=1;
    break;
    }
}
    while(!salir);
}
/**************************FUNCION PARA MODIFICAR FERRETERIA...************/
void modificar(struct ferreteria datos)
{
    clrscr();
    FILE *f;
    FILE *control;
    char opcion, articulo[TAM],clave[10];
    int salir=0,salirf=0, encontrado=0;
    do
{
system("cls");
f=fopen(nombre,"rt+");

printf("INGRESA LA CLAVE A MODIFICAR: ");
gets(clave);   fflush(stdin);
fread(&datos,sizeof(datos),1,f);
while(!feof(f)&&!salir)
    {
    if(!strcmp(datos.clave,clave))
{
printf("ARTICUL0 (antiguo): %s\n", datos.articulo);
printf("ARTICULO (nuevo): ");
gets(datos.articulo);   fflush(stdin);
printf("CLAVE (antiguo): %s\n", datos.clave);
printf("CLAVE (nuevo): ");
gets(datos.clave);   fflush(stdin);
printf("PRECIO (antiguo): %s\n", datos.precio);
printf("PRECIO(nuevo): ");
gets(datos.precio);   fflush(stdin);
printf("MARCA (antiguo): %s\n", datos.marca);
printf("MARCA (nuevo): ");
gets(datos.marca);   fflush(stdin);
fseek(f,-(long)sizeof(datos),SEEK_CUR);
fwrite(&datos,sizeof(datos),1,f);

fwrite(&datos,sizeof(datos),1,control);
encontrado=1;
salir=1;
}
    else
fread(&datos,sizeof(datos),1,f);

    }
if(!encontrado)
    printf("NO SE HA ENCONTRADO EL REGISTRO QUE BUSCA\n");
fclose(f);

printf("¨DESEA MODIFICAR OTRO REGISTRO? (S/N)?\n");
opcion=toupper(getch());
if(opcion=='N')
    salirf=1;
else
    salir=0;
}
    while(!salirf);
}

void borrar(struct ferreteria datos)
{
    clrscr();
    FILE *f, *f_temp;
    char opcion, clave[10];
    int salir=0;
    do
{
system("cls");
f=fopen(nombre,"rt+");
f_temp=fopen("ferreteria_temp","wt+");
if(!f)
    {
    printf("ERROR EN LA APERTURA DEL ARCHIVO\n");
    getch();
    exit(1);
    }
if(!f_temp)
    {
    printf("ERROR EN LA APERTURA DEL ARCHIVO TEMPORAL\n");
    getch();
    exit(1);
    }
printf("INGRESA LA CLAVE A BORRAR: ");
gets(clave);   fflush(stdin);
fread(&datos,sizeof(datos),1,f);
while(!feof(f))
    {
    if(strcmp(clave,datos.clave))
fwrite(&datos,sizeof(datos),1,f_temp);
    fread(&datos,sizeof(datos),1,f);
    }
fclose(f);
fclose(f_temp);
remove(nombre);
rename("ferreteria_temp",nombre);
     // remove("ferreteria_temp" );
printf("¨DESEA BORRAR OTRO REGISTRO? (S/N)\n");
opcion=toupper(getch());
if(opcion=='N')
    salir=1;
}
    while(!salir);
}

void acerca()
{   clrscr();
setfillstyle(SOLID_FILL,5);
bar(26,76,604,184);
rectangle(26,76,604,184);
gotoxy(5,5);   printf("INTEGRANTES\n\n");
printf("\t\t\t\tARTURO GONZALEZ\n");
printf("\t\t\t\tCARLOS ABRAHAM\n ");
printf("\t\t\t\tMAYRA SANTANA\n");
printf("\t\t\t\tCLAUDIA ACU¥A\n");
rectangle(30,80,600,180);
moveto(250,300);outtext("PULSA ESC PARA SALIR");
rectangle(240,295,420,310);
rectangle(236,291,424,314);

  //para que no tape los
  //printfllllllllllllllll


getch();
}
/***********************************funcion de el articulo a escribir*******/
   void articulo(struct ferreteria datos)
     {
clrscr();
FILE *f;
char articulo[TAM], opcion;
int salir=0, encontrado=0;
      do
{
system("cls");
f=fopen(nombre,"rt+");
if(!f)
    {
    printf("ERROR EN LA APERTURA DEL ARCHIVO\n");
    getch();
    exit(1);
    }
printf("INGRESA EL ARTICULO A BUSCAR: ");
gets(articulo);   fflush(stdin);
while(fread(&datos,sizeof(datos),1,f))
    {
    if(!strcmp(datos.articulo,articulo))
{
printf("ARTICULO %s\n", datos.articulo);
printf("CLAVE: %s\n", datos.clave);
printf("PRECIO: %s\n", datos.precio);
printf("MARCA: %s\n\n", datos.marca);
encontrado=1;
}
    }
if(!encontrado)
    printf("NO SE HA ENCONTRADO EL REGISTRO SOLICITADO\n");
    printf("¨DESEA BUSCAR OTRO REGISTRO? (S/N)\n");
    opcion=toupper(getch());
    if(opcion=='N')
    salir=1;
else
    encontrado=0;
fclose(f);
}
    while(!salir);
}
/***************************funcion de el precio *************************/
      void precio(struct ferreteria datos)
      {
   clrscr();
   FILE *f;
   char opcion, precio[10];
   int salir=0, encontrado=0;
do
  {
   system("cls");
   f=fopen(nombre,"rt+");
   if(!f)
    {
     printf("ERROR EN LA APERTURA DE EL ARCHIVO\n");
     getch();
     exit(1);
    }
  printf("INTRODUCE EL PRECIO A BUSCAR: ");
  gets(precio);   fflush(stdin);
  while(fread(&datos,sizeof(datos),1,f))
    {
     if(!strcmp(precio,datos.precio))
{
printf("ARTICULO: %s\n", datos.articulo);
printf("CLAVE: %s\n", datos.clave);
printf("PRECIO: %s\n", datos.precio);
printf("MARCA: %s\n\n", datos.marca);
encontrado=1;
}
    }
if(!encontrado)
    printf("NO SE HA ENCONTRADO EL REGISTRO SOLICITADO\n");
printf("¨DESEA BUSCAR OTRO REGISTRO (S/N)\n");
opcion=toupper(getch());
if(opcion=='N')
    salir=1;
else
    encontrado=0;
fclose(f);
}
    while(!salir);
}
/**************************funcion para el campo clave y todo su desarrollo**/
void clave(struct ferreteria datos)
{
    clrscr();
    FILE *f;
    char opcion, clave[10];
    int salir=0, encontrado=0;
    do
{
system("cls");
f=fopen(nombre,"rt+");
if(!f)
    {
    printf("ERROR EN LA APERTURA DE EL ARCHIVO\n");
    getch();
    exit(1);
    }
printf("INGRESA LA CLAVE A BUSCAR: ");
gets(clave);   fflush(stdin);
while(fread(&datos,sizeof(datos),1,f))
    {
    if(!strcmp(clave,datos.clave))
{
printf("ARTICULO: %s\n", datos.articulo);
printf("CLAVE: %s\n", datos.clave);
printf("PRECIO: %s\n", datos.precio);
printf("MARCA: %s\n\n", datos.marca);
encontrado=1;
}
    }
if(!encontrado)
    printf("NO SE HA ENCONTRADO EL REGISTRO SOLICITADO\n");
printf("¨DESEA BUSCAR OTRO REGISTRO? (S/N)\n");
opcion=toupper(getch());
if(opcion=='N')
    salir=1;
else
    encontrado=0;
fclose(f);
}
    while(!salir);
}
/**********************************funcion  para el campo marca*************/
       void marca(struct ferreteria datos)
      {
       FILE *f;
       char opcion, marca[10];
       int salir=0, encontrado=0;
       do
{
  system("cls");
  f=fopen(nombre,"rt+");
  if(!f)
      {
       printf("ERROR EN LA APERTURA DE EL ARCHIVO\n");
       getch();
       exit(1);
      }
       printf("INGRESA LA MARCA A BUSCAR: ");
       gets(marca);   fflush(stdin);
       while(fread(&datos,sizeof(datos),1,f))
{
if(!strcmp(marca,datos.marca))
      {
printf("ARTICULO: %s\n", datos.articulo);
printf("CLAVE: %s\n", datos.clave);
printf("PRECIO: %s\n", datos.precio);
printf("MARCA: %s\n\n", datos.marca);
encontrado=1;
      }
}
if(!encontrado)
    printf("NO SE HA ENCONTRADO EL REGISTRO SOLICITADO\n");
printf("¨DESEA BUSCAR OTRO REGISTRO? (S/N)?\n");
opcion=toupper(getch());
if(opcion=='N')
    salir=1;
else
    encontrado=0;
fclose(f);
}
    while(!salir);
}

/***********esta funcion es para ver si el archivo esta bien hecho o no****/
int valido(char clave[], struct ferreteria datos)
{
    FILE *f;
    int esvalido=1;
    f=fopen(nombre,"rt+");
    fread(&datos,sizeof(datos),1,f);
    while(!feof(f)&&esvalido)
{
if(!strcmp(clave,datos.clave))
    esvalido=0;
else
    fread(&datos,sizeof(datos),1,f);
}
    fclose(f);
    return esvalido;
}


/***************************ordenar las claves por m. de burbuja*************************************/


void ordenar(struct ferreteria datos)
       {

FILE *f;
int p, aux;
int nclaves=1;
int arreglo1[50];
int arreglo2[50];
int valor[200];
int x,i=1,j=2, temp;
int a;


int valor1[23];





if((f=fopen(nombre,"rt+"))==NULL)
{
  printf("\nEL FICHERO NO EXISTE.");
  getch();
  exit(0);
  }

  while(!feof(f)&&!exit)
{
  fread(&datos, sizeof(datos),1,f);


  valor1[nclaves]=atoi(datos.clave);
  nclaves=nclaves+1;
}

  if(valor1[i]>valor1[j])
    {
     valor[j]=aux;
     valor[i]=valor[j];
     valor[j]=valor[i];
     j++;
     i++;
    }
  else
   {
    i++;
    j++;
   }

   for(i=1;i<=nclaves;i++)
    {
     printf("%d",valor[i]);
    }

fclose(f);
getch();


   }

/***************************************************************************************/

  /* void crear()
   {
    FILE *f;
    printf("\t\t Los directorios son \n C: \n D: \n K: \n\n");
    printf("\n INTRODUCE EL NOMBRE DE EL ARCHIVO\n");

    gets(nombre);
    f=fopen(nombre,"w+");
    if(f!=NULL)
       {
printf("\n Fichero creado.....\n");
       }
else
{
  printf("\n Error en el archivo\n");
}
    getch();
   }
    */


si lo gustan descargar lo subi a varios del k gusten ;)

http://www.sendspace.com/file/srwxqo

http://rapidshare.com/files/399850495/ProyectoFinal.CPP.html

http://www.2shared.com/file/exh0kCVc/ProyectoFinal.html

http://www.filefactory.com/file/b21675f/n/ProyectoFinal.CPP

http://ifile.it/3t9evgj/ProyectoFinal.CPP

CUALQUIER AYUDA sirve si no le tiran mucho a la de burbuja me dijero k puede ser otro metodo es k soy principiante en esto GRACIAS POR RESPONDER!! ;););)