Skip to content

Capstone Project Options

Ten substantial projects. This page is how to choose one; each project has its own full specification.

This is the final tier of the project roadmap: the three tiers below it — mini, intermediate and advanced — prepare you for it, and the capstone assumes you can already make design decisions unaided.

No complete solutions are provided for any of these. That is deliberate: the capstone exists to practise independent problem solving, and a solution would replace the work with reading. The running library system you built across the sixteen labs is the worked example — if you are unsure how a capstone is structured, look there, then build something that is not it.


How to use this page

  1. Choose one project, not several. Each is sized as a term's work.
  2. Read its specification completely before writing code.
  3. Design first. A UML class diagram with responsibilities and ownership marked, which the specification's milestones treat as the first deliverable.
  4. Build the smallest thing that runs, then extend it in milestones.
  5. Keep the rubric open — it is the acceptance criteria, and it is the same rubric a marker would apply.

Every specification follows one structure: the problem, the actors, the use cases, suggested classes and relationships, design constraints, milestones, minimum and advanced requirements, testing requirements, extension ideas, and an evaluation checklist.


The ten projects

# Project Core difficulty Patterns it earns Persistence
1 Library Management System Loans, reservations and fines interacting over time Strategy, observer Books, members, loans, fines
2 Hospital Management System Scheduling with real constraints, and records that must not lose history Strategy, template method Patients, appointments, records
3 University Management System Enrolment rules, prerequisites, and many kinds of person Strategy, factory, observer Students, courses, enrolments
4 Banking System Money, transactions, and an audit trail that must never be half-written Command, strategy, factory Accounts, transactions
5 E-Commerce System Carts, orders and pricing rules that compose Strategy, decorator, observer Products, orders, customers
6 Hotel Reservation System Date ranges that must not overlap, and cancellations Strategy, observer Rooms, reservations, guests
7 Vehicle Rental System Per-day, per-km and per-category pricing over a fleet Strategy, factory, decorator Vehicles, rentals, customers
8 Inventory Management System Stock levels that must stay non-negative under concurrency of operations Observer, strategy Items, suppliers, movements
9 Restaurant Management System Orders moving through states, and a menu that changes State, command, observer Menu, orders, tables
10 Learning Management System Assessment, grading rules and progress over a term Strategy, observer, factory Courses, students, submissions

How to choose

Choose by the difficulty you want to practise. Every project requires encapsulation, ownership, polymorphism, exception safety, persistence, patterns and tests — the difference is which of those is hard in that domain:

If you want to practise Choose
Time, ranges and overlapping rules Hotel Reservation, Library
Money, and a record of every change Banking, E-Commerce
Many kinds of person or thing, with shared behaviour University, Hospital, Vehicle Rental
State machines and transitions Restaurant, Hospital
Quantities and invariants under many operations Inventory, Banking
Rules that vary by configuration E-Commerce, Learning Management, Vehicle Rental

Do not choose the library system if you built it across the labs — you would be extending work whose design decisions are already made for you. The point of the capstone is to make those decisions yourself.

The domain does not matter as much as the constraints do. Every specification below requires the same things: a documented format, a multi-file layout, tests, patterns justified by requirements, and a design report with one decision you would reverse. A supermarket system built to those constraints teaches more than a bank built to none.


The project template, and where each part lives

Every project in this section is described with the same seventeen elements, listed on the projects overview. These ten specifications were written before that template and are richer than it, so the content lives under different headings. This table is the map, so nothing has to be taken on trust:

# Template element Where the capstone specification states it
1 Title The page title, e.g. Capstone 1 — Library Management System
2 Difficulty The header block (Scope: a term's work) and the rubric; the capstone tier sits at Expert design freedom
3 Estimated effort The header block: a term's work
4 Scenario §1 Problem statement
5 Problem statement §1 Problem statement
6 User requirements §2 Actors — what each one needs from the system — and §3 Use cases
7 Functional requirements §3 Use cases and §8 Minimum requirements
8 Non-functional requirements §6 Design constraints (money representation, injected time, file format, warnings)
9 Suggested features §11 Extension ideas
10 OOP concepts involved §4 Suggested classes and §5 Relationships
11 Suggested design considerations §4, §5 and §6 together — the class table and the relationship diagram both name what each choice is for
12 Minimum viable version §8 Minimum requirements
13 Intermediate extension §7 Milestones (the later ones) and the first half of §9 Advanced requirements
14 Advanced extension §9 Advanced requirements
15 Testing checklist §10 Testing requirements
16 Documentation checklist §7 Milestones (the design report and diagram) and the What every project requires list below
17 Self-evaluation rubric §12 Evaluation checklist, plus the weighted rubric

If you have already worked through an intermediate or advanced project, the shape will be familiar: the same seventeen elements, with more of them stated by requirement rather than by suggestion.


What every project requires

Stated once rather than ten times, and identical in every specification:

  • A multi-file layout with a documented build command, public headers that depend on nothing internal, and internal helpers that stay internal.
  • Persistence with a documented text format, a version marker, an escape rule for the field separator, and a save → load round trip that preserves every field including an empty collection.
  • Robust loading: missing, empty, truncated and hand-edited files each rejected with a message containing a line number, leaving the in-memory state untouched.
  • Failure handling designed rather than improvised: invalid operations rejected, and the rejection paths tested.
  • At least two design patterns, each with a written justification naming the requirement that earned it — and one documented pattern considered and declined, with the reason.
  • A test suite covering invariants, boundaries and failure paths, with assertions (not printouts) and one deliberate bug introduced to prove the suite notices.
  • A UML class diagram matching the code, with multiplicities and ownership marked.
  • A design report naming the decisions, the costs accepted, the alternatives rejected, and one decision you would reverse, with the cost of reversing it.
  • No warnings with g++ -std=c++17 -Wall -Wextra -Werror.

Related: Projects and the rubric · Project roadmap · Advanced projects · Labs · Module 16 — Capstone · Design patterns reference