完成最终的代码，后续优化一下