Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Das Programm:


//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop


#include "Ueb1_Unit1.h"

#include "stdio.h"

#include <sys/stat.h>

#include <io.h>

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TfrmMain *frmMain;

int Datenzeiger=0;

bool fileexists=false;

FILE *meineDatei;

int timer = 1;

int zahl;

int temp=0;

int tempp=0;   // alle variablen verändern!!!!!!!


//---------------------------------------------------------------------------

__fastcall TfrmMain::TfrmMain(TComponent* Owner)

        : TForm(Owner)

{

meineDatei=fopen("ueb1.dat","r+b");

if (meineDatei == NULL)

btnLesen->Enabled = false;

else{fileexists=true;}



}

//---------------------------------------------------------------------------

__fastcall TfrmMain::~TfrmMain() {

  fclose(meineDatei);

}

void __fastcall TfrmMain::btnSchreibenClick(TObject *Sender)

{

if(fileexists){

Reset();

}

fseek(meineDatei,0,SEEK_SET);

int zahl=StrToInt(edtDaten->Text);

fwrite(&zahl,sizeof(zahl),1,meineDatei);

}

//---------------------------------------------------------------------------

void __fastcall TfrmMain::btnLesenClick(TObject *Sender)

{

Reset();

Memo1->Clear();

struct stat Status;

stat("ueb1.dat", &Status);

int FSize=Status.st_size;

for(int i=0;i<FSize/sizeof(zahl);i++){

fread(&zahl,sizeof(zahl),1,meineDatei);

if(zahl!=0){

Memo1->Lines->Add(zahl);

timer++;

}

}

}

//---------------------------------------------------------------------------

void __fastcall TfrmMain::FormClose(TObject *Sender, TCloseAction &Action)

{

 fclose(meineDatei);

}

//---------------------------------------------------------------------------


void __fastcall TfrmMain::Button1Click(TObject *Sender)

{

fclose(meineDatei);

DeleteFile("ueb1.dat");

meineDatei=fopen("ueb1.dat","a+b");

Reset();


}

//---------------------------------------------------------------------------

void TfrmMain::Reset(){

fclose(meineDatei);

meineDatei=fopen("ueb1.dat","a+b");

btnLesen->Enabled = true;

}

void __fastcall TfrmMain::UpDown1ChangingEx(TObject *Sender,

      bool &AllowChange, short NewValue, TUpDownDirection Direction)

{

struct stat Status;

stat("ueb1.dat", &Status);

int FSize=Status.st_size;

if(NewValue<=UpDown1->Max && NewValue>0)

{

switch (Direction)

{

case updUp :

if(temp<=FSize){

fseek(meineDatei,temp,SEEK_SET);

fread(&zahl,sizeof(zahl),1,meineDatei);

tempp = sizeof(zahl);

temp += sizeof(zahl);

Edit1->Text=zahl;

break;

}

case updDown :

if(ftell(meineDatei)>4){

temp -=tempp;

fseek(meineDatei,temp-tempp,SEEK_SET);

fread(&zahl,tempp,1,meineDatei);

Edit1->Text=zahl;}

}

}

}



//---------------------------------------------------------------------------

Quelltext/Headerdatei
//---------------------------------------------------------------------------


#ifndef Ueb1_Unit1H

#define Ueb1_Unit1H

//---------------------------------------------------------------------------

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <ExtCtrls.hpp>

#include <ComCtrls.hpp>

//---------------------------------------------------------------------------

class TfrmMain : public TForm

{

__published:	// Von der IDE verwaltete Komponenten

        TButton *btnSchreiben;

        TButton *btnLesen;

        TEdit *edtDaten;

        TMemo *Memo1;

        TButton *Button1;

        TUpDown *UpDown1;

        TEdit *Edit1;

        void __fastcall btnSchreibenClick(TObject *Sender);

        void __fastcall btnLesenClick(TObject *Sender);

        void __fastcall FormClose(TObject *Sender, TCloseAction &Action);

        void __fastcall Button1Click(TObject *Sender);

        void __fastcall UpDown1ChangingEx(TObject *Sender,

          bool &AllowChange, short NewValue, TUpDownDirection Direction);

private:	// Anwender-Deklarationen

public:		// Anwender-Deklarationen

        void Reset();

        __fastcall TfrmMain(TComponent* Owner);

        __fastcall TfrmMain::~TfrmMain();


};

