基本完成；需要净化代码