Instructor: Batuhan Edgüer
Download · Requirements · Structure · Technical · STL Rules · Testing · UML · Mistakes · Submit · Checklist · Tools
Expand / Collapse
| § | Section | Description |
|---|---|---|
| 1 | Download Your Project | Get your assignment files |
| 2 | Quick Start | Get started in 4 steps |
| 3 | Hard Requirements | Non-negotiable requirements |
| 4 | Project Structure | Directory organization |
| 5 | Technical Requirements | Language, compiler, build targets |
| 6 | STL Restrictions | What you can and cannot use |
| 7 | Testing Requirements | Test coverage expectations |
| 8 | UML & Documentation | Required diagrams |
| 9 | Common Mistakes to Avoid | Critical errors to prevent |
| 10 | Submission Format | How to submit your work |
| 11 | Pre-Submission Checklist | Final verification |
| 12 | Tools & Libraries | Recommended resources |
We have split the project into two document types:
| Document | Description | Priority |
|---|---|---|
base.pdf |
General specification with shared requirements, data formats, and technical constraints. Applies to everyone. | Read First |
PROJ-XX.pdf |
Your specific assignment describing the unique problem your group must solve. | Read Second |
1. Download base.pdf and read it thoroughly (SERIOUSLY!)
2. Download your assigned PROJ-XX.pdf
3. Set up your project using the structure below
4. Implement, test, document, present!
Caution
Missing any of these requirements = significant point loss!
| Requirement | Description | |
|---|---|---|
| ☐ | Custom Data Structures | Implement your own — std::vector, std::map, std::list etc. are NOT allowed |
| ☐ | Build System | Makefile or CMake with make, make test, make clean targets |
| ☐ | Data Directory | Read input from data/ folder with multiple test files |
| ☐ | Visual Frontend | GUI or TUI that visualizes your solution |
| ☐ | Testing | Unit tests + edge cases + integration tests |
| ☐ | UML Diagrams | Class diagram + one behavioral diagram (sequence, activity, etc.) |
| ☐ | Modular Code | Separate headers/source files — no 1000-line monster files |
| ☐ | Presentation | 15-minute demo + code walkthrough + Q&A |
|
|
||||||||||
|
|||||||||||
| Requirement | Specification |
|---|---|
| Language | C++17 or later |
| Compiler | g++ or clang++ |
| Platforms | Linux (Ubuntu 20.04+) · Windows |
| Target | Description |
|---|---|
make |
Build the project |
make run |
Build and run |
make test |
Run all tests |
make clean |
Remove build artifacts |
make deps |
Install dependencies |
| ✗ NOT Allowed | ✓ Allowed |
|---|---|
std::vector |
std::string |
std::list |
std::fstream / std::iostream |
std::map |
std::unique_ptr / std::shared_ptr |
std::set |
<algorithm> on primitive arrays |
std::unordered_map |
<functional> |
std::queue |
|
std::stack |
|
std::deque |
|
std::array |
|
std::priority_queue |
Important
All custom data structures must use pointer-based implementation. Array-based implementations are NOT allowed.
Your tests should cover:
| Category | Test Cases |
|---|---|
| Construction | Default constructor, parameterized constructor |
| Insertion | Beginning, middle, end, duplicate handling |
| Deletion | Beginning, middle, end, non-existent element |
| Search | Existing element, non-existent element |
| Edge Cases | Empty structure, single element, full capacity |
| Boundary | Maximum size, minimum values, overflow |
► Test Organization Structure
tests/
├── test_main.cpp ← Test runner
├── unit/
│ ├── test_data_structures.cpp
│ ├── test_algorithms.cpp
│ └── test_utils.cpp
├── integration/
│ ├── test_workflow.cpp
│ └── test_io.cpp
├── edge_cases/
│ ├── test_empty.cpp
│ ├── test_single.cpp
│ └── test_limits.cpp
└── fixtures/
└── test_helpers.hpp
► Memory Testing with Valgrind
valgrind --leak-check=full --show-leak-kinds=all ./build/bin/testsExpected clean output:
All heap blocks were freed -- no leaks are possible
| Diagram | Purpose | Required |
|---|---|---|
| Class Diagram | Shows structure, attributes, methods, relationships | ✓ Yes |
| Sequence Diagram | Shows object interactions over time | Recommended |
| Component Diagram | Shows high-level module organization | Optional |
| Relationship | Notation |
|---|---|
| Inheritance | Solid line with hollow triangle |
| Interface Implementation | Dashed line with hollow triangle |
| Composition | Solid line with filled diamond |
| Aggregation | Solid line with hollow diamond |
| Association | Plain solid line |
| Dependency | Dashed line with arrow |
► UML Tools
| Tool | Type | Link |
|---|---|---|
| PlantUML | Text-based, version control friendly | plantuml.com |
| Draw.io | Free web-based editor | draw.io |
| Mermaid | Markdown-integrated | mermaid.js.org |
| Umbrello | Open source desktop app | umbrello.kde.org |
| StarUML | Professional modeling tool | staruml.io |
Warning
These mistakes will cost you significant points!
| ✗ Mistake | ✓ Solution |
|---|---|
Using std::vector or other STL containers |
Implement your own data structures |
| No Makefile (we can't build = we can't grade) | Include Makefile or CMakeLists.txt |
Hardcoded paths or no data/ directory |
Use relative paths, read from data/ |
| No tests or only testing "happy path" | Write unit, integration, and edge case tests |
| All code in one giant file | Modularize: separate headers and source files |
| Frontend that doesn't visualize the solution | Actually show the algorithm/data in action |
GroupID_ProblemNumber.zip
Example: Group05_01.zip
Important
Submit source code only! Do NOT include:
- Compiled binaries (
*.o,*.exe,*.so) - Build directories (
build/,bin/) - IDE files (
.idea/,.vscode/) - Version control (
.git/) - Temporary files (
*.tmp,*.log) - External libraries (fetch via
make deps)
Before submitting, extract your zip to a new directory and verify:
unzip Group05_01.zip -d /tmp/test
cd /tmp/test/Group05_01
make deps
make
make test
make run| Category | Item | |
|---|---|---|
| ☐ | Build | Code compiles without errors |
| ☐ | Build | No compiler warnings |
| ☐ | Testing | All tests pass |
| ☐ | Testing | No memory leaks (Valgrind clean) |
| ☐ | Code | Code is formatted (clang-format) |
| ☐ | Code | No prohibited STL containers |
| ☐ | Code | Minimum two custom data structures |
| ☐ | Code | Pointer-based implementation |
| ☐ | Docs | Documentation generates (Doxygen) |
| ☐ | Docs | README is complete |
| ☐ | Docs | UML diagrams included |
| ☐ | Docs | Presentation slides included |
| ☐ | App | Frontend works |
| ☐ | App | Data files included in data/ |
| Tool | Purpose | Link |
|---|---|---|
| GNU Make | Build automation | gnu.org/software/make |
| CMake | Cross-platform build system | cmake.org |
| GCC | GNU Compiler Collection | gcc.gnu.org |
| Clang | LLVM C++ compiler | clang.llvm.org |
| clang-format | Code formatter | clang.llvm.org/docs/ClangFormat.html |
| Doxygen | Documentation generator | doxygen.nl |
| Valgrind | Memory debugger | valgrind.org |
► C++ GUI Libraries
| Framework | Description | Link |
|---|---|---|
| Qt | Cross-platform, feature-rich | qt.io |
| Dear ImGui | Immediate mode GUI | github.com/ocornut/imgui |
| wxWidgets | Native look-and-feel | wxwidgets.org |
| FLTK | Lightweight, fast | fltk.org |
| GTKmm | C++ bindings for GTK | gtkmm.org |
| Nana | Modern C++ GUI library | github.com/cnjinhao/nana |
► Terminal UI (TUI) Libraries
| Library | Description | Link |
|---|---|---|
| ncurses | Classic terminal UI | invisible-island.net/ncurses |
| FTXUI | Modern C++ TUI | github.com/ArthurSonzogni/FTXUI |
| termbox2 | Minimal terminal library | github.com/termbox/termbox2 |
► Web Interface (REST API)
| Framework | Description | Link |
|---|---|---|
| Crow | Fast micro web framework | crowcpp.org |
| Drogon | High-performance HTTP framework | github.com/drogonframework/drogon |
| cpp-httplib | Single-header HTTP library | github.com/yhirose/cpp-httplib |
| Pistache | Modern HTTP framework | pistacheio.github.io/pistache |
► Desktop/Hybrid Apps
| Framework | Description | Link |
|---|---|---|
| Electron | Web tech for desktop (with C++ addon) | electronjs.org |
| Tauri | Lightweight alternative to Electron | tauri.app |
| Neutralinojs | Lightweight cross-platform apps | neutralino.js.org |
| Tool | Description | Link |
|---|---|---|
| pybind11 | Modern C++/Python bindings (recommended) | github.com/pybind/pybind11 |
| ctypes | Python built-in FFI | docs.python.org/3/library/ctypes.html |
| cffi | C Foreign Function Interface | cffi.readthedocs.io |
| SWIG | Multi-language wrapper generator | swig.org |
| Boost.Python | Boost C++/Python interop | boost.org/libs/python |
| Framework | Description | Link |
|---|---|---|
| Catch2 | Modern header-only test framework | github.com/catchorg/Catch2 |
| Google Test | Full-featured testing framework | github.com/google/googletest |
| doctest | Fastest single-header testing | github.com/doctest/doctest |
| CTest | CMake's testing driver | cmake.org/cmake/help/latest/manual/ctest.1.html |
| Library | Format | Link |
|---|---|---|
| nlohmann/json | JSON | github.com/nlohmann/json |
| RapidJSON | JSON (high performance) | rapidjson.org |
| simdjson | JSON (fastest) | github.com/simdjson/simdjson |
| yaml-cpp | YAML | github.com/jbeder/yaml-cpp |
| fast-cpp-csv-parser | CSV | github.com/ben-strasser/fast-cpp-csv-parser |
| pugixml | XML | pugixml.org |
| toml++ | TOML | github.com/marzer/tomlplusplus |