You have a relatively complex program. It's too big to think about all at once.
Break the program into subs. The main program coordinates passing data between the subs.
An example:
The main program coordinates the subs. getInput
fills quality
, size
, and region
. The main program sends those values to computePrice
, which fills price
, and so on.
You can write and debug getInput
without thinking about the rest of the program. This reduces screaming.