Wenn es nur darum geht, ein Übungsprojekt zu realisieren, in dem man einige Daten speichern kann kämen ja ggf. auch andere Lösungsansätze in Frage.
Es muss nicht immer eine
SQL-
DB dahinter stehen, es sei denn, dass genau dieses dein Ziel der Übung ist.
So könntest du auch deine Daten über Klassen definieren und beim Starten laden und bei Veränderungen speichern. Das ginge in einem Stream, als
XML oder auch einfach als JSON-File.
Würde man nicht vor einer Lagerverwaltung erst mal Arikel erzeugen, die man dann im Lager verwalten kann?
Was mir aber schon beim anschauen des Quellcodes aufgefallen ist, sind die StrtoInt um die Daten der Edit's zu speichern. Du läßt da zwar über OnKeyPress nur gültige Eingaben zu, filterst aber gleichzeitig auch die Entf-Taste. Weiterhin könnte ich immernoch eine beliegen Text per CopyAndPaste einfügen, was mal direkt zu einer
Exception führt. Und wo wir grad bei Exceptions sind
ein bisschen Exceptionbehandlung könnte nicht schaden.
Und im OnFormCreate erzeugst du ein TLager-Object. Wo gibtst du das wieder frei?
In der
Unit Lagerberechnung hast du
VCL.Dialogs in den Uses. Warum?
Ich finde es im Ganzen schwer zu lesen. So hältst du alle Daten in einem Array of String. Wie soll man da erkennen, welche Daten dort abgelegt werden und welcher Datentyp vorliegt. Um das jetzt rauszukriegen muss ich durch den ganzen Code um irgendwann festzustellen wofür ein Wert verwendet wird.
Erstell dir für die Daten ein Object.
z.B. so (Ist nur mal so zusammengeklatscht:
Delphi-Quellcode:
TLagerBestand=class
private
FStueckpreis: Currency;
FWarenverkauf: Integer;
FEndbestand: Integer;
FLagerbestand: Extended;
FWareneingang: Integer;
FLagerumschlH: Extended;
FWarenwert: Currency;
FAnfangsbestand: Integer;
procedure SetAnfangsbestand(const Value: Integer);
procedure SetEndbestand(const Value: Integer);
procedure SetLagerbestand(const Value: Extended);
procedure SetLagerumschlH(const Value: Extended);
procedure SetStueckpreis(const Value: Currency);
procedure SetWareneingang(const Value: Integer);
procedure SetWarenverkauf(const Value: Integer);
procedure SetWarenwert(const Value: Currency);
published
property Anfangsbestand: Integer read FAnfangsbestand write SetAnfangsbestand;
property Endbestand: Integer read FEndbestand write SetEndbestand;
property Wareneingang: Integer read FWareneingang write SetWareneingang;
property Warenverkauf:Integer read FWarenverkauf write SetWarenverkauf;
property Lagerbestand: Extended read FLagerbestand write SetLagerbestand;
property LagerumschlH: Extended read FLagerumschlH write SetLagerumschlH;
property Stueckpreis: Currency read FStueckpreis write SetStueckpreis;
property Warenwert: Currency read FWarenwert write SetWarenwert;
end;
Dazu eine TObjectList, wo du die Objecte in einer List hälst. Schwups hast du eine schicke Lagerliste, die gleich ein mindestmaß an Logik beinhaltet, und auch noch Lesbar und leicht erweiterbar ist. Die ObjectList könnte dann noch so Methoden wie SaveToJSONFile, LoadFromJSONFile oder SaveToFileStream, LoadFromFileStream beinhalten zum speichern und laden der Daten. Aber auch Funktion zum Ermitteln des Gesamtwert des Lagers wären hier sinnvoll.
In den einzelnen Objekten können dann Methoden rein wie AddBestand(Menge: Integer); etc.
Beispiele wie man sowas machen könnte gibt es ja zu Hauf.
Wie das im einzelnen dann aussehen könnte hängt von der Notwendigen Funktionalität ab, die ich so auf die Schnelle aus deinem Projekt nicht ergründen konnte.
mehr fällt mir grad dazu nicht ein.
Gruß Hobbycoder