基本完成，有一两个方法还需要完善