given you frustration level I'd recommend working with a trainer. shouldn't take many visits (maybe at home would work better). a positive based knowledgeble trainer.
Have you looked intot he trainer at the petsmart classes? Were those the only option? sometimes you can find a decent trainer there (or even a good one) but often it's just staff that followed a very basic course to then teach the stuff. so not ideal.
what's a normal day for him like?