//---------------------------------------------------------------------------

extern PACKAGE TfrmMain *frmMain;

//---------------------------------------------------------------------------

#endif

Das ist ein nettes Programm zum Speichern und Entfernen von Textdateien.

Nun möchte ich dieses Programm noch verbessern, indem ich es in Klassen schreiben. Natürlich habe ich es schon vorher probiert. Doch ging es nicht wirlich. Es kamen dauernt i.welche Fehlermeldungen. Könnte bitte einer von euch mir helfen und sagen, wodrauf ich achten muss. Oder vllt könnte von euch auch einer einen keinen quelltext zur hilfe geben.

mfg

peter

Das ist ein nettes Programm zum Speichern und Entfernen von Textdateien.

Nun möchte ich dieses Programm noch verbessern, indem ich es in Klassen schreiben.

Was heißt denn "in Klassen schreiben" für dich?

Das Programm hat bereits eine Klasse, nämlich TfrmMain.

Falls du meinst, dass du das Programm objektorientiert machen willst, dazu gehört erheblich mehr, als nur den Code "in Klassen zu schreiben".

hiho,

Ich wollte eine Klasse

class za:public:int zahl;

usw.

erstellen.

Nun ging dies aber nicht. Deswegen schrieb ich hier meinen code rein, damit ihr mir vllt erklärt wie ich dies bei dem Programm am besten schreibe ob ich in die vorhandene Klasse schreiben soll oder eine neue Klasse machen soll.

Dabei habe ich gehofft, ihr würdet einen kleiner code als Hilfe mir geben.

Denn eig muss man doch nur die Klasse schreiben und dann public und private und jeweils die Komponeten in private oder public. Jedoch ging dies nicht.

Vllt kann mir nun einer helfen.

mfg

peter

Ich wollte eine Klasse

class za:public:int zahl;

usw.

erstellen.

Du kannst nicht von int erben, nur von anderen Klassen oder Strukturen.

Nun ging dies aber nicht.
Für die Zukunft: Das ist keine ausreichende Fehlerbeschreibung, mit "geht nicht" kann niemand etwas anfangen. Wenn du Fehlermeldungen bekommst, dann nenne sie.

Deswegen schrieb ich hier meinen code rein, damit ihr mir vllt erklärt wie ich dies bei dem Programm am besten schreibe ob ich in die vorhandene Klasse schreiben soll oder eine neue Klasse machen soll.
Welchen Zweck soll diese Klasse denn erfüllen? Das sollte beim Design im Vordergrund stehen. Klassen sind ja kein Selbstzweck.

Wie ihr sehen könnt, hab ich ja das Programm eig schon fertig geschrieben. Das war eine Aufgabe und die habe ich unserem Info-Lehrer gezeigt. Der meinte dann nur ich soll es in Klassen schreiben und das dann abgeben. Deswegen auch die Hilfe hier.

mfg

peter

Fehlermeldungen:

[C++ Fehler] stdio.h(355): E2040 Deklaration nicht ordnungsgemäß abgeschlossen

[C++ Fehler] stdio.h(355): E2190 Unerwartetes }

[C++ Fehler] stdio.h(355): E2190 Unerwartetes }

[C++ Fehler] stdio.h(362): E2316 'FILE' ist kein Element von 'std'

[C++ Fehler] stdio.h(362): E2272 Bezeichner erwartet

[C++ Fehler] stdio.h(363): E2316 '__getStream' ist kein Element von 'std'

[C++ Fehler] stdio.h(363): E2272 Bezeichner erwartet

[C++ Fehler] stdio.h(364): E2316 '_fcloseall' ist kein Element von 'std'

....

Das ist nur ein Teil der Fehlermeldungen.

Ich habe eine zweite Klasse erstellt und die dann untergeordnet in public und provate.... und habe int zahl in publich geschrieben. Also vllt könnt ihr mir jetzt mal helfen ;)

Das ist nur ein Teil der Fehlermeldungen.
Wie es aussieht, hast du beim Einbinden von stdio.h etwas falsch gemacht.

Ich habe eine zweite Klasse erstellt und die dann untergeordnet in public und provate.... und habe int zahl in publich geschrieben. Also vllt könnt ihr mir jetzt mal helfen ;)

Tja, ohne den Code lässt sich da nicht viel machen. Hellsehen können wir leider noch nicht.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.