Design and Programming
Please read the COMPLETE document before commencing any work.
In the previous Case Study exercise, you were introduced to the problem of dealing with
notifications for library members. We had established that there were three types of notification
required by the specification:
1. Notification that a reserved book had become available.
2. Notification that an ordered book had become available.
3. Notification that a book return was late and of a resultant fine.
During the design and implementation cycle or sometime thereafter it is likely that some
stakeholder will point out the need for a further notification – when a membership card becomes
available for a member, they will need to be informed that they can collect it. Discovering such
requirements late in the development cycle can be costly if it requires compromising code that has
already been written. This is where using good design patterns is important. They can ensure that
the system can be built in such a way that new requirements can be met without heavy editing of
the code that has already been completed.
I do not, of course, expect you to produce a complete library system. You currently have two files,
books.csv and bookloans.csv representing books possessed by a library and loans of books made by
the library over a time period. To this I have added members.csv which contains a list of members
with card numbers and membership numbers. Any member with a card number of 0 is awaiting
issue of a membership card. Note that the CSV files are encoded as UTF8.
We have not learned about databases and hence will have to make do with the storage methods
covered during the course. For purposes of this exercise, you may open the files and utilise their
data in-memory, saving the information back to file if it has been updated. You should think about
providing an interface to the data that will allow other forms of data storage to be ‘plugged in’ in the
future. Note that the JSON and PICKLE storage mechanisms will not deal with user-defined classes.
Thus, to create any objects the relevant data will have to be extracted from the storage structure
1. Provide code that will allow a member to borrow a book, recording the results as a new
bookloan. You can provide both Book and Member classes with a method scan() which will
return the id of an instance of each respectively. Do not worry about representing a
membership card. Cards can be an attribute of Member. Use dummy data to test the code
and state the preconditions and postconditions of the operation in a docstring.
2. Provide code that will allow a member to return a book, again ensuring that necessary data
is stored. Test the functionality with appropriate dummy data and again provide pre and
postconditions as a docstring.
3. Provide functionality that will allow a member of the public to apply for membership. This
will involve the storage of information on the membership request. Each day, a list of new
member details is sent to an external print company who produces membership cards. Cards
are delivered to the library approximately three days later, when the membership cardnumber is recorded. The format of the card number is made up of the membership number
followed by a single digit indicating the sequence number of the card associated with the
member. 1 means the first card issued to the member, 2 the second and so on. There is an
obvious flaw here, but you can ignore it for purposes of the exercise.
4. Provide functionality to allow a member to reserve a book. Assume that they have the
number of the book available. This will require permanent storage as it may be some time
before a book becomes available.
5. Using the research that you conducted on design patterns, implement a notification system
along the lines described in the Preamble to this assignment. You can assume that all
notifications are sent by email, providing a test sendEmail() method which merely prints to
the console the message passed as an argument. Test the system and show or describe how
it is capable of coping with the situations described in the preamble and how it might be
sufficiently flexible to deal with future notification requirements.
Parts 1 to 4 attract a maximum of 10 marks each and part 5, 20 marks. Within each part, 60% of the
marks are awarded for code and functionality and 40% for good design and documentation. Submit
your work as a Jupyter Notebook. You should also submit your data files (as JSON). It is not
necessary to include the original CSV files, and your code should function without them. Your code
should assume that the data files are in the same directory as the Jupyter Notebook. The JSON files
should be placed in a ZIP file (using the ZIP format). Please do not submit RAR or other file formats.
There are thus two files to submit – your Jupyter Notebook (.ipynb) and the data.zip file.
- Assignment status: Already Solved By Our Experts
- (USA, AUS, UK & CA PhD. Writers)
- CLICK HERE TO GET A PROFESSIONAL WRITER TO WORK ON THIS PAPER AND OTHER SIMILAR PAPERS, GET A NON PLAGIARIZED PAPER FROM OUR EXPERTS