//endrer info etter type (1=annkomst, 2=avreise, 3 = begge) void Hotell::endre(int type) { bool funnet = false; //er rommet funnet Rom* tempRom; List* tempList; Reservasjon* tempRes; string eier = les("Romeier:"); int origAnkomst = getdate("\nOriginal ankomst", timer.hent_dato()); for (int i = 0; i < 3; i++) { //for alle rom for (int j = 1; j <= rom[i]->no_of_elements(); j++) { tempRom = (Rom*)rom[i]->remove_no(j); //henter listen over reservasjoner. tempList = (List*)tempRom->getlist(); //alle reservasjonene til ett rom. for (int k = 1; k <= tempList->no_of_elements(); k++) { tempRes = (Reservasjon*)tempList->remove_no(k); //hvis det er en reservasjon for dagens dato. if (origAnkomst == tempRes->getAnkomst()) { funnet = true; cout << "\nRomnummer: " << tempRom->getid() << endl; tempRes->display(false); if (confirm("\nVil du endre denne reservasjonen?")) { if (type == 1 || type == 3) { //endrer avreisen tempRes->setAnkomst(getdate("\nNy ankomst", timer.hent_dato())); } if (type == 2 || type == 3) { //endrer avreisen tempRes->setAvreise(getdate("\nNy avreise", timer.hent_dato())); } } } //setter tilbake tempList->add(tempRes); tempRom->replaceList(tempList); } rom[i]->add(tempRom); } } if (!funnet) { cout << "\nReservasjon ikke funnet" << endl; } }
void Rom::reservationByName(std::string name, int action) { for (int i = 1; i <= Reservations->no_of_elements(); i++) { Reservasjon* temp = (Reservasjon*) Reservations->remove_no(i); if (temp->sameNameAsReservation(name)) { temp->display(); // If this method was called with action set to REMOVE, // ask the user whether or not to remove the reservation. if(action == REMOVE && readChar("Delete reservation?", 'y','n') == 'y') { Reservations->destroy(temp->getArrival()); } // If the action is set to CHECKIN, and today is the expected arrival date, and the user answers "y" to "Check-in?", // then set checkin timestamp to current datetime by passing no parameters to setCheckin. else if(action == CHECKIN && temp->getArrival() == tid.hent_dato() && readChar("Check-in?",'y','n') == 'y') { temp->setCheckin(); Reservations->add(temp); } else Reservations->add(temp); } else { Reservations->add(temp); } } }
/****************************************************************************** name: void listReservations description: Lists all reservations for this object parameters: n/a returns: n/a ******************************************************************************/ void Rom::listReservations() { for (int i = 1; i <= Reservations->no_of_elements(); i++) { Reservasjon* temp = (Reservasjon*) Reservations->remove_no(i); Reservations->add(temp); temp->display(); } }
void Hotell::displayOkkupant() { Rom* tempRom; List* tempList; Reservasjon* tempRes; bool funnetNr = false; bool funnetRes = false; int romNr; cout << "Ronmummer: "; cin >> romNr; //for alle typer rom for (int i = 0; i < 3; i++) { //for alle rom for (int j = 1; j <= rom[i]->no_of_elements(); j++) { tempRom = (Rom*)rom[i]->remove_no(j); rom[i]->add(tempRom); if (tempRom->getid() == romNr) { funnetNr = true; //henter listen over reservasjoner. tempList = (List*)tempRom->getlist(); //alle reservasjonene til ett rom. for (int k = 1; k <= tempList->no_of_elements(); k++) { tempRes = (Reservasjon*)tempList->remove_no(k); tempList->add(tempRes); //hvis det er en reservasjon for dagens dato. if (timer.hent_dato() <= tempRes->getAvreise() && timer.hent_dato() >= tempRes->getAnkomst()) { funnetRes = true; tempRes->display(true); } } } } } //hvis rommet eller reservasjonen ikke er funnet if (!funnetNr) { cout << "Romnummer ikke funnet" << endl; } else if (!funnetRes) { cout << "Ingen reservasjon i dag" << endl; } }
void Hotell::avbestille(string txt){ Rom* tempRom; List *tempList; Reservasjon *tempRes; //Alle romtypene for(int x = 0; x < 3; x++){ //alle rommene for (int y = 1; y <= rom[x]->no_of_elements(); y++){ //henter ut rom. tempRom = (Rom*)rom[x]->remove_no(y); rom[x]->add(tempRom); //henter listen over reservasjoner. tempList = (List*)tempRom->getlist(); //alle reservasjonene til ett rom. for (int z = 1; z <= tempList->no_of_elements(); z ++){ //henter ut reservasjonen tempRes = (Reservasjon*)tempList->remove_no(z); //dersom det stemmer if (!tempRes->compNavn(txt)){ //skriver ut reservasjonen og spør om den skal fjernes. tempRom->display(false); tempRes->display(false); if(!confirm("\nVil du fjerne?")){ tempList->add(tempRes); } //dersom det fjernes minker z, for å kompensere for //fjernet reservasjon. else (z--); } //dersom det ikke stemmer legges reservasjonen tilbake. else { tempList->add(tempRes); } } } } }
Reservasjon* Rom::reservationByDate(int date, int action) { extern Hotell* hotellet; for (int i = 1; i <= Reservations->no_of_elements(); i++) { Reservasjon* temp = (Reservasjon*) Reservations->remove_no(i); // If this method was called with action CHECKOUT and departure date is the provided date for the reservation, // or action was checkin and arrival date is the date of this reservation, then return the reservation if ((action == CHECKOUT) || (action == CHECKIN && temp->getArrival() == date)) { // If action is checkout, destroy reservation, and create a temporary reservation object with errorcode // "reservation has been pruned" to be returned if(action == CHECKOUT && temp->getDeparture() == date) { temp->display(); if(readChar("Confirm checkout?",'y','n')=='y') { // Get filename, subtract file ending and apply new filename std::string hotellHst = hotellet->getFilename().substr(0, hotellet->getFilename().size()-4); hotellHst += ".hst"; // ... aaaand output! std::ofstream o(hotellHst.c_str(), std::ios::out|ios::app); temp->writeDataToFile(o); Reservations->destroy(temp->getRoomID()); temp = new Reservasjon(reservationHasBeenPruned); } // Otherwise, put it back in the list else Reservations->add(temp); } // If action is checkout, and a reservation on the room is current, but departure on reservation is not today, // ask if we want to check him out earlier than planned, and if so, call this method with his/her planned // departure date else if(action == CHECKOUT && temp->getDeparture() >= date && temp->getArrival() <= date) { std::cout << "\nGuest in room " << temp->getRoomID() << " is not meant to check out until " << temp->getDeparture(); if(readChar("\nCheck out anyways?",'y','n') == 'y') { Reservations->add(temp); return reservationByDate(temp->getDeparture(), CHECKOUT); } } // If action is check in, ask for confirmation to check in, and display information about the reservation else if(action == CHECKIN && readChar("Check-in?",'y','n') == 'y') { temp->display(); temp->setCheckin(); Reservations->add(temp); } // Otherwise, put it back in our list else { Reservations->add(temp); } return temp; } // If the method was called with NOOP action, as in NO OPeration, display the data without modifying it; essentially the same as // checkin, except it ONLY displays data about the reservation, and date may be any date within the time period of the reservation, // as opposed to requiring a specific checkin date. It does however require guests to be checked in. else if (action == NOOP && temp->getDeparture() >= date && temp->getArrival() <= date && temp->getInUse() == true) { //temp->display(roomNumber); Reservations->add(temp); return temp; } } // If no matching reservation was found, return a new reservations object, with // roomID containing the errorcode return new Reservasjon(reservationDoesNotExist); }