Sì, è un po' "elaborato" e richiede di gestire svariate cose ma nulla di trascendentale.
Innanzitutto è chiaro che ci sono N voli, ognuno con M passeggeri. A parte gli aspetti di lettura del file e gestione dei comandi, la questione "chiave" da valutare bene è come legare insieme (intendo a livello di oggetti) i passeggeri ai voli.
Il fatto che la chiave univoca sia ID volo + data, ok. C'è solo una cosa che non mi quadra (per come è scritto il testo). La data dovrebbe essere, concettualmente, quella di arrivo ma per Volo è indicata solo la data di partenza.
Comunque il punto è proprio come legare passeggeri e voli. Non è precisato se nel file i passeggeri dovranno essere sempre dopo il loro volo. Se non è così (e lo suppongo), sarebbe critico legare i passeggeri ai voli mentre leggi il file.
Ad ogni modo, le possibilità sono almeno 2:
a) tenere separati gli oggetti Volo e Passeggero. Cioè non cercare di far sì che Volo abbia una collezione di oggetti Passeggero e nemmeno che Passeggero abbia il riferimento al Volo.
b) appena finito di leggere il file, cerchi di legare insieme tra di loro i voli e i passeggeri. Ovviamente le classi devono essere predisposte in tal senso.
Adesso è tardi, se hai dubbi specifici chiedi pure.