To find flight options, use Skyscanner: http://www.skyscanner.com/.
To find train options, use the use the Bahn (German Rail) website http://reiseauskunft.bahn.de/bin/query.exe/en, following Rick's tutorial: http://www.ricksteves.com/travel-tips/transportation/trains/online-schedules
Once you see how long the train takes, you'll probably want to fly. When searching, be aware that each city has multiple airports (as the airlines see it):
Barcelona has its own airport (code BCN) and is also served by Girona's airport (GRO)
Milan is served by Milan Linate (LIN, by far the closest), Milan Malpensa (MXP), and Bergamo Orio al Serio (BGO)
Rome has Roma Fiumicino (FCO) and Roma CIampino (CIA)
Look at all options, but when figuring out the best deal, add in the cost and time it will take to reach each airport. Also realize that "legacy" carriers like Iberia and Alitalia are more likely to include one checked bag in the fare and to have a more generous carry-on allowance. So, they need not be more expensive than a "budget" carrier once you figure in all the extras. Do a dummy booking (up to the point where you put in your credit card) to see ALL the charges.
Read all the fine print, and realize that budget airlines make their money from people who don't do that. In other words, if they say the maximum carry-on size is 35 cm and you bag is 36 cm, they will make you check it - and charge you the higher in-airport fee for doing this, rather than the lower online in-advance fee. Some airlines require you to have printed your boarding pass before you get to the airport, or, again, they have a huge surcharge for doing this at the airport. And if they say one carry-on, they mean one total - not one plus a personal item. If you can stuff your purse into your suitcase, and still meet their size and weight restrictions, that's fine; if not, be sure to pay in advance for checking bags.