Agenda en C++ con clases

octubre 30, 2008 at 6:58 pm (Programacion C++) (, , , , , , , , , , , , , )

// Este es el cuerpo del programa

#include <iostream.h>

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#include”creative.h”

 

char numero[6];

 

int Menu();

int Menuelim();

int Menumod();

int Menumos();

 

 

 

 

void main()

{

 

 

   int op,op2,op4;

   long numero;

     arch = fopen(“Archivo.cs”, “r+b”);

     if(!arch) arch = fopen(“Archivo.cs”, “w+b”);

 

 

 do {

      op = Menu();

   switch(op) {

         case 1:

 

              do{

 

                clrscr();

                cs.nuevo();

                cout<<”\n\nDesea añadir otro registro? (s/n): “;cin>>resp;

              }while(resp== ‘S’ || resp== ‘s’);

 

         break;

         case 2:

                do{

                  op4 = Menumos();

                  switch(op4) {

                      case 1:

                             do{

                               clrscr();

                               cout<<”Mostrar registro: “;cin>>numero;

                               cs.unreg(numero);

                               cout<<”\n\nDesea ver otro registro? (s/n): “;

                               cin>>resp;

                             }while(resp== ‘S’ || resp== ‘s’);

                      break;

                      case 2:

                           rewind(arch);

                           numero = 0;

                           clrscr();

                           cout<<”No de cta.   Nombre      Apellido P   Apellido M     Telefono    Celular\n”;

                           cout<<”=========================================================================”;

                           cout<<”\n”;

                           while(fread(&cs, sizeof(campos), 1, arch))

                           cs.todos(numero++,1);

                           getch();

                           h=0;

 

                      break;

                      case 3:

                            cs.Empaquetar(&arch);

                           cs.Ordenar(arch);

                           cout<<”\n\a                    Se han ordenado los registros”;

                           getch();

                       break;

 

                       }

                       } while(op4 != 0);

 

 

         break;

         case 3:

                  do{

                  op2 = Menuelim();

                  switch(op2) {

                      case 1:

                           do{

                               clrscr();//envia a papelera

                               cout<<”Eliminar registro: “;cin>>numero;

                               cs.elimina(numero);

                               cout<<”\n\nDesea eliminar otro registro? (s/n): “;

                               cin>>resp;

                           }while(resp== ‘S’ || resp== ‘s’);

                      break;

                      case 2:

 

                           do{

                              clrscr();

                              cout<<”Recuperar registro: “;cin>>numero;

                              cs.recupera(numero);

                              cout<<”\n\nDesea recuperar otro registro? (s/n): “;

                              cin>>resp;

                           }while(resp== ‘S’ || resp== ‘s’);

                      break;

                      case 3:

 

                           rewind(arch);

                           numero = 0;

                           clrscr();

                           cout<<”No de cta.   Nombre      Apellido P   Apellido M     Telefono    Celular\n”;

                           cout<<”=========================================================================”;

                           cout<<”\n”;

                           while(fread(&cs, sizeof(campos), 1, arch))

                           cs.todos(numero++,0);

                           getch();

                           h=0;

                       break;

                       case 4:

                           cs.Empaquetar(&arch);

                           cout<<”\a”;

                           cout<<”Se ha vaciado la papelera de reciclaje”;

                           getch();

                       break;

                       }

                       } while(op2 != 0);

 

 

         break;

 

         case 4:

         clrscr();

              int cc;

              cout<<”Modificar registro No: “;cin>>numero;

              cs.unreg(numero);

 

                  do{

                         cc=cs.modiop(numero);

                               fseek(arch, numero*sizeof(campos), SEEK_SET);

                               fwrite(&cs, sizeof(campos), 1, arch);

                              clrscr();

                              cout<<”\a”;

                              cs.unreg(numero);

                       } while(cc != 0);

 

           break;

 

 

      }

 } while(op != 0);

   fclose(arch);

}

 

 

 

int Menu()

