vector Objeke automatisiert erzeugen



  • Hallo 😋

    versuche gerade eine Buchverwaltung zu schreiben.
    habe zwei Klassen Buch und Buchverwaltung mit

    vector<Buch>buecher;
    

    .
    Hänge an den letzen Menüpunkt.
    "Testdaten erzeugen".
    Aufgabenstellung zu diesen Punkt:
    3. Testdaten erzeugen
    Es werden automatisiert mindestens 5 Buch-Objekte erzeugt und abgespeichert.
    Mir ist nicht klar was in dem Fall genau unter "automatisiert" gemeint ist.

    Mein Ansatz wäre:

    void Buchverwaltung::testBook(){
          m_buecher.push_back(Buch("Das verlorene Symbol" , "Dan Brown" , 2009, 200);
          /*   nach den gleichen Prinzip weitere 4  */
    }
    

  • Global Moderator

    Ja.



  • danke. Allerdings wenn ich es im main() aufrufe bekomme ich nichts in der Konsole angezeigt 😕 🙄



  • Es steht in Deinem Beitrag auch kein Code von dem man eine Ausgabe erwarten würde.



  • Swordfish schrieb:

    Es steht in Deinem Beitrag auch kein Code von dem man eine Ausgabe erwarten würde.

    ich mach es über :

    void Buchverwaltung::testBook(){
        for(int i= 0; i < m_buecher.size(); i++){
    
            m_buecher.push_back(Buch("das verlorene Symbol", "Dan Brown", 2009, 200, ROMAN));
            m_buecher.push_back( Buch("Frieden Und Krieg", "Leo Tolstoi", 1945, 200, SACHBUCH));
            cout << m_buecher[i]<< "" << endl;  
        }
    
    }
    

    funktioniert aber leider nicht.

    im main rufe ich die Funktion :

    int main(){
    
    Buchverwaltung bu;
    bu.testBook();
    
    }
    

    Was mache ich falsch? 🙄



  • helenchen schrieb:

    for(int i= 0; i < m_buecher.size(); i++){
    

    Was gibt m_buecher.size() wohl zurück, wenn der Vektor leer ist und wie sieht es dann mit der Bedingung i < m_buecher.size() für i = 0 aus.

    Tip: Du brauchst für das einfügen mit push_back() keine Schleife.



  • Swordfish schrieb:

    helenchen schrieb:

    for(int i= 0; i < m_buecher.size(); i++){
    

    Was gibt m_buecher.size() wohl zurück, wenn der Vektor leer ist und wie sieht es dann mit der Bedingung i < m_buecher.size() für i = 0 aus.

    Tip: Du brauchst für das einfügen mit push_back() keine Schleife.

    m_buecher.size()
    

    gibt die lenge des vectors<Buch> buecher aus.
    So leer ist er nicht. Ich habe davor durch die Funktion

    addBook()
    

    alle nötigen Details beim Nutzer abgefragt und diese im vector gespeichert



  • helenchen schrieb:

    m_buecher.size()
    

    gibt die lenge des vectors<Buch> buecher aus.
    So leer ist er nicht. Ich habe davor durch durch die Funktion

    addBook()
    

    alle nötigen Details beim Nutzer abgefragt und diese im vector gespeichert

    widerspricht direkt

    helenchen schrieb:

    int main(){
    
    Buchverwaltung bu;
    bu.testBook();
    
    }
    

    Zeig am besten vollständigen Quellcode.



  • #ifndef BUCHVERWALTUNG_H
    #define BUCHVERWALTUNG_H
    #include "buch.h"
    #include <vector>
    #include <iostream>
    using namespace std;
    
    class Buchverwaltung{
    
    public:
        Buchverwaltung();
        void showAllBooks();
        void addBook();
        void testBook();
        virtual ~Buchverwaltung();
    
    private:
        string titel;// titel
        string autor;// autor
        int jahr;// jahr
        int seiten;// Seitenanzahl
        Kategorie m_k;
        bool exists(string titel);
        vector <Buch> m_buecher;
    };
    
    #endif /* BUCHVERWALTUNG_H */
    
    #include "buchverwaltung.h"
    #include <vector>
    #include <string>
    #include <iostream>
    
    using namespace std;
    
    Buchverwaltung::Buchverwaltung(){
    
    }
    bool Buchverwaltung::exists(string titel){
        for( Buch& b: m_buecher){
            if(titel == b.getTitel())
                return true;
        }
        return false;
    }
    
    void Buchverwaltung::addBook(){
    
        int x;
        cout << "Bitte Titel eingeben: ";
        cin >> titel;
        if(exists(titel)){
            cout << "\nTitel bereits vorhanden ";
            return;
        }
        cout << "\nBitte den Autor eingeben: ";
        cin >> autor ;
        cout <<"\nBitte das Jahr eingeben: ";
        cin >> jahr;
        cout << "\nBitte die Seitenanzahl eingeben: ";
        cin >> seiten;
        cout << "\nBitte die Kategorie als Zahl eingeben: (0: SACHBUCH, 1: RATGEBER, 2: FANTASY, 3: SCIFI, 4: ROMAN, 5: KRIMI,6: OTHER): ";
        cin >> x;
        if(x <= 6){
             m_k = static_cast<Kategorie>(x);
          switch(m_k)
        {
    
            case 0:   cout << "\n SACHBUCH\n";
    
                break;
            case 1:   cout << "\n RATGEBER\n";
    
                break;
            case 2:   cout << "\n FANTASY\n";
    
                break;
            case 3:  cout << "\n SCIFI\n";
    
                break;
            case 4:  cout << "\n ROMAN\n";
    
                break;
            case 5: cout << "\n KRIMI\n";
    
                break;
            case 6: cout << "\n OTHER\n";
    
                break;  
        }
    
        }
    
        m_buecher.push_back(Buch(titel, autor, jahr, seiten, m_k));
    }
    
    void Buchverwaltung::showAllBooks(){
        for(int i = 0; i < m_buecher.size(); i++){
            cout << "Titel: " << m_buecher[i].getTitel() << endl;
            cout << "Autor: " << m_buecher[i].getAutor() << endl;
            cout << "Jahr: "  << m_buecher[i].getJahr()  << endl;
            cout << "Seitenanzahl: " << m_buecher[i].getSeiten() << endl;
            cout << "Kategorie: " << m_buecher[i].getKategorie() << endl;
        }
    }
    void Buchverwaltung::testBook(){
    
            m_buecher.push_back(Buch("das verlorene Symbol", "Dan Brown", 2009, 200, ROMAN));
            m_buecher.push_back( Buch("Frieden Und Krieg", "Leo Tolstoi", 1945, 200, SACHBUCH));
            cout << m_buecher[i]<< "" << endl;  
    
    }
    
    Buchverwaltung::~Buchverwaltung(){
    
    }
    
    #include "buchverwaltung.h"
    #include <cstdlib>
    #include <vector>
    #include <iostream>
    using namespace std;
    
    int main() {
        Buchverwaltung bu;
        char a;
    
        do{
        cout << "\n************Buchverwaltung**********************\n";
        cout << "\n 1. (A)lle Buecher anzeigen\n";
        cout << "\n 2. (B)uch hinzufuegen\n";
        cout << "\n 3. (T)estdaten erzeugen\n";
        cout << "\n 4. (P)rogramm beenden\n" << endl;
    
        cout << "Bitte waehlen Sie ein Menuepunkt aus..." << endl;
        cin >> a;
    
        switch(a){
            case '1':
            case 'A':
                cout << "Sie haben Menuepunkt 1 bzw (A) ausgewaehlt " << endl;
                bu.showAllBooks();
                break;
            case '2':
            case 'B':
                cout << "Sie haben Menuepunkt 2 bzw (B) ausgewaehlt " << endl;
                 bu.addBook();
                 break;
            case '3':
            case 'T':
                cout << "Sie haben Menuepunkt 3 bzw (T) ausgewaehlt " << endl;
                bu.testBook();
                break;
            case '4':
            case 'P':
                cout << "Programm beenden" << endl;
                break;
        }      
    
        }while(a != '4'|| a != 'P');
    
        return 0;
    }
    


  • Swordfish schrieb:

    Zeig am besten ===>> vollständigen <<=== Quellcode.

    🙄



  • Swordfish schrieb:

    Swordfish schrieb:

    Zeig am besten ===>> vollständigen <<=== Quellcode.

    🙄

    Hier ist noch die Klasse Buch

    #ifndef BUCH_H
    #define BUCH_H
    
    #include <string>
    using namespace std;
    
    enum Kategorie{
            SACHBUCH , RATGEBER, FANTASY, SCIFI, ROMAN, KRIMI, OTHER
        };
    
    class Buch{
    
    public:
    
        Buch();
        Buch(string titel, string autor, int jahr, int seiten, Kategorie k);
        void setTitel(string titel);
        string getTitel() const;
        void setAutor(string autor);
        string getAutor() const;
        void setJahr(int jahr);
        int getJahr() const;
        void setSeiten(int seiten);
        int getSeiten() const;
        void setKategorie(Kategorie k);
        string getKategorie();
        virtual ~Buch();
    
    private:
       string m_titel;
       string m_autor;
       int m_jahr;
       int m_seiten;
       Kategorie m_k;
    
    };
    
    #endif /* BUCH_H */
    
    #include "buch.h"
    #include <iostream>
    using namespace std;
    
    Buch::Buch(){
    
    }
    Buch::Buch(string titel, string autor, int jahr, int seiten, Kategorie k)
        :m_titel(titel), m_autor(autor), m_jahr(jahr), m_seiten(seiten), m_k(k)
    {  
    }
    
    void Buch::setTitel(string titel){
        m_titel = titel;
    }
    
    string Buch::getTitel() const{
        return m_titel;
    }
    
    void Buch::setAutor(string autor){
        m_autor = autor;
    }
    
    string Buch::getAutor() const{
        return m_autor;
    }
    
    void Buch::setJahr(int jahr){
        m_jahr = jahr;
    }
    
    int Buch::getJahr() const{
        return m_jahr;
    }
    
    void Buch::setSeiten(int seiten){
        m_seiten = seiten;
    }
    
    int Buch::getSeiten() const{
        return m_seiten;
    }
    void Buch::setKategorie(Kategorie k){
        switch(k)
        {
            case SACHBUCH:     cout << "/n Sachbuch";
                break;
            case RATGEBER:     cout << "/n Ratgeber";
                break;
            case FANTASY:      cout << "/n Fantasy";
                break;
            case SCIFI:        cout << "/n SciFi";
                break;
            case ROMAN:        cout << "/n Roman";
                break;
            case KRIMI:        cout << "/n Krimi" ;
                break;
            case OTHER:        cout << "/n Other";
                break;
        }
        m_k = k;
    }
    string Buch::getKategorie(){
        switch(m_k){
    
            case SACHBUCH:     return "Sachbuch"; 
            case RATGEBER:     return "Ratgeber"; 
            case FANTASY:      return "Fantasy"; 
            case SCIFI:        return "SciFi" ; 
            case ROMAN:        return "Roman"; 
            case KRIMI:        return "Krimi"; 
            case OTHER:        return "Other"; 
    
        }
    
    }
    Buch::~Buch(){
    
    }