Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » C++ Methode Problem

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 <
000
05.11.2017, 17:02 Uhr
Progger33



https://www.pic-upload.de/view-34238800/g1.png.html

https://www.pic-upload.de/view-34238801/g2.png.html
Hallo alle zusammen habe gerade bei dieser Aufgabe die find Event Methode bei der i) zu implementieren .


C++:
#ifndef CEvent_h
#define CEvent_h
#include<iostream>
#include<string>
using namespace std;
enum eTypes{  NOTYPE,THEATER,ROCKPOP,SCIENCE,NUMTYPES};

class CEvent{
private:
    eTypes m_type;
    string m_name;
    string m_datetime;
    string m_location;
    unsigned long m_maxSeats;
    unsigned long m_bookedSeats = 0.0;
    float m_pricePerTicket;

public:

    CEvent(eTypes type = NOTYPE, string name = "",string datetime ="",string location = "", unsigned long maxSeats = 0, float pricePerTicket =0.0, unsigned long bookedSeats= 0.0);
    eTypes getType();
    string getLocation();
    unsigned long getNumAvailSeats();
    void print(unsigned long numSeats =0);
    bool book (unsigned long numSeats );
    string getTypeasString(eTypes type);

};





Ceventcpp


C++:
#include <stdio.h>
#include "CEvent.h"
#include<iostream>
using namespace std;

CEvent::CEvent(eTypes type,string name,string datetime,string location,unsigned long maxSeats,float pricePerTicket, unsigned long bookedSeats){

    m_type = type;
    m_name = name;
    m_maxSeats = maxSeats;
    m_location = location;
    m_bookedSeats = bookedSeats;

    if(m_maxSeats>= m_bookedSeats){

          m_bookedSeats = m_maxSeats;
        }
    else{

    }
    if(m_pricePerTicket>0.00){

        m_pricePerTicket = pricePerTicket;
    }


}
eTypes CEvent::getType(){

    return m_type;


}
string CEvent::getLocation(){

    return m_location;
}
unsigned long CEvent::getNumAvailSeats(){

    return m_maxSeats-m_bookedSeats;


}

void CEvent::print(unsigned long numSeats){

    cout << "Objektinfo:" << "" <<getTypeasString(m_type)<< " " << m_name << "/ " << m_location <<":" << m_datetime << " Einzelpreis" << ":" << m_pricePerTicket<< "$";

if(numSeats> 0){

    cout << "Buchungsinfo:"<< m_pricePerTicket << "x" << getTypeasString(m_type) <<m_name <<"/" << m_location << ":"<< m_datetime << "Gesamtpreis:" << m_pricePerTicket << "$";


}
}

string CEvent::getTypeasString(eTypes type){
    switch(type){
    case THEATER: return "THEATER";
    case ROCKPOP: return "ROCK/POP";
    case SCIENCE: return "SCIENCE";

    default: return "Unbekannter Typ";


    }


}
bool CEvent::book (unsigned long numSeats ){
    if(m_maxSeats> m_bookedSeats){

        m_bookedSeats++;
        cout << "Buchungsinfo:"<< m_pricePerTicket << "x" << getTypeasString(m_type) <<m_name <<"/" << m_location << ":"<< m_datetime << "Gesamtpreis:" << m_pricePerTicket << "$";
        return true;

    }
    if(m_maxSeats < m_bookedSeats){

        cout << "Nicht mehr genuegend Plätze verfügbar" << endl;
                return false;
    }

}






CEventDB

C++:
#include<iostream>
#include<string>
#include "CEvent.h"
using namespace std;

class CEventDB{

private:
    CEvent* m_pEvents;
    int m_maxEvents;
    int m_curEvents = 0;
public:
    CEventDB(int maxEvents = 10,int curEvents=0);
    ~CEventDB();
    void print();
    bool operator+= (const CEvent& rop);
    int bookEvent(unsigned long numSeats, int pos);
    int findEvent(int posStart, eTypes type , string location, CEvent& event);

};


cpp


C++:
#include<iostream>
#include<string>
#include"CEventDB.h"

using namespace std;


CEventDB::CEventDB(int maxEvents, int m_curEvents ){
    m_maxEvents = maxEvents;


    if(m_maxEvents> 0){

        m_maxEvents = maxEvents;
    }
    if(m_curEvents <m_maxEvents ){

        m_curEvents = m_maxEvents;
    }
    for (int var = 0; var < m_maxEvents; var++) {
    m_pEvents = new CEvent;
    m_pEvents++;
    }


}

CEventDB::~CEventDB(){

    delete m_pEvents;
}

void CEventDB::print(){
    if(m_curEvents ==0){
        cout << " Leere Datenbank" << endl;
    }
    for(int i = 0; i<m_curEvents ; i++){
        m_pEvents[i].print() ;
    }
}
bool CEventDB::operator+= (const CEvent& rop){
    if(m_curEvents <m_maxEvents){
    m_pEvents[m_curEvents] = rop;
            m_curEvents++;
            return true;
    }

    else{

        return false;
    }



}
int CEventDB::bookEvent(unsigned long numSeats, int pos){
    m_pEvents[pos].book(numSeats);
    if(pos>m_maxEvents){
        cout << pos << "Ungueltig"<< endl;
        return false;

    }

}

