Ver Mensaje Individual
  #9  
Antiguo 03-07-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola eennzzoo.

Yo también había pensado en una opción similar a la publicada por dec.

.h:
Código:
#ifndef Unit2H
#define Unit2H

#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>

class Cliente {

private:
  String FNombre;
  String FApellido;
  String FDni;
  String FFileName;
  TStrings *FTS;

public:
  Cliente();
  __property String Nombre   = { read = FNombre, write = FNombre };
  __property String Apellido = { read = FApellido, write = FApellido };
  __property String Dni      = { read = FDni, write = FDni };
  __property String FileName = { read = FFileName, write = FFileName };
  bool Open();
  bool GetData(const String Dni);
  bool Delete(const String Dni);
  bool Save();
  ~Cliente();
};

#endif
.cpp
Código:
#pragma hdrstop
#include "Unit2.h"
#pragma package(smart_init)

Cliente::Cliente()
{
  FTS = new TStringList;
}

bool Cliente::Open()
{
  FTS->LoadFromFile(FFileName);
  return FileExists(FFileName);
}

bool Cliente::GetData(const String Dni)
{
  int p = FTS->IndexOf(Dni);
  if (p != -1) {
    FNombre   = FTS->Strings[p-2];
    FApellido = FTS->Strings[p-1];
    FDni      = FTS->Strings[p];
    return true;
  } else {
    MessageBox(0,"Cliente no encontrado", "", MB_ICONERROR);
    return false;
  }
}

bool Cliente::Delete(const String Dni)
{
  int p = FTS->IndexOf(Dni);
  bool r = false;
  if (p == -1)
    MessageBox(0,"Cliente no encontrado", "", MB_ICONERROR);
  else if (MessageBox(0, "¿ Borra el cliente ?","",MB_YESNO+MB_ICONQUESTION)==IDYES) {
    FTS->Delete(p);
    r = true;
  }
  return r;
}

bool Cliente::Save()
{
  if (FNombre.IsEmpty() || FApellido.IsEmpty() || FDni.IsEmpty()) {
    MessageBox(0,"Faltan uno o mas datos requeridos", "", MB_ICONERROR);
    return false;
  } else if (FTS->IndexOf(FDni)!= -1) {
    MessageBox(0,"Cliente existente", "", MB_ICONERROR);
    return false;
  } else {
    FTS->Add(FNombre);
    FTS->Add(FApellido);
    FTS->Add(FDni);
    FTS->SaveToFile(FFileName);
    return true;
  }
};

Cliente::~Cliente()
{
  delete FTS;
}
Ejemplo de uso:
Código:
...
#include "Unit2.h"
...

Cliente *cl;

void __fastcall TForm1::FormCreate(TObject *Sender)
{
 cl = new Cliente();
 cl->FileName = "cliente.txt";  /* ruta+nombre de archivo */
 cl->Open();
}

void __fastcall TForm1::btnShowClick(TObject *Sender)
{
  if (cl->GetData(Edit1->Text)) {
    edNom->Text = cl->Nombre;
    edApe->Text = cl->Apellido;
    edDni->Text = cl->Dni;
  }
}

void __fastcall TForm1::btnDeleteClick(TObject *Sender)
{
  if (cl->Delete(Edit1->Text)) {
    edNom->Clear();
    edApe->Clear();
    edDni->Clear();
  }
}

void __fastcall TForm1::btnSaveClick(TObject *Sender)
{
  cl->Save();
}
...
Espero que de las dos sugerencias puedas sacar ideas para implementar tu clase.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita