因为最主要是原因就是 buy 这个词不是一个延续性动词,用于完成时态的动词一般都要是延续性动词,表示动作的持续.
完成失态强调对现在造成影响,这是区分一般时态和完成时态的重要因素.
这句话你直接可以写: I bought a book in shanghai.
而写成 I have/had bought a book in shanghai.是不合适的,因为 buy 这一动作发生后就结束了.
请见关于延续性动词和非延续性动词的解释:
http://baike.baidu.com/view/238104.htm
http://baike.baidu.com/view/1603772.html?tp=0_10
http://zhidao.baidu.com/question/58884369.html?si=6
http://zhidao.baidu.com/question/9987331.html