int CEventDB::findEvent(int posStart, eTypes type , string location, CEvent& event){

    for(int i =0;i<m_maxEvents; i++){
        m_pEvents[i]=posStart;
        i++;

        


    }
}





Soll ich in der find Methode eine eine if Bedingung einbauen und:

if(posStart==type && postStart == location )?

Aber wie ich weiter vorgehen soll keine Ahnung

Dieser Post wurde am 05.11.2017 um 17:04 Uhr von Progger33 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
07.11.2017, 09:16 Uhr
ao

(Operator)


Eine Bedingung musst du einbauen, ja. Aber überleg nochmal genau, was du womit vergleichen sollst. Mit posStart vergleichen ist falsch.

Du sollst in einer Schleife die gespeicherten Events abarbeiten und deren Eigenschaften (Typ, Location) prüfen. Und posStart spielt irgendwie in dieser Schleife eine Rolle.

So, genug verraten. Du willst Ingenieur werden. Der Rest deines Berufslebens wird daraus bestehen, Aufgaben zu verstehen und Lösungen zu finden. Gewöhn dich schon mal dran.

Übrigens glaube ich, dass der Konstruktor von CEvent m_bookedSeats falsch initialisiert.
Und dass der Konstruktor von CEventDB m_maxEvents und m_curEvents falsch initialisiert.
Prüf das nochmal nach.

Und CEventDB::bookEvent macht auch Blödsinn. Event::book wird zwar aufgerufen, aber ob das erfolgreich ist, wird nicht geprüft. Stattdessen wird irgendein Unsinn geprüft - wenn pos an dieser Stelle zu groß ist, dann ist die Derefenzierung von m_Events[pos] vorher schon in die Hose gegangen und das Programm ist (hoffentlich) abgestürzt.

Und warum hat der CEvent-Konstruktor diese ganzen Null-Default-Argumente? Welchen Sinn hat ein Event-Objekt, das damit konstruiert wurde? Es gibt keine Location und null Plätze und die Tickets kosten null Euro. Und es gibt noch nicht mal Setter-Methoden, mit denen diese Daten nachträglich geändert werden können. Ein Default-konstruiertes Event-Objekt ist damit auf Lebenszeit zur Sinnlosigkeit verdammt.

Manchmal kommen Studenten zu der "Einsicht", dass sie jede Membervariable über den Konstruktor parametrierbar machen wollen und dass sie auch zu jedem Argument einen Defaultwert mitgeben wollen. Das ist Quatsch. Mach dir bitte klar, dass du damit ein ganzes Bündel von Konstruktor-Überladungen erschaffst, die du alle austesten musst. Es ist nicht erstrebenswert, den größtmöglichen Reichtum an Overloads zu haben. Man sollte die Overloads definieren, die man sinnvoll gebrauchen kann, aber mehr auch nicht.

Manche Member (z.B. m_curEvents) werden immer auf 0 initialisiert (Datenbank ist anfangs leer). Die müssen überhaupt nicht als Konstruktor-Argumente auftauchen. Und für manche Member (z.B. numSeats oder ticketPrice) gibt es keinen sinnvollen Defaultwert. Man muss eben für jedes Event angeben, wieviele Plätze der Saal hat und was ein Ticket kostet.

Dieser Post wurde am 07.11.2017 um 09:32 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
13.11.2017, 22:07 Uhr
Progger33




C++:

#ifndef CEvent_h
#define CEvent_h
#include<iostream>
#include<string>
using namespace std;
enum eTypes{  NOTYPE,THEATER,ROCKPOP,SCIENCE,NUMTYPES};

class CEvent{
private:
    eTypes m_type;
    string m_name;
    string m_datetime;
    string m_location;
    unsigned long m_maxSeats;
    unsigned long m_bookedSeats = 0.0;
    float m_pricePerTicket;

public:

    CEvent(eTypes type = NOTYPE, string name = "",string datetime ="",string location = "", unsigned long maxSeats = 0, float pricePerTicket =0.0, unsigned long bookedSeats= 0.0);
    eTypes getType();
    string getLocation();
    unsigned long getNumAvailSeats();
    void print(unsigned long numSeats =0);
    bool book (unsigned long numSeats );
    string getTypeasString(eTypes type);

};




#endif /* CEvent_h */





C++:
#include <stdio.h>
#include "CEvent.h"
#include<iostream>
using namespace std;

CEvent::CEvent(eTypes type,string name,string datetime,string location,unsigned long maxSeats,float pricePerTicket, unsigned long bookedSeats){

    m_type = type;
    m_name = name;
    m_maxSeats = maxSeats;
    m_location = location;
    m_bookedSeats = bookedSeats;

    if(m_maxSeats>= m_bookedSeats){

          m_bookedSeats = m_maxSeats;
        }
    else{

    }
    if(m_pricePerTicket>0.00){

        m_pricePerTicket = pricePerTicket;
    }


}
eTypes CEvent::getType(){

    return m_type;


}
string CEvent::getLocation(){

    return m_location;
}
unsigned long CEvent::getNumAvailSeats(){

    return m_maxSeats-m_bookedSeats;


}

