• Martes 7 de Mayo de 2024, 15:56

Autor Tema:  Para Un Master  (Leído 1591 veces)

luis_medina2001

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Para Un Master
« en: Viernes 12 de Diciembre de 2003, 19:26 »
0
:scream:
Si alguien pudiera enviarme una solucion para este codigo en c++, se lo agradeceria mucho. gracias es urgente

// no funciona la opcion 3


#include <iostream.h>
#include <iomanip.h>
#include <stdlib.h>
#include <conio.h>
#include <fstream.h>

void salida(int,  char *, double); //funcion abrir archivo para buscar

class xxx
{
   public:
      void buscar();
      void imprimir_todos();
      void ajustar_nvo_saldos();
};

void xxx::buscar()
{
ifstream clientes("d:\customer.dat", ios::in);
 if(!clientes){
 cout<< "el archivo no pudo abrirse ..";
 exit(1);
 }
 int telefono;
int find;
 char nombre[50];
 double saldo;
 cout<<"ingrese numero de telefono a buscar"<<"\n";
   cin>>find;
 cout << setiosflags(ios::left)<< setw(13) << "telefono" << setw(13) << "nombre"
 << "saldo\n";
 while(clientes >> telefono >> nombre >> saldo){
    if(telefono ==find) //muestra el registro unicamente donde saldo=find
   salida(telefono,nombre,saldo);
}
getch();
}

void xxx::imprimir_todos()
{
ifstream clientes("d:customer.dat", ios::in);//abre para solo lectura
 if(!clientes){
 cout<< "el archivo no pudo abrirse ..";

 }
 int telefono;
 char nombre[50];
 double saldo;
 cout << setiosflags(ios::left)<< setw(13) << "telefono" << setw(13) << "nombre" //alinea a la izquierda y la forma en tipo tabla
 << "saldo\n";
 while(clientes >> telefono >> nombre >> saldo)
   salida(telefono,nombre,saldo);
getch();
}
void xxx::ajustar_nvo_saldos(){
{
   ofstream cliente("d:\customer.dat", ios::out); //se crea cada vez que se corre este programa
  if (!cliente){ //comprueba que se abrio el archivo si no se cierra
  cerr << "error de apertura..." << endl;
  exit(1);
  }
 else
    cout << "proporciona telefono, nombre y saldo \n"
       << "ctrl-z para terminar (fin de archivo) \n";
  int telefono;
  char nombre[30];
  float saldo;
  while(cin >> telefono >> nombre >> saldo){
  cliente << telefono <<' ' << nombre << ' ' << saldo << '\n';
  }
}
}

// cabecera principal


int main()
{
   int opcion;
   xxx obj1,obj2,obj3;
do{
   clrscr();
   cout<<"\n\t\t*****Consulta de Saldos Telefonicos*****\n\n";
   cout<<"\tTeclea numero de la operacion a realizar:\n\n";
   cout<<"\t[1]"<<"\t"<<"Buscar saldo"<<"\n";
   cout<<"\t[2]"<<"\t"<<"Imprimir todos los saldos"<<"\n";
   cout<<"\t[3]"<<"\t"<<"Actualizar nuevos saldos"<<"\n";
   cout<<"\t[4]"<<"\t"<<"Salir del programa\n";
   cout<<"\n\t\t\t\t\t    Opcion:";
   cin>>opcion;
if(opcion==1){
   obj1.buscar();  //posible xxx antes de buscar
   }
if(opcion==2){
   obj2.imprimir_todos();
   }
if(opcion==3){
   obj3.ajustar_nvo_saldos();
   }
}
while(opcion!=4);
exit(0);
return 0;
}

// funcion de salida

void salida(int tel,  char *nombre, double sal)
{
 cout << setiosflags(ios::left) << setw(10) <<  tel
      << setw(13) << nombre  <<  setw(7) << setprecision(2)
      << resetiosflags(ios::left)
      << setiosflags(ios::fixed | ios::showpoint)
      << sal << "\n";
    }

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Para Un Master
« Respuesta #1 en: Sábado 13 de Diciembre de 2003, 17:36 »
0
Bueno y cual error esta saliendo?
porque no funciona, que hace mal?
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

