I do have one addition to make to the above. At our university we usually use a combination of Guillemin and Pollack and Milnor. There is another approach at a first course which some have found useful: Bott and Tu's book, *Differential forms in algebraic topology.* Disclaimer: I have never used the text myself, but several colleagues have said in the past that it is a good book to use---and I am personally a big fan of Bott's approach to mathematical writing.