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 fehlerhaftQuellcode (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.