Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Sprint 7 - Challenge 1

Open
#9 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
5/5
Estimated time
Over a week
Newbie friendliness
45/100
Issue type
Feature
Clarity
Clearly specified
Activity status
Quiet
Tech stack
java
Domain
cli

Research direction

Start by mapping the required PCComponent types, PCComponentFactory implementations, PC builder, and console menu to separate classes. Check each specification item, including component choices, themed factories, customization, pricing, specifications, delivery time, and the submission PR requirements; done means the complete application supports every listed menu option.

Written by the indexing model from the issue text.

Description

🎯 Topic Programming Fundamentals 🏕 Priority Mandatory 📅 Sprint 7 🦑 Size Large Core

Sprint Challenge 1

Overview

The code you write for this challenge is mandatory homework and should be completed and sent in a PR for review before class.

Build a computer store application that allows customers to configure and purchase custom computers.

Specification

Java application with a console-based menu system:

  • User options:

    • Build Custom PC (choose components manually)
      • Select processor (budget/performance/enthusiast)
      • Select graphics card (integrated/gaming/professional)
      • Select memory (8GB/16GB/32GB)
      • Select storage (HDD/SSD/NVMe)
      • Customize options (case color, warranty, RGB)
    • Quick Build - Budget PC
      • Use appropriate factory
    • Quick Build - Gaming PC
      • Use appropriate factory
    • Quick Build - Workstation PC
      • Use appropriate factory
    • View Available Components
    • Exit
  • After building, display:

    • Complete specifications
    • Total price
    • Estimated delivery time

Developer Guidance

  • Create a PCComponent interface with methods:
    • String getName()
    • double getPrice()
    • String getSpecifications()
    • ComponentType getType() (enum: PROCESSOR, GRAPHICS_CARD, MEMORY, STORAGE)
    • Create implementations: Processor, GraphicsCard, Memory, Storage
  • With static factory methods for:
    • Processor: budget(), midRange(), performance()
    • GraphicsCard: integrated(), gaming(), professional()
    • Memory: standard8GB(), standard16GB(), performance32GB()
    • Storage: hdd1TB(), ssd512GB(), nvme1TB()
  • Create an abstract factory interface for creating complete component families - each factory should coordinate components that work well together for their purpose
    • interface PCComponentFactory
    • Processor createProcessor()
    • GraphicsCard createGraphicsCard()
    • Memory createMemory()
    • Storage createStorage()
    • String getThemeName()
    • String getDescription()
  • Implement three themed factories:
    • BudgetPCFactory (£500-700)
      • Budget processor
      • Integrated graphics
      • 8GB memory
      • HDD storage
    • GamingPCFactory (£1200-1500)
      • Performance processor
      • Gaming graphics card
      • 16GB memory
      • NVMe storage
    • WorkstationPCFactory (£2000-2500)
      • Enthusiast processor
      • Professional graphics card
      • 32GB memory
      • NVMe storage
  • Create a PC class that uses a builder pattern to create instances,
    • with fields:
      • Processor (required)
      • Graphics Card (required)
      • Memory (required)
      • Storage (required)
      • Case colour (optional, default: "Black")
      • Warranty years (optional, default: 1)
    • And methods:
      • double getTotalPrice (sums price of components)
      • String getDetailedSpecs (returns a nicely formatted string of the component parts → you can also just use an overridden toString here if preferred)
Submission & Review

Fork the coursework repo to your own GitHub account.
Make regular small commits with clear messages.
When you are ready, open a Pull Request to the CYF repo. Make sure you fill in the PR template provided.
A volunteer will review your submission and send you feedback.

Dominant language
No language data
Stars
1
Forks
11
PR merge metrics
No merged PRs in 30d

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from CodeYourFuture/Module-Java

All issues in CodeYourFuture/Module-Java

Similar issues

More CLI issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.