Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Bibliotheksverwaltung (https://www.delphipraxis.net/145897-bibliotheksverwaltung.html)

funkuchn 10. Jan 2010 15:26


Bibliotheksverwaltung
 
Hey Leute...
Ich sitze total in der Patsche.
Erstmal was ich machen soll :
Ich soll eine Art Bibliotheksverwaltung mit Delphi programmieren,dazu soll ich iwie ein Stringgrid nutzen und die Buttons die man normalerweise macht ins Mainmenu hauen :shock:
Ja.... ähm iwie mit Auto, ISBN, Buchtitel dann ausgeliehen oder nicht und wer aus welcher Klasse es ausgeliehen hat :shock:
OMG!
Jetzt war ich letzte Woche krank, als das erklärt wurde und muss das Mittwoch abgeben :pale:
Ich habe das Programm schon gemacht, aber mit nem Memo und das soll so nicht sein...
könnt ihr mir in irgendeiner Art und Weise helfen?
Bin total fertig weil ich rein gar nichts mehr verstehe und auch nicht mit den Stringgrids klarkomme...soll ja auch alles noch gespeichert weden und geladen und so...
versteht ihr mein Problem??
LG, Susi

TBx 10. Jan 2010 15:32

Re: Bibliotheksverwaltung
 
Zeig doch mal, was Du bisher hast.
Dann können wird Dir gerne erklären, was Du umstellen mußt. Sonst sieht das hier doch zu sehr nach Hausaufgaben machen aus und dabei helfen wir zwar gerne, machen mußt Du sie aber selber ;-)

funkuchn 10. Jan 2010 15:39

Re: Bibliotheksverwaltung
 
