Hola cHackAll, gracias por tu propuesta. No sé si he entendido mal pero propones utilizar un fichero con un header o cabezera... me parece interesante e igual después estudio como adaptarlo a mi caso. Ayer estuve mejorando mi estructura de datos y me ha quedado de la siguiente manera (en realidad el programa ya estaba funcionando, pero estoy reescribiendo el código porque he añadido la función de manejar álbums que antes no tenía. Era el proyecto final de 1º de FP de Admin de sistemas jeje, ahora tengo k empezar 2º y allí empezamos con las BDD). Bueno ahí va:
Código Delphi
[-]unit UEstructuras;
interface
uses classes, sysutils;
type
TSong = packed record
UID:Integer;
Path,
Lyrics: string[255];
Rate:byte;
Favourite:Boolean;
Title,
Artist,
Album: string[255];
Track: Byte;
Year: string[4];
Genre,
Comments,
Composer,
Encoder,
Copyright,
Link,
Language: string[255];
end;
TSongFile= File of TSong;
PSongNode= ^TSongNode;
TSongNode = record
Prev:PSongNode;
ID:Integer;
Info:TSong;
Next:PSongNode;
end;
TAlbum = packed record
UID:Integer;
Name: string[255];
Rate:byte;
Image: string[255];
Favourite:Boolean;
Songs: String[255];
end;
TAlbumFile= File of TAlbum;
PAlbumNode= ^TAlbumNode;
TAlbumNode = record
Prev:PAlbumNode;
ID:Integer;
Info:TAlbum;
Next:PAlbumNode;
end;
TArtist = packed record
UID:Integer;
Name,
Country,
Language,
Genre,
Web,
Comment,
Albums: string [255];
Photos : array [0..13] of string [255];
end;
TArtistFile= File of TArtist;
PArtistNode= ^TArtistNode;
TArtistNode = record
Prev:PArtistNode;
ID:Integer;
Info:TArtist;
Next:PArtistNode;
end;
TSearchMethod = (ID, UID, Path, Name);
TSongs = class
private
Datapath:string; function UIDAssign: integer; public
List:PSongNode; Counter:Integer; constructor Create (Filename:string); procedure LoadDatabase; procedure SaveDatabase; function Add (Info: TSong):boolean; function Delete (ID: Integer):boolean; function IDReset : boolean; procedure DelBrokenLinks; function Search (Info:TSong; Option:TSearchMethod): PSongNode; procedure DropList; procedure FillStringList (Target: TStrings); destructor Destroy; overload; end;
TAlbums = class
private
Datapath:string;
function UIDAssign: integer;
public
List:PAlbumNode;
Counter:integer;
constructor Create (Filename:string);
procedure LoadDatabase;
procedure SaveDatabase;
function Add (Info: TAlbum):boolean;
function Delete (ID: Integer):boolean;
function IDReset : boolean;
function Search (Info:TAlbum; Option:TSearchMethod): PAlbumNode;
procedure DropList;
procedure FillStringList (Target: TStrings);
destructor Destroy; overload;
end;
TArtists = class
private
Datapath:string;
function UIDAssign: integer;
public
List:PArtistNode;
Counter:integer;
constructor Create (Filename:string);
procedure LoadDatabase;
procedure SaveDatabase;
function Add (Info: TArtist):boolean;
function Delete (ID: Integer):boolean;
function DeleteByName (Name:String):boolean;
function IDReset : boolean;
function Search (Info:TArtist; Option:TSearchMethod): PArtistNode;
procedure DropList;
procedure FillStringList (Target: TStrings);
destructor Destroy; overload;
end;
Si os habéis fijado tengo algunos tipos y clases que sólo difieren del tipo de una variable o del tipo que recibe o devuelve un método. He probado de hacer una clase global y después subclases... pero sería lo mismo porque tendría que redefinir... ya que cada método de cada clase utiliza implementaciones distintas, aunque sea sólo cambiar un tipo. No sé hasta qué punto lo puedo simplificar todo.
Me gustaría aprender BDD en delphi, porque si yo supiera haría esto como BDD... pero no sé por donde empezar hay tantas cosas... qué me aconsejáis?
Ah se me olvidaba... si quiero salir de un bucle basta poner 'break;'?
Gracias gente.