Autor Beitrag
delphianer5
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: 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:
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:
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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  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..10of 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1054
Erhaltene Danke: 78

Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: So 24.10.10 16:20 
Ganz offensichtlich ;) Was fällt dir hier auf???:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1054
Erhaltene Danke: 78

Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: 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