Because sending girl to school is not something you have to do, I think a little micromanagement is acceptable.
But if it is a problem, maybe there can be a course with a really bad teacher that is always available or something...
There will be plenty of courses to choose from and bad teacher will mean lower price as well.
If courses will be selected from a list and not by static buttons and have their own teachers, nothing is preventing from creating courses that teach more then one stat, or something unique or ones that are part of a quest/storyline (like send 5 girls to a secret training) in future, is that right?
What would be preventing that even if we used static buttons?
All courses will train multiple stats, randomly. Chance for improvement will depend on teachers teaching skill and max possible improvement will depend on teachers knowledge.
This is the way it stands now:
Beauty = dict(action = 'Beauty Course', primestats = ['charisma'], secstats = ['refinement']),
Combat = dict(action = 'Combat Course', primestats = ['attack', 'magic', 'defence', 'agility'], secstats = ['constitution','fame']),
Dance = dict(action = 'Dance Course', primestats = ['constitution', 'strip'], secstats = ['agility', 'refinement', 'charisma', 'fame']),
Etiquette = dict(action = 'Etiquette Course' ,primestats = ['refinement', 'intelligence'], secstats = ['charisma', 'reputation']),
Service = dict(action = 'Service Course', primestats = ['service'], secstats = ['reputation']),
XXX = dict(action = 'XXX Course', primestats = ['anal', 'normalsex', 'blowjob', 'lesbian'], secstats = ['strip', 'constitution'])
Higher chance for increment of primestats and lower for secstats.
For something Unique, like a trait gain or an event during the study, code will be written just like for jobs.
I am not sure about stroryline/Quests. Quest is quest, it much simpler to make such a training a part of a quest-script (like having them disappear from the game by changing their location to something unique and having them reappear any amount of days later with something done to their traits and stats, no matter how specific that something may be).
==================================================================================
Ok, it's getting late. I ended up writing logic again, just for schools this time

I'll see if I can write code more for this tomorrow.