Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Notenprogramm (https://www.delphipraxis.net/36358-notenprogramm.html)

raccoon 18. Dez 2004 23:20


Notenprogramm
 
Hallo an alle,

wie ihr bestimmt seht bin ich neu hier und habe auch glech eine frage da ich ein Programm für die schule schreiben muss, wie das so recht funktioniert, ich habe mir dazu die version delphi 2005 architect edition trail runtergeladen also hab auch nich viel zeit...

Also mein programm soll wie folgt aussehen, 7 Textfelder wo man: Name,Vorname, Note-englisch, Note-deutsch,note-informatik und note-mathe, in dem siebten feld soll per knopfdrück der durchschnitt der noten ausgerechnet werden.

das kann ich auch selber noch hinkriegen, nun muss noch eine navigationsschaltfläche erstellt werden wo man zwischen den datensätzen hin und her blättern kann. Diese Datensätze sollen sich alle in einem "mehrdimensionalen array" gespeichert werden.

desweiteren benötige ich noch eine menübar wo man in textdateien speichern kann (speichern), daten aus textdatei öffnen(öffnen) und programm beenden(application.terminate;). über eine schaltfläche datensätze sollen alle die sich im array befindenen daten in einem stringgrid angezeigt werden.

naja so das alles, da ich wirklich nicht viel ahnung von delphi habe und auch krankheitsbedingt nicht oft im unterricht anwesend war hab ich nicht das gute verständniss dafür.

könnte mir dabei einer helfen??? wäre wichtig und SEHR nett von euch, ihr könnt das ja gut wenn ich so eure open source programme sehe...

mfg Sebastian

DP-Maintenance 19. Dez 2004 00:04

DP-Maintenance
 
Dieses Thema wurde von "Christian Seehase" von "Delphi .NET" nach "Sonstige Fragen zu Delphi" verschoben.
Dreht sich nicht um .NET

Nicolai1234 19. Dez 2004 00:26

Re: Notenprogramm
 
Also zum Speichern würde ich inis benutzen. Das geht erstmal am einfachsten.
Hier im Forum suchenINI and Tutorial oder INI-Tutorial
Für die Eingabe der Noten solltest du Edits nehmen.
Sollen die Noten mitt + und - eingetragen werden? (wenn ja ins Punktesystem umwandeln) Oder als Punktesystem (also von 1 bis 15) oder wie?
Beim Durchschnitt ist zu beachten, dass du als operator zum rechnen div benutzen musst, solange du bei Ganzzahlen bleibst.
Für die Menübar gibt es eine Standardkomponente [dp]Menüleiste[/dp]

Generell ist die DP aber nicht dazu da, um sich seine Hausaufgabe machen zu lassen :wink:

raccoon 19. Dez 2004 02:33

Re: Notenprogramm
 
ich hab ja auch nich gemeint das ihr das machen sollt, ich hab lediglich um hilfe gebeten.

also die komponenten die ich benötige sprich edit felder button und navigationsleiste das bekomm ich ja alles so hin, ich bleib gerade nur bei dem array hängen, ich weiß nich wie das funktionieren soll der er alle daten vorläufig im array speichert...

GimbaR 19. Dez 2004 02:43

Re: Notenprogramm
 
soweit ich weiß
müsste das mit dem array so gehen:
Delphi-Quellcode:
var
  noten: Array of Array of Integer;
  x, y, i: Integer;
begin
  //wie viele Schüler?
  //-----------------
  x:=4;
  Y:=???  //Anzahl der Schüler
  SetLength(noten, x, y);
  //-----------------

  //zuweisen der Noten zu den Schülern
  //-----------------
  for i:=0 to y do
  begin
    noten(0, i):=IntToStr(Edit3.Text); //die Englisch-Note
    noten(1, i):=IntToStr(Edit4.Text); //die Deutsch-Note
    noten(2, i):=IntToStr(Edit5.Text); //die mathe-Note
    noten(3, i):=IntToStr(Edit6.Text); //die Informatik-Note
  end;
  //-----------------
end;
Is schon nen bissl spät un der kaffe wirkt net mehr, also plz net böse sein wenns net geht aber so müsste es imho funzen

[edit] sry, habs noch nen bissl übersichtlicher gemacht -hoff ich zumindest^^-[/edit]

mfg GimbaR

GimbaR 19. Dez 2004 10:10

Re: Notenprogramm
 
Es wäre sinnvoll ein achtes Edit-Feld einzufügen, indem die Anzahl der Schüler eingetragen wird.
dann klappt das mit dynamischen zuweisen in einem array einfacher, denn imho wird bei SetLength() alle vorhandenen "einträge" zurückgesetzt.

malo 19. Dez 2004 12:57

Re: Notenprogramm
 
Zitat:

Zitat von GimbaR
Es wäre sinnvoll ein achtes Edit-Feld einzufügen, indem die Anzahl der Schüler eingetragen wird.
dann klappt das mit dynamischen zuweisen in einem array einfacher, denn imho wird bei SetLength() alle vorhandenen "einträge" zurückgesetzt.

Ich denke mal, das Programm soll nur dazu dienen, deinen persönlichen Notendurchschnitt zu errechnen und nicht den Klassendurchschnitt. Daher wird das achte Edit-Feld überflüssig ;)

GimbaR 19. Dez 2004 13:11

Re: Notenprogramm
 
Zitat:

Zitat von malo
Zitat:

Zitat von GimbaR
Es wäre sinnvoll ein achtes Edit-Feld einzufügen, indem die Anzahl der Schüler eingetragen wird.
dann klappt das mit dynamischen zuweisen in einem array einfacher, denn imho wird bei SetLength() alle vorhandenen "einträge" zurückgesetzt.

Ich denke mal, das Programm soll nur dazu dienen, deinen persönlichen Notendurchschnitt zu errechnen und nicht den Klassendurchschnitt. Daher wird das achte Edit-Feld überflüssig ;)

???
wozu braucht man dann dynamische arrays?
nee, ich glaub schon, dass das für mehrere Schüler ist sonst reichts ja einfach vier integer-variablen zu deklarieren...

malo 19. Dez 2004 13:35

Re: Notenprogramm
 
Zitat:

Zitat von GimbaR
???
wozu braucht man dann dynamische arrays?
nee, ich glaub schon, dass das für mehrere Schüler ist sonst reichts ja einfach vier integer-variablen zu deklarieren...

Frag ich mich auch, aber er will ja auch Vor-und Nachnamen eintragen, was wiederum auf einzelne Durschnitte zurückführen lässt.

Zitat:

Also mein programm soll wie folgt aussehen, 7 Textfelder wo man: Name,Vorname, Note-englisch, Note-deutsch,note-informatik und note-mathe, in dem siebten feld soll per knopfdrück der durchschnitt der noten ausgerechnet werden.

GimbaR 19. Dez 2004 16:16

Re: Notenprogramm
 
Ich würde jedem Schüler ne ID (bzw nen zahl^^) zuweisen und das ganze dann in ner ini abspeichern.
sozusagen:
Code:
[Schüler1]
id=0
mathe=2
inf=1
deutsch=2
englisch=6

[Schüler2]
id=1
mathe=3
inf=4
deutsch=1
englisch=2
hab abba atm net die zeit daraus nen richtigen source zu chreiben, vllt am dienstag...

raccoon 19. Dez 2004 18:42

Re: Notenprogramm
 
also die schüleranzahl ist offen denk ich mal, mann sollte soviele benutzer anlegen dürfen wie man will, und das is gerade der punkt den ich nicht verstehe, und das mit dem tsavedialog1.execute das krieg ich auch nicht hin, kann es sei da sich zu delphi 7 bei delphi 2005 da etwas geändert hat???

raccoon 19. Dez 2004 19:47

Re: Notenprogramm
 
also mein programm hab ich jetzt soweit das es funktioniert. jetzt muss ich nur noch die werte die ich eingebe in ein array umwandeln, da fehlt mir noch die verständniss für. so desweiteren habe ich auch das stringgrid fertig und die daten kommen auch darein.

http://www.a-web.de/notenprog.rar das ist das ganze programm eine VCL anwendung für Win32...

desweiteren sieht meine speicherfunktion für die tabelle so aus:
Delphi-Quellcode:
var
  BackupName: string;
  FileHandle: Integer;
  StringLen: Integer;
  X: Integer;
  Y: Integer;
  begin
  if SaveDialog1.Execute then
  begin
    if FileExists(SaveDialog1.FileName) then
    begin
      BackupName := ExtractFileName(SaveDialog1.FileName);
      BackupName := ChangeFileExt(BackupName, '.BAK');
      if not RenameFile(SaveDialog1.FileName, BackupName) then

        raise Exception.Create('Unfähig eine Aushilfsdatei zu erschaffen.');
    end;
    FileHandle := FileCreate(SaveDialog1.FileName);
    FileWrite(FileHandle,
      Sg.ColCount, SizeOf(Sg.ColCount));
    FileWrite(FileHandle,
      Sg.RowCount, SizeOf(SG.RowCount));
    for X := 0 to SG.ColCount - 1 do
    begin

      for Y := 0 to SG.RowCount - 1 do
      begin
        StringLen := Length(SG.Cells[X,Y]);
        FileWrite(FileHandle, StringLen, SizeOf(StringLen));
        FileWrite(FileHandle,
        SG.Cells[X,Y], stringlen(SG.Cells[X,Y]));
      end;
    end;
    FileClose(FileHandle);
  end;
diese funktioniert aber nicht richtig und ich frag mich warum, er sagt auch immer das er savedialog1 nicht kennt...

raccoon 19. Dez 2004 21:44

Re: Notenprogramm
 
jetzt hab ich noch ein problem, wie komm ich an den quelltext vom savedialog dran?? der öffnet immer einen Test, sprich das speichern unter menü...

Ultimator 19. Dez 2004 21:50

Re: Notenprogramm
 
Zitat:

jetzt hab ich noch ein problem, wie komm ich an den quelltext vom savedialog dran?? der öffnet immer einen Test, sprich das speichern unter menü...
Diesen Satz verstehe ich nicht :-?

Wozu brauchst du denn den Quelltext davon?
Und: es ist ein SaveDialog, da wird natürlich ein "Speichern unter---"-Dialog aufgerufen.


Wenn ich dich jetzt falsch verstenden habe, dann ignorier diesen Beitrag und verdeutliche bitte deine Frage.
Dann ist die Chance größer, dass die geholfen wird.
Und setze bitte jetzt den Quelltext in die Delphi-Tags, so lässt er sich nur schlecht lesen ;-)

raccoon 19. Dez 2004 21:59

Re: Notenprogramm
 
arg, meine erinnerungen von selphi 7 sind nen bissel durcheinander gekommen, stimmt ja ich muss die save funktion ja in dem entsprechenden button oder ähnliches einbaune..nagut somit hat sich das erledigt..danke für die gedächtniss stütze^^

raccoon 19. Dez 2004 22:06

Re: Notenprogramm
 
also den quellcoe gerade hab ich im mit dem button delphi code eingefügt, also zwischen (delphi.../delphi) jetzt keine komentare ich weiß sind falsche klammern wolt es nur veranschaulichen*g*

nunaj also wie gesagt der savedialog funktioniert nicht mit dem quellcode den ich oben angegeben habe wobei er funktionieren müsste es sei denn ich habe eine uses funktion vergessen einzufügen. desweiteren funktioniert das öffnen auch nicht so ganz, hier ist der quellcode. dort meldet er mir den fehler allocmem kennt er nicht und freemem. wurden diese geändert?

Delphi-Quellcode:
var
  iFileHandle: Integer;
  iFileLength: Integer;
  iBytesRead: Integer;
  Buffer: PChar;
  i: Integer
