Skip to content

Intermediate Projects

Ten projects of a few evenings to a week each. They are the step where a project stops being one class with a main and becomes a small system: several types with relationships, a container in charge, a failure policy, and a file it can read and write.

Every project here is one of the designated integration projects: it must use multiple classes with real relationships, encapsulation, inheritance or composition, polymorphism, the STL, and exception handling — all seven, not whichever three you find convenient.

No complete solutions are provided. Each brief gives the requirements, the constraints and the checklists you assess yourself against. The design is the work.


The ten projects

# Project Difficulty Effort Modules Core skill
1 Virtual Zoo Intermediate 10–14 h 6–8 A hierarchy that earns its inheritance, plus a visitor-style report
2 Student Gradebook Intermediate 12–16 h 4, 14 Invariants, ordered containers, and graded rules that vary
3 Shape Editor Intermediate 12–16 h 7, 11 Polymorphic editing over an owned document
4 Playlist Manager Intermediate 12–16 h 9, 11 Ownership across two containers, and undo
5 Car Park Ticket System Intermediate 12–18 h 9, 15 Occupancy invariants and a pricing policy
6 Vending Machine Intermediate 10–14 h 13 A state machine that refuses gracefully
7 Quiz Engine Intermediate 14–18 h 8, 12 Polymorphic question types loaded from a file
8 Payroll System Intermediate 14–18 h 6, 12 Many kinds of employee, one run loop, a factory
9 Contact Book Intermediate 12–16 h 14, 13 Persistence, search and edit under an invariant
10 Shipping Quote Engine Intermediate 12–18 h 15 Rules that compose instead of branching

The seven things every intermediate project must use

Explicitly required, and checked in each brief's concept table:

Requirement What "yes" looks like
Multiple classes At least four types with single responsibilities, none of them a namespace in disguise
Relationships between classes Composition, aggregation or association, each named in an ownership diagram
Encapsulation Every invariant is unreachable from outside the class that owns it
Inheritance or composition Used where it genuinely fits, and the alternative considered
Polymorphism At least one operation that dispatches on a derived type through a base interface
The STL Containers and algorithms doing the work, with a stated reason for each container
Exception handling A failure policy: what is refused, what is thrown, what is left unchanged

What every intermediate project also requires

  • Multi-file layout: at least one header/source pair per class group, with a documented build command.
  • A file it can read, or a documented input format — most of them require persistence.
  • Tests with assertions, covering invariants, boundaries and failure paths.
  • No warnings with g++ -std=c++17 -Wall -Wextra -Werror.
  • A design note: one page naming your classes, your relationships and one decision you would make differently now.

How to work through this tier

Do them roughly in order — later projects assume the earlier ones' habits. If you have limited time, the three worth most are Virtual Zoo (polymorphism done honestly), Car Park Ticket System (invariants under real operations) and Shipping Quote Engine (rules that compose).

  1. Write the class list and the ownership diagram before any code.
  2. Build the smallest end-to-end path first: create, operate, print.
  3. Add persistence, then the failure policy, then the polish.
  4. Run the checklists honestly, then write the design note — the note is where the learning is consolidated, not a formality.

Related: All projects · Project roadmap · Mini projects · Advanced projects · Capstone options