I am learning C++ programming and just learned about basic OOP and decided to create a simple project to test my understanding and practice what I've learned. The idea I came up with is an event tracking system where you add events into a calendar and then you get all of your events displayed. I have 2 classes: Event
, where your events are created, and Calendar
, which holds a vector of all Events. Could you please review my code saying what are the most efficient ways of doing things and the best practices to be followed?
Main.cpp
#include "Calendar.h"
int main() {
Calendar calendar {};
calendar.add_event("Exam", "urgent", "10/12/2020", "10:30");
calendar.add_event("Meeting", "non-urgent", "08/11/2020", ("12:20"));
calendar.display_events();
}
Event.h
#include <string>
class Event {
private:
std::string event_type;
std::string event_priority;
std::string event_date;
std::string event_time;
public:
Event(std::string eventType, std::string eventPriority, std::string eventDate,
std::string eventTime);
bool display_event() const;
~Event();
};
Event.cpp
#include "Event.h"
#include <iostream>
#include <utility>
Event::Event(std::string eventType, std::string eventPriority, std::string eventDate,
std::string eventTime) : event_type(std::move(eventType)), event_priority(std::move(eventPriority)),
event_date(std::move(eventDate)), event_time(std::move(eventTime)) {
}
bool Event::display_event() const {
std::cout << "You have " << event_type << " on " << event_date << " at " << event_time << " it's " << event_priority << "\n";
return true;
}
Event::~Event() = default;
Calendar.h
#include "Event.h"
#include <vector>
class Calendar {
private:
std::vector<Event> calendar;
public:
bool display_events() const;
bool add_event(std::string event_type, std::string event_priority, std::string event_date, std::string event_time);
const std::vector<Event> &getCalendar() const;
bool is_event_valid(const std::string& event_date, const std::string& event_time);
~Calendar();
};
Calendar.cpp
#include "Calendar.h"
#include <iostream>
#include <utility>
const std::vector<Event> &Calendar::getCalendar() const {
return calendar;
}
bool Calendar::display_events() const {
if (!getCalendar().empty()) {
for (const auto &event : calendar) {
event.display_event();
}
return true;
} else {
std::cout << "Your calendar is empty \n";
return false;
}
}
bool Calendar::add_event(std::string event_type, std::string event_priority, std::string event_date,
std::string event_time) {
if (is_event_valid(event_date, event_time))
{
Event event {std::move(event_type), std::move(event_priority), std::move(event_date), std::move(event_time)};
calendar.push_back(event);
return true;
} else {
std::cout << "Event is not valid\n";
return false;
}
}
bool Calendar::is_event_valid(const std::string& event_date, const std::string& event_time) {
int day{}, month{}, year{}, hours{}, minutes{};
day = std::stoi(event_date.substr(0,2));
month = std::stoi(event_date.substr(3, 2));
year = std::stoi(event_date.substr(6, 4));
hours = std::stoi(event_time.substr(0, 2));
minutes = std::stoi(event_time.substr(3, 2));
bool is_date_valid = (day > 0 && day <= 24) && (month > 0 && month <= 12) && (year >= 2020 && year <= 3030);
bool is_time_valid = (hours >= 0 && hours <= 24) && (minutes >= 0 && minutes <= 60);
if (is_date_valid && is_time_valid) {
return true;
} else {
std::cout << "The event's time or date is not valid\n";
return false;
}
}
Calendar::~Calendar() = default;
I am also thinking about adding a feature where you can sort the events by date.