Prüfung zweier Nummern
-
Der ganze Code:
class Book { public: void ISBN(int a, int b, int c, int d); void Titel(string name, string name2); void Autor(string autor); void Copyright(string name); void liehen(string name, string name2, string antwort); void geben(string name, string name2, string antwort, int a); Book(string name, string name2); int a2,b2,c2,d2; string Titel2(); string Titel3(){return name2;} string Autor2(){return autor;} private: int a,b,c,d; string name, name2, vorname,antwort,autor; }; Book::Book(string n, string n2):name(n),name2(n2) { if (n != n2) { cout << n << " " << n2 << endl;} else { cout << "Ungueltiger name!" << endl;} } void Book::liehen(string n, string n2, string an) { if (an == "ja" || an == "Ja") { cout << n << " " << n2 << " " << "ist ausgeliehen?" << " " << an << endl;} else { cout << "Das Buch sollte ausgeliehen sein!" << endl;} } void Book::geben(string n, string n2, string an, int aa) { if (an != "Montag " && an != "Dienstag" && an != "Mittwoch" && an != "Donnerstag" && an != "Freitag" && aa > 31) { cout << "Das ausgeliehen buch" << " " << "\"" << n << " " << n2 << "\"" << " " << "kommt am" << " " << an << " " << "dem" << " " << aa << " " << "zurueck." << endl;} else { cout << "Ungueltiger Tag oder Wochentag!" << endl;} } 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; } void Book::Autor(string autor) { cout << autor << endl; } void Book::Titel(string name, string name2) { cout << name << " " << name2 << endl; } string Book::Titel2() { return name; } bool operator==(const Book& New, const Book& New3) { return (New.a2 == New3.a2 && New.b2 == New3.b2 && New.c2 == New3.c2 && New.d2 == New3.d2); } bool operator!=(const Book& New, const Book& New3) { return!(New==New3); } ostream& operator<<(ostream& os, Book& New) { return os << New.Titel2() << " " << New.Titel3() << New.Autor2() << endl; } void f() { Book New("Das","Buch"); Book New2("Das","Das"); Book New3("Buch","Drei"); Book Test("Neues","Buch"); New.Titel("Das", "Buch"); New.Autor("Bill Johnson"); New.liehen("Das","Buch","Ja"); New2.liehen("Ein","Buch","Nein"); New.geben("Das","Buch","Montag",15); New2.geben("Ein","Buch","Samstag",30); Test.geben("Neues","Buch","Montag",56); New.ISBN(45,78,89,0); New2.ISBN(96,89,88,12); New3.ISBN(45,45,56,0); operator==(New,New3); operator!=(New,New3); operator<<(cout,New); } int main() { f(); keep_window_open(); return 0; }
-
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.