begin
  if OpenDialog1.Execute then
  begin
    try
      iFileHandle := FileOpen(OpenDialog1.FileName, fmOpenRead);
      iFileLength := FileSeek(iFileHandle,0,2);
      FileSeek(iFileHandle,0,0);
      Buffer := PChar(AllocMem(iFileLength + 1));
      iBytesRead := FileRead(iFileHandle, Buffer^, iFileLength);

      FileClose(iFileHandle);
      for i := 0 to iBytesRead-1 do
      begin
        Sg.RowCount := Sg.RowCount + 1;
        Sg.Cells[1,i+1] := Buffer[i];
        Sg.Cells[2,i+1] := IntToStr(Integer(Buffer[i]));
      end;
    finally
      FreeMem(Buffer);
    end;
  end;

GimbaR 20. Dez 2004 08:22

Re: Notenprogramm
 
Zitat:

Zitat von raccoon
...
begin
if SaveDialog1.Execute then
begin
if FileExists(SaveDialog1.FileName) then //<-wieso???
...

Ich versteh net, eiso du gucken willst, ob die datei existiert, sie wird ja eventuell erstellt, wenn sie net existiert...
imho ist diese zeile doch überflüssig

mfg GimbaR

raccoon 20. Dez 2004 13:18

Re: Notenprogramm
 
also der teil den du rauskopiert hast ist dafür das eine neue datei erstellt wird wenn noch keine vorhanden ist. wenn schon einmal gespeichert wurde speichert er sofort wieder unter dem dateinamen ab, sprich die dialogbox geht nicht auf sondern er nimmt sofort die datei vom vorherigen male.

raccoon 20. Dez 2004 19:07

Re: Notenprogramm
 
also, ich hab mal wieder ein paar fortschritte gemacht, mein array hab ich jetzt so aufgebaut.
zuerst habe ich einen neuen Datentyp erstellt:
Delphi-Quellcode:
TSchuler = Record
    Name,Vorname,Klasse : string;
    NoteI,NoteD,NoteE,NoteM : integer;
    NotenD : extended;
    end;
Danach habe ich mir so gedacht, das wenn ich auf den speichern knopf drücke müsste er ja die daten dann in das array speichern:

Delphi-Quellcode:
private
    count: integer;
...

var
  Form1: TForm1;
  TSchulerID: array of Tschuler;
  durch:extended;
  n:integer;
Implementation
.....

procedure TForm1.Button1Click(Sender: TObject);
begin
  TSchulerID[count].Name := edit1.text;
  TSchulerID[count].Vorname := edit2.text;
  TSchulerID[count].Klasse := edit3.text;
  TSchulerID[count].NoteD := STRtoInt(edit4.text);
  TSchulerID[count].NoteE := STRtoInt(edit5.text);
  TSchulerID[count].NoteM := STRtoInt(edit6.text);
  TSchulerID[count].NoteI := STRtoInt(edit7.text);
  TSchulerID[count].NotenD := STRtoInt(edit8.text);
  count:= count+1;
...

procedure TForm1.FormCreate(Sender: TObject);
begin
 n:=1;
 count:=0;
end;
so siehts bisher dann aus, nun kommt die fehlermeldung Objektverweis wurde nicht auf Objektinstanz festgelegt.
da ich von delhpi 2005 nur die englische hilfe habe (trial) hab ich natürlich auch nichts zu objektverweis oder instanz gefunden.

könnte mir vielleicht einer sagen ob ich irgendwo vergessen habe was richtig zu deklarieren?

mfg raccoon

raccoon 21. Dez 2004 00:46

Re: Notenprogramm
 
hmm, ich komm nciht weiter der fehler bleibt und bleibt, ich habe schon versucht das array ein bisschen zu überlisten indem ich aus dem TSchulerID noch einen eigenen datentyp erzeugt habe und dann eine weitere Variable SchulerId erstellt, geht auch nicht also ich bin ratlos, ich sitzt jetzt schon 5 stunden an diesem einen fehler und das wurmt^^

mfg raccoon


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 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 by Thomas Breitkreuz