We can't go for an exact calculation of an database. Eventhough if we do so , the size of the database is not static.
Calculating the Size of the database mainly depends on the transaction rate and volume. Make a chart of transaction rate and volume against number of users. And determine the avergage size of a transaction.
Initialize the storage settings for tablespace and table so that a single row can be accomodated in a block and a transaction can be accomodated in a rollback segment.
Take care in sizing redo log file. After setting the parameters check for the performance of the database and tune accordingly. Size SGA so that number of hits increases.
If you're referring to allocated size, you can sum the sizes of all the datafiles at the OS level ("du -sk" in Unix). If you're referring to utilized size, that is indeed dynamic. A snapshot valid for a particular time could be taken by "select sum(bytes)/(1024*1024) MB from dba_segments".