Autor Beitrag
xsus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51

Win 2000, Win XP, Win 7; Ubuntu
Delphi 7, Delphi XE2, C
BeitragVerfasst: Sa 03.03.12 19:32 
Hallo,
ich habe eine Kasse programmiert und als Datenbank verwende ich eine typisierte Datei, in der 20 Artikel (ArtNr,Name,Preis,verfügbare Stückzahl) vorhanden sind. Soweit funktioniert alles..die "Kasse" läuft, und ich kann Artikel buchen, jedoch nur der Reihe nach..der geht meine Datenbank einfach der Reihe nach durch und bucht immer die max. verfügbare Stückzahl..ich bekomme die Positionierung des Datenzeigers nicht hin, da dies Unitübergreifend funktionieren muss..ich hoffe ihr könnt helfen.

GUI:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Grids, Artikeldefinition, Artikelverwaltung;

type
  TKassensystem = class(TForm)
    artNr: TEdit;
    buch: TButton;
    aktPos: TStringGrid;
    sofSto: TButton;
    endSum: TButton;
    reset: TButton;
    bon: TMemo;
    anz: TComboBox;
    procedure endSumClick(Sender: TObject);
    procedure resetClick(Sender: TObject);
    procedure artNrClick(Sender: TObject);
    procedure buchClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure sofStoClick(Sender: TObject);
    procedure positionieren(datensatz: integer);
  private
    Artikel:TArtikel;
    Warenbestand:TProduktdatenbank;
  public
    { Public-Deklarationen }
  end;

var
  Kassensystem: TKassensystem;

implementation
var endsumme:real;
{$R *.dfm}

procedure TKassensystem.artNrClick(Sender: TObject);
begin
  artNr.Text:=('');
end;

procedure TKassensystem.buchClick(Sender: TObject);
var i:integer;
begin
  Artikel.Nr:=StrToInt(artNr.Text);
  Artikel.Anzahl:=StrToInt(anz.Text);
  warenbestand.setzeArtikel(Artikel);
  artikel:=warenbestand.gibArtikel;
  for i := 1 to Artikel.Anzahl do
    begin
      endsumme:=endsumme+artikel.Preis;
    end;
  bon.Lines.Add(IntToStr(artikel.Anzahl)+'x '+Artikel.Name+'   á '+FloatToStr(artikel.Preis)+'€');
  aktPos.Cells[0,0]:=(IntToStr(artikel.Anzahl)+'x '+artikel.Name);
  aktPos.Cells[1,0]:=(FloatToStr(artikel.Preis)+'€');
  sofSto.Enabled:=true;
end;

procedure TKassensystem.endSumClick(Sender: TObject);
begin
  bon.Lines.Add('');
  bon.Lines.Add('Endsumme: '+FloatToStrF((endsumme),ffnumber,15,2)+'€');
  bon.Lines.Add('---------------------------------------------------');
  bon.Lines.Add('              '+DateToStr(now)+' - '+TimeToStr(now));
  bon.Lines.Add('---------------------------------------------------');
  bon.Lines.Add('         Vielen Dank für Ihren Einkauf!');
  endSum.Enabled:=false;
  buch.Enabled:=false;
  sofSto.Enabled:=false;
  anz.Enabled:=false;
  artNr.Enabled:=false;
  aktPos.Cells[0,0]:='Endsumme';
  aktPos.Cells[1,0]:=(FloatToStrF((endsumme),ffnumber,15,2)+'€');
end;

procedure TKassensystem.FormCreate(Sender: TObject);
begin
  warenbestand:=TProduktdatenbank.Create;
  Artikel:=TArtikel.Create;
end;

procedure TKassensystem.FormDestroy(Sender: TObject);
begin
  Warenbestand.Destroy
end;

procedure TKassensystem.resetClick(Sender: TObject);
begin
  bon.Clear;
  bon.Lines.Add('                       WGE - Laden');
  bon.Lines.Add('---------------------------------------------------');
  endSum.Enabled:=true;
  buch.Enabled:=true;
  sofSto.Enabled:=true;
  anz.Enabled:=true;
  artNr.Enabled:=true;
  endsumme:=0;
  artNr.Text:='Artikelnummer';
  anz.Text:='Anzahl';
  aktPos.Cells[0,0]:='';
  aktPos.Cells[1,0]:='';
  sofSto.Enabled:=false;
end;

