1) spend a lot of time thinking, so you spend less time typing. If you are a beginner, you should probably spend 80-90% of your time planning what you will write, rather than just diving in and starting to code
2) try to break down the problem in to simple, discrete components. Most of those components will have discrete components themselves.
3) think about how you, personally, with only paper, pencil, and erasers, would do this. As in, you are behind a counter, someone walks up to you. What would you do first? second? third? what would you do over and over? how would you know when you were done doing those things over and over?
When you DO start coding, write a few lines at a time, compile, and test. then fix everything that's wrong. then write a few more lines (literally, like 2-3 lines AT MOST). You want each cycle to advance your design, but not be so big that you can't find where the bug is. TEST TEST TEST much more than you think you should.
Sometimes, you write throw-away code. for example, if I were starting on the piece for the custom sandwich, my first go might simply print "ordering custom sandwich". that print statement won't be in my final code, but it lets me write a couple line, proves that the method is being called, and so on. Then the next iteration might take that out (probably just comment it out in case I need it later), and then ask "what toppings would you like" and list them. It won't yet DO anything about them, just list them. When THAT works, maybe write a method that lets the user select ONE topping. when that works, write a loop that calls that "getOneTopping" method up to three times...etc.
you want to build your project like it's legos...adding just a few pieces at a time.