Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » frage zu dynamischen Objekten

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 < [ 3 ]
010
18.12.2003, 16:26 Uhr
~haribobär
Gast


@ Windalf

Das ist unser main Programm

C++:


#include "gui.h"    
    
#include "core.h"    


int main()
{
    menuesteuerung();

    return 0;

}




Das ist unsere Menüsteuerung



C++:

#include "gui.h"    
#include "core.h"    

void menuesteuerung()

{

    



        Menuitem menu[]={

                {'+',"add","Klausurergebnisse hinzufügen",&add},
                {'-',"loeschen","Klausurergebnisse entfernen",&loeschen},
                {'m',"mean","Klausurdurchschnitt ausgeben",&mean},
                {'q',"quota","Durchfallquote ausgeben",&quota},
                {'t',"top","Auflisten der Studenten mit der besten Note",&top},
                {'f',"fail","Auflisten der durchgefallenen Studenten",&fail},
                {'l',"list","Auflisten aller Klausurergebnisse",&list}
            
                };
    char zeichen;
do{
        

                cout << endl << endl << endl;




                for (int i=0;i<7;i++)
                {



                cout<<"        "<<menu[i].shortcut<<" "<< menu[i].description<<endl;


                }
                cout << endl << endl << endl;


    

        cout << " Geben sie bitte eines der oben aufgefuehrten zeichen ein:  ";
        cin >> zeichen;



        

        bool check =false;

        for (int i=0;i<7;i++)
        {
            if(zeichen == menu[i].shortcut)
            {
            menu[i].callback();

            check = true;
            }
          
        }

        if( check == false)
        {
            if(zeichen == 'e')
            {
                break;
            }

            cout << " Sie haben ein ungültiges Zeichen eingegeben! " << endl;
        }


}while(zeichen != 'e');    

}




Das ist unsrere Header-Datei zur menüsteuerung



C++:

#ifndef _gui_H_INCLUDED_        
#define _gui_H_INCLUDED_



#include <iostream>
        
using namespace std;


//Funktionsdeklaration der einzelnen Menuepunkte
    

    void menuesteuerung();




    typedef void (*VOIDFCT)();


    struct Menuitem
    {
        char shortcut;
        const char* menutext;
        const char* description;
        VOIDFCT callback;
        //void (*callback)();
    };





Die Menüsteuerung funktioniert auch ohne probleme, aber jetzt haben wir probleme mit der funktion add und list. im folgenden text kommen die funktionen das problem ist ich kann die werte einlesen. Aber wenn ich auf list gehe zeigt er mir immer nur den zu letzt eingegeben wert an die anderen werte setzt er auf null. Die Anzahl von 64 muss so sein auch wenn das bei dem operator 'new' vielleicht keinen sinn macht.



hier unsere Header-Datei zu den menüpunkten

C++:

#ifndef _core_H_INCLUDED_        
#define _core_H_INCLUDED_



#include <iostream>
        
using namespace std;




    
    



    void add();

    void loeschen ();

    void mean();

    void quota();

    void top();

    void fail();

    void list();

    int abfrage();


struct Klausurergebniss
{
    
    char name[16];
    int matrikelnummer;
    int note;
};



#endif




Hier sind unsere menüfunktionen

C++:
    
#include "core.h"    



int anzahl=0;
Klausurergebniss* daten;




void add()
{

daten=new Klausurergebniss[64];


cout<<"name: ";
cin>>daten[anzahl].name;


cout<<"mat: ";
cin>>daten[anzahl].matrikelnummer;


cout<<"note: ";
cin>>daten[anzahl].note;

anzahl++;

}


void loeschen ()
{

cout << "Sie haben - eingegeben ";

}


void mean()
{

cout << "Sie haben m eingegeben ";

}


void quota()
{

cout << "Sie haben q eingegeben ";

}


void top()
{

cout << "Sie haben t eingegeben ";

}


void fail()
{

cout << "Sie haben f eingegeben ";

}


void list()
{
for(int i =0;i<anzahl;i++)
{  
cout<<daten[ i ].name<<"\t"<<daten[ i ].matrikelnummer<<"\t"<<daten[ i ].note<<endl;
}

}









Wäre nett wenn du uns da weiterhelfen könntest.
Vielen dank schon mal im voraus.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
18.12.2003, 17:54 Uhr
derphilipder




C++:


int anzahl=0;
Klausurergebniss* daten;


daten=new Klausurergebniss[64];

void add()
{




cout<<"name: ";
cin>>daten[anzahl].name;


cout<<"mat: ";
cin>>daten[anzahl].matrikelnummer;


cout<<"note: ";
cin>>daten[anzahl].note;

anzahl++;

}


gt daran, dass Du dein new innerhalb der add-Funktion ausführst und damit jedesmal ein neues Feld erzeugst.
Wenn dann so|CPP||
--
Konfuzius says: "A man who goes to bed with an itchy asshole is a man who wakes up with stinky finger!"
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
18.12.2003, 18:38 Uhr
~haribobär
Gast


Das hab ich mir schon gedacht das es daran hängt.

Aber wenn ich das über die "void add" mache bekomme ich beim compilieren
einige Fehlermeldungen.

Auf diese Idee war ich auch schon gekommen.

Was kann man denn da noch so machen.
Geht das vielleicht auch über Pointer oder irgenwie anders ?



Gruss Haribobär
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
18.12.2003, 19:29 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


was für ne fehlermeldung bekommst du denn?
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
18.12.2003, 19:39 Uhr
~haribobär
Gast


Es sind mehrere Fehlermeldungen.

ZB:da wo man die Werte einliest
steht "invalid types 'int[int]' for array subscript"

das steht auch wo man in der list auf die Werte zugreift.

und am Afang steht da noch: conflicting types for 'int daten'


Du kannst es ja mal selber ausprobieren.
So wie es oben steht läuft es ja.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
18.12.2003, 20:02 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


mail mir mal deine dateien und dann guck ich mir das mal an
mailadresse findest du unter members...


ich habs dir mal so geschrieben wie ich das meinte mit verwendung der stl...

C++:
#include <iostream>
#include <vector>
#include <string>

typedef struct{std::string name;int matrikelnummer;int note;}Klausurergebniss;

class KlausurergebnisDB{
    std::vector<Klausurergebniss> daten;
public:
    void add();
    void list();
    void loeschen();
             //und was auch imemr noch für funktionen
};

void KlausurergebnisDB::add(){
    Klausurergebniss temp;
    std::cout<<"name: ";
    std::cin>>temp.name;
    std::cout<<"mat: ";
    std::cin>>temp.matrikelnummer;
    std::cout<<"note: ";
    std::cin>>temp.note;
    daten.push_back(temp);
}


void KlausurergebnisDB::list(){
    for(std::vector<Klausurergebniss>::iterator i = daten.begin();i!=daten.end();++i)
        std::cout<<i->name<<"\t"<<i->matrikelnummer<<"\t"<<i->note<<std::endl;
}

void KlausurergebnisDB::loeschen(){
    int mat;
    std::cout<<"Bitte die zu loeschende Matrikelnummer eingeben: ";
    std::cin>>mat;
    for(std::vector<Klausurergebniss>::iterator i = daten.begin();i!=daten.end();++i)
        if(i->matrikelnummer==mat)daten.erase(i);
}

int main(){

KlausurergebnisDB myDB;

int end=0;
char wahl;
while(!end){
    std::cout<<"(1) Datensatz hinzufuegen\n";
    std::cout<<"(2) Liste anzeigen\n";
    std::cout<<"(3) Datensatz loeschen\n";
    std::cout<<"(4) Ende\n";
    std::cout<<"Ihre Wahl: ";
    std::cin>>wahl;
    
    if(wahl=='1') myDB.add();
    if(wahl=='2') myDB.list();
    if(wahl=='3') myDB.loeschen();
    if(wahl=='4') end=1;

}

return 0;
}



--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 18.12.2003 um 20:18 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
18.12.2003, 20:39 Uhr
~haribobär
Gast


Hab dir ne Mail geschickt.

das "include <vector>" kenne ich noch nicht,
deshalb darf ich das auch net benutzen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
18.12.2003, 20:41 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


geht auch ohne vector
dann könntest du eine kombination aus dem ersten und dem zweiten teil den ich dir gepostet habe verwenden.....
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
18.12.2003, 20:50 Uhr
derphilipder



@Windalf Weisst Du denn jetzt, was da der Fehler war?
--
Konfuzius says: "A man who goes to bed with an itchy asshole is a man who wakes up with stinky finger!"
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
18.12.2003, 20:54 Uhr
~haribobär
Gast


Das erste programm funktioniert ja so etwa wie ich mir das vorgestellt. habe.

Nur wenn ich das in mein Programm einsetze (das ich dir geschickt habe)bekomme ich halt diese Fehlermeldungen.

Die Funktion löschen ist wohl auch so ein Problem
Ich will nicht alles löschen sondern nur ein Datensatz.
Und dafür will ich dann zb einen neuen hinzufügen.


Du hast gestern gesagt du findest globale Variabeln net gut.
Kann man die Variabeln vielleicht auch in der main Funktion anlegen
und durch Pointerübergabe in die entsprechenden Funktionen übergeben.

Nur das mit dem "char name 16" muss bleiben.


Wie willst du denn die beiden kombinieren?
Bei dem Vektor Programm habe ich nicht viel verstanden.

Gruss Haribo
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: