[C con Clase] un acces en c++

Carlos Pizarro (GM) carlopiza en gmail.com
Jue Oct 28 21:20:55 CEST 2010


Lamentablemente ahi no puedo ayudarte porque no trabajo con TurboC y la 
parte grafica suele ser diferente en cada compilador. Yo he usado la 
libreria TCCONIO para mingw (que es el compilador C que viene en el paquete 
Dev-C++) y recuerdo que decia que era una copia de la libreria CONIO.H del 
TurboC que parecia bastante completa para el manejo de la consola (Te 
permite posicionar el cursor y esas cosas)

Saludos


----- Original Message ----- 
From: "wolf" <wolverine_ch en hotmail.com>
To: <cconclase en listas.conclase.net>
Sent: Thursday, October 28, 2010 10:18 AM
Subject: Re: [C con Clase] un acces en c++


si y vaya que me demore para reconocer ese pekeņo detalle pero si tienes 
razon
ya le asigne espacio al arreglo y todo sale bien =)

ahora la cosa ess mostrar las tablas en modo grafico caray como me complican 
los gets() quiero simplemente mostrar cada tabla en un cuadrito dibujado asi 
siimple pero ya lo he intentado y los gets hacen que cada campo salga en 
pantallas diferentes la verdad no tengo experiencia en programar en modo 
grafico solo conosco las funciones principales pero de ahi a utilizarlas con 
clases  ..
bueno esto es lo ultimo que hice ojala tengas una idea de como acomodarlo en 
modo grafico amigo

#include<stdio.h>
#include<conio.h>
#include<iostream.h>
#include<graphics.h>
#include<stdlib.h>
/*
char signo[30];
int* N;

int* cont;*/






class campo{

char nombre3[15]; //nombre del campo
int tipo;
char* nombretipo;
char descripcion[50]; //descripcion



public:

   char signo;


   void leer3();
   void presenta();
   char* getnombre3(){return nombre3;}

} ;



void campo::leer3(){
     int op;


cout<<"\n Nombre del campo: ";
fflush(stdin);
gets(nombre3);


//aki ira el tipo de dato k contendra el atributo
    cout<<"\n Tipo de dato: ";

    cout<<"\n      [1]Entero";
    cout<<"\n      [2]Decimal";
    cout<<"\n      [3]Fecha/hora";
    cout<<"\n      [4]cadena";

    cout<<"\n              Ingrese opcion: ";
cin>>op;

switch(op){
case 1: nombretipo="entero";
break;
case 2: nombretipo="decimal";
break;

case 3: nombretipo="fecha/hora";
break;
case 4: nombretipo="cadena";
break;

}

cout<<"\n Descripcion del campo: ";
fflush(stdin);
gets(descripcion);


int opt;
char signoo;

salto:
cout<<"   Deseas que este campo sea :\n";
  cout<<"\n      [1]Clave";
  cout<<"\n      [2]Opcional";
  cout<<"\n      [3]Obligatorio";

    cout<<"\n              Ingrese opcion: ";
cin>>opt;

switch(opt){
case 1: signoo='#';
break;
case 2: signoo='o';
break;

case 3: signoo='*';
break;


}

      signo=signoo;



}



void campo::presenta(){

cout<<"    ";
cout<<signo;
cout<<" ";
cout<<nombre3;
cout<<"    ";
       cout<<nombretipo;
       cout<<"    ";
cout<<descripcion;

}



///////////////////////////////////////////////////////////////////////////////////////////



class tabla{

  char nombre2[15]; /*nombre de la tabla*/
   int n2;
   int max2; //maximo de campos
   campo* data2;  //arreglo de campos



public:



tabla(){ //constructor
n2=max2=0;
data2=NULL;
}

void leernombre2();
void inserta2(campo);
void crece2();
    void procesa2();
    void visualiza2();
     char* getnombre2(){return nombre2;}


 ~tabla(){delete data2;}//destructor
};


//definiendo funciones


void tabla::leernombre2()
{
 cout<<"\n\t TABLA: ";
 cout<<"\n nombre: ";
 fflush(stdin);
 gets(nombre2);

}


void tabla::procesa2(){


int op;


do{

 clrscr();
cout<<"\t SUB-MENU :\n";
cout<<"[1] Agregar campo:\n";
cout<<"[2]Ver campos:\n";
cout<<"[3]Salir:\n";
cout<<"   Ingrese opcion: ";
cin>>op;

switch(op){
case 1:salto2:
campo C;
C.leer3();

inserta2(C);

break;



case 2: visualiza2();
break;





}//fin switch

}while(!(op==3));


}// fin procesa






