[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