I have no mod points and parent is already +5 but YES! YES! YES!
You cannot imagine how frustrating it is to send a mail to a site admin on another continent saying something like:
"Our intrusion detection systems - for which the company invested hundreds of thousands of dollars, not to mention the countless man hours configuring, testing and analyzing results - have identified that the PC named X, connected to port Y of switch Z is clearly virused. It appears to be sharing a mini-switch with computers A,B,C,D, and E so if we shut down the port we cut off all the other computers too. Could you take a look at PC X? By the way - don't forget the possible consequences of remotely logging into a networked, virused PC with your domain adminstrator credentials" ... and receive the response:
"Well I know which building that is but there are hundreds of computers in there. It would take me days to find it. I'll just wait until the user calls in with a problem"
System Administrators everywhere: If you cannot walk straight to a machine on your wired network given its Name, switchport or IP address you are not administrators but passengers.
You really do need to know the physical location of the jacks connected to every port on your wiring closet's patch panels, using any of the ideas mentioned in the above comments. Then you need to know which port of your switch connects to which jack on the patch panel. The people who already have patch cables with idents at both ends are probably not going to be the people with problems, but for those who don't it is never too late to start. I bought a load of laser printable cable labels and printed long numbers (and corresponding barcodes) on them. It takes me about 40 seconds to put idents on both ends of a new patch cable and saves me hours tugging at cables to see what moves or unplugging them to see which light goes out.
Never identify your cables with names like 'server-1' because it WILL be used for something else one day but will not be re-labled. Just put an identifier which is unique to each cable at both ends of the cable. You can then easily look at every port of your patch panel and note which cable ends there, then look at every port of your switches and note which cable starts there. Once you have done it the first time it doesn't take much time to audit it from time to time. Although it is not much work to write a script to generate a list of which cable goes where, just using the search feature of any text editor should enable you to find source and destination for any cable, and from that you should be able to work out the location of any computer given its switchport.
There are lots of ways to map your site retroactively. Some work well and some don't.
Having every computer's name include the user's name works nicely in conjunction with the company phone list, but doesn't work well for lab PCs
If you are using VOIP telephones with internal mini-switches so the computer plugs into the phone you are laughing - just talk to your phone switch administrator if that isn't you. Disclaimer: I only have experience of Cisco VOIP phones. Again - lab PCs are a problem
Use your managed switches' spantree information to list which macs are on which ports, use your router's arp table to list which IP addresses are associated with which macs. If you live in Windows land use NBTSTAT -A (ip address) or preferably use nbtscan to find which mac and Computer name correspond to which IP. When you have seen what the data looks like - script it. It doesn't take long. Script Hint: Macs will appear on several different switches, most of them being on the inter-switch link. The port with the smallest number of connected machines is probably the port the mac is really connected to.
I set up my system before we had IP phones so for my sites the system was simple. The wiring closet is locked and no changes are made until they are documented. The engineers I supported would not make changes to the product without documentation and approval, the beancounters I supported would not make payments without documentation and approval, so why should IT be so unprofessional as to make undocumented changes to the nerve system of the company?
Tools used?
Excel workbook to store all the data, lotsa perl because that was the scripting language at the time, and it could read the data from the individual worksheets in the workbook.
To avoid errors you should never have to enter the same piece of information in a workbook twice. My choice was that each workspace on my Excel spreadsheet floorplan would contain a few cells for user name, user extension, user jack(s). A separate sheet of the workbook would contain a list with columns for location, user, phone ext, jack(s) and almost every cell of that list would be generated by referring to a cell on a floorplan. It takes time to save time and reduce errors.
Don't use Excel macros. IMHO they are one of the few things harder than perl to maintain.
The hardest bit would have been generating maps of the site. My sites have all been on rectangular grids so it was possible to make floor plans on separate worksheets of the workbook. I once helped set up a site in Israel where the majority of internal and external walls were curved and there was no easy way of representing workspaces on a rectangular grid. Fortunately it was small enough that the site administrator knew the names and locations of all the users and all the computers.
If you think this sounds like a 20th century solution - well done! That's when I developed it, although I refined it significantly in the early 2000's.
For all those sysadmins who advocate 21st century solutions but can't walk directly to a given PC given its switchport - Do try and keep up.