What I found is several things:
1. You can lookup the country code from the country if you have to. Or at least correlate it.
2. There is often an area code, but not always. Storing it separately brings up the problem of user input; keeping it with the rest of the number brings up the problem of when people omit entering it.
3. You will sometimes need an extension field. Make that separate.
4. There's no point parsing for exchange prefix.
That said, I myself would try to display numbers of the country the user is in in the national format. This will probably be what you will have stored; if you keep the area code in a separate field, you will need to know every local format. But I would then display numbers of any other country in international format. So here in AU, an US number would look like +1 801 555 1234 but an Au number would look like (02) 8543 1000. Conversely, in the US, the corresponding US number would look like either (801) 555-1234 or 1-801-555-1234 whilst the AU number would look like +61 2 8543 1000.
IME, the +code format is a far better visual clue of an international number than always displaying the number "ready to dial".
Wade.