unit artikel1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TFStatistik =
class(TForm)
LArtikelnummer: TLabel;
LMenge: TLabel;
LUmsatz: TLabel;
EArtikelnummer: TEdit;
EMenge: TEdit;
EUmsatz: TEdit;
BLaden: TButton;
BAuswerten: TButton;
BBeenden: TButton;
ODLaden: TOpenDialog;
SDSpeichern: TSaveDialog;
BSpeichern: TButton;
procedure FormCreate(Sender: TObject);
procedure BLadenClick(Sender: TObject);
procedure BAuswertenClick(Sender: TObject);
procedure BSpeichernClick(Sender: TObject);
procedure BBeendenClick(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
FStatistik: TFStatistik;
implementation
{$R *.DFM}
const max = 100;
type tbuchungssatz =
record
datum:
string [12];
artikelnr, menge: integer;
preis: real;
end;
var buchungssatz:
array [1..max]
of tbuchungssatz;
//"Array of Record"
anzahl, gesucht: integer;
//Variablen für die Anzahl der eingelesenen Datensätze und die gesuchte Artikelnummer
//Prozedur zum Einlesen der Buchungssätze aus der Textdatei
procedure einlesen (dateiname:
string);
var datei: textfile;
//Dateivariable
begin
anzahl:=0;
//Initilaisierung von anzahl
assignfile (datei, dateiname);
//Verbindung von logischem und physischem Dateinamen
{$I-} //Ausschalten der Ein-/Ausgabeprüfung
reset (datei);
//Datei öffnen
{$I+} //Einschalten der Ein-/Ausgabeprüfung
if ioresult = 0
//Hat alles geklappt?
then //Wenn ja:
begin
if not eof (datei)
then readln (datei);
//1. Zeile überlesen
if not eof (datei)
then readln (datei);
//2. Zeile überlesen
while not eof (datei)
do //Solange Dateiende nicht erreicht...
begin
anzahl:=anzahl+1;
//Erhöhung der Anzahl der Datensätze
with buchungssatz [anzahl]
do
readln (datei, datum, artikelnr, menge, preis);
//Dateizeile in die Recordkomponenten des anzahl-ten Datensatzes einlesen
end;
closefile (datei);
//Datei schließen
end
else showmessage ('
Fehler beim Öffnen der Datei!');
//Wenn nein: Meldung ausgeben
end;
//Prozedur zum Speichern der Auswertung in einer Textdatei
procedure speichern (dateiname:
string);
var datei: textfile;
//Dateivariable
i: integer;
begin
assignfile (datei, dateiname);
//Verbindung von logischem und physischem Dateinamen
{$I-} //Ausschalten der Ein-/Ausgabeprüfung
rewrite (datei);
//Datei öffnen
{$I+} //Einschalten der Ein-/Ausgabeprüfung
if ioresult = 0
//Hat alles geklappt?
then //Wenn ja:
begin
writeln (datei, '
Artikelnummer: ', gesucht);
//Titelzeilen schreiben
writeln (datei);
writeln (datei, '
Datum Menge Preis Umsatz');
writeln (datei, '
-------------------------------------------------');
for i:=1
to anzahl
do //Buchungssätze durchlaufen
with buchungssatz[i]
do
if artikelnr=gesucht
then //Wenn Artikelnummer des i-ten Buchungssatzes der gesuchten Artikelnummer entspricht
writeln (datei, datum, formatfloat ('
#,##0', menge):10,
//i-ten Buchungssatz in Datei ausgeben
formatfloat ('
#,##0.00', preis):12,
formatfloat ('
#,##0.00', menge*preis):15);
closefile (datei);
//Datei schließen
end
else showmessage ('
Statistik kann nicht gespeichert werden!');
//Datei konnte nicht erstellt werden: Meldung ausgeben
end;
//Wenn das Formular erzeugt wird...
procedure TFStatistik.FormCreate(Sender: TObject);
begin
anzahl:=0;
//anzahl initialisieren
gesucht:=0;
//gesucht initialisieren
end;
//Wenn man auf Laden klickt...
procedure TFStatistik.BLadenClick(Sender: TObject);
begin
if odladen.execute
then einlesen (odladen.filename);
//Wenn im Öffnen-Dialog Öffnen angeklickt wurde: Daten einlesen
eartikelnummer.setfocus;
//Cursor ins Edit EArtikelnummer setzen
end;
//Wenn man auf Auswerten klickt...
procedure TFStatistik.BAuswertenClick(Sender: TObject);
var gesamtmenge, i: integer;
gesamtumsatz: real;
begin
gesucht:=strtointdef (eartikelnummer.text, 0);
//Auslesen des Edits EArtikelnummer
gesamtmenge:=0;
//gesamtmenge initialisieren
gesamtumsatz:=0;
//gesamtumsatz initialisieren
for i:=1
to anzahl
do //Eingelesene Buchungssätze durchlaufen
with buchungssatz[i]
do
if artikelnr = gesucht
then //Wenn Artikelnummer des Buchungssatzes mit eingegebener Artikelnummer übereinstimmt...
begin
gesamtmenge:=gesamtmenge+menge;
//Menge aggregieren
gesamtumsatz:=gesamtumsatz+menge*preis;
//Umsatz aggregieren
end;
emenge.text:=formatfloat ('
#,##0', gesamtmenge);
//Umgesetzte Menge ausgeben
eumsatz.text:=formatfloat ('
#,##0.00', gesamtumsatz);
//Umsatz ausgeben
eartikelnummer.setfocus;
//Cursor ins Edit EArtikelnummer setzen
end;
//Wenn man auf Speichern klickt...
procedure TFStatistik.BSpeichernClick(Sender: TObject);
begin
if gesucht > 0
//Wenn Auswertung mit gültiger Artikelnummer durchgeführt wurde...
then
begin
if sdspeichern.execute
then speichern (sdspeichern.filename);
//Wenn im Speichern-Dialog Speichern angeklickt wurde: Statistik speichern
end
else //Wenn keine Auswertung mit gültiger Artikelnummer durchgeführt wurde...
begin
showmessage ('
Keine Auswertung vorgenommen!');
//Fehlermeldung ausgeben
eartikelnummer.setfocus;
//Cursor ind Edit EArtikelnummer setzen
end;
end;
//Wenn man auf Beenden klickt...
procedure TFStatistik.BBeendenClick(Sender: TObject);
begin
application.terminate;
//Anwendung beenden
end;
end.