This is a portfolio page for Wang Shiyao - intended to highlight the contributions that he has made to his CS2103T Software Engineering Project.
In the spirit of spreading education, literacy and a sense of community to the world (and completing our software engineering project), my team has developed Liberry - a desktop software for managing community and private libraries. The target users are mainly librarians in under-developed communities who cannot afford commercial versions of such software.
LiBerry can execute the basic functions of library management:
-
Addition and deletion of books in the catalog
-
Registering Borrowers and editing their particulars
-
Loan, return, renew and pay fine functions
-
Searching through books in the catalog by filters
As part of the requirements of the project, we were given the source code for a common AddressBook application and were tasked to morph it to something else that is useful. We were also limited to designing software that takes in the majority of user input through a Command Line Interface (CLI), though displays information through a Graphical User Interface (GUI).
This is what the GUI looks like:
My role was to:
-
configure the basic AddressBook software to accommodate Json-type storage for a catalog, a record of borrowers, and a record of loans.
-
design the Find Command to execute given a set of parameters - such as searching by title, genre, loan status etc.
Major enhancement:
added find
command - giving the ability to filter the catalog by various parameters
-
What it does:
-
Searches books in catalog through filtering by:
-
title
-
author
-
serial number
-
genres
-
loan status (available / loaned / overdue)
-
-
sets the number of books to display in the search results
-
-
Justification:
This feature is very powerful as it helps the user search through the entire catalog quickly according to the query’s requirements. For example, a user may want to find if a certain book of a certain title is in the catalog, but only remembers the word 'Harry' from the title. This command will show all books in the catalog with the word 'Harry' in it. Another possible use case would be if a borrower, say, a parent, wanted to check if there were available 'children' books. Afind 10 g/children -available
command will suffice in bringing out the first 10 books that were available for borrowing belonging to the genre 'children'. -
Highlights:
This enhancement was decently demanding as it required a way to test every book on whether it met the query requirements. It showcases my ability to play with functional programming and Streams in Java. As the predicate used has multiple possible combinations, extensive tests were written to ensure that it worked the way it should.
Minor enhancement:
Made all search parameters (with the exception of book serial number) case insensitive
-
Justification:
This feature allows users to be
Code contributed:
[FindCommandParser Class]
[BookPredicate Class]
[Flag Class]
[BookPredicate Tests]
[Storage Manager Tests]
[FindCommand Tests]
[FindCommandParser Tests]
and other minor contributions
Other contributions:
* Project management:
Managed releases v1.3
- v1.5rc
(3 releases) on GitHub
* Enhancements to existing features:
Updated the GUI color scheme (Pull requests #33, #34)
Wrote additional tests for existing features to increase coverage from 88% to 92% (Pull requests #36, #38)
* Documentation:
Did cosmetic tweaks to existing contents of the User Guide: #14
* Community:
PRs reviewed (with non-trivial review comments): #12, #32, #19, #42
Contributed to forum discussions (examples: 1, 2, 3, 4)
Reported bugs and suggestions for other teams in the class (examples: 1, 2, 3)
Some parts of the history feature I added was adopted by several other class mates (1, 2)
Given below are sections I have contributed to in the User Guide. They showcase my ability to write documentation targeting end-users. |
Purpose of Command:
This command allows users to search through the entire catalog.
Given below are sections I have contributed to in the Developer Guide. They showcase my ability to write technical documentation and the technical depth of my contributions to the project. |
Book Finding is the main feature that I have implemented in LiBerry. The following is an extract from the Developer Guide