Design Assignment using UML - Simple Voice Messaging System
This system is a simple phone voice messaging system. It acts as an answering service for an organization wide phone system.
You are to construct the software for the message system only and can assume that the hardware for the phone system, dialing,
and message recording are in place.
The interface to the Phone System is given below; you will be building this message system
as an add-on to the Phone System and must use this API.
PhoneSystem
Pickup () //Initiates one end of a connection
Hangup () //Ends a connection
dial (char) //Allows dialing of '0'..'9', '#', '*'
ring () //Sends a ring to the reciever in connection
play (message) //Play message
connection () : Boolean //True if a connection exists
record (int) : message //Record a message until hangup() or time
//limit (seconds) is reached
getRingCount () : int //Returns the number of rings
getDial () : char //Returns the character dialed (buffered)
//returns 0 if buffer is empty
//returns -1 if a hangup occurs
getExtension () : string //Returns the current extension
A connection (object) is activated after n (e.g., 4) number of rings without a pickup (answer) from the account owner.
Each account is indexed by a unique extension that is determined by the phone system. Some numbers belong to active
extensions; others do not. If an inactive extension account has been dialed, an error message is generated
telling the caller then the message system reverts to its initial state. If an active account has been reached,
the account's greeting is played. Unless changed by the owner, the greeting is:
"You have reached extension xxxx.
If you would like to leave a message press 1
If you would like to access an account press #".
At this point, the caller can record a message by talking. The message is ended with a hang up or a timeout in number of
seconds. Alternatively, callers can press the "#" key to access their own account from a phone and enter in the proper
extension and password. An owner can also dial "8888" from their own phone and just enter their password to access their
account.
The phone system interface allows access for the caller and the message system. When a pickup is done and dial tone is
set and a connection is initiated. The caller can then dial an extension and system will ring an extension until someone
does a pickup at the other end or the caller hangs up. Connection will be true so long a hangup is not executed. The
Phone System manages all other aspects of the connections, message recording, and message playback. All characters dialed
are buffered in a queue which is accessed via getDial. All interface calls are blocking and as such the message system will
wait until the interface call has completed execution and a value returned.
An administration account exists and has extended functionality to manage the message system. The admin account can add or remove
a accounts and set a user's password.
The following are a subset of the system menu options:
Accessing an Account
To restrict access to an account to its owner, the system prompts for a password.
After the account owner has entered the correct password, it is possible to retrieve messages
from the account or to change account settings. The user options menu is:
Press 1 to retrieve your messages.
Press 2 to change your greeting.
Press 3 to change your password.
Retrieving Messages
The first message is displayed. Then the message options menu is:
Press 1 to play the current message.
Press 2 to delete the current message.
Press 3 to skip the current message.
After the selection is processed, the next message is played or an acknowledgement of the action is given.
This repeats until all messages are played. Then the user options menu is repeated. At any time, the caller may
hang up. New messages are played in the order in which they were received. After all new messages are played,
the saved messages are played in the order in which they are saved.
Assignment (using a UML tool of your choice):
- Develop Use-Case diagram(s) for the specified system
- Develop a data dictionary and initial object diagram for the system
- Develop detailed scenarios for:
- accessing an account
- retrieving a message
- deleting a message
- leaving a message
- Develop detailed sequence diagrams for each of the scenarios above.
- Develop a detailed class diagram that describes the necessary design elements for this part of the system.
- The design must reflect that the system will need to be multi-threaded to support multiple simultaneous users.
- Submit (in GitHub Classroom) the following documents for the message system:
- Use case diagrams (using a UML tool)
- Data dictionary (neatly typed up)
- Scenarios for the 4 features (neatly typed up)
- Sequence diagrams for the 4 features (using a UML tool)
- Class diagram (using a UML tool)
Some UML Tools are listed under resources