Have a look at the following Trello board. When you have a Trello account, you can copy the board and then use it to track your progress.
Extend the library01 project from last week and implement the feature/use cases and scenarios mentioned on the board. For the "register user" use case, I have provided you with the feature file. Implement the corresponding step definitions and production code yourself. First implement the scenarios for "register user" that are in the scenario backlog. Add new scenarios to the backlog and then implement them if you think scenarios are missing. For example, what happens if I want to register a user with the same CPR number as a registered user but with different names? What happens if the CPR number differs, but all other information, name, address are the same?
After that, create the feature files and scenarios yourself based on the features in the features/use case backlog. The feature / scenario with the highest priority is the top-most feature / scenario in the list.
Note that each step can only have one definition, regardless in which class the definition is defined. The idea is, that each class with step definitions defines a "language" talking about concepts, like books, users, etc. However, this also means that the step definitions for one scenario are found in different files. Thus if one step creates a book in one class and another step in a different class, these books need to be shared. This is done with helper classes, that store, e.g., users and books that are shared across different step classes. In Chapters 7 of "The Cucumber Book for Java" in Section "Adding Custom Helper Methods" and following it is described how to share state using a helper object and using the concept of Dependency Injection.
Here are two short tips to help you with the homework
When you run the tests (Run>Run as>JUnit test) and you are missing step definitions, Cucumber will generate code snippets for these step definitions for you on the console. You can just copy them into the appropriate step classes. When you then run the tests again, these steps will throw a PendingException, which does not fail your tests (the step is skipped instead). On the console you see a message that reminds you to replace the PendingException with some sensible code.
Step definitions in the same scenario can be distributed among classes. This creates the problem to refer to variables defined in other classes. For example, if the step definitions for "register user" are in a class UserSteps.java but the step for checking for an error message is defined in the BookSteps class. Then how does the BookStep method know about the error message that was set in the UserStep method? The trick is to use a class ErrorMessageHolder, that has one field of type String called "errorMessage". Then, both the BookStep class and the UserStep class have a reference to an object of class ErrorMessageHolder. Since both refer to the same object, both have access to the same errorMessage (i.e. anErrorMessageHolder.getErrorMessage()). How do you instantiate both step class with the same ErrorMessageHolder object? This is done by Cucumber magic, called dependency injection. Both step classes need to have a constructor where an ErrorMessageHolder object is an argument, e.g. "void UserSteps(LibraryApp a, ErrorMessageHolder h)" and "void BookSteps(LibraryApp a, ErrorMessageHolder h)". In this case Cucumber looks for a class it can instantiate that can be used as argument to the constructor. Since there is only one class ErrorMessageHolder, Cucumber will create an instance of ErrorMessageHolder and use it as the argument to both constructors. Note that this also applies to the LibraryApp parameter, and this is the way LoginLogoutSteps and BookSteps (and also UserSteps) share the same LibraryApp object. You find more detailed information on this in Chapters 7 and 9 of The Cucumber for Java Book.
I have also uploaded a video showing how to implement the first two scenarios of the register user use case/feature, covering how to create step definitions and to share state between step definition classes.