procedure TKassensystem.positionieren(datensatz: integer);
var aktdatensatz: Artikeldatentyp;
begin
  if (datensatz<0or (datensatz>=FileSize(asd)) then exit
  else begin
    seek(asd, datensatz);
    read(asd, aktdatensatz);
    Artikel.Nr:=aktdatensatz.Nr;
    Artikel.Name:=aktdatensatz.Name;
    Artikel.Preis:=aktdatensatz.Preis;
    Artikel.Anzahl:=aktdatensatz.Anzahl;
  end;
end;

procedure TKassensystem.sofStoClick(Sender: TObject);
var i:integer;
begin
  for i := Artikel.Anzahl downto 1 do
      endsumme:=endsumme-artikel.Preis;
  bon.Lines.Add('STR -'+IntToStr(artikel.Anzahl)+'x '+Artikel.Name+'   á '+FloatToStr(artikel.Preis)+'€');
  aktPos.Cells[0,0]:=('STORNO');
  aktPos.Cells[1,0]:=('-'+FloatToStr(artikel.Preis)+'€');
end;
end.


Artikeldefinition:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
unit Artikeldefinition;

interface

type
strg30=string[30];

artikeldatentyp=record
  Nr:word;
  Name:strg30;
  Preis:real;
  Anzahl:integer;
end;

TArtikel = class(Tobject)
private
  FArtikeldaten:Artikeldatentyp;
  function getNr:word;
  procedure setNr(x:word);
  function getName:strg30;
  procedure setName(x:strg30);
  function getpreis:real;
  procedure setpreis(x:real);
  function getAnzahl:integer;
  procedure setAnzahl(x:integer);
  function getArtikeldaten:artikeldatentyp;
  procedure setArtikeldaten(x:Artikeldatentyp);
public
  constructor Create;
  destructor Destroy; override;
  property Nr:word read getNr write setNr;
  property Name:strg30 read getName write setName;
  property Preis:real read getPreis write setPreis;
  property Anzahl:integer read getAnzahl write setAnzahl;
  property Artikeldaten:Artikeldatentyp read getArtikeldaten write setArtikeldaten;
end;   //von TArtikel

implementation
  constructor TArtikel.Create;
  begin
    inherited create
  end;

  destructor TArtikel.Destroy;
  begin
    inherited destroy
  end;

  function TArtikel.getNr:word;
  begin
    getNr:=FArtikeldaten.Nr
  end;

  procedure TArtikel.setNr(x:word);
  begin
    FArtikeldaten.Nr:=x
  end;

  function TArtikel.getName:strg30;
  begin
    getName:=FArtikeldaten.Name
  end;

  procedure TArtikel.setName(x:strg30);
  begin
    FArtikeldaten.Name:=x
  end;

  function TArtikel.getpreis:real;
  begin
    getPreis:=FArtikeldaten.Preis
  end;

  procedure TArtikel.setpreis(x:real);
  begin
    FArtikeldaten.Preis:=x
  end;

  function TArtikel.getAnzahl:integer;
  begin
    getAnzahl:=FArtikeldaten.Anzahl
  end;

  procedure TArtikel.setAnzahl(x:integer);
  begin
    FArtikeldaten.Anzahl:=x
  end;

  function TArtikel.getArtikeldaten:artikeldatentyp;
  begin
    getArtikeldaten:=FArtikeldaten
  end;

  procedure TArtikel.setArtikeldaten(x:Artikeldatentyp);
  begin
    FArtikeldaten:=x
  end;
end.
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
unit Artikelverwaltung;

interface
uses Artikeldefinition;
type

TProduktdatenbank= class(TObject)
private
  FArtikel:TArtikel;
public
  constructor Create;
  destructor Destroy; override;
  procedure setzeArtikel(x:TArtikel);
  function gibArtikel:TArtikel;
end;   // von TProduktdatenbank

implementation
var asd: file of artikeldatentyp;

  constructor TProduktdatenbank.Create;
  begin
    FArtikel:=TArtikel.Create;
    assign (asd,'MeineDaten');
    reset (asd);
    inherited create
  end;

  destructor TProduktdatenbank.Destroy;
  begin
    inherited destroy
  end;

  procedure TProduktdatenbank.setzeArtikel(x:TArtikel);
  begin
    FArtikel:=x
  end;

  function TProduktdatenbank.gibArtikel:TArtikel;
  var art:artikeldatentyp;
  begin
    read(asd,art);
    FArtikel.Artikeldaten:=art;
    gibArtikel:=FArtikel
  end;
end.


Mein Problem liegt in der GUI ab Zeile 107..er kennt die Variable asd aus der Artikelverwaltung nicht..und soweiter...habe echt keinen Plan was ich da verbockt habe :( LG
Tranx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: Sa 03.03.12 20:44 
Du musst auf jeden Fall eine öffentliche DEfinition im Interface einer Unit definieren, also das

VAR ASD vor Implementation:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
var asd: file of artikeldatentyp;

implementation
:


Allerdings ist das Ganze nun wirklich eine Datenbankanwendung. Vielleicht beschäftigst Du Dich mal damit, wie Datenbanken aufgebaut sind und versuchst es dann. Denn dann kannst Du Komponenten wie TDBGrid und TDBEdit .... benutzen, um auf Daten zuzugreifen. Auch benötigst Du das Ganze mit dem Positionieren nicht, denn mit dem Navigator oder mit Cursorbewegungen in TDBGrid kannst Du dich in den Datensätzen bewegen und sie ggfs. editieren oder löschen.

Das ist gar nicht so schwer. Du kannst ja den Formularexperten (Datenbank) nehmen. Den hat sicher auch Deine Delphi-Version. Vorher definierst Du in Excel oder Openoffice Calc Deine Datenbank und speicherst sie als DBF-Datei ab. Dann nutzt Du diese DBF-Tabelle in Deinem Formularexperten. Versuche es mal.

_________________
Toleranz ist eine Grundvoraussetzung für das Leben.