first commit, it just can run in a right way, but many codes should be refactored, many function should be added