If it makes no difference how the timer works, then just use delay() to wait for 5 minutes after the water is turned on. Then, turn it off.
If it does matter, then using millis() to create a timer is pretty simple. On each pass through loop, see if coins have been inserted (does adding more coins extend the shower time?). If so, set a flag, coinsEntered, to true. If coins have been inserted and coinsEntered is true, you would set (or reset) the water on time (showerTime).
See if the start button has been pushed. If so, set a flag startPressed to true.
See if coinsEntered and startPressed are both true. If so, set a flag, waterRunning to true. Turn the water on. Set the time that the water was turned on, waterOn = millis().
If the water is running, see if its time to turn it off (now - waterOn time exceeds showerTime). If so, turn the water off, set coinsEntered to false, set waterOn to false, and set startPressed to false.
If it is not time to turn the water off, there is nothing to do - no else clause is needed.
This approach allows for additional coins to extend the time that the water is on.
Use unsigned long for all time-related variables (waterOn, showerTime, etc.)