{

   int resp;

   do {

      clrscr();

      gotoxy(15,1);cout<<”———————————–”;

      gotoxy(15,2);cout<<”    Teclea la opcion que deseas”;

      gotoxy(15,3);cout<<”———————————–”;

      gotoxy(15,4);cout<<”1 Insertar registro”;

      gotoxy(15,5);cout<<”2 Mostrar registros”;

      gotoxy(15,6);cout<<”3 Eliminar”;

      gotoxy(15,7);cout<<”4 Modificar Registro”;

      gotoxy(15,8);cout<<”0 Salir”;

      gotoxy(15,9);cout<<”———————————–\n”;

      cin>>resp;

   } while(resp < 0 && resp > 4);

   return resp;

}

 

 

 

int Menuelim()

{

   int resp;

   do {

      clrscr();

      gotoxy(15,1);cout<<”———————————–”;

      gotoxy(15,2);cout<<”    Teclea la opcion que deseas”;

      gotoxy(15,3);cout<<”———————————–”;

      gotoxy(15,4);cout<<”1 Enviar a la papelera de reciclaje”;

      gotoxy(15,5);cout<<”2 Recuperar de la papelera”;

      gotoxy(15,6);cout<<”3 Mostrar Papelera”;

      gotoxy(15,7);cout<<”4 Vaciar papelera de reciclaje”;

      gotoxy(15,8);cout<<”0 Menu anterior”;

      gotoxy(15,9);cout<<”———————————–\n”;

      cin>>resp;

   } while(resp < 0 && resp > 4);

   return resp;

}

 

int Menumos()

{

   int resp;

   do {

      clrscr();

      gotoxy(15,1);cout<<”———————————–”;

      gotoxy(15,2);cout<<”    Teclea la opcion que deseas”;

      gotoxy(15,3);cout<<”———————————–”;

      gotoxy(15,4);cout<<”1 Mostrar un registro”;

      gotoxy(15,5);cout<<”2 Mostrar todos los registros”;

      gotoxy(15,6);cout<<”3 Ordenar los registros”;

      gotoxy(15,7);cout<<”0 Menu anterior”;

      gotoxy(15,8);cout<<”———————————–\n”;

      cin>>resp;

   } while(resp < 0 && resp > 3);

   return resp;

}

 

 

 

///////////Aqui empieza el archivo cabecera que corresponde a la clase  esto se guarda en otro archivo con la extension “.h” en este caso lo nombre “creative.h”

 

 

   class campos {

   public:

   campos();

  // ~campos();

   void nuevo();

   void unreg(long x);

   void todos(long n,int x);

   void uno(int x);

   char *Lee(FILE *arch, long n, char *buf);

   void modi(long x);

   void pide();

   int modiop(long num);

   void elimina(long x);

   void recupera(long x);

   void Empaquetar(FILE **arch);

   void Ordenar(FILE *arch);

   void Intercambia(FILE *arch, long iz, long de);

   void asigna(FILE *arch, long inicio, long final);

 

   private:

   int valido;

   char no[10];

   char nombre[10];

   char apellidop[12];

   char apellidom[12];

   char tel[12];

   char cel[12];

 

};

 

 

   FILE *arch;

 

   campos::campos(){}

   campos cs;

    int i,h=0;

    char resp;

 

int Menumod()

{

   int resp;

   do {

 

      gotoxy(15,7);cout<<”———————————–”;

      gotoxy(15,8);cout<<”    Teclea la opcion que deseas”;

      gotoxy(15,9);cout<<”———————————–”;

      gotoxy(15,10);cout<<”1 No. de cuenta”;

      gotoxy(15,11);cout<<”2 Nombre”;

      gotoxy(15,12);cout<<”3 Apellido Paterno”;

      gotoxy(15,13);cout<<”4 Apellido Materno”;

      gotoxy(15,14);cout<<”5 Telefono”;

      gotoxy(15,15);cout<<”6 Celular”;

      gotoxy(15,16);cout<<”7 Todo”;

      gotoxy(15,17);cout<<”0 Menu anterior”;

      gotoxy(15,18);cout<<”———————————–”;

      cout<<”\n”;cin>>resp;

   } while(resp < 0 && resp > 7);

   return resp;

}

void campos :: nuevo()

