#include #include #include "supermarket.h" #define CUSTOMER_ITEM_COUNT 5 typedef struct { item Items[CUSTOMER_ITEM_COUNT]; int PackingSpeed; }customer; int main() { bool CustomersLeft = true; int TimePassed = 0; // NOTE: the {...} syntax is an easy way to initialize structs customer CustomerQueue[3] = { { {tissues, pasta, tomato_sauce, bread, butter}, 2 }, { {toothbrush, batteries, bread, bread, butter}, 3 }, { {bread, batteries, tomato_sauce, pasta, tissues}, 9 } }; int NextQueueIndex = 0; initTimeTable(); int ItemsLeft = CUSTOMER_ITEM_COUNT; int TimeToScan = 0; state CurrentState = STATE_ready_for_customer; int CurrentCustomer = 0; int CurrentItemIndex; while(CustomersLeft) { if(CurrentState == STATE_ready_for_item) { // TODO: check if there are items left // if not, change to the STATE_ready_for_customer state // and don't forget to reset ItemsLeft CurrentItemIndex = CUSTOMER_ITEM_COUNT - ItemsLeft; item CurrentItem = CustomerQueue[CurrentCustomer].Items[CurrentItemIndex]; TimeToScan = Time[CurrentItem] + CustomerQueue[CurrentCustomer].PackingSpeed; CurrentState = STATE_scanning; } else if (CurrentState == STATE_scanning) { TimePassed ++; TimeToScan --; if (TimeToScan == 0) { ItemsLeft--; CurrentState = STATE_ready_for_item; // NOTE: we moved the printf inside so the console doesn't get spammed with messages printf("Time since start: %ds. Scanned product %d. %d to go.\n", TimePassed, CurrentItemIndex, ItemsLeft); } } else // NOTE: we added the state STATE_ready_for_customer { // TODO: implement this. // don't forget to check if there are any customers left and to change // the state printf("Currently serving customer %d\n", CurrentCustomer); CustomersLeft = false; } } }