// UML Class diagram representing a system for taking online orders for Pizza

class Account
{
  emailAddress;
  contactPhoneNumber;
  password;
  name;
  address;
  preferredCredCard;
  expiryDate;
  0..1 -- * Order;
}

class Order
{
  timePlaced;
  contactPhoneNumber;
  Float totalPrice;
  creditCardCharged;
  expiryDate;
  1 -- * OrderItem;
}

class OrderItem
{
  Integer number;
  Float totalPrice;
}

class PizzaOrder
{
    isA OrderItem;
kind;
  * -> * ToppingType toppings;
  * -> 1 StandardPizzaSize;
}

class ToppingType
{
  description;
}

class StandardPizzaSize
{
  sizeLabel;
}

class DrinkOrder
{
    isA OrderItem;
    drinkSize;
size;
}

class Delivery
{
  Time timePickedUp;
  Time timeDelivered;
  * -- 0..1 Driver;
  0..1 -- 1..* Order;
}

class Driver
{
  name;
}

//$?[End_of_model]$?

class Order
{
  position 22 271 219 154;
  position.association Order__OrderItem 219,54 0,48;
}

class OrderItem
{
  position 429 208 139 82;
}


class ToppingType
{
  position 465 466 149 64;
}

class StandardPizzaSize
{
  position 15 472 135 46;
}

class DrinkOrder
{
  position 494 349 109 46;
}

class Driver
{
  position 506 49 109 46;
}

class Account
{
  position 20 46 218 160;
  position.association Account__Order 32,160 30,0;
}

class Delivery
{
  position 260 47 160 75;
  position.association Delivery__Driver 160,12 0,10;
  position.association Delivery__Order 67,75 219,10;
}

class PizzaOrder
{
  position 267 437 109 58;
  position.association PizzaOrder__StandardPizzaSize 0,43 136,9;
  position.association PizzaOrder__ToppingType:toppings 109,39 0,10;
}
