Hola,
No es exactamente lo mismo, porque, por lo demás debe haber muchísimas maneras de hacer lo mismo o algo parecido. Por otro lado, el siguiente código no es C++ (sino Delphi), pero, en fin, por si pudiera servirte de algo, aquí tienes:
Código Delphi
[-]
unit UContactos;
interface
uses
Classes, SysUtils;
type
EContactoInvalido = Exception;
type
TContacto = record
DNI: string;
Nombre: string;
Apellidos: string;
end;
type
TContactos = class(TObject)
private
FRutaBaseDatos: string;
FContenidoBaseDatos: TStrings;
private
function ExisteContacto(const datosContacto: TContacto): Boolean;
public
constructor Create(const rutaBaseDatos: string = '');
public
procedure GuardarContactos();
function InsertarContacto(const datosContacto: TContacto): Integer;
end;
implementation
const
RUTA_POR_DEFECTO_BASE_DATOS = 'Contactos.txt';
resourcestring
rsDatosContactoInvalidos = 'Datos del contacto inválidos.';
constructor TContactos.Create(const rutaBaseDatos: string = '');
begin
FRutaBaseDatos := rutaBaseDatos;
FContenidoBaseDatos := TStringList.Create();
if Trim(FRutaBaseDatos) = EmptyStr then
FRutaBaseDatos := ExtractFilePath(ParamStr(0))+RUTA_POR_DEFECTO_BASE_DATOS;
if FileExists(rutaBaseDatos) then
FContenidoBaseDatos.LoadFromFile(FRutaBaseDatos);
end;
function TContactos.InsertarContacto(const datosContacto: TContacto): Integer;
begin
Result := -1;
if (Trim(datosContacto.DNI) = EmptyStr)
or (Trim(datosContacto.Nombre) = EmptyStr)
or (Trim(datosContacto.Apellidos) = EmptyStr) then
begin
raise EContactoInvalido.Create(rsDatosContactoInvalidos);
end;
if not Self.ExisteContacto(datosContacto) then
begin
Result := FContenidoBaseDatos.Add(Format
(
'%s|%s|%s',
[datosContacto.DNI, datosContacto.Nombre, datosContacto.Apellidos]
));
end;
end;
procedure TContactos.GuardarContactos();
begin
if Trim(FRutaBaseDatos) = EmptyStr then
FRutaBaseDatos := ExtractFilePath(ParamStr(0))+RUTA_POR_DEFECTO_BASE_DATOS;
FContenidoBaseDatos.SaveToFile(FRutaBaseDatos);
end;
function TContactos.ExisteContacto(const datosContacto: TContacto): boolean;
begin
Result := FContenidoBaseDatos.IndexOf(datosContacto.DNI) = -1;
end;
end.