Go to file
2023-08-10 18:19:32 -07:00
CoursePlanner.cpp Add files via upload 2023-08-10 18:08:42 -07:00
CoursePlanner.docx Add files via upload 2023-08-10 18:14:45 -07:00
courses.csv Add files via upload 2023-08-10 18:08:42 -07:00
README.md Update README.md 2023-08-10 18:19:32 -07:00

CoursePlanner

Problem Statement

Throughout this course, the central problem I was addressing was the design and implementation of an efficient course planner tool. This tool would allow users to load, manage, and view courses.

Importance of Data Structures

Data structures are the bedrock of efficient problem-solving in software design. My approach to the problem underscored the importance of understanding and applying the right data structures. In the context of the course planner tool, I needed a way to efficiently store and retrieve course information. The vector, for example, was instrumental in providing dynamic storage and efficient retrieval capabilities. Understanding how to appropriately use data structures ensured that the software was both functional and efficient.

Overcoming Roadblocks

While working on the project, one of the main roadblocks I encountered was ensuring the program handled various input formats for file paths, including those with spaces. To overcome this, I implemented a flexible input mechanism using getline and cin.ignore(), which catered to both direct and quoted file paths. Another challenge was ensuring that the program didn't enter an infinite loop when users inputted non-integer values for menu selections. By applying input validation and stream state checks, I managed to gracefully handle such user inputs.

Expanding Software Design Approach

This project offered a myriad of learning opportunities that expanded my approach to software design. I recognized the importance of iterative testing as it helped make important refinements. For instance, I learned the significance of adaptive software design — considering potential user errors and ensuring the software responds appropriately, rather than breaking or behaving unpredictably.

Evolving Maintainability, Readability, and Adaptability

Throughout this journey, I have come to value the art of writing maintainable, readable, and adaptable code. The iterative feedback received during the course highlighted areas where the code could be refactored for clarity. I incorporated structured commenting, adopted naming conventions that clearly indicated the purpose of variables and functions, and modularized the code into well-defined functions. This ensured that any future developer (including my future self) would have an easier time understanding and potentially extending the functionalities of the course planner tool.