void CEvent::print(unsigned long numSeats){

    cout << "Objektinfo:" << "" <<getTypeasString(m_type)<< " " << m_name << "/ " << m_location <<":" << m_datetime << " Einzelpreis" << ":" << m_pricePerTicket<< "$";

if(numSeats> 0){

    cout << "Buchungsinfo:"<< m_pricePerTicket << "x" << getTypeasString(m_type) <<m_name <<"/" << m_location << ":"<< m_datetime << "Gesamtpreis:" << m_pricePerTicket << "$";


}
}

string CEvent::getTypeasString(eTypes type){
    switch(type){
    case THEATER: return "THEATER";
    case ROCKPOP: return "ROCK/POP";
    case SCIENCE: return "SCIENCE";

    default: return "Unbekannter Typ";


    }


}
bool CEvent::book (unsigned long numSeats ){
    if(m_maxSeats> m_bookedSeats){

        m_bookedSeats++;
        cout << "Buchungsinfo:"<< m_pricePerTicket << "x" << getTypeasString(m_type) <<m_name <<"/" << m_location << ":"<< m_datetime << "Gesamtpreis:" << m_pricePerTicket << "$";
        return true;

    }
    if(m_maxSeats < m_bookedSeats){

        cout << "Nicht mehr genuegend Plätze verfügbar" << endl;
                return false;
    }

}







C++:
/*
* CEventDB.h
*
*  Created on: 03.11.2017
*      Author: Medion
*/

#include<iostream>
#include<string>
#include "CEvent.h"
using namespace std;

class CEventDB{

private:
    CEvent* m_pEvents;
    int m_maxEvents;
    int m_curEvents = 0;
public:
    CEventDB(int maxEvents = 10);
    ~CEventDB();
    void print();
    bool operator+= (const CEvent& rop);
    int bookEvent(unsigned long numSeats, int pos);
    int findEvent(int posStart, eTypes type , string location, CEvent& event);

};







C++:

#include<iostream>
#include<string>
#include"CEventDB.h"

using namespace std;


CEventDB::CEventDB(int maxEvents ){

     m_curEvents = 0;

    if(maxEvents >= 10){

        m_maxEvents = maxEvents;
    }
    else
    {
        m_maxEvents = 10;
    }



    m_pEvents = new CEvent[m_maxEvents];


}

CEventDB::~CEventDB(){

    delete [] m_pEvents;
}

void CEventDB::print(){
    if(m_curEvents ==0){
        cout << " Leere Datenbank" << endl;
    }
    for(int i = 0; i<m_curEvents ; i++){
        m_pEvents[i].print() ;
        cout << endl;
    }
}
bool CEventDB::operator+= (const CEvent& rop){
    if(m_curEvents <m_maxEvents){
    m_pEvents[m_curEvents] = rop;
            m_curEvents++;
            return true;
    }

    else{

        return false;
    }



}
int CEventDB::bookEvent(unsigned long numSeats, int pos){
    m_pEvents[pos].book(numSeats);
    if(pos>m_maxEvents){
        cout << pos << "Ungueltig"<< endl;
        return false;

    }

}

int CEventDB::findEvent(int posStart, eTypes type , string location, CEvent& event){
    if(posStart >= 0 && posStart<m_maxEvents){

        for(int i =posStart;i<m_maxEvents; i++){
            if(m_pEvents[i].getType() == type &&m_pEvents[i].getLocation() == location){
                event = m_pEvents[i];
                return i;




            }
        }

        return -1;
    }
    else{

        return -1;
    }



}





Wie soll ich die Methode bookEvent genau verändern ?

Das verstehe ich nicht?
https://www.pic-upload.de/view-34291073/x.png.html

Was wollen die bei der j) genau von mir?


main:




C++:
#include<iostream>
#include<string>
#include "CEvent.h"
#include"CEventDB.h"
using namespace std;

int main(){

    CEvent e1(THEATER,"Aida", "23.7.14 20:00","Orangerie",500.00,25.00);
    CEvent e2(THEATER,"LLL", "23.7.14 20:00","Orangerie",500.00,25.00);

    //e1(THEATER,"Aida", "23.7.14 20:00","Orangerie",500.00,25.00);
e1.book(75);

CEventDB DBE(10);

DBE+=e1;
DBE+=e2;
DBE.print();
CEvent e3(THEATER,"", "","",0.00,0.00);

for(int i =0; i<10;i++){
    int wert = DBE.findEvent(0,eTypes::SCIENCE,"h-da", e3);

if(wert == -1){

    break;
}
else{

    cout << e3.getType() << endl;
}


}
cout << "OK"<< endl;
}










 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


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: