Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Telefonbuch (https://www.delphipraxis.net/141423-telefonbuch.html)

funkuchn 8. Okt 2009 17:59


Telefonbuch
 
Hi Leute!!
Mein Info-Lehrer meinte, ich soll mich an euch wenden.
Und zwar geht es darum, dass wir uns ein Programm erarbeiten sollen, dass eine Art Telefonbuch darstellt, mit den Funktionen:Hinzufügen, Suchen und Löschen. Dafür haben wir jetzt mit SaveToFile gearbeitet. Jetzt ergibt sich das PB, dass der mir immer wieder die alten Einträge löscht, wenn ich Hinzufügen drücke, das kann ja eigentlich nicht sein :wiejetzt:
aber naja, vielleicht habt ihr ja nen Tipp.
Und das andere PB ist die Such-Funktion, wir hatten das noch nie, und wie gesagt, meinte mein Lehrer, wir sollen mal in den Foren herum fragen, ihr seid nett. Ja das hoff ich doch :wink: Naja, jedenfalls zähle ich auf euch.
LG Susi

Chris.R 8. Okt 2009 18:11

Re: Telefonbuch
 
Hallo,

an uns kann man sich immer wenden, nur bräuchten wir dazu etwas mehr Informationen.

Wie schaut dein bisheriger Ansatz aus?
Ist ein Telefoneintrag in einem Objekt abgelegt?
Wie verwaltest du die Liste der Einträge?
Welche SaveToFile Funktion?

Ciao Chris

DeddyH 8. Okt 2009 18:16

Re: Telefonbuch
 
Ich bin auch der Meinung, dass das etwas vage Informationen sind. Die Möglichkeiten, die mir aus der hohlen Hand einfallen, reichen von einer Textdatei über TIniFile über typisierte Dateien bis hin zur Datenbank. Aber ohne Euren Kenntnisstand zu kennen kann man da keine konkreten Ansätze geben.

funkuchn 8. Okt 2009 18:18

Re: Telefonbuch
 
okay, hier ist mal mein Quelltext,ich denke mal, es ist ersichtlich, was passiert:
Es ist erstmal ein Ansatz, ich konnte mich auch noch nicht intensiver beschäftigen, weil ich 2 wochen total krank war, jetzt soll ich das aber sonntag abgeben :(

Delphi-Quellcode:
procedure TForm1.Button7Click(Sender: TObject);
begin
 memo1.lines.clear;
 edit1.text:='';
 edit2.text:='';
 edit3.Text:='';
 edit4.Text:='';
 edit5.Text:='';
 edit6.Text:='';
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 edit1.visible:=true;
 edit2.visible:=true;
 edit3.visible:=true;
 label4.visible:=true;
 label6.visible:=true;
 label7.visible:=true;
 button8.visible:=true;
end;



procedure TForm1.FormCreate(Sender: TObject);
begin
 edit1.visible:=false;
 edit2.visible:=false;
 edit3.visible:=false;
 edit4.visible:=false;
 edit5.visible:=false;
 edit6.visible:=false;
 label4.visible:=false;
 label6.visible:=false;
 label7.visible:=false;
 label2.visible:=false;
 label5.visible:=false;
 label3.visible:=false;
 button8.visible:=false;
 button9.visible:=false;
 button10.visible:=false;
 button11.visible:=false;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
 label2.visible:=true;
 edit4.visible:=true;
 button9.visible:=true;
 edit1.visible:=false;
 edit2.visible:=false;
 edit3.visible:=false;
 label4.visible:=false;
 label6.visible:=false;
 label7.visible:=false;
 button8.visible:=false;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
 label5.visible:=true;
 edit5.visible:=true;
 button10.visible:=true;
 label2.visible:=false;
 edit4.visible:=false;
 button9.visible:=false;
 edit1.visible:=false;
 edit2.visible:=false;
 edit3.visible:=false;
 label4.visible:=false;
 label6.visible:=false;
 label7.visible:=false;
 button8.visible:=false;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
 label3.visible:=true;
 edit6.visible:=true;
 button11.visible:=true;
 label5.visible:=false;
 edit5.visible:=false;
 button10.visible:=false;
 label2.visible:=false;
 edit4.visible:=false;
 button9.visible:=false;
 edit1.visible:=false;
 edit2.visible:=false;
 edit3.visible:=false;
 label4.visible:=false;
 label6.visible:=false;
 label7.visible:=false;
 button8.visible:=false;
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
close;
end;

procedure TForm1.Button1Click(Sender: TObject);
var h: string;
begin
 h:='h:\Telefonbuch.txt';
 memo1.lines.loadfromfile(h);
end;

procedure TForm1.Button8Click(Sender: TObject);
 var h: string;
begin
 h:='h:\Telefonbuch.txt';
 edit1.text.SaveToFile(h);
end;

DeddyH 8. Okt 2009 18:20

Re: Telefonbuch
 
Du lädst in ein Memo, speicherst aber nur ein Edit ab. Und viel ist das ja noch nicht ;)

alleinherrscher 8. Okt 2009 18:22

Re: Telefonbuch
 
Zitat:

Zitat von funkuchn
okay, hier ist mal mein Quelltext,ich denke mal, es ist ersichtlich, was passiert:

Ähm...nein?!!!?! Also...es ist schon ersichtlich, was du machst, aber... dass es sich dabei um ein Telefonbuch handelt, bzw. den Ansatz dazu...das ist nicht ersichtlich...was ist denn in der txt datei gespeichert? Name und Telefonnummer? Wie sind die Daten darin gespeichert und warum lädst du alles in ein Memo ein?

- Habt ihr eine bestimmte Vorgabe, wie die Datenstruktur aussehen soll? z.B. ne Pointer-Kette oder n Array oder sowas?

funkuchn 8. Okt 2009 18:23

Re: Telefonbuch
 
ja ich weiß ja...habe das Programm erst heute wieder zugeschickt bekommen...warum auch immer erst heute...hatte schon vor ner woche die mail an meinen lehrer geschickt aber seis drum...
ich finde auch irgendwie jetzt keinen ansatz mehr :(



in der txt sind name & nummer

markus5766h 8. Okt 2009 18:25

Re: Telefonbuch
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo und Willkommen in der DP. :dp:

mit welcher Art Daten (SaveToFile) arbeitet Ihr (Textfile, array) ?

im Anhang mal ein Beispiel aus den Delphi-Demos zur Verwaltung einer
Adressdatenbank mit Hilfe eines arrays - lässt sich leicht in ein
Telefonbuch ableiten.

DeddyH 8. Okt 2009 18:25

Re: Telefonbuch
 
Stell mal einen Beispieldatensatz hier rein.

funkuchn 8. Okt 2009 18:27

Re: Telefonbuch
 
momentchen, soll ich mal n foto von dem aussehen des programms reinstellen??
ist dann vielleicht besser von wegen vorstellung und so...

alleinherrscher 8. Okt 2009 18:29

Re: Telefonbuch
 
N Foto ist okay, aber die TXT Datei wäre besser und dazu vielleicht noch die Frage, ob ihr die Aufgabe habt, das Telefonbuch auf eine bestimmte Art und Weise zu programmieren...

Also du könntest z.B. ein Record machen:

Delphi-Quellcode:
TTelefonbucheintrag= record of
   Vor_und_Zuname: string;
   Telefonnummer:string;
end;
Dann nimmste dir ein Array vom Typ TTelefonbucheintrag und liest die Textdatei darin ein...

Delphi-Quellcode:
var Telefonbuch: array of TTelefonbucheintrag
usw...

DeddyH 8. Okt 2009 18:29

Re: Telefonbuch
 
Ich denke mir, das ginge auch mit TStringlist (ich hab da so einen Verdacht).

funkuchn 8. Okt 2009 18:38

Re: Telefonbuch
 
Liste der Anhänge anzeigen (Anzahl: 1)
http://i35.tinypic.com/21n19pc.jpg
okay, so sieht das ganze aus....wir haben keinerlei vorgaben, es sind die funktionen nötig, die auf dem bild zu sehen sind und arrays sollen wir möglichst nicht verwenden....

DeddyH 8. Okt 2009 18:40

Re: Telefonbuch
 
Und nun noch einen Beispieldatensatz oder gleich die Textdatei.

alleinherrscher 8. Okt 2009 18:41

Re: Telefonbuch
 
Bildschirmfotos macht man übrigens mit "Druck" bzw. "PrintScreen" bzw. Alt+Druck für ein einzelnes Fenster...die TXT Datei fehlt immer noch :)

Zitat:

Zitat von DeddyH
(ich hab da so einen Verdacht).

*gespannt sei* @DeddyH

funkuchn 8. Okt 2009 18:42

Re: Telefonbuch
 
Liste der Anhänge anzeigen (Anzahl: 1)
ja hier die exe

sry, ich wusste das mal, bin heut aber bissl überfordert mit allem :shock:

DeddyH 8. Okt 2009 18:46

Re: Telefonbuch
 
Ich meinte, wie soll die Textdatei denn aussehen? Oder steht Euch das frei?

funkuchn 8. Okt 2009 18:47

Re: Telefonbuch
 
jaja, steht uns alles frei, sollte nur verständlich sein :)

DeddyH 8. Okt 2009 18:49

Re: Telefonbuch
 
Also ginge auch so etwas:
Code:
Karl-Heinz Lockensturz;01234/567890
Das könnte man dann in einer TStringlist verwalten (ist zwar nicht der Weisheit letzter Schluss, aber dafür recht einfach).

funkuchn 8. Okt 2009 18:50

Re: Telefonbuch
 
ja genau

DeddyH 8. Okt 2009 18:57

Re: Telefonbuch
 
Nun, dann bilde doch einfach einen String, der den Namen, den Vornamen sowie sämtliche Telefonnummern durch ein definiertes Zeichen getrennt enthält. Das Ganze kannst Du dann in einer TStringlist bzw. TStrings(die Lines des Memos) verwalten. Ein Beispiel:
Code:
//Originaldatensatz
Müller;Klaus-Bärbel;01234/12345

//eine Nummer dazu
Müller;Klaus-Bärbel;01234/12345;02345/23456
Dieser Datensatz entspricht dann einer Zeile Deiner Datei. Du kannst ihn anhand des Trennzeichens dann wieder in seine einzelnen Bestandteile zerlegen (mit Stringfunktionen wie Copy, Delete, Pos, PosEx etc. oder mit TStringlist.Delimiter/DelimitedText usw.). Sortieren geht damit auch(TStringlist.Sorted). Ich denke, als Ansatz soll das zunächst genügen.