{

            cout<<”No de cta.   Nombre      Apellido P   Apellido M     Telefono    Celular\n”;

            cout<<”==========================================================================”;

            valido = 1;

         pide();

         fseek(arch, 0, SEEK_END);

         fwrite(&cs, sizeof(campos), 1, arch);

}

 

 

void campos :: unreg(long x)

{

 

            fseek(arch, x*sizeof(campos), SEEK_SET);

            fread(&cs, sizeof(campos), 1, arch);

            cout<<”No de cta.   Nombre      Apellido P   Apellido M     Telefono    Celular\n”;

            cout<<”=========================================================================”;

            uno(1);

}

 

 

void campos :: todos(long n,int x)

{

 

   if(valido == x) {

   h++;

      gotoxy(1,h+2);cout<<n<<” “<<no;

      gotoxy(14,h+2);cout<<nombre;

      gotoxy(26,h+2);cout<<apellidop;

      gotoxy(39,h+2);cout<<apellidom;

      gotoxy(54,h+2);cout<<tel;

      gotoxy(67,h+2);cout<<cel;

      cout<<”\n”;

   }

}

 

int campos :: modiop(long num){

int op3;

                 op3 = Menumod();

                  switch(op3) {

                      case 1:

                           cout<<”\nTeclea nuevo Numero de cuenta: “;cin>>no;

                      break;

                      case 2:

                           cout<<”\nTeclea nombre de cuenta: “;cin>>nombre;

                      break;

                      case 3:

                           cout<<”\nTeclea apellido paterno: “;cin>>apellidop;

                       break;

                       case 4:

                           cout<<”\nTeclea apellido materno: “;cin>>apellidom;

                       break;

                       case 5:

                           cout<<”\nTeclea telefono: “;cin>>tel;

                       break;

                       case 6:

                           cout<<”\nTeclea celular: “;cin>>cel;

 

                       break;

                       case 7:

                            clrscr();

                            modi(num);

                       break;

                       }

 

                 return op3;

}

 

 

void campos :: modi(long x)

{

            fseek(arch, x*sizeof(campos), SEEK_SET);

            fread(&cs, sizeof(campos), 1, arch);

            valido = 1;

            cout<<”No de cta.   Nombre      Apellido P   Apellido M     Telefono    Celular\n”;

            cout<<”=========================================================================”;

            pide();

}

 

void campos :: pide(){

 

            gotoxy(3,3);fgets(no, 10, stdin);

            for(i = strlen(no)-1; i && no[i] < ‘ ‘; i–)

               no[i] = 0;

            gotoxy(14,3);fgets(nombre, 10, stdin);

            for(i = strlen(nombre)-1; i && nombre[i] < ‘ ‘; i–)

               nombre[i] = 0;

            gotoxy(26,3);fgets(apellidop, 12, stdin);

            for(i = strlen(apellidop)-1; i && apellidop[i] < ‘ ‘; i–)

               apellidop[i] = 0;

            gotoxy(39,3);fgets(apellidom, 12, stdin);

            for(i = strlen(apellidom)-1; i && apellidom[i] < ‘ ‘; i–)

               apellidom[i] = 0;

            gotoxy(54,3);fgets(tel, 12, stdin);

            for(i = strlen(tel)-1; i && tel[i] < ‘ ‘; i–)

               tel[i] = 0;

            gotoxy(67,3);fgets(cel, 12, stdin);

            for(i = strlen(cel)-1; i && cel[i] < ‘ ‘; i–)

               cel[i] = 0;

}

 

 

 

 

void campos :: elimina(long x)

{

            fseek(arch, x*sizeof(struct campos), SEEK_SET);

            fread(&cs, sizeof(struct campos), 1, arch);

            cout<<”\nNo de cta.   Nombre      Apellido P   Apellido M     Telefono    Celular\n”;

            cout<<”=========================================================================”;

            uno(1);

            cout<<”\n\nDesea eliminar este registro? (s/n): “;

            cin>>resp;

            if (resp== ‘S’ || resp== ‘s’){

            valido = 0;

            fseek(arch, x*sizeof(campos), SEEK_SET);

            fwrite(&cs, sizeof(campos), 1, arch);

            cout<<”\n\n\t\t\a********Ha sido enviado a la papelera********”;

            }

}

 

