Autor Beitrag
woody
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Di 30.11.04 09:55 
hallo
sollen für die schule folgendes programm(von h. achleitner) umarbeiten quasi mit einer such- und einer sortierfunktion erweitern, die zum sortieren habe ich schon ansatzweise aber der rest na ja brett vorm kopf... die suchfuntkion soll nach den kriterien name, straße und wohnort gehen über eine combo box gehen und die ausgabe in der listbox erfolgen...kann mir hier jemand helfen den quelltext zu vervollständigen???
hier ist der bosherige quelltext

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:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
291:
292:
293:
294:
295:
296:
297:
298:
299:
300:
301:
302:
303:
304:
305:
306:
307:
308:
309:
unit Datei3_u; { Projekt DATEI3 * Helmut Achleitner}

interface

uses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls, ExtCtrls;

type
  tDaten = record
           name: string[30];
           strasse: string[25];
           PLZ: string[5];
           Ort: string[20];
           Telefon: string[25];
          end;
  tfile = File of tDaten;
  TFormDatei3 = class(TForm)
    LabelNameText: TLabel;
    LabelStrasseText: TLabel;
    LabelPlzText: TLabel;
    LabelOrtText: TLabel;
    LabelTelefonText: TLabel;
    OpenDialogdatei: TOpenDialog;
    SaveDialogDatei: TSaveDialog;
    ButtonOeffnen: TButton;
    Button1Satz: TButton;
    ButtonNext: TButton;
    ButtonVor: TButton;
    Editname: TEdit;
    EditStrasse: TEdit;
    EditPlz: TEdit;
    EditOrt: TEdit;
    Buttonletzter: TButton;
    Edittelefon: TEdit;
    Buttonueber: TButton;
    ButtonNeueDatei: TButton;
    Beenden: TButton;
    Save: TButton;
    ButtonNeu: TButton;
    suchen: TButton;
    sortieren: TButton;
    ListBox1: TListBox;
    ComboBox1: TComboBox;
    procedure FormCreate(Sender: TObject);
    procedure ButtonOeffnenClick(Sender: TObject);
    procedure Button1SatzClick(Sender: TObject);
    procedure ButtonNextClick(Sender: TObject);
    procedure ButtonVorClick(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure ButtonletzterClick(Sender: TObject);
    procedure ButtonueberClick(Sender: TObject);
    procedure ButtonNeueDateiClick(Sender: TObject);
    procedure beendenclick(Sender: TObject);
    procedure SaveClick(Sender: TObject);
    procedure ButtonNeuClick(Sender: TObject);
    procedure sortierenClick(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  
  end;

var
  FormDatei3: TFormDatei3;
    dateiname:string;
    daten: array[1..30of tDaten;
    hdaten: tdaten;
    datei: tfile;
    i,count,
    anzahl:Integer;
  implementation

{$R *.DFM}


procedure TFormDatei3.FormCreate(Sender: TObject);
begin
  dateiname:='';
end;

procedure TFormDatei3.ButtonOeffnenClick(Sender: TObject);
var a:integer;
begin
    if opendialogdatei.execute then
      begin
        dateiname:=opendialogdatei.filename;
        assignfile(datei,dateiname);
        try
          reset(datei);
          anzahl:=filesize(datei);
          for a:=1 to anzahl do
            read(datei,daten[a]);
         // closefile(datei);
          button1satz.enabled:=true;
          buttonletzter.enabled:=true;
          buttonvor.enabled:=true;
          buttonnext.enabled:=true;
          buttonneu.enabled:=true;
          buttonueber.enabled:=true;
          suchen.enabled:=true;
          sortieren.enabled:=true;
          save.enabled:=true;
        except
          dateiname:='';
          showmessage('Datei existiert nicht')
        end
      end;
      editname.clear;
      editstrasse.clear;
      editplz.clear;
      editort.clear;
      edittelefon.clear;
end;

procedure TFormDatei3.Button1SatzClick(Sender: TObject);

begin
  //try
  //  reset(datei);

        if anzahl<>0
        then
        begin
        count:=1;
        editname.text:=daten[count].name;
        editstrasse.text:=daten[count].strasse;
        editplz.text:=daten[count].plz;
        editort.text:=daten[count].ort;
        edittelefon.text:=daten[count].telefon;
        end;

  {except
    showmessage('Erst Datei öffnen');
  end; }

end;

procedure TFormDatei3.ButtonNextClick(Sender: TObject);

begin
  { try
     reset(datei);
     i:=filepos(datei)+1;}


     if not(count>=anzahl)
     then
       begin
         count:=count+1;
         editname.text:=daten[count].name;
         editstrasse.text:=daten[count].strasse;
         editplz.text:=daten[count].plz;
         editort.text:=daten[count].ort;
         edittelefon.text:=daten[count].telefon;
       end
       else
         showmessage('Dateiende erreicht!');
       //closefile(datei);
  {   except
       showmessage('Fehler: Zuerst Datei öffnen!')
     end }

end;

procedure TFormDatei3.ButtonVorClick(Sender: TObject);

begin
 { try
    reset(datei);
    i:=filepos(datei);}


    if count>1 then
    begin
      count:=count-1;
      editname.text:=daten[count].name;
      editstrasse.text:=daten[count].strasse;
      editplz.text:=daten[count].plz;
      editort.text:=daten[count].ort;
      edittelefon.text:=daten[count].telefon;
    end
    else
      showmessage('Dateianfang erreicht!') ;
  {  closefile(datei);
  except
     showmessage('Fehler: Zuerst Datei öffnen!')
  end;  }

end;

procedure TFormDatei3.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if dateiname <> '' then
    closefile(datei);
end;

procedure TFormDatei3.ButtonletzterClick(Sender: TObject);
begin
 { try
    reset(datei);}

    count:=anzahl;
    if not (count =0then
    begin
      editname.text:=daten[count].name;
      editstrasse.text:=daten[count].strasse;
      editplz.text:=daten[count].plz;
      editort.text:=daten[count].ort;
      edittelefon.text:=daten[count].telefon;
    end
      else showmessage('Datei enthält keine Datensätze')
{    except
      showmessage('Fehler: Zuerst Datei öffnen!')
    end;}

end;

procedure TFormDatei3.ButtonueberClick(Sender: TObject);
  var z:integer;
begin
{  try
     assignfile(datei,dateiname);
     reset(datei);
     //anzahl:=filesize(datei);}

     if editname.text<>'' then
     begin
      anzahl:=anzahl+1;
     daten[anzahl].name:=editname.text;
     daten[anzahl].strasse:=editstrasse.text;
     daten[anzahl].plz:=editplz.text;
     daten[anzahl].ort:=editort.text;
     daten[anzahl].telefon:=edittelefon.text;

     end;
    { for z:=1 to anzahl do
       write(datei,daten[z]);}



  {   except
       showmessage('Fehler: Zuerst Datei öffnen!')
     end;}

end;

procedure TFormDatei3.ButtonNeueDateiClick(Sender: TObject);
begin
    if savedialogdatei.execute then
       begin
         if dateiname <> '' then closefile(datei);
         dateiname:=savedialogdatei.filename;
         assignfile(datei,dateiname);
         rewrite(datei);
         anzahl:=filesize(datei);
         button1satz.enabled:=true;
         buttonletzter.enabled:=true;
         buttonvor.enabled:=true;
         buttonnext.enabled:=true;
         buttonneu.enabled:=true;
         buttonueber.enabled:=true;
         save.enabled:=true;
       end
end;

procedure TFormDatei3.beendenclick(Sender: TObject);
begin
  close;
end;

procedure TFormDatei3.SaveClick(Sender: TObject);
var z:integer;
begin

   if dateiname<>''
   then
     begin
       seek(datei,0);      {notwendig, weil sonst 1..anzahl DS hinten angehängt werden}
       for z:= 1 to anzahl do
         write(datei,daten[z])
     end
   else
     showmessage('Fehler: Zuerst "Datei öffnen" oder "Neue Datei" wählen !')
end;

procedure TFormDatei3.ButtonNeuClick(Sender: TObject);
begin
  editname.text:='';
  editstrasse.text:='';
  editplz.text:='';
  editort.text:='';
  edittelefon.text:='';
  editname.setfocus;
end;

procedure TFormDatei3.sortierenClick(Sender: TObject);
var i,j :integer;
begin
  for i:=1 to anzahl-1 do
    for j:=i+1 to anzahl do
      if (daten [i].name>daten[j].name)
        then
          begin
          hdaten:=daten[i];
          daten[i]:=daten[j];
          daten[j]:=hdaten;
          end;
end;

procedure TFormDatei3.ComboBox1Change(Sender: TObject);
begin

end;

end.


Zuletzt bearbeitet von woody am Di 30.11.04 11:48, insgesamt 1-mal bearbeitet
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Di 30.11.04 10:46 
Den Quellcode wird dir wohl kaum einer schreiben. Sind schließlich deine Hausaufgaben.
Tipps wirst du bekommen.
Wenn ich es richtig verstanden habe, benutzt du eine ComboBox um festzulegen, in welchem Feld gesucht wird. Dann brauchst du aber noch ein Eingabefeld für den Suchbegriff.
Dann musst du alle Records durchgehen und feststellen, ob im enstprechenden Feld der Suchbegriff enthalten ist. Hier ist dann noch zu klären, ob Groß- und Kleinschreibung berücksichtigt werden soll (siehe dazu AnsiUpperCase).
Zur Darstellung des Suchergebnisses hibt es mehrere Möglichkeiten:
1. Du zeigst den ersten gefunden Datensatz und gibst dem Anwender die Möglichkeit "Weitersuchen"
2. Du zeigst in einer neuen (oder aktualisierst deine bisherige) Liste die Treffer an.

Du benötigst als eine Schleife über die Datensätze.
Dort prüfst du auf Treffer (String-Vergleich)
Dann zeigst du das Ergebnis an.

Viel Spaß bei deiner Hausaufgabe.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Di 30.11.04 11:11 
Als erstes würde ich dich Bitten, deinen Post zu editieren und deinen Quelltext in Delphi-Tags einzuschließen. Dann hast du zum einen Syntax-Highlighting auf dem Source und zum anderen wird die Anzeige dann nicht Seitenweise ausgedehnt.

Weiterhin Ist sowas eigentlich ein typisches Datenbank-Prblem für BDE&Co. Da aber meist in den Schulversionen keine DB-Kompos dabei sind, solltest du nach einem Alternativ-Set gucken. Das Such- bzw. Sortier-Problem würde sich in dem Fall auf jeweils einen SQL-Einzeiler reduzieren.

Ansonsten kannst du aber auch einfach über eine Case-Anweisung Deine Vergleiche durchführen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
Case DeineSpalte.ItemIndex Of
    0//Vergleiche die Namen
    1//Vergleiche die Straße
    2: ...
else
    Result := False; //Ohne gültige Spalte wird auch nix gefunden.
end;

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.