CP Publish User Interface
Both calendars and events for calendar are just glorified channel entries. You create them just like you would a regular entry, but through the designated Calendar: Calendars and Calendar: Events channels. Just like regular channels, you can add/edit custom fields for each.
The Calendar module contains a complex and powerful UI for the Publish/Edit page in the ExpressionEngine Control Panel. You can easily create very flexible repeating occurrences, as well as unlimited exceptions to the rules (include dates / exclude dates). Below are some screenshots of it in use.