I strongly suggest a ladder ranking system. This is a common system used in workplace and other community areas that provides for asynchronous tournament play.
Basically order your players 1-x and then any player can challenge a player higher on the ladder than themselves (within some boundary).
The tournament proceeds via a system of challenges. Any player can challenge a player above him or her on the ladder. If the lower-placed player wins the match, then the two players swap places on the ladder. If the lower-placed player loses, then he or she may not challenge the same person again without challenging someone else first. Usually, there is a limit as to how many rungs above themselves players may challenge. When first setting up a ladder tournament, usual practice is to place the more skilled players at the bottom of the ladder, so that they have to play to work their way up.
There are some flaws with this system, but it allows for asynchronous play, and does not unduly penalize people for not playing as often. Basically set a start date and an end date and use the final results of the rankings as either your final, or as the brackets for a single day tournament play event. Alternatively you could use something like ELO from chess, but ladder is much simpler as it does not require math.