Prüfung zweier Nummern



  • void Book::ISBN(int aa, int bb, int cc, int dd)
    {
        if ( aa < 0 || bb < 0 || cc < 0 || dd != 0) {
            cout << "Sorry das ist keine ISBN!" << endl;}
        else {
            cout << aa << "-" << bb << "-" << cc << "-" << dd << endl;}
    
        a2 == aa;           //  Variablen in der Klasse speichern
        b2 == bb;
        c2 == cc;
        d2 == dd;
    }
    

    Das ist keine Zuweisung, sondenr ein Vergleich. Richtig wäre es mit =



  • OK da ist ein Fehler.



  • Aber wieso wird der string in Autor2 nicht ausgegeben?



  • Weil die Funktion Autor keinen String speichert überall der selbe Fehler.



  • #include <iostream>
    #include <string>
    #include <sstream>
    
    using namespace std;
    
    enum Wochentag
    {
    	MONTAG,
    	DIENSTAG,
    	MITTWOCH,
    	DONNERSTAG,
    	FREITAG,
    	SAMSTAG,
    	SONNTAG
    };
    
    //DATUM
    class Datum
    {
    public:
    	Datum(int tag, int monat, int jahr, Wochentag wochentag)
    		:tag(tag), monat(monat), jahr(jahr), wochentag(wochentag){};
    
    	friend ostream& operator<<(ostream& out, const Datum& val);
    
    private:
    	int tag, monat, jahr;
    	Wochentag wochentag;
    };
    
    ostream& operator<<(ostream& out, const Datum& val)
    {
    	switch(val.wochentag)
    	{
    	case MONTAG:
    		out << "Montag ";
    		break;
    	case DIENSTAG:
    		out << "Dienstag ";
    		break;
    	case MITTWOCH:
    		out << "Mittwoch ";
    		break;
    	case DONNERSTAG:
    		out << "Donnerstag ";
    		break;
    	case FREITAG:
    		out << "Freitag ";
    		break;
    	case SAMSTAG:
    		out << "Samstag ";
    		break;
    	case SONNTAG:
    		out << "Sonntag ";
    		break;
    	}
    
    	out << "den " << val.tag << "." << val.monat << "." << val.jahr;
    
    	return out;
    }
    
    //ISBN
    #define MAX_ISBN 4
    
    class Isbn
    {
    public:
    	Isbn(const int myisbn[MAX_ISBN])
    	{
    		for(int i = 0; i < MAX_ISBN; ++i)
    			isbn[i] = myisbn[i];
    	}
    
    	bool operator!=(const Isbn& rhs);
    	bool operator==(const Isbn& rhs);
    	friend ostream& operator<<(ostream& out, const Isbn& val);
    
    private:
    	int isbn[MAX_ISBN];
    };
    
    //ISBN METHODEN
    ostream& operator<<(ostream& out, const Isbn& val)
    {
    	out << val.isbn[0] << "-" << val.isbn[1] << "-" << val.isbn[2] << "-" << val.isbn[3];
    	return out;
    }
    
    bool Isbn::operator==(const Isbn& rhs)
    {
    	for(int i = 0; i < MAX_ISBN; ++i)
    		if(isbn[i] != rhs.isbn[i])
    			return false;
    
    	return true;
    }
    
    bool Isbn::operator!=(const Isbn& rhs) 
    { 
        return !(*this == rhs); 
    } 
    
    //BUCH
    class Buch 
    { 
    public: 
        Buch(const string& name, const string& vorname, Isbn isbn)
    		:name(name), vorname(vorname), isbn(isbn), ausgeliehen(false), datum(0,0,0,MONTAG){}
    
    	void Ausleihen(const Datum& ausleihdatum){ausgeliehen = true; datum = ausleihdatum;}
    	bool Istgeliehen(){return ausgeliehen;}
    	void Zurueckgeben(){ausgeliehen = false;}
    
    	bool operator!=(const Buch& rhs);
    	bool operator==(const Buch& rhs);
    	friend ostream& operator<<(ostream& out, const Buch& val);
    
    private: 
    	Isbn isbn;
        string name, vorname;
    	bool ausgeliehen;
    	Datum datum;
    }; 
    
    //BUCH METHODEN
    ostream& operator<<(ostream& out, const Buch& val)
    {
    	out << "Autorname: "		<< val.name
    		<< "\nAutorvorname: "	<< val.vorname
    		<< "\nBuch-ISBN: "		<< val.isbn
    		<< "\nAusgeleihen: ";
    
    	if(val.ausgeliehen)		out << "Am " << val.datum;
    	else					out << "Nein";
    
    	return out;
    }
    
    bool Buch::operator==(const Buch& rhs) 
    { 
    	if(isbn != rhs.isbn || name != rhs.name || vorname != rhs.vorname)
    		return false;
    
        return true; 
    } 
    
    bool Buch::operator!=(const Buch& rhs) 
    { 
        return !(*this == rhs); 
    } 
    
    //MAIN
    int main() 
    { 
    	int meineisbn[] = {45,67,23,12};
    	Buch buch("Mustermann", "Max", Isbn(meineisbn)); 
    	cout << buch << "\n\n";
    
    	buch.Ausleihen(Datum(15,7,2010, FREITAG));
    	cout << buch;
    }
    


  • Ok wieder der selbe Fehler.



  • Die nächste Aufgabe ist das man einen Aufzählungstyp erzeugen soll. Das wurde auch gemacht und es wurden auch die Werte reingeschrieben. Die Änderungen wurden am Konstruktor gemacht, doch der Compiler sagt: Syntaxfehler: Bezeichner 'Genre', Überladene Memberfunktion nicht in 'Book' gefunden.

    enum Genre{
    Roman , Sachbuch, Zeitschrift, Biografie, Kinder
    };
    
    Book(string name, string name2, Genre g);
    
    Book::Book(string n, string n2, Genre gg):name(n),name2(n2)
    {
    	if (n != n2) {
    		cout << n << " " << n2 << endl;} 
    	else {
    		cout << "Ungueltiger name!" << endl;}
    }
    
    Book New("Das","Buch",Book::Sachbuch);
    

    Es wurde gelöst.



  • So die jetzt ein anderes Problem, die geben Funktion hat einen Fehler. Es soll nur Wochentage akzeptieren und das Datum darf nicht höher als 31 sein. New.geben wird ausgegeben was OK ist weil ja Wochentag und Datum stimmen. New2.geben wird ausgegeben das ist ein Fehler weil der Wochentag Samstag ist aber das Datum ist der 30-ste. Test.geben wird nicht ausgegeben was wiederum OK ist weil der Wochentag mit Montag richtig ist nur das Datum ist mit dem 56 falsch.

    void Book::geben(string b, string b2, string an, int aa)
    {
    	if (an == "Montag " || an == "Dienstag" || an == "Mittwoch" || an == "Donnerstag" || an == "Freitag" && aa <= 32) {
    		cout << "Das ausgeliehen buch" <<  " "  << "\"" << b << " " << b2 << "\"" << " " << "kommt am" << " " << an <<  " " << "dem" << " " << aa  << " " << "zurueck." << endl;}
    	else {
    		cout << "Ungueltiger Tag oder Wochentag!" << endl;}
    }
    
    New.geben("Das","Buch","Montag",15);
    New2.geben("Ein","Buch","Samstag",30);
    Test.geben("Neues","Buch","Montag",56);
    


  • Klammern setzen, ist wie Mathe...

    if ((an == "Montag" || an == "Dienstag" || an == "Mittwoch" || an == "Donnerstag" || an == "Freitag") && aa <= 31 && aa >= 1) {
    


  • Die nächste Aufgabe lautet: das man eine Library klasse anfertigen soll, was auch gemacht wurde, und diese klasse soll Vektoren von Book und Patron beinhalten. Wenn ich das richtig verstehe dann muss diese Vektoren von Library auf die Vektoren in Book und Patron zugreifen oder versteh ich das falsch.


Anmelden zum Antworten