Push-button BCD counter circuit
You are apparently on the right track.  Now all you need is a binary counter that resets when it gets to 9.  That's a total of 10 discrete steps (0..9)

Basic theory should have told you that you need a minimum of 4 flip-lops.  3 flip-flops will count to a maximum of 7 (2^3 -> 0..7), so you need to add the 4th stage to get past 7.

The problem is that 4 flip-flops will count to 15 before rolling over back to 0.

There are two methods used to force a roll-over from 9 back to 0.

1) Use an AND gate to detect the 10th step and use that to reset all the flip-flops back to 0.  

The problem with this technique is that you get a very short glitch when the counter gets to "10" before resetting.  This is usually not a problem but you need to be aware that it occurs.

This is a simple counter consisting of 4- toggle flip-flops and one AND gate.  The toggle FFs can be made from D or J-K flip-slops.  The counter stages can be configured as either asynchronous (ripple counter) or synchronous.

2) Use J-K flip-flops and logic gates to construct a counter such that the next clock pulse after the 9th causes the J-K inputs to force the next clock pulse to go back to zero.  These are almost always synchronous counters: all of the outputs change on the active clock edge.

There is another class of counter known as a "Johnson Counter".  This is a counter where there is a single flip-flop for each step in the count.  In other words, a 10 step counter (0..9) would have 10 FFs.  The useful benefit offered by this class of counter is that only one output is active (either HI or LO) at any instant in time.

In other words, a Johnson counter doesn't require decoding to get 10 discrete outputs.