From d59fb3f15f907649c2ef0cb6a9e2ff31e33f58af Mon Sep 17 00:00:00 2001 From: Syndamia Date: Sun, 8 May 2022 21:34:49 +0300 Subject: Renamed VenueConsoleUI to FMITicketSystemConsoleUI --- src/UserInterface/FMITicketSystemConsoleUI.cpp | 293 +++++++++++++++++++++++++ src/UserInterface/FMITicketSystemConsoleUI.h | 14 ++ src/UserInterface/VenueConsoleUI.cpp | 293 ------------------------- src/UserInterface/VenueConsoleUI.h | 14 -- 4 files changed, 307 insertions(+), 307 deletions(-) create mode 100644 src/UserInterface/FMITicketSystemConsoleUI.cpp create mode 100644 src/UserInterface/FMITicketSystemConsoleUI.h delete mode 100644 src/UserInterface/VenueConsoleUI.cpp delete mode 100644 src/UserInterface/VenueConsoleUI.h (limited to 'src/UserInterface') diff --git a/src/UserInterface/FMITicketSystemConsoleUI.cpp b/src/UserInterface/FMITicketSystemConsoleUI.cpp new file mode 100644 index 0000000..d103eaf --- /dev/null +++ b/src/UserInterface/FMITicketSystemConsoleUI.cpp @@ -0,0 +1,293 @@ +#include "FMITicketSystemConsoleUI.h" +#include "../Generic/List/OrderedList.hpp" +#include "../Generic/String/String.h" +#include "../Generic/Date/Date.h" +#include "../Generic/ConsoleInterface/Menu.h" +#include "../Generic/ConsoleInterface/Toolbox.hpp" +#include "../Services/StatusCode.h" +#include "../Models/Reservation.h" +#include + +EventService* es; +HallService* hs; + +Menu mainMenu("FMI Ticket System", true, false), + ticketManagementMenu("Ticket management", false, true), + eventManagementMenu("Event management", false, true), + reportsMenu("Report management", false, true); + +void handleStatusCode(StatusCode sc, Menu menu) { + switch (sc) { + case Success: + menu.registerSuccess("Success!"); break; + case W_TicketHadNotBeenReserved: + menu.registerWarning("Ticket hadn't been reserved. Nothing changed."); break; + case E_EventDoesNotExist: + menu.registerError("Event doesn't exist!"); break; + case E_EventWillOverlap: + menu.registerError("There is already an event at same time!"); break; + case E_TicketAlreadyBought: + menu.registerError("Ticket was already bought!"); break; + case E_TicketAlreadyReserved: + menu.registerError("Ticket was already reserved!"); break; + case E_ReservationDoesNotExist: + menu.registerError("Reservation doesn't exist!"); break; + case E_WrongReservationPassword: + menu.registerError("Wrong reservation password!"); break; + case E_FileCouldNotBeOpened: + menu.registerError("An error occurred while trying to open a file!"); break; + default: + menu.registerError("An unhandled status code was returned!"); break; + } +} + +/* Ticket Management */ + +void command_freeSeats() { + char name[MAX_LINE_WIDTH]; + inputLineSubBox("Enter event name: ", name, MAX_LINE_WIDTH); + Date date; + inputSubBox("Enter event date: ", &date); + + unsigned seatsPerRow = 0; + String seating = es->createSeatingString(name, date, &seatsPerRow); + if (seating.get_length() == 0) { + handleStatusCode(E_EventDoesNotExist, ticketManagementMenu); + return; + } + + table(1, seatsPerRow, seating.get_cstr()); + pressEnterToContinue(); +} + +void command_reserveTicket() { + char name[MAX_LINE_WIDTH]; + inputLineSubBox("Enter event name: ", name, MAX_LINE_WIDTH); + Date date; + inputSubBox("Enter event date: ", &date); + Ticket tic; + inputSubBox("Enter row and seat: ", &tic); + char password[PASSWORD_LEN]; + inputLineSubBox("Enter password [Max 8 characters]: ", password, PASSWORD_LEN); + char note[NOTE_LEN]; + inputLineSubBox("Enter note [Max 32 characters]: ", note, NOTE_LEN, false); + + StatusCode s = es->reserveTicket(name, date, password, note, tic); + handleStatusCode(s, ticketManagementMenu); +} + +void command_cancelReservation() { + char name[MAX_LINE_WIDTH]; + inputLineSubBox("Enter event name: ", name, MAX_LINE_WIDTH); + Date date; + inputSubBox("Enter event date: ", &date); + Ticket tic; + inputSubBox("Enter row and seat: ", &tic); + + StatusCode s = es->cancelTicketReservation(name, date, tic); + handleStatusCode(s, ticketManagementMenu); +} + +void command_buyTicket() { + char name[MAX_LINE_WIDTH]; + inputLineSubBox("Enter event name: ", name, MAX_LINE_WIDTH); + Date date; + inputSubBox("Enter event date: ", &date); + Ticket tic; + inputSubBox("Enter row and seat: ", &tic); + + StatusCode s = es->ticketIsReserved(name, date, tic); + if (s == Success) { + warningSubBox("Ticket is reserved!"); + + char pass[PASSWORD_LEN]; + inputLineSubBox("Enter reservation password: ", pass, PASSWORD_LEN); + + String note; + s = es->buyTicket(name, date, tic, pass, ¬e); + if (note.get_length() > 0) { + successSubBox("The reservation had a note attached. It reads:"); + successSubBox(note.get_cstr()); + pressEnterToContinue(false); + } + } + else if (s == W_TicketHadNotBeenReserved) { + s = es->buyTicket(name, date, tic); + } + + handleStatusCode(s, ticketManagementMenu); +} + +void submenu_ticketManagement() { + ticketManagementMenu.navigate(); +} + +/* Event Management */ + +void command_createEvent() { + unsigned hallNumber; + inputSubBox("Enter hall number: ", &hallNumber); + char name[MAX_LINE_WIDTH]; + inputLineSubBox("Enter event name: ", name, MAX_LINE_WIDTH); + Date date; + inputSubBox("Enter event date: ", &date); + + StatusCode s = es->createEvent(hallNumber, name, date); + handleStatusCode(s, eventManagementMenu); +} + +void command_cancelEvent() { + char name[MAX_LINE_WIDTH]; + inputLineSubBox("Enter event name: ", name, MAX_LINE_WIDTH); + Date date; + inputSubBox("Enter event date: ", &date); + + StatusCode s = es->cancelEvent(name, date); + handleStatusCode(s, eventManagementMenu); +} + +void customPrintEvent(const Event& ev) { + print(ev.get_name()); + print(" || Hall "); + print(ev.get_hall().get_number()); + print(" @ "); + printLine(ev.get_date()); +} + +void command_mostWatched() { + unsigned topN; + inputSubBox("How many to take?: ", &topN); + + List top = es->queryMostWatched(topN); + + printLine(""); + print("The top "); + print(topN); + printLine(" most watched events are:"); + + resetOrderedList(1); + for (unsigned i = 0; i < top.get_count(); i++) { + _printOrderedListBeginning(); + customPrintEvent(top[i]); + } + + pressEnterToContinue(); +} + +void command_belowWatchers() { + printLine("Events with less than 10% bought tickets in hall:"); + + List least = es->queryInsufficientlyVisited(); + for (unsigned i = 0; i < least.get_count(); i++) { + customPrintEvent(least[i]); + } + + bool toDelete; + inputBox("Do you want to cancel them? [0/1]: ", &toDelete); + if (toDelete) { + StatusCode s = Success; + for (unsigned i = 0; i < least.get_count(); i++) + s = es->cancelEvent(least[i].get_name().get_cstr(), least[i].get_date()); + handleStatusCode(s, eventManagementMenu); + } +} + +void submenu_eventManagement() { + eventManagementMenu.navigate(); +} + +/* Report Management */ + +void command_reservationsList() { + char name[MAX_LINE_WIDTH]; + inputLineSubBox("Enter event name: ", name, MAX_LINE_WIDTH); + char dateStr[MAX_LINE_WIDTH]; + inputLineSubBox("Enter event date: ", dateStr, MAX_LINE_WIDTH, false); + + Date date(dateStr); + + StatusCode s = es->reportReservations(name, date); + handleStatusCode(s, reportsMenu); +} + +void command_boughtTickets() { + char hallNumber[MAX_LINE_WIDTH]; + inputLineSubBox("Enter hall number: ", hallNumber, MAX_LINE_WIDTH); + Date start, end; + inputSubBox("Enter start date: ", &start); + inputSubBox("Enter end date: ", &end); + + StatusCode s; + if (strcmp(hallNumber, "ALL") == 0) + s = es->reportBoughtTickets(0, start, end, true); + else + s = es->reportBoughtTickets(atoi(hallNumber), start, end); + + handleStatusCode(s, reportsMenu); +} + +void submenu_reportManagement() { + reportsMenu.navigate(); +} + +/* Main */ + +void load() { + StatusCode s = es->load(); + if (s == E_FileCouldNotBeOpened) { + errorBox("Could not load events from file!"); + pressEnterToContinue(false); + } + s = hs->load(); + if (s == E_FileCouldNotBeOpened) { + errorBox("Could not load halls from file!"); + pressEnterToContinue(false); + } +} + +void save() { + StatusCode s = es->save(); + if (s == E_FileCouldNotBeOpened) { + errorBox("Could not save events to file!"); + pressEnterToContinue(); + } + s = hs->save(); + if (s == E_FileCouldNotBeOpened) { + errorBox("Could not save halls to file!"); + pressEnterToContinue(false); + } +} + +void init() { + mainMenu.addCommand(Command("Ticket Management", submenu_ticketManagement)); + mainMenu.addCommand(Command("Event Management", submenu_eventManagement)); + mainMenu.addCommand(Command("Report Management", submenu_reportManagement)); + + ticketManagementMenu.addCommand(Command("Print Seats", command_freeSeats)); + ticketManagementMenu.addCommand(Command("Reserve Ticket", command_reserveTicket)); + ticketManagementMenu.addCommand(Command("Cancel Ticket Reservation", command_cancelReservation)); + ticketManagementMenu.addCommand(Command("Buy Ticket", command_buyTicket)); + + eventManagementMenu.addCommand(Command("Create Event", command_createEvent)); + eventManagementMenu.addCommand(Command("Cancel Event", command_cancelEvent)); + eventManagementMenu.addCommand(Command("Query - Most Watched", command_mostWatched)); + eventManagementMenu.addCommand(Command("Query - Below 10% watchers", command_belowWatchers)); + + reportsMenu.addCommand(Command("Reservations List", command_reservationsList)); + reportsMenu.addCommand(Command("Bought Tickets", command_boughtTickets)); +} + +/*! + * Stores EventService and HallService pointers in internal global variables, + * calls EventService and HallService load() functions, + * initializes all menus, navigates the main menu and + * finally calls EventService and HallService save() functions + */ +void runUI(EventService* eventService, HallService* hallService) { + es = eventService; + hs = hallService; + load(); + init(); + mainMenu.navigate(); + save(); +} diff --git a/src/UserInterface/FMITicketSystemConsoleUI.h b/src/UserInterface/FMITicketSystemConsoleUI.h new file mode 100644 index 0000000..e8c4ac7 --- /dev/null +++ b/src/UserInterface/FMITicketSystemConsoleUI.h @@ -0,0 +1,14 @@ +#ifndef HEADER_FMITICKETSYSTEMCONSOLEUI +#define HEADER_FMITICKETSYSTEMCONSOLEUI + +/*! \file FMITicketSystemConsoleUI.h + * \brief Stores declaration of runUI function + */ + +#include "../Services/EventService.h" +#include "../Services/HallService.h" + +//! Runs the console interface for the ticket system +void runUI(EventService* eventService, HallService* hallService); + +#endif diff --git a/src/UserInterface/VenueConsoleUI.cpp b/src/UserInterface/VenueConsoleUI.cpp deleted file mode 100644 index 6a40f77..0000000 --- a/src/UserInterface/VenueConsoleUI.cpp +++ /dev/null @@ -1,293 +0,0 @@ -#include "VenueConsoleUI.h" -#include "../Generic/List/OrderedList.hpp" -#include "../Generic/String/String.h" -#include "../Generic/Date/Date.h" -#include "../Generic/ConsoleInterface/Menu.h" -#include "../Generic/ConsoleInterface/Toolbox.hpp" -#include "../Services/StatusCode.h" -#include "../Models/Reservation.h" -#include - -EventService* es; -HallService* hs; - -Menu mainMenu("FMI Ticket System", true, false), - ticketManagementMenu("Ticket management", false, true), - eventManagementMenu("Event management", false, true), - reportsMenu("Report management", false, true); - -void handleStatusCode(StatusCode sc, Menu menu) { - switch (sc) { - case Success: - menu.registerSuccess("Success!"); break; - case W_TicketHadNotBeenReserved: - menu.registerWarning("Ticket hadn't been reserved. Nothing changed."); break; - case E_EventDoesNotExist: - menu.registerError("Event doesn't exist!"); break; - case E_EventWillOverlap: - menu.registerError("There is already an event at same time!"); break; - case E_TicketAlreadyBought: - menu.registerError("Ticket was already bought!"); break; - case E_TicketAlreadyReserved: - menu.registerError("Ticket was already reserved!"); break; - case E_ReservationDoesNotExist: - menu.registerError("Reservation doesn't exist!"); break; - case E_WrongReservationPassword: - menu.registerError("Wrong reservation password!"); break; - case E_FileCouldNotBeOpened: - menu.registerError("An error occurred while trying to open a file!"); break; - default: - menu.registerError("An unhandled status code was returned!"); break; - } -} - -/* Ticket Management */ - -void command_freeSeats() { - char name[MAX_LINE_WIDTH]; - inputLineSubBox("Enter event name: ", name, MAX_LINE_WIDTH); - Date date; - inputSubBox("Enter event date: ", &date); - - unsigned seatsPerRow = 0; - String seating = es->createSeatingString(name, date, &seatsPerRow); - if (seating.get_length() == 0) { - handleStatusCode(E_EventDoesNotExist, ticketManagementMenu); - return; - } - - table(1, seatsPerRow, seating.get_cstr()); - pressEnterToContinue(); -} - -void command_reserveTicket() { - char name[MAX_LINE_WIDTH]; - inputLineSubBox("Enter event name: ", name, MAX_LINE_WIDTH); - Date date; - inputSubBox("Enter event date: ", &date); - Ticket tic; - inputSubBox("Enter row and seat: ", &tic); - char password[PASSWORD_LEN]; - inputLineSubBox("Enter password [Max 8 characters]: ", password, PASSWORD_LEN); - char note[NOTE_LEN]; - inputLineSubBox("Enter note [Max 32 characters]: ", note, NOTE_LEN, false); - - StatusCode s = es->reserveTicket(name, date, password, note, tic); - handleStatusCode(s, ticketManagementMenu); -} - -void command_cancelReservation() { - char name[MAX_LINE_WIDTH]; - inputLineSubBox("Enter event name: ", name, MAX_LINE_WIDTH); - Date date; - inputSubBox("Enter event date: ", &date); - Ticket tic; - inputSubBox("Enter row and seat: ", &tic); - - StatusCode s = es->cancelTicketReservation(name, date, tic); - handleStatusCode(s, ticketManagementMenu); -} - -void command_buyTicket() { - char name[MAX_LINE_WIDTH]; - inputLineSubBox("Enter event name: ", name, MAX_LINE_WIDTH); - Date date; - inputSubBox("Enter event date: ", &date); - Ticket tic; - inputSubBox("Enter row and seat: ", &tic); - - StatusCode s = es->ticketIsReserved(name, date, tic); - if (s == Success) { - warningSubBox("Ticket is reserved!"); - - char pass[PASSWORD_LEN]; - inputLineSubBox("Enter reservation password: ", pass, PASSWORD_LEN); - - String note; - s = es->buyTicket(name, date, tic, pass, ¬e); - if (note.get_length() > 0) { - successSubBox("The reservation had a note attached. It reads:"); - successSubBox(note.get_cstr()); - pressEnterToContinue(false); - } - } - else if (s == W_TicketHadNotBeenReserved) { - s = es->buyTicket(name, date, tic); - } - - handleStatusCode(s, ticketManagementMenu); -} - -void submenu_ticketManagement() { - ticketManagementMenu.navigate(); -} - -/* Event Management */ - -void command_createEvent() { - unsigned hallNumber; - inputSubBox("Enter hall number: ", &hallNumber); - char name[MAX_LINE_WIDTH]; - inputLineSubBox("Enter event name: ", name, MAX_LINE_WIDTH); - Date date; - inputSubBox("Enter event date: ", &date); - - StatusCode s = es->createEvent(hallNumber, name, date); - handleStatusCode(s, eventManagementMenu); -} - -void command_cancelEvent() { - char name[MAX_LINE_WIDTH]; - inputLineSubBox("Enter event name: ", name, MAX_LINE_WIDTH); - Date date; - inputSubBox("Enter event date: ", &date); - - StatusCode s = es->cancelEvent(name, date); - handleStatusCode(s, eventManagementMenu); -} - -void customPrintEvent(const Event& ev) { - print(ev.get_name()); - print(" || Hall "); - print(ev.get_hall().get_number()); - print(" @ "); - printLine(ev.get_date()); -} - -void command_mostWatched() { - unsigned topN; - inputSubBox("How many to take?: ", &topN); - - List top = es->queryMostWatched(topN); - - printLine(""); - print("The top "); - print(topN); - printLine(" most watched events are:"); - - resetOrderedList(1); - for (unsigned i = 0; i < top.get_count(); i++) { - _printOrderedListBeginning(); - customPrintEvent(top[i]); - } - - pressEnterToContinue(); -} - -void command_belowWatchers() { - printLine("Events with less than 10% bought tickets in hall:"); - - List least = es->queryInsufficientlyVisited(); - for (unsigned i = 0; i < least.get_count(); i++) { - customPrintEvent(least[i]); - } - - bool toDelete; - inputBox("Do you want to cancel them? [0/1]: ", &toDelete); - if (toDelete) { - StatusCode s = Success; - for (unsigned i = 0; i < least.get_count(); i++) - s = es->cancelEvent(least[i].get_name().get_cstr(), least[i].get_date()); - handleStatusCode(s, eventManagementMenu); - } -} - -void submenu_eventManagement() { - eventManagementMenu.navigate(); -} - -/* Report Management */ - -void command_reservationsList() { - char name[MAX_LINE_WIDTH]; - inputLineSubBox("Enter event name: ", name, MAX_LINE_WIDTH); - char dateStr[MAX_LINE_WIDTH]; - inputLineSubBox("Enter event date: ", dateStr, MAX_LINE_WIDTH, false); - - Date date(dateStr); - - StatusCode s = es->reportReservations(name, date); - handleStatusCode(s, reportsMenu); -} - -void command_boughtTickets() { - char hallNumber[MAX_LINE_WIDTH]; - inputLineSubBox("Enter hall number: ", hallNumber, MAX_LINE_WIDTH); - Date start, end; - inputSubBox("Enter start date: ", &start); - inputSubBox("Enter end date: ", &end); - - StatusCode s; - if (strcmp(hallNumber, "ALL") == 0) - s = es->reportBoughtTickets(0, start, end, true); - else - s = es->reportBoughtTickets(atoi(hallNumber), start, end); - - handleStatusCode(s, reportsMenu); -} - -void submenu_reportManagement() { - reportsMenu.navigate(); -} - -/* Main */ - -void load() { - StatusCode s = es->load(); - if (s == E_FileCouldNotBeOpened) { - errorBox("Could not load events from file!"); - pressEnterToContinue(false); - } - s = hs->load(); - if (s == E_FileCouldNotBeOpened) { - errorBox("Could not load halls from file!"); - pressEnterToContinue(false); - } -} - -void save() { - StatusCode s = es->save(); - if (s == E_FileCouldNotBeOpened) { - errorBox("Could not save events to file!"); - pressEnterToContinue(); - } - s = hs->save(); - if (s == E_FileCouldNotBeOpened) { - errorBox("Could not save halls to file!"); - pressEnterToContinue(false); - } -} - -void init() { - mainMenu.addCommand(Command("Ticket Management", submenu_ticketManagement)); - mainMenu.addCommand(Command("Event Management", submenu_eventManagement)); - mainMenu.addCommand(Command("Report Management", submenu_reportManagement)); - - ticketManagementMenu.addCommand(Command("Print Seats", command_freeSeats)); - ticketManagementMenu.addCommand(Command("Reserve Ticket", command_reserveTicket)); - ticketManagementMenu.addCommand(Command("Cancel Ticket Reservation", command_cancelReservation)); - ticketManagementMenu.addCommand(Command("Buy Ticket", command_buyTicket)); - - eventManagementMenu.addCommand(Command("Create Event", command_createEvent)); - eventManagementMenu.addCommand(Command("Cancel Event", command_cancelEvent)); - eventManagementMenu.addCommand(Command("Query - Most Watched", command_mostWatched)); - eventManagementMenu.addCommand(Command("Query - Below 10% watchers", command_belowWatchers)); - - reportsMenu.addCommand(Command("Reservations List", command_reservationsList)); - reportsMenu.addCommand(Command("Bought Tickets", command_boughtTickets)); -} - -/*! - * Stores EventService and HallService pointers in internal global variables, - * calls EventService and HallService load() functions, - * initializes all menus, navigates the main menu and - * finally calls EventService and HallService save() functions - */ -void runUI(EventService* eventService, HallService* hallService) { - es = eventService; - hs = hallService; - load(); - init(); - mainMenu.navigate(); - save(); -} diff --git a/src/UserInterface/VenueConsoleUI.h b/src/UserInterface/VenueConsoleUI.h deleted file mode 100644 index 5511fe6..0000000 --- a/src/UserInterface/VenueConsoleUI.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef HEADER_VENUECONSOLEUI -#define HEADER_VENUECONSOLEUI - -/*! \file VenueConsoleUI.h - * \brief Stores declaration of runUI function - */ - -#include "../Services/EventService.h" -#include "../Services/HallService.h" - -//! Runs the console interface for the ticket system -void runUI(EventService* eventService, HallService* hallService); - -#endif -- cgit v1.3.1-23-gd82d