{"id":32818386,"url":"https://github.com/jguida941/advising-assistance-cpp","last_synced_at":"2026-05-16T15:37:35.206Z","repository":{"id":319626573,"uuid":"1079152453","full_name":"jguida941/advising-assistance-cpp","owner":"jguida941","description":"Cross-platform course advisor that loads CSV catalogs into a shared C++ core, with both a CLI and Qt dashboard for exploring prerequisites.","archived":false,"fork":false,"pushed_at":"2025-10-19T08:50:35.000Z","size":3396,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-11-07T12:06:27.015Z","etag":null,"topics":["cli","course-planner","cpp","csv-parser","education","qt","qt-widgets"],"latest_commit_sha":null,"homepage":"","language":"Makefile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jguida941.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-19T08:04:40.000Z","updated_at":"2025-10-19T08:50:38.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/jguida941/advising-assistance-cpp","commit_stats":null,"previous_names":["jguida941/advising-assistance-cpp"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jguida941/advising-assistance-cpp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jguida941%2Fadvising-assistance-cpp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jguida941%2Fadvising-assistance-cpp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jguida941%2Fadvising-assistance-cpp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jguida941%2Fadvising-assistance-cpp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jguida941","download_url":"https://codeload.github.com/jguida941/advising-assistance-cpp/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jguida941%2Fadvising-assistance-cpp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33108232,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-16T04:41:52.686Z","status":"ssl_error","status_checked_at":"2026-05-16T04:41:52.009Z","response_time":115,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","course-planner","cpp","csv-parser","education","qt","qt-widgets"],"created_at":"2025-11-07T12:01:07.361Z","updated_at":"2026-05-16T15:37:35.201Z","avatar_url":"https://github.com/jguida941.png","language":"Makefile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Course Advisor Dashboard\n\nThis project started as a school assignment where the goal was to build a simple C++ console application that could help academic advisors explore course prerequisites. The original rubric expected a command-line program that:\n\n- Prompted for a CSV file name and loaded course data into a chosen data structure.\n- Presented a text menu with options to:\n  - Load the catalog file.\n  - Print an alphanumeric list of Computer Science courses (including math support classes).\n  - Look up a specific course and display its title and prerequisite list.\n  - Exit the program.\n- Printed the full course list in alphanumeric order.\n- Printed detailed information (title and prerequisites) for any course the user requested.\n- Applied standard best practices: error handling for invalid input, readable naming, and inline comments to explain the logic\n\n## Course Advisor CLI\n\u003cimg width=\"759\" height=\"331\" alt=\"Screenshot 2025-10-19 at 4 19 57 AM\" src=\"https://github.com/user-attachments/assets/6a151e59-5f75-45f0-8cc5-3148ab763268\" /\u003e\n\n\u003cimg width=\"550\" height=\"537\" alt=\"Screenshot 2025-10-19 at 4 20 33 AM\" src=\"https://github.com/user-attachments/assets/cabcce1d-2e9a-43ab-8422-34f827a68871\" /\u003e\n\n\u003cimg width=\"509\" height=\"336\" alt=\"Screenshot 2025-10-19 at 4 21 24 AM\" src=\"https://github.com/user-attachments/assets/36f152cc-b900-480e-8571-81e9a346cb0d\" /\u003e\n\n## Swapping Course Advisor Menu Style\n\n\u003cimg width=\"859\" height=\"355\" alt=\"Screenshot 2025-10-19 at 4 24 19 AM\" src=\"https://github.com/user-attachments/assets/e13cb08e-0acb-47f5-b619-3f3f58b4220f\" /\u003e\n\n## Switching to Light Mode:\n\n\u003cimg width=\"466\" height=\"189\" alt=\"Screenshot 2025-10-19 at 4 27 48 AM\" src=\"https://github.com/user-attachments/assets/2c26a731-88f7-4717-a842-24869ed766d0\" /\u003e\n\n## Course Advisor QT Dashboard\n\n\u003cimg width=\"955\" height=\"628\" alt=\"Screenshot 2025-10-19 at 4 19 30 AM\" src=\"https://github.com/user-attachments/assets/f3d9cd35-19e8-4a13-9a9c-ea0e7ef09cfd\" /\u003e\n\n\n\n\n## Enhancements Beyond the Rubric\n\nAfter completing the required CLI features, the project was extended substantially:\n\n- **Shared Catalog Core:** Refactored all parsing, validation, and sorting logic into a reusable library so both binaries stay in sync.\n- **Modernized CLI:** Kept the menu-driven console experience intact while adding a launch option for the new GUI dashboard and improving error feedback.\n- **Qt Dashboard:** Built a Qt Widgets front end that mirrors the console features and adds richer interactivity:\n  - File→Open and Reload actions for quick catalog switching.\n  - Course list view with search-as-you-type support and prerequisite navigation.\n  - Warning panel to surface loader issues without blocking the UI.\n- **CMake Targets:** Split the build into three targets for clarity—`catalog_core`, `advisor_cli`, and `advisor_gui`.\n- **Terminal Themes:** Added environment-driven customization for the CLI menu (see below).\n\nThese additions maintain the spirit of the assignment while making the tool more approachable for advisors who prefer a graphical interface.\n\n## Design Choices\n\n- **Hashtable-backed catalog:** The core catalog stores courses in a `std::unordered_map` (`src/catalog/catalog.cpp`) so prerequisite lookups stay `O(1)` regardless of catalog size. IDs are normalized to uppercase on load, which keeps the hash keys consistent between the CLI and GUI.\n- **Cached sorted view:** Alongside the hash table, the loader materializes a `std::vector\u003cstd::string\u003e` of course IDs once and reuses it for list rendering and search suggestions. This avoids resorting on every request and keeps the GUI model lightweight.\n- **Load result telemetry:** The `LoadResult` struct bundles success state, warning messages, and missing prerequisites so every front end can surface the same diagnostics without re-reading the file.\n- **GUI state caching:** The Qt layer retains the last-opened path and most recent `LoadResult`, enabling `Reload` and warning banners without additional disk work.\n- **Build caching:** The CMake toolchain is configured for `ccache`, significantly cutting compile times as the project grows (mirrored in the GitHub Actions plan).\n\n## Project Layout\n\n```\nfinal_project/\n├── CMakeLists.txt\n├── README.md\n├── data/\n│   └── CS 300 ABCU_Advising_Program_Input.csv\n├── include/\n│   ├── catalog/\n│   │   └── catalog.hpp\n│   └── gui/\n│       ├── mainwindow.hpp\n│       └── models.hpp\n└── src/\n    ├── catalog/\n    │   └── catalog.cpp\n    ├── cli/\n    │   └── main_cli.cpp\n    └── gui/\n        ├── main_gui.cpp\n        ├── mainwindow.cpp\n        └── models.cpp\n```\n\nThe sample course data now lives under `data/`, and the CLI defaults to `data/CS 300 ABCU_Advising_Program_Input.csv` when no path is supplied.\n\n## Building and Running\n\nThis project uses CMake and requires a C++20 compiler plus Qt 6 Widgets for the GUI target.\n\n```bash\n# from the project folder, e.g. cd /Users/you/projects/final_project\n# configure (creates a ./build directory containing the CMake files)\ncmake -S . -B build\n\n# build everything (drops advisor_cli and advisor_gui into ./build/)\ncmake --build build\n```\n\n### Run the Console Advisor\n\n```bash\n./build/advisor_cli         # run from the repo root so ./build is found\n# assignment alias still available as ./build/final_project\n```\n\nFrom the menu you can load a catalog, list courses, inspect prerequisites, or launch the Qt dashboard (option 4). If you already loaded a CSV, option 4 forwards that file to the GUI.\n\n### Run the Qt Dashboard Directly\n\n```bash\n./build/advisor_gui            # macOS/Linux (run from the repo root)\n./build/advisor_gui.exe        # Windows\n```\n\nYou can optionally pass a CSV path to pre-load the catalog:\n\n```bash\n./build/advisor_gui \"CS 300 ABCU_Advising_Program_Input.csv\"\n```\n\n## CLI Appearance Tweaks\n\nSeveral environment variables control how the console menu looks:\n\n```bash\n# Disable colours entirely (assumes the binary is in ./build/ after cmake --build)\nNO_COLOR=1 ./build/advisor_cli\n\n# Force a different colour palette (dark is the default)\nCOURSE_ADVISOR_THEME=light ./build/advisor_cli\nCOURSE_ADVISOR_THEME=plain ./build/advisor_cli   # keep colours off without touching NO_COLOR\n\n# Swap the menu frame style\nCOURSE_ADVISOR_FRAME=unicode ./build/advisor_cli\nCOURSE_ADVISOR_FRAME=none ./build/advisor_cli\n\n# Windows (PowerShell) examples — cd into the repo so build\\ exists\ncmd /c \"cd /d C:\\\\path\\\\to\\\\final_project \u0026\u0026 set NO_COLOR=1 \u0026\u0026 build\\\\advisor_cli.exe\"\npowershell -Command \"Set-Location C:\\\\path\\\\to\\\\final_project; $env:COURSE_ADVISOR_THEME='light'; .\\\\build\\\\advisor_cli.exe\"\n```\n\n\u003e If you are using an IDE-generated build directory (for example, `cmake-build-debug` in CLion), substitute that folder instead of `build/` in the commands above.\n\n## Testing\n\nThe CLI remains the quickest way to verify behavior while iterating on the CSV parser:\n\n1. Run `advisor_cli`.\n2. Option `1` → load a catalog file.\n3. Option `2` → confirm the sorted course list.\n4. Option `3` → look up a few sample course IDs (valid and invalid) to check prerequisite handling.\n\nAdditional GUI validation:\n\n- File→Open should refresh the catalog without restarting.\n- Typing in the search field highlights and scrolls to matching courses.\n- The warning panel appears only when the loader reports issues.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjguida941%2Fadvising-assistance-cpp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjguida941%2Fadvising-assistance-cpp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjguida941%2Fadvising-assistance-cpp/lists"}