Some data structures for the UltimateAthlete struct:
typedef struct UltimateAthlete {
uA_bioanalysis_t bioanalysis; // height, weight, age, name.. contains pointers to muscleanalysis, boneanalysis, etc
uA_injury_history_t injury_history; // list of bone, tendon, ligament, etc injuries sustained
uA_training_history_t training_history; // linked list of training programs/systems utilized, including sub-lists of training sessions per day, also including the pre-testing & post-testing results for each training program
uA_muscles_t muscleanalysis; // linked list of each muscle group, force & length/tension characteristics, dynamic/static/passive flexibility characteristics, injury history list, circumference/CSA - complete mapping, fiber composition, tendon lengths to insertion on bone
uA_bones_t boneanalysis; // list of bone lengths, csa's - complete mapping, bone density
uA_braintype_t brainanalysis; // the conscious & subconscious psychological aspects of the athlete
uA_diet_t dietaryanalysis; // a list of days with sublists to each meal/snack/liquid intake for that day, based per 24hour period
uA_sleep_t sleepanalysis; // a list the sleep habits experienced per day, for how long, feeling upon waking, how long it took to sleep, etc
} uA_t;
next, define those substructures lolz (ok lets just picture them for now).
everything could then be linked together based on timestamps, or, have it organized a different way, an array of ultimateAthlete structures with all information filled in for that day, each member of the array is the day they were alive, so you can just access ultimateAthlete[365] for data @ 1 year of age, then ultimateAthlete[365*20] for 20 years of age. Then you wouldn't have to keep a history any longer, the history would be in the array, the only thing you'd need to keep lists for is things that attach, like the muscleanalysis & boneanalysis substructures.
lool.
feedback_t * TrainingSession(ultimateAthlete_t *ua, ...) where ... is a variable length number of arguments consisting of an exercise_t *, which includes sets, reps, rest intervals, tempo, cues, weight lifted/height achieved/etc.. a feedback_t is returned, which contains lists of exercises & their outcomes, to monitor progress properly or to flag an exercise as dangerous or currently too intense, etc.
feedback_t is then used to update progressions, re-calculate maxes, flag exercises by adding them to integrity checks prior to sessions (ie, aquireListOfSafeExcercises( my_trainer->data ); )
etc
lolzlzlz