So, we officially screwed up this team project and I assume I'm gonna lose all 15 points of total grades, but this is what I learned:
1. Never, ever, trust anyone's progress until you see his/her code and execution result.
2. Apply software layering (use object-oriented) as much as possible so that it will be easier to divide work and less pain when we try to merge everyone's work, and may be easier to find out who's responsible for the bug.
3. Set up schedule (mile stones) as early as possible and make it into a document and require everyone to follow it, and don't expect everyone meets the schedule, be flexible and ready for behind the schedule.
4. List all the requirements and make sure each requirement has at least one member response to it, better make it into a document
5. If this is a network application, it's better to just have one member implement network layer and focus on setup connection on the network environment.
6. Strictly define interfaces between software layers and network protocols, write them down into a document (as detail as possible) so that everyone has a standard to follow, again, don't expect everyone will follow it, but it will make the progress less pain.
7. Leave enough time (at least one week I think) for merging everyone's work, because that's the time when everything goes wrong.
Finally, if your team member just don't do anything, it's better to do the project by yourself than trying to ask him/her to work.
Hopefully the other team project won't be screwed up, and I wish I'll never do team project again....