luis_medina2001

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Para Un Master
« Respuesta #2 en: Martes 16 de Diciembre de 2003, 01:37 »
0
Cita de: "juank"
Bueno y cual error esta saliendo?
porque no funciona, que hace mal?
 el problema esta al actualizar el archivo (la opcion 3) debe regresarse al menu principal y no lo hace se bloquea no muestra errores al compilarlo por eso no se porque no funciona.Si puedes ayudarme te lo agradeceria mucho. gracias

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Para Un Master
« Respuesta #3 en: Martes 16 de Diciembre de 2003, 03:48 »
0
:ph34r: bueno sinceramente yo no se mucho de c++ pero no logro entender tu codigo, estas definiendo metodos dentro de la clase, pero no los implementas y luego haces esto: :comp:
Código: Text
  1.  
  2. class xxx
  3. {
  4.   public:
  5.   void buscar();
  6.   void imprimir_todos();
  7.   void ajustar_nvo_saldos();
  8. };
  9.  
  10. void xxx::buscar()
  11. {
  12.   ifstream clientes(&#34;d:&#092;customer.dat&#34;, ios::in);
  13.   if(!clientes)
  14.   {
  15.      cout&#60;&#60; &#34;el archivo no pudo abrirse ..&#34;;
  16.      exit(1);
  17.   }
  18.   int telefono;
  19.   int find;
  20.   char nombre[50];
  21.   double saldo;
  22.   cout&#60;&#60;&#34;ingrese numero de telefono a buscar&#34;&#60;&#60;&#34;&#092;n&#34;;
  23.   cin&#62;&#62;find;
  24.   cout &#60;&#60; setiosflags(ios::left)&#60;&#60; setw(13) &#60;&#60; &#34;telefono&#34; &#60;&#60; setw(13)&#60;&#60; &#34;nombre&#34;&#60;&#60; &#34;saldo&#092;n&#34;;
  25.   while(clientes &#62;&#62; telefono &#62;&#62; nombre &#62;&#62; saldo)
  26.   {
  27.      if(telefono ==find) //muestra el registro unicamente donde saldo=find
  28.        salida(telefono,nombre,saldo);
  29.   }
  30.   getch();
  31. }
  32.  

no entiendo esto:

void xxx::buscar()

estas heredando de buscar hacia xxx? no se pero si fuera yo, haria esto
y lo haria asi:
Código: Text
  1.  
  2. class xxx
  3. {
  4.   public void buscar()
  5.   {
  6.     ifstream clientes(&#34;d:&#092;customer.dat&#34;, ios::in);
  7.     if(!clientes)
  8.     {
  9.       cout&#60;&#60; &#34;el archivo no pudo abrirse ..&#34;;
  10.       exit(1);
  11.     }
  12.     int telefono;
  13.     int find;
  14.     char nombre[50];
  15.     double saldo;
  16.     cout&#60;&#60;&#34;ingrese numero de telefono a buscar&#34;&#60;&#60;&#34;&#092;n&#34;;
  17.     cin&#62;&#62;find;
  18.     cout &#60;&#60; setiosflags(ios::left)&#60;&#60; setw(13) &#60;&#60; &#34;telefono&#34; &#60;&#60; setw(13)&#60;&#60; &#34;nombre&#34;&#60;&#60; &#34;saldo&#092;n&#34;;
  19.     while(clientes &#62;&#62; telefono &#62;&#62; nombre &#62;&#62; saldo)
  20.     {
  21.       if(telefono ==find) //muestra el registro unicamente donde saldo=find
  22.       salida(telefono,nombre,saldo);
  23.     }
  24.     getch();
  25.   }
  26. };
  27.  
  28.  

Bueno lo habria hecho asi.. eso sin tener en cuenta que una clase debe tener un constructor y otras cositas adicionales que aca no hay, bueno esper que esto te alla servido de ayuda, o sino que por lo menos me expliques porque no logro entender el codigo. :blink:
aah  si se supone que para utilizar los metodos de una clase , se deben instanciar los miembros de la clase es decir deberias hacer:

xxx obj1;
obj1 = new xxx();

esto variaria segun el tipo de constructor que implementes...

la unica forma de que no necesitaras instanciar la clase seria que cada uno de sus metodos fuera static.

Ahora y por el momento fin.. en todo caso si pareciera que no se ni de que estoy hablando te pido mis disculpas. :whistling:
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

luis_medina2001

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Para Un Master
« Respuesta #4 en: Lunes 22 de Diciembre de 2003, 03:58 »
0
Me has impresionado mi buen juank eres bueno y es que dices que casi no conoces de c++, bueno es lo mismo asignar a la clase  que yo defini como  xxx con un par de dos puntos(::) a u  objeto que en este caso llamo buscar  sin embargo mi error no se encuentra en la herencia ni en los constructores si no en la forma de regresar dentro del do-while en la cabecera principal soy principiante en esto y creo que estoy mal en esa definicion no estan muy bien simentadas mis principios basicos, no se si ya has corrido el programa si lo corres creo que te daras cuenta de lo que esta pasando. Al correrlo  entras a un menu teclea la opcion 1 o 2 y veras que se esta llamando a los objetos pero cuando se llama a la opcion 3 se bloquea hace como un loop dentro del objeto, si lo puedes revisar otra vez y decirme si hallaste algo te lo agredeceria y si no ¿podrias recomendar esta discusion a algun experto en c++?
Muchisimas Gracias por tu tiempo te lo agradesco mucho

martin campos quintero

  • Miembro MUY activo
  • ***
  • Mensajes: 113
  • Nacionalidad: 00
    • Ver Perfil
Re: Para Un Master
« Respuesta #5 en: Sábado 24 de Abril de 2004, 15:26 »
0
Hola a todos, mira ps yo soy el experto ke estabas esperando, jeje


Ya resolvi tu problema, mira aki está el kodigo:

#include <iostream.h>
#include <iomanip.h>
#include <stdlib.h>
#include <conio.h>
#include <fstream.h>
#include <stdio.h>

void salida(int, char *, double); //funcion abrir archivo para buscar

class xxx
{
public:
void buscar();
void imprimir_todos();
void ajustar_nvo_saldos();
};

void xxx::buscar()
{
ifstream clientes("d:\customer.dat", ios::in);
if(!clientes){
cout<< "el archivo no pudo abrirse ..";
exit(1);
}
int telefono;
int find;
char nombre[50];
double saldo;
cout<<"ingrese numero de telefono a buscar"<<"\n";
cin>>find;
cout << setiosflags(ios::left)<< setw(13) << "telefono" << setw(13) << "nombre"
<< "saldo\n";
while(clientes >> telefono >> nombre >> saldo){
if(telefono ==find) //muestra el registro unicamente donde saldo=find
salida(telefono,nombre,saldo);
}
getch();
}

void xxx::imprimir_todos()
{
ifstream clientes("d:customer.dat", ios::in);//abre para solo lectura
if(!clientes){
cout<< "el archivo no pudo abrirse ..";

}
int telefono;
char nombre[50];
double saldo;
cout << setiosflags(ios::left)<< setw(13) << "telefono" << setw(13) << "nombre" //alinea a la izquierda y la forma en tipo tabla
<< "saldo\n";
while(clientes >> telefono >> nombre >> saldo)
salida(telefono,nombre,saldo);
getch();
}
void xxx::ajustar_nvo_saldos()
{
  ofstream cliente("d:\customer.dat", ios::out); //se crea cada vez que se corre este programa
  if (!cliente){ //comprueba que se abrio el archivo si no se cierra
    cerr << "error de apertura..." << endl;
    exit(1);
  }
  else
    cout << "proporciona telefono, nombre y saldo \n"
    << "ctrl-z para terminar (fin de archivo) \n";
    int telefono;
    char nombre[30];
    float saldo;
    while(cin >> telefono >> nombre >> saldo){
    cliente << telefono <<' ' << nombre << ' ' << saldo << '\n';
  }
}

// cabecera principal


int main()
{
char opcion;
xxx obj1,obj2,obj3;
do{
clrscr();
cout<<"\n\t\t*****Consulta de Saldos Telefonicos*****\n\n";
cout<<"\tTeclea numero de la operacion a realizar:\n\n";
cout<<"\t[1]"<<"\t"<<"Buscar saldo"<<"\n";
cout<<"\t[2]"<<"\t"<<"Imprimir todos los saldos"<<"\n";
cout<<"\t[3]"<<"\t"<<"Actualizar nuevos saldos"<<"\n";
cout<<"\t[4]"<<"\t"<<"Salir del programa\n";
cout<<"\n\t\t\t\t\t Opcion:";
//opcion=0;
opcion=getch();
if(opcion=='1'){
obj1.buscar(); //posible xxx antes de buscar
}
if(opcion=='2'){
obj2.imprimir_todos();
}
if(opcion=='3'){
obj3.ajustar_nvo_saldos();
//char aux[2];
//cin.getline(aux,2);
}
}
while(opcion!='4');
exit(0);
return 0;
}

// funcion de salida

void salida(int tel, char *nombre, double sal)
{
cout << setiosflags(ios::left) << setw(10) << tel
<< setw(13) << nombre << setw(7) << setprecision(2)
<< resetiosflags(ios::left)
<< setiosflags(ios::fixed | ios::showpoint)
<< sal << "\n";
}

Komo te podrás haber dado kuenta, solo kambie la variable opcion de int a char
ya ke al pulsar kontrol-z se genera basura, ke agarra opcion kon el cin, asi ke ahora almaceno el valor kon la sentencia  opcion=getch(); la kual le da el kodigo ascii de la opcion pulsada, es por eso ke en las kondiciones les puse apostrofe a los números '  . Espero te sirva, saludos desde Michoacán Mexico

martin campos quintero

  • Miembro MUY activo
  • ***
  • Mensajes: 113
  • Nacionalidad: 00
    • Ver Perfil
Re: Para Un Master
« Respuesta #6 en: Sábado 24 de Abril de 2004, 15:29 »
0
Ah por cierto, lo ke te dijo Juank de komo le haria el en buskar, se le konoce komo funciones inline, la unika diferencia entre las dos, es ke una se hace dentro de la klase y la otra fuera,  :smartass: algo de teoria, jeje