Probleme mit Struktur



  • Hallo,

    habe ein Problem und hoffe, dass mir echt jemand weiterhelfen kann.

    Programmbeschreibung:
    Das Programm ermittelt aus dem Netto- und Bruttolohn die Abzüge in Prozent.
    Die Daten können dann in einer Textdatei gespeichert und so Monat für Monat ergänzt werden.

    Problembeschreibung:
    Bei den ersten 12 Einträgen funktioniert alles bestens. Sie lassen sich korrekt berechnen, anzeigen, abspeichern und wieder öffnen.
    Vorgehensweise:
    -- min. 13 Einträge in List box
    -- Daten in Textdatei speichern
    -- Programm beenden
    -- Programm starten und Textdatei öffnen (Daten werden aus der Struktur gelesen)
    --> Daten ab dem 13. Eintrag sind fehlerhaft

    Quellcode (Borland c++ Builder 5.0):

    #include <stdio.h>
    #include <vcl.h>
    #pragma hdrstop

    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;

    struct Daten
    {
    int Nr;
    char Monat[10];
    char Jahr [4];
    float Nettolohn;
    float Bruttolohn;
    float Abzuege_Prozent;
    }Monat[60];

    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
    {
    //Initialisierung
    EDIT_JAHR->Text="2004";

    for (int a=0;a<60;a++)
    {
    Monat[a].Nr=0;
    }
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::BUTTON_ENDEClick(TObject *Sender)
    {
    Application->Terminate();
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::BUTTON_RESETClick(TObject *Sender)
    {
    EDIT_BRUTTOLOHN->Text="0";
    EDIT_NETTOLOHN->Text="0";
    EDIT_ABZUEGE_PROZENT->Text="0";
    EDIT_JAHR->Text="2004";
    EDIT_MONAT->Text="";
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::BUTTON_BERECHNEClick(TObject *Sender)
    {
    float Zwischenergebnis;
    int i;
    char buf[200];

    for (i=0;i<60;i++)
    {
    if (Monat[i].Nr==0)
    {
    Monat[i].Nr=i+1;
    Monat[i].Bruttolohn=StrToFloat(EDIT_BRUTTOLOHN->Text);
    Monat[i].Nettolohn=StrToFloat(EDIT_NETTOLOHN->Text);

    Zwischenergebnis= (100/Monat[i].Bruttolohn)*Monat[i].Nettolohn;
    Monat[i].Abzuege_Prozent=100-Zwischenergebnis;
    EDIT_ABZUEGE_PROZENT->Text = FloatToStr(Monat[i].Abzuege_Prozent);

    strcpy(Monat[i].Monat,EDIT_MONAT->Text.c_str());
    strcpy(Monat[i].Jahr,EDIT_JAHR->Text.c_str());

    sprintf(buf,"%2i %-10s %-4s %-4.2f %-4.2f %-2.2f",
    Monat[i].Nr,Monat[i].Monat,Monat[i].Jahr,Monat[i].Bruttolohn,
    Monat[i].Nettolohn,Monat[i].Abzuege_Prozent);

    ListBox1->Items->Add(buf);
    ListBox1->ItemIndex=i;
    break;
    }
    }
    }
    //----------------------------------------------------------------------------
    void __fastcall TForm1::ListBox1Click(TObject *Sender)
    {
    int nr;
    int aktSatz=ListBox1->ItemIndex;
    nr=atoi(ListBox1->Items->Strings[aktSatz].c_str());
    EDIT_MONAT->Text=Monat[nr-1].Monat;
    EDIT_JAHR->Text=Monat[nr-1].Jahr;
    EDIT_BRUTTOLOHN->Text=FloatToStrF(Monat[nr-1].Bruttolohn,ffCurrency,7,2);
    EDIT_NETTOLOHN->Text=FloatToStrF(Monat[nr-1].Nettolohn,ffCurrency,7,2);
    EDIT_ABZUEGE_PROZENT->Text=FloatToStrF(Monat[nr-1].Abzuege_Prozent,ffCurrency,7,2);
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::BUTTON_DATENSATZ_LOESCHENClick(TObject *Sender)
    {
    int nr;
    int aktSatz=ListBox1->ItemIndex;
    nr=atoi(ListBox1->Items->Strings[aktSatz].c_str());
    ListBox1->Items->Delete(aktSatz);
    Monat[nr-1].Nr=0;

    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::Beenden1Click(TObject *Sender)
    {
    Application->Terminate();
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::Speichern1Click(TObject *Sender)
    {
    FILE *fp;
    if (SaveDialog1->Execute())
    {
    if((fp=fopen(SaveDialog1->FileName.c_str(),"w"))==NULL)
    {
    Application->MessageBox("Fehler","Fehler beim Speichern",MB_OK);
    }
    else
    {
    fwrite(Monat,sizeof(struct Daten),60,fp);
    }
    fclose(fp);
    }
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::Oeffnen1Click(TObject *Sender)
    {
    FILE *fp;
    int i;
    char buf[200];

    if(OpenDialog1->Execute())
    {
    if((fp=fopen(OpenDialog1->FileName.c_str(),"r"))==NULL)
    {
    Application->MessageBox("Fehler","Fehler beim Öffnen",MB_OK);
    }
    else
    {
    fread(Monat,sizeof(struct Daten),60,fp);
    for(i=0;i<60;i++)
    {
    if(Monat[i].Nr>0)
    {

    sprintf(buf,"%2i %-10s %-4s %-4.2f %-4.2f %-2.2f",
    Monat[i].Nr,Monat[i].Monat,Monat[i].Jahr,Monat[i].Bruttolohn,
    Monat[i].Nettolohn,Monat[i].Abzuege_Prozent);

    ListBox1->Items->Add(buf);
    }
    }
    }
    fclose(fp);
    }
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::Januar1Click(TObject *Sender)
    {
    EDIT_MONAT->Text="Januar";
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::Februar1Click(TObject *Sender)
    {
    EDIT_MONAT->Text="Februar";
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::Mrz1Click(TObject *Sender)
    {
    EDIT_MONAT->Text="März";
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::April1Click(TObject *Sender)
    {
    EDIT_MONAT->Text="April";
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::Mai1Click(TObject *Sender)
    {
    EDIT_MONAT->Text="Mai";
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::Juni2Click(TObject *Sender)
    {
    EDIT_MONAT->Text="Juni";
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::Juni1Click(TObject *Sender)
    {
    EDIT_MONAT->Text="Juli";
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::August1Click(TObject *Sender)
    {
    EDIT_MONAT->Text="August";
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::September1Click(TObject *Sender)
    {
    EDIT_MONAT->Text="September";
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::Oktober1Click(TObject *Sender)
    {
    EDIT_MONAT->Text="Oktober";
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::November1Click(TObject *Sender)
    {
    EDIT_MONAT->Text="November";
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::Dezember1Click(TObject *Sender)
    {
    EDIT_MONAT->Text="Dezember";
    }
    //---------------------------------------------------------------------------



  • Ich glaube nicht, dass sich das jemand durchliest. Also folgendes:

    Mach ein neues (reines C++)-Projekt auf, ohne diesen ganzen GUI-Krempel.
    Da drin "simulierst" du dann das Programm. Wenn du den Fehler dann noch nicht selbst gefunden hast, kannst du ja nochmal deinen auf wenige Zeilen reduzierten Quelltext hier posten und fragen...



  • Auch wenn das jetzt kein Standard ist. Guck dir von ListBox mal

    ListBox1->Items->SaveToFile("Text.txt");
    //und
    listBox1->Items->LoadFromFile("Text.txt");
    

    an. Das ist wesentlich einfacher als FILE. 😉


Anmelden zum Antworten