I second a_p. The direct Gothard route is the less scenic one, but it can be upgraded with some detours, like:
Milan Porta Garibaldi dp by train 9.00 - Stresa ar 10.26, dp by boat (not daily) 11.15 - Locarno ar 14.30, dp by train 15.45 - Lucerne ar 18.41
or
Milan Centrale dp by train 7.35 - Capolago ar 8.45, dp by cog train 9.20 - Monte Generoso (view point, 1600m above sea level) ar 9.55, dp 11.45 - Capolago ar 12.27, dp by train 12.45 - Bellinzona ar 13.30, dp 14.06 - Flüelen ar 15.41, dp by boat 16.00 - Lucerne ar 18.41
Trains Lucerne - Zurich airport about every 30 min from 5.28 until 22.35; 1 1/4 hrs ride.
Milano - Zurich via Bernina - Albula (9 1/2 hrs trip, highly recommended):
Milano Centrale dp 6.20, 8.20, 10.20, 12.20, 14.20. Change at Tirano, Pontresina, Samedan and Chur, except for the Milan dp 10.20 train: direct panoramic Bernina Express train from Tirano up to Chur.
Optimal solution:
Milano Nord dp by train 8.59 - Como Lago ar 9.55, dp by boat 10.30 - Bellano ar 13.00, dp by train 13.33 - Tirano 14.50/15.40 - Bernina - St. Moritz ar 18.08. Next day: St. Moritz dp 5.57 - Zurich airport ar 9.46 (trains every hour).
The route via Brig is scenic too (along Lake Maggiore and Lake Thun). It would be a very good solution with a side trip from Brig to either Aletsch Glacier or Zermatt:
Milan Centrale dp 7.28 or 8.28 - Brig ar 9.16 or 10.16 - Riederalp (Aletsch) ar 9.50 or 10.50, resp Zermatt ar 10.52 or 11.52
Brig - Zurich airport: direct trains (2 1/2 hrs trip) at least every hour from 5.47 until 19.49