完成预定功能，有时间再优化一下代码