| Autor |
Beitrag |
delphianer5
      
Beiträge: 30
|
Verfasst: So 24.10.10 16:13
Hi,
wir sollten ein Programm schreiben das folgendes tut:
Funktion des Projekts Schülerliste:
Man hat 6 Edit Felder in denen für jeden Schüler in jeweils ein Edit Feld der Name, Vorname, Geburtsdatum, Schule, E-Kurs1 und E-Kurs2 eingetragen werden soll. Wenn man alles eingegeben hat zu dem jeweiligen Schüler klickt man auf den Button "Eingabe". Die Felder werden wieder frei und man kann wieder für einen Schüler die Daten eingeben usw.
Wenn man alle hat klickt man auf einen weiteren Button mit dem Namen "Ausgabe".
Nun werden alle spezifischen Daten zu dem jeweiligen Schüler in einem StringGrid angezeigt.
Man sollte hierzu ein Array of record verwenden.
Problem:
Aus irgendeinem, mir nicht ersichtlichen Grund (3-4 drüber geschaut^^), fügt das Programm in jedes StringGrid-Feld immer nur das selbe ein was im letzten zu ausfüllenden Edit-Feld steht - EinEK2.
Könnt ihr mir helfen?
Delphi-Programmierung:
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:
| unit USchuelerliste;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, jpeg, ExtCtrls, StdCtrls, Grids;
type TForm1 = class(TForm) EinName: TEdit; EinVorname: TEdit; EinGeb: TEdit; EinSchule: TEdit; EinEK1: TEdit; EinEk2: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Button1: TButton; Button2: TButton; Button3: TButton; StringGrid1: TStringGrid; procedure Button3Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private public end;
var Form1: TForm1;
implementation
type TSchueler=record Name:string; VorName:string; GebDate:String; Schule:string; EK1:string; EK2:string; end;
var Schueler: array [1..10] of TSchueler; Zaehler: integer;
{$R *.dfm}
procedure TForm1.Button3Click(Sender: TObject); begin Close; end;
procedure TForm1.FormCreate(Sender: TObject); var i:integer; begin Zaehler:=0; for i:= 1 to 10 do StringGrid1.Cells[0,i]:=inttostr(i);
with StringGrid1 do begin Cells[1,0]:='Name'; Cells[2,0]:='Vorname'; Cells[3,0]:='Geburtsdatum'; Cells[4,0]:='Schule'; Cells[5,0]:='E-Kurs 1'; Cells[6,0]:='E-Kurs 2'; end;
end;
procedure TForm1.Button1Click(Sender: TObject); begin Zaehler:=Zaehler + 1; Schueler[Zaehler].Name:=EinName.Text; Schueler[Zaehler].Vorname:=EinVorname.Text; Schueler[Zaehler].GebDate:=EinGeb.Text; Schueler[Zaehler].Schule:=EinSchule.Text; Schueler[Zaehler].EK1:=EinEK1.Text; Schueler[Zaehler].EK2:=EinEK2.Text; EinName.Text:=''; EinVorname.Text:=''; EinSchule.Text:=''; EinGeb.Text:=''; EinEK1.Text:=''; EinEK2.Text:=''; end;
procedure TForm1.Button2Click(Sender: TObject); var i:integer; begin for i:=1 to 10 do begin with StringGrid1 do begin Cells[i,1]:=Schueler[Zaehler].Name; Cells[i,1]:=Schueler[Zaehler].Vorname; Cells[i,1]:=Schueler[Zaehler].GebDate; Cells[i,1]:=Schueler[Zaehler].Schule; Cells[i,1]:=Schueler[Zaehler].EK1; Cells[i,1]:=Schueler[Zaehler].EK2; end; end;
end;
end. |
|
|
platzwart
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: So 24.10.10 16:20
Ganz offensichtlich  Was fällt dir hier auf???:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| with StringGrid1 do begin Cells[i,1]:=Schueler[Zaehler].Name; Cells[i,1]:=Schueler[Zaehler].Vorname; Cells[i,1]:=Schueler[Zaehler].GebDate; Cells[i,1]:=Schueler[Zaehler].Schule; Cells[i,1]:=Schueler[Zaehler].EK1; Cells[i,1]:=Schueler[Zaehler].EK2; end; |
Du überschreibst immer wieder ein und dieselbe Zelle. Als letztes schreibst du Schueler[Zaehler].EK2 rein, somit ist nur das sichtbar.
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
delphianer5 
      
Beiträge: 30
|
Verfasst: So 24.10.10 23:08
Ja, an diesen Zeilen muss es liegen.
Ich hab das ganz bewusst so gemacht. Ich dachte mir das so - Verbessere mich wenn ich jetzt quatsch erzähle:
Es gilt ja [Spalte,Zeile] und ich habe ja [i,1]- Für i wird jeweils ein Wert 1 bis 10 zugeordnet. So, und ich habe mir gedacht das er dann für Schüler 1 in der Spalte 1 bzw. i in der ersten Zeile einträgt - jetzt fällt mir nur auf, das dann ja nur für den Schüler 1 Werte ausgegeben werden können. Ich stehe irgendwie auf dem Schlau, wenn ich i,i mache dann stehen nur in der Diagonalen die Werte.
Hilfe!^^
Kannst du mir helfen wie es heißen müsste oder kannst du mir einen Hinweis geben?
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 24.10.10 23:17
Also schauen wir doch noch einmal durch was du da machst: - Schreibe in die erste Zelle von Spalte i den Namen.
- Schreibe in die erste Zelle von Spalte i den Vornamen.
- Schreibe in die erste Zelle von Spalte i das Geburtsdatum.
- ...
Fällt dir etwas auf?
Ja, und dann schreibst du immer die Daten des Schülers mit dem Index Zaehler. Und das zehnmal. Denn du zählst nur die Spalten hoch und nicht den Index der Schüler.
|
|
platzwart
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: So 24.10.10 23:26
Tipp: Wie wäre es mit zwei For-Schleifen, eine für die Schüler durchzugehen und eine für die Anzeige...
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
FinnO
      
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: Do 28.10.10 20:50
Moin,
ist eigentlich unnötig, da es sich beim Y-Wert ja um Konstanten handelt. Würden also Konstant Zahlen von 1-9 (bzw. 0-8?) reichen.
LG
|
|
|