void campos :: recupera(long x)

{

            fseek(arch, x*sizeof(campos), SEEK_SET);

            fread(&cs, sizeof(campos), 1, arch);

            cout<<”\nNo de cta.   Nombre      Apellido P   Apellido M     Telefono    Celular\n”;

            cout<<”=========================================================================”;

            uno(0);

            cout<<”\n\nDesea recuperar este registro? (s/n): “;

            cin>>resp;

            if (resp== ‘S’ || resp== ‘s’){

            valido = 1;

            fseek(arch, x*sizeof(campos), SEEK_SET);

            fwrite(&cs, sizeof(campos), 1, arch);

            cout<<”\n\n\t\t\a***********Registro recuperado***********”;

            }

}

 

void campos :: uno(int x)

{

 

   if(valido == x) {

      gotoxy(3,5);cout<<no;

      gotoxy(14,5);cout<<nombre;

      gotoxy(26,5);cout<<apellidop;

      gotoxy(39,5);cout<<apellidom;

      gotoxy(54,5);cout<<tel;

      gotoxy(67,5);cout<<cel;

 

     }

}

 

 

 

void campos :: Empaquetar(FILE **arch)

{

   FILE *ftemp;

 

   ftemp = fopen(“Archivo.tmp”, “wb”);

   rewind(*arch);

   while(fread(&cs, sizeof(campos), 1, *arch))

      if(valido == 1)

         fwrite(&cs, sizeof(campos), 1, ftemp);

   fclose(ftemp);

   fclose(*arch);

   remove(“Archivo.cs2″);

   rename(“Archivo.cs”, “Archivo.cs2″);

   rename(“Archivo.tmp”, “Archivo.cs”);

   *arch = fopen(“Archivo.cs”, “r+b”);

}

 

void campos :: Ordenar(FILE *arch)

{

   long nRegs;

   fseek(arch, 0, SEEK_END);

   nRegs = ftell(arch)/sizeof(campos);

   asigna(arch, 0L, nRegs-1);

}

 

void campos :: asigna(FILE *arch, long inicio, long final)

{

   long iz, de;

   char mitad[34];

   static char cad[34];

 

   iz = inicio;

   de = final;

   strcpy(mitad, Lee(arch, (iz+de)/2, cad));

   do {

      while(strcmp(Lee(arch, iz, cad), mitad) < 0 && iz < final) iz++;

      while(strcmp(mitad, Lee(arch, de, cad)) < 0 && de > inicio) de–;

      if(iz < de) Intercambia(arch, iz, de);

      if(iz <= de) {

         iz++;

         de–;

      }

   } while(iz <= de);

   if(inicio < de) asigna(arch, inicio, de);

   if(iz < final) asigna(arch, iz, final);

}

 

char *campos :: Lee(FILE *arch, long n, char *buf)

{

 

   fseek(arch, n*sizeof(campos), SEEK_SET);

   fread(&cs, sizeof(campos), 1, arch);

   strcpy(buf, no);

   return buf;

}

 

void campos :: Intercambia(FILE *arch, long iz, long de)

{

    campos reg1, reg2;

   fseek(arch, iz*sizeof(campos), SEEK_SET);

   fread(&reg1, sizeof(campos), 1, arch);

   fseek(arch, de*sizeof(campos), SEEK_SET);

   fread(&reg2, sizeof(campos), 1, arch);

   fseek(arch, iz*sizeof(campos), SEEK_SET);

   fwrite(&reg2, sizeof(campos), 1, arch);

   fseek(arch, de*sizeof(campos), SEEK_SET);

   fwrite(&reg1, sizeof(campos), 1, arch);

}

///Guardenlo con el nombre creative.h y no hay errores, me sirvio muy bien, crea, lee, modifica, elimina y ordena los registros, espero que les sirva yo lo probe en Borland c++ 5.02

Se los mando por separado en .doc para que se les haga mas facil copiarlo ya estan separados. archivo  creative

 

Codificad por: Cesar Omar Sagastegui Albor

Permalink 2 comentarios

Seguir

Get every new post delivered to your Inbox.