void tabla::inserta2(campo c){
  if(n2==max2)
     crece2(); // es llamada cuando yano hay espacio

 data2[n2]=c;
 n2++;
}



void tabla::crece2(){
  campo* temp2;

 temp2= new campo [max2 + 5]; //se reserva 5 espacios mas al arreglo data2

 for(int i=0; i<n2; i++) //aqui temp2 se llena hasta donde llegue el arreglo 
data2 kedando aun 5 espacios
   temp2[i]=data2[i];

delete data2;
data2=temp2; // ahora data tiene 5 espacios mas para almacenar
max2+=5;   // su max tbm debe ser aumentado en 5
}



void tabla:: visualiza2(){
if(n2 > 0){
  cout<<"\n\n\t    MOSTRANDO CAMPOS: \n";
 for(int i=0;i<n2;i++){
   cout<<"\n  Campo N§ " <<i+1<<"\n";

    data2[i].presenta();
    }
}else {
  cout<<"\n    NO HAY CAMPOS!";

  }
  getch();
}


///////////////////////////////////////////////////////////////////////////////////////////


class basedatos{
  char nombre1[15];
  int max3; //Maximo de tablas
  int n3;
  tabla *data;  //arreglo de tablas


public:

 basedatos();  //constructor

 void leernombre1();
 void inserta(tabla);
 void crece();
 void procesa();
 void visualiza3();


 ~basedatos(){delete data;}//destructor

};


//definiendo funciones



basedatos::basedatos(){  //CONSTRUCTOR
max3=n3=0;
data=NULL;
}



void basedatos::leernombre1()
{
 cout<<"\n\t BASE DE DATOS: ";
 cout<<"\n nombre: ";
 fflush(stdin);
 gets(nombre1);

}

void basedatos::procesa(){


int op;
do{
 clrscr();
cout<<"\t MENU :\n";
cout<<"[1]Crear una tabla:\n";
cout<<"[2]Ver tablas:\n";
cout<<"[3]Salir:\n";
cout<<"   Ingrese opcion: ";
cin>>op;

switch(op){
case 1:
tabla T;
T.leernombre2();
T.procesa2();
inserta(T);
      /* if(T.getsw()==0){
cout<<"NO HAS INGRESADO UN CAMPO CLAVE!";
getch();

}*/
break;



case 2: visualiza3();
break;
//case 3:  if(T.getsw()==0){}


}//fin switch

}while(!(op==3));


}// fin procesa


void basedatos::inserta(tabla t){
  if(n3==max3)
     crece(); // es llamada cuando yano hay espacio

 data[n3]=t;
 n3++;
}



void basedatos::crece(){
  tabla* temp;

 temp= new tabla [max3 + 5]; //se reserva 5 espacios mas al arreglo data

 for(int i=0; i<n3; i++) //aqui temp se llena hasta donde llegue el arreglo 
data kedando aun 5 espacios
   temp[i]=data[i];

delete data;
data=temp; // ahora data tiene 5 espacios mas para almacenar
max3+=5;   // su max tbm debe ser aumentado en 5
}



void basedatos:: visualiza3(){
clrscr();
if(n3 > 0){
cout<<"                          ";
cout<<nombre1;
cout<< "\n\t      MOSTRANDO TABLAS :\n";

for(int i=0;i<n3;i++){
   cout<<"\n\n  Tabla N§ " <<i+1<<"\n";
    cout<<"   ";
    cout<<data[i].getnombre2();
   data[i].visualiza2();
     }
}else {
  cout<<"\n            NO HAY TABLAS!!!";
   getch();
  }

}

 //////////////////////////////////////////////////////////////////////////
     void iniciagrafico(){ /*se llama antes de dibujar*/
     int gdriver=DETECT; /*detect es un valor constantre*/
     int gmode;
     int errorcode;


     initgraph(&gdriver,&gmode,"c:\\tc\\bgi");

     errorcode = graphresult();

     if(errorcode!=grOk)/*grOK es una constante predeterminada ke verifica
si se puede iniciar el modo grafico*/
    {
    cout<<"\nERROR GRAFICO!";
     cout<<grapherrormsg(errorcode);
     getch();
     exit(1);
     }
     }

     void cerrargrafico(){
     closegraph();
     }


////////////////////////////////////////////////////////////////////////////////////


main(){
basedatos B;
clrscr();
iniciagrafico();
B.leernombre1();
B.procesa();
cerrargrafico();
getch();


return 0;
}
_______________________________________________
Lista de correo Cconclase Cconclase en listas.conclase.net
http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ 





Más información sobre la lista de distribución Cconclase