Then you derive a contradiction from 4 and 2 and thus derive p from 3. In the same way, you derive q, and so p & q. And this contradicts 1, so from 2 you derive ~p | ~q.

I have not been following textbooks, unfortunately. The only book on general introduction to discrete mathematics I know is the one I used several years ago: Kenneth H. Rosen, Discrete mathematics and its applications. It is pretty good. I would search on Amazon for textbooks with good reviews. Also, you can search for discrete math textbooks used in universities (in Google, use "site:edu" to search only the .edu domain).

For natural deduction (of which Fitch calculus is one possible notation), you can look at references on Wikipedia. I also found this post on Lambda the Ultimate blog. I personally would lean to expositions by computer scientists rather than philosophers. In particular, I like Frank Pfenning's lecture notes.