funkuchn 8. Okt 2009 18:59

Re: Telefonbuch
 
ja als Ansatz ist das okay, aber ich habe halt das Problem, dass ich nicht weiß, wie ich das einbinde, so gut bin ich nicht, mache das echt noch nicht lange...

alleinherrscher 8. Okt 2009 19:00

Re: Telefonbuch
 
Zitat:

Zitat von DeddyH
Ich denke, als Ansatz soll das zunächst genügen.

Gute Idee! Man könnte auch immer abwechselnd Name und Telefonnummer in die Stringlist schreiben, dann spart man sich das auseinander-friemeln am schluss. Und man weiß immer, dass (angenommen wir fangen bei null an) bei den geraden Einträgen in der Liste die Namen und bei den ungeraden Einträgen die Telefonnummern stehen.

DeddyH 8. Okt 2009 19:02

Re: Telefonbuch
 
Hast Du Dir die genannten Funktionen und Methoden denn schon einmal in der Delphi-Hilfe angeschaut?

funkuchn 8. Okt 2009 19:02

Re: Telefonbuch
 
könnte ich machen, aber dann bin ich 4 stunden mit übersetzen beschäftigt..

DeddyH 8. Okt 2009 19:04

Re: Telefonbuch
 
So viele waren das ja nun auch wieder nicht. Wir helfen ja gern, aber von Dir muss auch etwas kommen. Versuch es erst einmal und wenn Du nicht weiterkommst, meldest Du Dich einfach, OK?

funkuchn 8. Okt 2009 19:05

Re: Telefonbuch
 
ich finde nicht mal einen Ansatz >.<
man ihr wart doch auch mal anfänger :cry:

DeddyH 8. Okt 2009 19:08

Re: Telefonbuch
 
Sicher waren wir das und haben uns als solche auch durchkämpfen müssen. Nochmal der Datensatz von oben:
Code:
Müller;Klaus-Bärbel;01234/12345
Da sind 2 Trennzeichen(";") drin. Alles bis zum ersten Zeichen ist der Name, danach bis zum 2. Trennzeichen der Vorname, dahinter die Telefonnummer. Das musst Du nur noch zerlegen (die DP-Suche hilft dabei sicherlich auch weiter).

alleinherrscher 8. Okt 2009 19:09

Re: Telefonbuch
 
Okay, einen Ansatz. (wobei ich hier eine leicht andere Variante verfolge als DaddyH, sry)

Du deklarierst dir unter Private eine Variable:

Delphi-Quellcode:
type
  TForm1 = class(TForm)
  private
    { Private-Deklarationen }
    Telefonbuch:Tstringlist;
  public
    { Public-Deklarationen }
  end;
Wenn dein Programm startet, musst du in der FormCreate Procedure die StringList ersteinmal "erstellen":

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
   Telefonbuch:=TStringList.create;
end;
Dann brauchst du eine Procedure, um Einträge in dein Telefonbuch (in die Stringlist) einzufügen:

Delphi-Quellcode:
procedure TForm1.Hinzufügen_Zu_Telefonbuch(EinName:String;EineTelefonnummer:string);

begin

  EinTelefonbuch.Add(EinName);
  EinTelefonbuch.Add(EineTelefonnummer);

end;
Jedes Mal, wenn du EinTelefonbuch.Add aufrufst, wird ein weiterer Eintrag in die StringList geschrieben.
D.h. ein Beispiel:

Am Anfang ist deine StringList leer. Jetzt rufst du folgende Procedure auf:

Hinzufügen_Zu_Telefonbuch('Hans Meiser','0190-99999');

Jetzt steht in der StringList:

0.: Hans Meiser
1.: 0290-99999


Meine Frage an dich: Man kann mit Eckigen Klammern auf die einzelnen Einträge der Stringlist zugreifen:

EinTelefonbuch[0] ist in unserem Fall jetzt = "Hans Meiser".

Kannst du eine FUnktion basteln, die aus dem Telefonbuch nun wieder Name und Telefonnummer ausließt? Also, wenn ich dir sage: Suche mir bitte zur zweiten Person im Telefonbuch Namen und Telefonnummer... wie könnte das gehen?

DeddyH 8. Okt 2009 19:11

Re: Telefonbuch
 
Und mehrere Telefonnummern hängst Du dann wie an?

P.S.: DeddyH bitte ;)

alleinherrscher 8. Okt 2009 19:16

Re: Telefonbuch
 
Zitat:

Zitat von DeddyH
Und mehrere Telefonnummern hängst Du dann wie an?

P.S.: DeddyH bitte ;)

Ich gehe mal davon aus, dass einer Person genau eine Telefonnummer zugeordnet wird, oder?

100x Sorry wegen dem Fehler im Namen!!! :angel:

DeddyH 8. Okt 2009 19:17

Re: Telefonbuch
 
Auf dem Screenie steht was von "weitere Nummer hinzufügen" oder so ähnlich.

[edit] To err is human, to forgive is divine. You erred, I forgive you :zwinker: [/edit]

alleinherrscher 8. Okt 2009 19:19

Re: Telefonbuch
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von DeddyH
Auf dem Screenie steht was von "weitere Nummer hinzufügen" oder so ähnlich.

Hab ich was übersehen? Ich find nix... Aber man könnte evtl noch Vor und Nachname getrennt in die Liste schreiben, aber nun gut...fangen wir erstmal klein an...name und nummer ;-)


//edit: Thank you very much...now lets see, what he will do with this information...

funkuchn 8. Okt 2009 19:20

Re: Telefonbuch
 
okay, jetzt bin ich richtig verwirrt, zu viele Antworten....sorry....ich weiß, dass ich nichts kann und fühle mich bestätigt....danke

DeddyH 8. Okt 2009 19:22

Re: Telefonbuch
 
Das hat ja niemand gesagt, was verstehst Du denn an den genannten Ansätzen nicht?

funkuchn 8. Okt 2009 19:22

Re: Telefonbuch
 
ich weiß nicht wie ich sie einbinden soll, bzw wo, ich bin durcheinander

alleinherrscher 8. Okt 2009 19:27

Re: Telefonbuch
 
Ich schreib dir gerade ein bisschen Sourcecode in dein Projekt...aber nur ein bisschen...

funkuchn 8. Okt 2009 19:30

Re: Telefonbuch
 
hmmm...danke...vielleicht hilfts mir ja mal auf die sprünge :pale:

DeddyH 8. Okt 2009 19:33

Re: Telefonbuch
 
Sei Dir zunächst einmal klar darüber, dass es einen Teil des Programms gibt, den man sehen kann (die Edits z.B.) und einen, den man nicht sieht (die Liste der Telefonnummern). Nehmen wir einmal an, die bereits erstellte Datei sähe so aus:
Code:
A;B;1
C;D;2
E;F;3
G;H;4
Diese Datei lädst Du mit LoadFromFile in eine TStringlist. Nun sagen wir: "zeig uns die erste Zeile".
Das bedeutet, dass der erste Datensatz (die erste Zeile) so dargestellt werden soll:
- ins Edit für den Namen das A
- ins Edit für den Vornamen das B
- ins Edit für die Nummer die 1

Zweckmäßigerweise merkst Du Dir den Index der Zeile (Zählung beginnt bei 0), in diesem Fall also 0. Soll der dargestellte Datensatz nun geändert werden, fügst Du die Zeile (also den kompletten String) wieder aus den Edits zusammen und legst ihn in der Liste an der alten Position (also 0) ab. Nach einer Änderung der Nummer von 1 auf z.B. 20 sähe das dann anschließend so aus:
Code:
A;B;20 //<- Nummer geändert
C;D;2
E;F;3
G;H;4
Das Alles geschieht bis zur Speicherung lediglich im Hauptspeicher, deshalb der Vorschlag mit einer TStringlist. Erst wenn Du diese mit SaveToFile abspeicherst, ist die Datei auch geändert. Soweit klar?

funkuchn 8. Okt 2009 19:35

Re: Telefonbuch
 
ja


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:27 Uhr.
Seite 1 von 2  1 2      

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