okay, dann ist hier der Quelltext...
Delphi-Quellcode:
nit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls;

  const max=100;
  type
  Bibo=record
   Buchtitel:string[20];
   ISBN:byte;
   Autor:string[20];
   Name:string[20];
   Vorname:string[20];
   Klasse:string[20];
   ausgeliehen:boolean;
  end;
  f=array[1..max] of Bibo;
  TBibliothekshilfe = class(TForm)
    MainMenu1: TMainMenu;
    Datei1: TMenuItem;
    Speichern1: TMenuItem;
    Laden1: TMenuItem;
    Lschen1: TMenuItem;
    Beenden1: TMenuItem;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    Label11: TLabel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    ListBox1: TListBox;
    Eintragndern1: TMenuItem;
    Button4: TButton;
    procedure Button4Click(Sender: TObject);
    procedure Eintragndern1Click(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Beenden1Click(Sender: TObject);
    procedure Speichern1Click(Sender: TObject);
    procedure Laden1Click(Sender: TObject);
    procedure Lschen1Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Bibliothekshilfe: TBibliothekshilfe;

implementation
var Feld:f;
    i:integer;
{$R *.dfm}

procedure TBibliothekshilfe.Beenden1Click(Sender: TObject);
begin
 close;
end;

procedure Speichern(sp:f);
 var x:integer;
  datei:file of Bibo;
 begin
 assignfile(datei,'C:\Bibo.txt');
 rewrite(datei);
  For x:=1 to i do
   write(datei,Feld[x]);
   closefile(datei);
 end;
 
procedure TBibliothekshilfe.Speichern1Click(Sender: TObject);
var x:integer;  astring:string;
begin
 i:=i+1;
 Feld[i].Buchtitel:=edit1.Text;
 Feld[i].ISBN:=StrToInt(edit2.Text);
 Feld[i].Autor:=edit3.Text;
 Feld[i].Name:=edit4.Text;
 Feld[i].Vorname:=edit5.Text;
 Feld[i].Klasse:=edit6.Text;
 Feld[i].ausgeliehen:=radiobutton1.Checked;

 Speichern(Feld);
 Listbox1.Items.clear;

 for x:=1 to i do
   begin
    astring:='Buch "'+Feld[x].Buchtitel+'" (ISBN: '+inttostr(Feld[x].ISBN)+') ist ';
     if Feld[x].ausgeliehen then
       astring:=astring+'ausgeliehen an '+Feld[x].vorname+' '+Feld[x].name+'.'
     else
       astring:= astring+' nicht ausgeliehen.';
    listbox1.Items.add(astring);
  end;
end;

procedure Laden(var la:f);
var datei:file of Bibo;
 begin
 i:=0;
 assignfile(datei,'C:\Bibo.txt');
 reset(datei);
 WHILE not EOF(datei) DO
  begin
  i:=i+1;
  read(datei,la[i]);
  end;
 closefile(datei);
 end;


procedure TBibliothekshilfe.Laden1Click(Sender: TObject);
var x:integer;astring:string;
begin
 Laden(Feld);

 listbox1.Items.Clear;

 For x:=1 to i DO
 begin
  astring:='Buch "'+Feld[x].Buchtitel+'" (ISBN: '+inttostr(Feld[x].ISBN)+') ist ';
  if Feld[x].ausgeliehen then
     astring:=astring+'ausgeliehen an '+Feld[x].vorname+' '+Feld[x].name+'.'
   else
     astring:= astring+' nicht ausgeliehen.';
  listbox1.Items.add(astring);
 end;
end;

procedure TBibliothekshilfe.Lschen1Click(Sender: TObject);
begin
 edit1.Clear;
 edit2.Clear;
 edit3.Clear;
 edit4.Clear;
 edit5.Clear;
 edit6.Clear;
 listbox1.items.clear;
end;

procedure TBibliothekshilfe.FormActivate(Sender: TObject);
begin
 edit1.Clear;
 edit2.Clear;
 edit3.Clear;
 edit4.Clear;
 edit5.Clear;
 edit6.Clear;
 listbox1.Items.clear;
end;

procedure TBibliothekshilfe.FormCreate(Sender: TObject);
begin
 i:=0;
end;

procedure TBibliothekshilfe.Button1Click(Sender: TObject);
var x:integer;
begin

for x:=1 to length(feld) do
   if uppercase(Feld[x].Buchtitel)=uppercase(edit7.text) then
     begin
       showmessage('Das Buch mit dem Titel '+Feld[x].Buchtitel+' wurde gefunden!');
       if Feld[x].ausgeliehen then
         showmessage('Es ist momentan an den Schüler '+Feld[x].Vorname+' '+feld[x].name+ ' ausgeliehen.')
       else
         showmessage('Es ist momentan nicht ausgeliehen!');
     end;


end;

procedure TBibliothekshilfe.Button2Click(Sender: TObject);
var x:integer;
begin

for x:=1 to length(feld) do
   if (Feld[x].ISBN)=strtoint(edit8.text) then
     begin
       showmessage('Das Buch mit dem Titel '+Feld[x].Buchtitel+' und der ISBN '+ inttostr(Feld[x].isbn)+' wurde gefunden!');
       if Feld[x].ausgeliehen then
         showmessage('Es ist momentan an den Schüler '+Feld[x].Vorname+' '+feld[x].name+ ' ausgeliehen.')
       else
         showmessage('Es ist momentan nicht ausgeliehen!');
     end;


end;

procedure TBibliothekshilfe.Button3Click(Sender: TObject);
var x:integer;
begin

for x:=1 to length(feld) do
   if uppercase(Feld[x].autor)=uppercase(edit9.text) then
     begin
       showmessage('Das Buch mit dem Autor '+Feld[x].autor+' und der ISBN '+ inttostr(Feld[x].isbn)+' wurde gefunden!');
       if Feld[x].ausgeliehen then
         showmessage('Es ist momentan an den Schüler '+Feld[x].Vorname+' '+feld[x].name+ ' ausgeliehen.')
       else
         showmessage('Es ist momentan nicht ausgeliehen!');
     end;

end;

procedure TBibliothekshilfe.ListBox1Click(Sender: TObject);
begin
edit1.Text:=Feld[Listbox1.itemindex+1].Buchtitel;
edit2.Text:=inttostr(Feld[Listbox1.itemindex+1].ISBN);
edit3.text:=Feld[Listbox1.itemindex+1].Autor;
edit4.text:=Feld[Listbox1.itemindex+1].name;
edit5.text:=Feld[Listbox1.itemindex+1].vorname;
edit6.text:=Feld[Listbox1.itemindex+1].klasse;

Radiobutton1.Checked:=Feld[Listbox1.itemindex+1].ausgeliehen;
Radiobutton2.Checked:=not Radiobutton1.Checked;

end;

procedure TBibliothekshilfe.Eintragndern1Click(Sender: TObject);
var x:integer; astring:string;
begin
if listbox1.itemindex<0 then exit;

if messagedlg('Der in der Listbox angeklickte Eintrag wird mit den neu eingegebenen Daten überschrieben. Soll ich fortfahren?',mtconfirmation,[mbyes,mbno],0)=mryes then
begin
Feld[Listbox1.itemindex+1].Buchtitel:=edit1.text;
Feld[Listbox1.itemindex+1].ISBN:=strtoint(edit2.text);
Feld[Listbox1.itemindex+1].Autor:=edit3.text;
Feld[Listbox1.ItemIndex+1].name:=edit4.text;
Feld[Listbox1.itemindex+1].vorname:=edit5.text;
Feld[Listbox1.itemindex+1].klasse:=edit6.text;
Feld[listbox1.itemindex+1].ausgeliehen:=radiobutton1.checked;

Speichern(Feld);
 Listbox1.Items.clear;

 for x:=1 to i do
   begin
    astring:='Buch "'+Feld[x].Buchtitel+'" (ISBN: '+inttostr(Feld[x].ISBN)+') ist ';
     if Feld[x].ausgeliehen then
       astring:=astring+'ausgeliehen an '+Feld[x].vorname+' '+Feld[x].name+'.'
     else
       astring:= astring+' nicht ausgeliehen.';
    listbox1.Items.add(astring);
  end;



end;



end;

procedure TBibliothekshilfe.Button4Click(Sender: TObject);
var x,y,z:integer; max:byte; dummy:bibo;
   astring:string;
begin

max:=0;


for x:= 1 to i do
begin
  z:=0;
  max:=0;
  for y:=x to i do
    if max<Feld[y].isbn then
      begin
        max:=Feld[y].isbn;
        z:=y;
      end;
 if z>0 then
  begin
   dummy:=Feld[x];
   Feld[x]:=Feld[z];
   Feld[z]:=dummy;
  end;
end;

 Listbox1.Items.clear;

 for x:=1 to i do
   begin
    astring:='Buch "'+Feld[x].Buchtitel+'" (ISBN: '+inttostr(Feld[x].ISBN)+') ist ';
     if Feld[x].ausgeliehen then
       astring:=astring+'ausgeliehen an '+Feld[x].vorname+' '+Feld[x].name+'.'
     else
       astring:= astring+' nicht ausgeliehen.';
    listbox1.Items.add(astring);
  end;


end;

end.

TBx 10. Jan 2010 15:41

Re: Bibliotheksverwaltung
 
häng bitte mal das ganze projekt gepackt an, sodass man es direkt in Delphi aufmachen kann. Danke!

funkuchn 10. Jan 2010 15:43

Re: Bibliotheksverwaltung
 
Liste der Anhänge anzeigen (Anzahl: 1)
achso, sry...

funkuchn 10. Jan 2010 16:23

Re: Bibliotheksverwaltung
 
hmm Leute...habt ihr jetzt iwie ne Lösung parat?? :gruebel:

PPaB 10. Jan 2010 16:29

Re: Bibliotheksverwaltung
 
Also du musst statt der Listbox einfach eine TStringGrid in die Form einfügen ( Such einfach mal, falls du sie noch nicht gefunden hast). Dann würde ich dort einfach umändern bei den Eigenschaften:
ColCount : 6 --> da du ja 6 Spalten brauchst
FixedRows: 0 --> würde nur eine Fixierte Reihe nehmen in der du alle einteilungen titels.

Dann würde ich in der FormCreate- Procedure dies ändern:
Delphi-Quellcode:
procedure TBibliothekshilfe.FormCreate(Sender: TObject);
begin
 i:=0;
 StringGrid1.Cells[0,0] := 'Buchtitel';
 StringGrid1.Cells[1,0] := 'ISBN';
 StringGrid1.Cells[2,0] := 'Autor';
 StringGrid1.Cells[3,0] := 'Name';
 StringGrid1.Cells[4,0] := 'Vorname';
 StringGrid1.Cells[5,0] := 'Klasse';
end;
Dies bewirkt, dass du in die angegebenen Zeilen der StringGrid die jeweilgen Strings schreibst. Schau es dir dann einfach mal an.

Dann musst du bei der Eingabe statt dem Eintragen in Listbox, die Daten in die StringGrid übergeben. Du siehst ja oben, wie ich es gemacht hast und so musst du es auch einfach machen (nur statt der 0 eine Variable einsetzen, da du ja immer in eine neue Zeile schreiben möchtest).

Wichtig: Denke auch daran, dass irgendwann alle Reihen voll sind, also musst du immer am Anfang des Eintragens der Daten die Reihen der StringGrid erhöhen ( StringGrid1.ColCount := StringGrid1.ColCount +1; )

Hoffe ich hab soweit alles gut beschrieben, den Rest dürfest du so schaffen. Wenn du noch fragen hast bzw dir etwas unklar ist, dann sag bescheid.

funkuchn 10. Jan 2010 16:34

Re: Bibliotheksverwaltung
 
ja ich hab noch so einige Fragen...
ich hab was vergessen und zwar soll bei [0,0] eine laufende Nummer oder sowas rein, ich glaube, dass muss ich iwie mit ner Schleife machen...aber wie??
und wie meinst das mit der variablen?

PPaB 10. Jan 2010 16:51

Re: Bibliotheksverwaltung
 
Wie meinst du das mit der laufenden Nummer?
Das dann in der ersten Spalte einfach eine fortlaufende Nummerierung ist.

Also dann in der StringGrid: (die Trennstriche stehen für die trennung der Zellen)

1 | Buchname1 | ISBN... | ...
2 | Buchname2 | ISBN... |
3 | Buchname3 | ISBN... |
4 | Buchname4 | ISBN... |
5 | Buchname5 | ISBN... |
6 | Buchname6 | ISBN... |
7 | Buchname7 | ISBN... |

Dann kannst du das in der Formcreate auch einfach weglassen.

Dann musst du bei der Eingabe immer schreiben:

Delphi-Quellcode:
StringGrid1.Cells[0,X] := X + 1;
--> Die fortlaufende Nummer
Delphi-Quellcode:
StringGrid1.Cells[1,X] := Feld[X].Buchtitel;
--> Das ist dann der Buchtitel

usw. (Das X ist eine Variable des Typs Integer, so wie du sie bei dir schon hast)

funkuchn 10. Jan 2010 16:56

Re: Bibliotheksverwaltung
 
Sry aber ich versteh nur Bahnhof :pale:
die Theorie kapier ich ja, ich weiß, wie du es meinst, aber ich kann es absolut nicht umstzen :(

PPaB 10. Jan 2010 17:12

Re: Bibliotheksverwaltung
 
http://www.delphitutorials.de/tstrin...e-befehle.html

Da kannst du mal schauen, sind ein paar Befehle erklärt.
Ist wahrscheinlich ein bisschen schwierig dir das so zu erklären, da du ja noch nie mit StringGrids gearbeitet hast.

Also eine StringGrid ist im Prinzip nichts anderes als eine Tabelle (ähnlich wie Excel).
Man kann in eine Zelle etwas eintragen mit dem Code:
Delphi-Quellcode:
StringGrid1.Cells[2,1] := 'Hallo';
Damit wird zum Beispiel in die Zelle zwei nach rechts und eins nach unten das Wort 'Hallo' geschrieben.

Soweit klar?

funkuchn 10. Jan 2010 17:13

Re: Bibliotheksverwaltung
 
ja klar, dass mit dem eintragen von Wörtern in die Zellen verstehe ich...

PPaB 10. Jan 2010 17:17

Re: Bibliotheksverwaltung
 
gut,
dann weiter:

Jetzt kannst du ja anstatt in die Listbox die Daten auch in die StringGrid eintragen.
In jede Zelle einer Reihe trägst du dann einen der Einträge ein ( Buchtitel, ISBN,...)

OK?

funkuchn 10. Jan 2010 17:18

Re: Bibliotheksverwaltung
 
jap, das habe ich gemacht...
also so, wie es oben steht, richtig?

PPaB 10. Jan 2010 17:19

Re: Bibliotheksverwaltung
 
genau und was verstehst du jetzt nicht?
Bzw wo liegt das Problem?

funkuchn 10. Jan 2010 17:22

Re: Bibliotheksverwaltung
 
naja ich muss doch im gesamten Programm alles jetzt diesem Stringgrid anpassen, und da weiß ich halt nicht wie ich was anpassen muss und ob ich da vielleicht noch iwelche Befehle ändern muss....weißt?

alzaimar 10. Jan 2010 17:23

Re: Bibliotheksverwaltung
 
crosspost
Das ist zwar ok, aber mach bitte darauf aufmerksam.

PPaB 10. Jan 2010 17:39

Re: Bibliotheksverwaltung
 
statt
Delphi-Quellcode:
Listbox1.Items.clear;
Musst du jetzt dieses ganze einfügen:
1. diese neue procedure, damit wird die StringGrid geleert
Delphi-Quellcode:
procedure TBibliothekshilfe.StringGridLeer();
var
  P,Q:integer;
begin
  for P := StringGrid1.FixedCols to StringGrid1.ColCount - 1 do
  begin
    for Q := StringGrid1.FixedRows to StringGrid1.RowCount - 1 do
    begin
      StringGrid1.Cells[P,Q] := '';
    end;
  end;
end;
2.
Delphi-Quellcode:
StringGridLeer;
Und dies an jeder Stelle wo der oben genannte Code steht.

Statt dem
Delphi-Quellcode:
listbox1.Items.add(astring);
Musst du das jetzt in die StringGrid einfügen, wie ich das schonmal oben erklärt hatte
Und immer dran denken, vorher RowCount +1

Delphi-Quellcode:
Listbox1.itemindex
Ist jetzt StringGrid1.RowCount-1

Versuchs einfach mal so

PPaB

funkuchn 10. Jan 2010 17:47

Re: Bibliotheksverwaltung
 
Liste der Anhänge anzeigen (Anzahl: 1)
in etwa so?

funkuchn 10. Jan 2010 18:02

Re: Bibliotheksverwaltung
 
ich gebs auf >.< :(

alleinherrscher 10. Jan 2010 18:06

Re: Bibliotheksverwaltung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Aber nur, weil wir Freunde sind!! ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:05 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz