#LyX 2.2 created this file. For more info see http://www.lyx.org/ \lyxformat 508 \begin_document \begin_header \save_transient_properties true \origin unavailable \textclass article \begin_preamble \usepackage{listings} \usepackage{xcolor} \usepackage{pdflscape} \usepackage{courier} %\usepackage{mathtools} \usepackage{graphicx} \usepackage{booktabs} \usepackage[T1]{fontenc} \usepackage{lmodern} \usepackage{listings} \lstset{columns=fullflexible} \usepackage{charter} \usepackage{xspace} \usepackage{algorithmicx} \usepackage{algpseudocode} % Definizione intestazioni e pie' di pagina \usepackage{fancyhdr} % _____________________________ \lstdefinelanguage{JS}{ keywords={typeof, new, true, false, catch, function, return, null, catch, switch, var, if, in, while, do, else, case, break}, keywordstyle=\color{blue}\bfseries, ndkeywords={class, export, boolean, throw, implements, import, this}, ndkeywordstyle=\color{darkgray}\bfseries, identifierstyle=\color{black}, sensitive=false, comment=[l]{//}, morecomment=[s]{/*}{*/}, commentstyle=\color{purple}\ttfamily, stringstyle=\color{red}\ttfamily, morestring=[b]', morestring=[b]" } \definecolor{dkgreen}{rgb}{0,0.6,0} \definecolor{gray}{rgb}{0.5,0.5,0.5} \definecolor{mauve}{rgb}{0.58,0,0.82} \lstset{frame=tb, language=JS, aboveskip=3mm, belowskip=3mm, showstringspaces=false, columns=flexible, basicstyle={\small\ttfamily}, numbers=none, numberstyle=\tiny\color{gray}, keywordstyle=\color{blue}, commentstyle=\color{dkgreen}, stringstyle=\color{mauve}, breaklines=true, breakatwhitespace=true, tabsize=3 } % _____________________________ \end_preamble \use_default_options true \begin_modules InStar graphicboxes fix-cm fixltx2e fixme customHeadersFooters pdfform \end_modules \maintain_unincluded_children false \begin_forced_local_layout Format 60 Style "In Preamble" Category "FrontMatter" Margin Static LatexType Paragraph InTitle 0 InPreamble 1 TocLevel -1000 NeedProtect 0 KeepEmpty 0 NextNoIndent 0 CommandDepth 0 LatexName "dummy" ItemCommand item LabelType No_Label EndLabelType No_Label ParagraphGroup "0" ParIndent MM ParSkip 0.4 ItemSep 0 TopSep 0 BottomSep 0 LabelBottomSep 0 ParSep 0 NewLine 1 Align Block AlignPossible Block, Center, Layout, Left, Right FreeSpacing 0 PassThru 0 ParbreakIsNewline 0 RefPrefix OFF HTMLLabelFirst 0 HTMLStyle div.standard { margin-bottom: 2ex; } EndHTMLStyle HTMLForceCSS 0 HTMLTitle 0 Spellcheck 1 ForceLocal 1 End Style "In Title" Category "FrontMatter" Margin Static LatexType Paragraph InTitle 1 InPreamble 0 TocLevel -1000 NeedProtect 0 KeepEmpty 0 NextNoIndent 0 CommandDepth 0 LatexName "dummy" ItemCommand item LabelType No_Label EndLabelType No_Label ParagraphGroup "0" ParIndent MM ParSkip 0.4 ItemSep 0 TopSep 0 BottomSep 0 LabelBottomSep 0 ParSep 0 NewLine 1 Align Block AlignPossible Block, Center, Layout, Left, Right FreeSpacing 0 PassThru 0 ParbreakIsNewline 0 RefPrefix OFF HTMLLabelFirst 0 HTMLStyle div.standard { margin-bottom: 2ex; } EndHTMLStyle HTMLForceCSS 0 HTMLTitle 0 Spellcheck 1 ForceLocal 1 End \end_forced_local_layout \language english \language_package default \inputencoding auto \fontencoding global \font_roman "default" "default" \font_sans "default" "default" \font_typewriter "default" "default" \font_math "auto" "auto" \font_default_family default \use_non_tex_fonts false \font_sc false \font_osf false \font_sf_scale 100 100 \font_tt_scale 100 100 \graphics default \default_output_format default \output_sync 1 \bibtex_command default \index_command default \float_placement H \paperfontsize default \spacing single \use_hyperref true \pdf_bookmarks true \pdf_bookmarksnumbered false \pdf_bookmarksopen false \pdf_bookmarksopenlevel 1 \pdf_breaklinks false \pdf_pdfborder false \pdf_colorlinks false \pdf_backref false \pdf_pdfusetitle true \papersize default \use_geometry true \use_package amsmath 1 \use_package amssymb 1 \use_package cancel 1 \use_package esint 1 \use_package mathdots 1 \use_package mathtools 1 \use_package mhchem 1 \use_package stackrel 1 \use_package stmaryrd 1 \use_package undertilde 1 \cite_engine basic \cite_engine_type default \biblio_style plain \use_bibtopic false \use_indices false \paperorientation portrait \suppress_date false \justification true \use_refstyle 1 \index Index \shortcut idx \color #008000 \end_index \leftmargin 2.5cm \rightmargin 2.5cm \secnumdepth 3 \tocdepth 3 \paragraph_separation indent \paragraph_indentation default \quotes_language english \papercolumns 1 \papersides 1 \paperpagestyle default \tracking_changes false \output_changes false \html_math_output 0 \html_css_as_file 0 \html_be_strict false \end_header \begin_body \begin_layout Standard \begin_inset ERT status open \begin_layout Plain Layout \backslash begin{titlepage} \end_layout \end_inset \end_layout \begin_layout Standard \begin_inset ERT status open \begin_layout Plain Layout \end_layout \begin_layout Plain Layout \backslash newcommand{ \backslash HRule}{ \backslash rule{ \backslash linewidth}{0.5mm}} \end_layout \begin_layout Plain Layout \backslash center \end_layout \begin_layout Plain Layout \backslash textsc{ \backslash LARGE Politecnico di Milano} \backslash \backslash [1.5cm] \backslash textsc{ \backslash Large PowerEnjoy} \backslash \backslash [0.5cm] \end_layout \begin_layout Plain Layout \backslash textsc{ \backslash Large Software Engineering 2} \backslash \backslash [0.5cm] \end_layout \begin_layout Plain Layout \end_layout \begin_layout Plain Layout \backslash HRule \backslash \backslash [0.4cm] { \backslash huge \backslash bfseries Design Document} \backslash \backslash [0.4cm] \backslash HRule \backslash \backslash [1.5cm] \end_layout \begin_layout Plain Layout \backslash begin{minipage}{0.4 \backslash textwidth} \backslash begin{flushleft} \backslash large \backslash emph{Authors:} \backslash \backslash Giancarlo \backslash textsc{Colaci} \backslash newline Giulio \backslash textsc{De Pasquale} \backslash newline Francesco \backslash textsc{Rinaldi} \backslash end{flushleft} \backslash end{minipage} ~ \backslash begin{minipage}{0.4 \backslash textwidth} \backslash begin{flushright} \backslash large \backslash emph{Supervisor:} \backslash \backslash Elisabetta \backslash textsc{De Nitto} \backslash end{flushright} \backslash end{minipage} \backslash \backslash [3cm] \end_layout \begin_layout Plain Layout \end_layout \end_inset \end_layout \begin_layout Standard \begin_inset Graphics filename res/img/logopm.pdf width 30text% \end_inset \end_layout \begin_layout Standard \begin_inset ERT status open \begin_layout Plain Layout \backslash vfill \end_layout \begin_layout Plain Layout { \backslash large \backslash today} \backslash \backslash [3cm] \end_layout \end_inset \end_layout \begin_layout Standard \begin_inset ERT status open \begin_layout Plain Layout \backslash end{titlepage} \end_layout \end_inset \begin_inset Newpage newpage \end_inset \end_layout \begin_layout Standard \begin_inset ERT status open \begin_layout Plain Layout \backslash mbox{} \backslash thispagestyle{empty} \backslash newpage \end_layout \end_inset \end_layout \begin_layout Standard \begin_inset Newpage newpage \end_inset \end_layout \begin_layout Standard \begin_inset CommandInset toc LatexCommand tableofcontents \end_inset \begin_inset ERT status open \begin_layout Plain Layout \backslash thispagestyle{empty} \end_layout \end_inset \end_layout \begin_layout Standard \begin_inset Newpage newpage \end_inset \end_layout \begin_layout Standard \begin_inset ERT status open \begin_layout Plain Layout \backslash setcounter{page}{1} \end_layout \end_inset \end_layout \begin_layout Section Introduction \end_layout \begin_layout Subsection Revision History \end_layout \begin_layout Standard \align center \begin_inset Tabular \begin_inset Text \begin_layout Plain Layout Version \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout Date \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout Author(s) \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout Summary \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout 1.1 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout 14/01/2017 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout Giancarlo Colaci, Giulio De Pasquale, Francesco Rinaldi \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout Name refactoring \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout 1.0 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout 12/12/2016 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout Giancarlo Colaci, Giulio De Pasquale, Francesco Rinaldi \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout Initial Release \end_layout \end_inset \end_inset \end_layout \begin_layout Subsection Brief description \end_layout \begin_layout Standard This document describes design process for PowerEnjoy project based on the requirements described in the RASD. It is divided into four sections, following \shape italic IEEE \shape default standard: \end_layout \begin_layout Itemize \series bold Architecture Design \series default , which describes the structure of the system, highlighting software elements and relations among them and their properties; \end_layout \begin_layout Itemize \series bold Data Design \series default , which describes the chosen data structures, dictated by attributes and relationships among data objects; \end_layout \begin_layout Itemize \series bold Interface Design \series default , which describes either internal or external program interfaces; \end_layout \begin_layout Itemize \series bold Procedural Design \series default , which describes procedural details using graphical notations that facilitates translation to code. \end_layout \begin_layout Subsection Purpose \end_layout \begin_layout Standard The purpose of this document, the Design Document, is to give more technical details than the RASD about PowerEnjoy system. In more detail, this document is addressed to software developers to let them better understand what is to be built and how it is expected to be done. The main goal of this document is to completely describe the system-to-be by detecting and describing the adopted architectural style, the high-level components of the software-to-be and how these components are distributed on the architecture's tiers and how they communicate and interact with each other, according to the dictates and the guide-lines provided by the RASD. \end_layout \begin_layout Subsection Scope \end_layout \begin_layout Standard The aim of this project is to develop a web/mobile application for PowerEnjoy, in order to let any registered and active user to reserve a car nearby and drive it in a simple and effective way. Thanks to a smarter uniform distribution of cars in the city that maximizes the probability to find a car nearby and to our competitive prices and some special discount, every user will experience a totally new feeling of freedom and will enjoy saving while driving. No car parking ticket. No refuelling. No road tax. No hidden costs. PowerEnjoy will make it possible. \end_layout \begin_layout Subsection Definitions, Acronyms, Abbreviations \end_layout \begin_layout Standard Below there are definitions of some terms that will be used in the document, in order to avoid any ambiguity in their use and their understanding. \end_layout \begin_layout Description API: Application Programming Interface; it is a common way to communicate with another system. \end_layout \begin_layout Description DBMS: DataBase Management System, a software that control the creation, maintenance and use of a database. (e.g. MySQL) \end_layout \begin_layout Description DD: Design Document. \end_layout \begin_layout Description EJB: Enterprise JavaBeans, a managed server-side component architecture for modular construction of enterprise applications. \end_layout \begin_layout Description \shape italic EJB \begin_inset space ~ \end_inset Container \shape default : a software that implements Sun EJB specifications in order to correctly manage session and entity beans. \end_layout \begin_layout Description \shape italic Entity \begin_inset space ~ \end_inset bean \shape default : a distributed object that have persistent state. \end_layout \begin_layout Description JavaBeans \begin_inset space ~ \end_inset Components: Objects that act as temporary data stores for the pages of an application. \end_layout \begin_layout Description JAX-RS: Java API for RESTful Web Services, a Java programming language API specification that provides support in creating web services according to the Representational State Transfer (REST) architectural pattern. \end_layout \begin_layout Description JDBC: Java Database Connectivity, a Java API that allows the application to communicate with a database.open source database manager system, a software capable of managing data. \end_layout \begin_layout Description JSF: JavaServer Faces, a Java specification foRevision History \end_layout \begin_layout Description r building component-based user interfaces for web applications. \end_layout \begin_layout Description JSP \begin_inset space \space{} \end_inset Pages: text documents that contain two types of text: static data, which can be expressed in any text-based format (such as HTML, SVG, WML, and XML), and JSP elements, which construct dynamic content. \end_layout \begin_layout Description HTML: HyperText Markup Language, a markup language for building web pages. \end_layout \begin_layout Description HTTP: Hypertext Transfer Protocol, an application protocol used by web browsers. \end_layout \begin_layout Description MVC: Model View Controller. \end_layout \begin_layout Description MySQL: open source database manager system, a software capable of managing data. \end_layout \begin_layout Description RASD: Requirements Analysis and Specifications Document. \end_layout \begin_layout Description \shape italic URL \shape default : Uniform Resource Locator. \end_layout \begin_layout Description \shape italic Push \begin_inset space \space{} \end_inset notification \shape default : it is a notification sent to a smartphone using the mobile application, so it must be installed. \end_layout \begin_layout Description Push \begin_inset space \space{} \end_inset service: it is a service that allows to send push notifications with own API. \end_layout \begin_layout Description REST: REpresantional State Transfer. \end_layout \begin_layout Description RESTful: REST with no session. \end_layout \begin_layout Description UX: User eXperience. \end_layout \begin_layout Description UI: User Interface. \end_layout \begin_layout Description BCE: Business Controller Entity. \end_layout \begin_layout Standard \begin_inset Newpage newpage \end_inset \end_layout \begin_layout Subsection Reference documents \end_layout \begin_layout Itemize Requirements Analysis and Specification Document produced before: [RASD.pdf] \end_layout \begin_layout Itemize Specification Document: [ASSIGNMENTS AA 2016-2017.pdf] \end_layout \begin_layout Subsection Document Structure \end_layout \begin_layout Enumerate \series bold Introduction \series default : this section introduces the design document. It contains a justification of his utility and indications on which parts are covered in this document that are not covered by RASD. \end_layout \begin_layout Enumerate \series bold Architecture Design \series default : this section is divided into different parts. \end_layout \begin_deeper \begin_layout Itemize \shape italic Overview \shape default : this sections explains the division in tiers of our application. \end_layout \begin_layout Itemize \shape italic High level components and their interaction \shape default : this sections gives a global view of the components of the application and how they communicate. \end_layout \begin_layout Itemize \shape italic Component view \shape default : this sections gives a more detailed view of the components of the applications. \end_layout \begin_layout Itemize \shape italic Deploying view \shape default : this section shows the components that must be deployed to have the applicatio n running correctly. \end_layout \begin_layout Itemize \shape italic Runtime view \shape default : this section shows the course of the different tasks of our application through several sequence diagrams . \end_layout \begin_layout Itemize \shape italic Component interfaces \shape default : this section shows the interfaces between the components. \end_layout \begin_layout Itemize \shape italic Selected architectural styles and patterns \shape default : this section explain the architectural choices taken during the creation of the application. \end_layout \begin_layout Itemize \shape italic Other design decisions \end_layout \end_deeper \begin_layout Enumerate \series bold Algorithms Design \series default : this section describes the most critical parts via some algorithms. Pseudo code is used in order to hide unnecessary implementation details in order to focus on the most important parts. \end_layout \begin_layout Enumerate \series bold User Interface Design \series default : this section presents mockups and user experience explained via UX and BCE diagrams. \end_layout \begin_layout Enumerate \series bold Requirements Traceability \series default : this section aims to explain how the decisions taken in the RASD are linked to design elements. \end_layout \begin_layout Enumerate \series bold Appendix \series default : in this section will be listed the different tools we used and the hours of work spent by each member of the team. \end_layout \begin_layout Standard \begin_inset Newpage newpage \end_inset \end_layout \begin_layout Section Architectural Design \end_layout \begin_layout Subsection Overview \end_layout \begin_layout Standard The PowerEnjoy system will be developed on the Java 2 Enterprise Edition platform, one of the most important technology used to build large scale, distributed, component-based, web-enabled and multi-tier applications. J2EE provides also robustness, efficiency and \shape italic portability \shape default of code because it is based on Java technology and standard-based Java programming APIs: in this way, we will be able to “write once” our application and “run it anywhere”. The system will be designed according to the traditional multi-tier architectur e, in order to guarantee: \end_layout \begin_layout Itemize \shape italic flexibility \shape default : by separating the business logic of an application from its presentation logic, a multi-tier architecture makes the application much more flexible to changes; \end_layout \begin_layout Itemize \shape italic maintainability \shape default : because of their independence and the different technology used in each layer, changes should have no effect on any other layer and can be managed by independent teams with different skills. \end_layout \begin_layout Itemize \shape italic reusability \shape default : separating the application into multiple layers makes it easier to implement re-usable components. \end_layout \begin_layout Itemize \shape italic scalability \shape default : a multi-tier architecture allows distribution of application components across multiple servers thus making the system much more scalable \end_layout \begin_layout Standard In detail, PowerEnjoy architecture will be made up of four logical levels: the \series bold Client \series default tier, the \series bold Web \series default tier, the \series bold Business \series default tier and the \series bold EIS \series default tier. \end_layout \begin_layout Itemize The \series bold Client \series default tier consists of application clients that make \shape italic requests \shape default to the server, which processes the requests and returns a \shape italic response \shape default back to the client. The Client tier is accessible via \shape italic mobile application \shape default (that interacts directly with the application server via RESTful API) or by a \shape italic web browser \shape default (that run JavaScript and apply Cascading Style Sheets (CSS) before interpreting pages marked up with HTML), and it interacts with the Web tier through an HTTP connection, eventually sending data provided by the user. \end_layout \begin_layout Itemize The \series bold Web \series default tier consists of components implemented with JEE technology that handle the interaction between clients and the business tier. Its main tasks are collect HTTP requests from users of the client interface and return appropriate anwers with HTML pages, generated with the data received from the components in the business tier. \end_layout \begin_layout Itemize The \series bold Business \series default tier consists of Enterprise JavaBean (EJB), software components that encapsulat e all the logic of an application. This tier uses the Java Persistence API (JPA) to access the database, abstracti ng the relational model implemented by the database in a model of data objects, in order to allow the interaction with the application. \end_layout \begin_layout Itemize The \series bold EIS \series default tier consists of a Database Management System (DBMS) in charge of create, manipulate, query and extract data over a database. The business tier uses the Java Database Connectivity (JDBC) to have access to the resources located on the database. \end_layout \begin_layout Standard \begin_inset Float figure wide false sideways false status collapsed \begin_layout Plain Layout \align center \begin_inset Graphics filename res/img/MultiTier Architecture.png width 85text% height 85theight% keepAspectRatio \end_inset \end_layout \begin_layout Plain Layout \begin_inset Caption Standard \begin_layout Plain Layout MultiTier Architecture \end_layout \end_inset \end_layout \end_inset \begin_inset Newpage newpage \end_inset \begin_inset Float figure wide false sideways false status collapsed \begin_layout Plain Layout \align center \begin_inset Graphics filename res/img/HardwareRepresentation.png width 100text% height 100theight% keepAspectRatio scaleBeforeRotation rotateAngle 90 \end_inset \end_layout \begin_layout Plain Layout \begin_inset Caption Standard \begin_layout Plain Layout Hardware Representation \end_layout \end_inset \end_layout \end_inset \begin_inset Newpage newpage \end_inset \end_layout \begin_layout Subsection High level components and their interaction \end_layout \begin_layout Standard The high level components architecture is composed of different elements. The client can initiate the communication with the server from his mobile application or from the webpage of the application. This communication is made in a synchronous way since the client, who initiates the communication, has to wait the answer of the application that acknowledge him that his request has been taken into account. The application will receive two kinds of requests from the client: direct ones, if he's using the mobile application, or redirected ones by the webserver , if he's using the web browser. The application will later send an asynchronous message to the client to specifiy the status of his reservation. The application communicates also with another type of component, the cars. The application can send synchronous messages to the cars to check their status and eventually reserve one of them for each user or manage any kind of maintenance. \end_layout \begin_layout Standard \begin_inset VSpace medskip \end_inset The interactions between the main components are shown in figure: \end_layout \begin_layout Standard \align center \begin_inset Float figure wide false sideways false status collapsed \begin_layout Plain Layout \align center \begin_inset Graphics filename res/img/HighLevel Components.png width 100text% height 100theight% keepAspectRatio \end_inset \end_layout \begin_layout Plain Layout \begin_inset Caption Standard \begin_layout Plain Layout High Level Components \end_layout \end_inset \end_layout \end_inset \begin_inset Newpage newpage \end_inset \end_layout \begin_layout Subsection Component view \end_layout \begin_layout Standard We adopted a \shape italic top-down \shape default approach to separate, at least from a logical point of view, different set of functionalities. Once the system was decomposed into several sub-systems, we adopted a \shape italic bottom-up \shape default approach in order to create more modular and reusable components. Here are listed the most relevant components the system has been split into. \end_layout \begin_layout Itemize \series bold PowerEnjoyApp GUI \series default : this is the graphic interface which let the user send request to the server and receive response via mobile application; \end_layout \begin_layout Itemize \series bold PowerEnjoyWeb GUI \series default : this is the graphic interface which let the user send request to the server and receive response via web browser; \end_layout \begin_layout Itemize \series bold Authentication Manager \series default : this is the component responsible for the customer registration and login system. It handles activities such as creating a new customer account, log into the system or deleting an existing account; \end_layout \begin_layout Itemize \series bold AccountInformation Manager \series default : this is the component responsible for the customer profile management. It handles activities such as editing personal and billing data, enabling/disab ling money saving option and consulting reservation history; \end_layout \begin_layout Itemize \series bold CheckAvailability Manager \series default , this is the component responsible for searching available cars in a specific location; \end_layout \begin_layout Itemize \series bold Reservation Manager \series default : this is the component that manages each reservation. It handles activities such as creating a new reservation, checking the active reservation information (such as the remaining time until it expires, the reserved car's position and status or the elapsed rental time) and terminating the active ones; \end_layout \begin_layout Itemize \series bold Car Manager \series default : this is the component that check and manage the status of each car by communicating with them through the ADS of each present on each car. If a car needs any kind of maintenance, it will send a request to an external maintenance service; \end_layout \begin_layout Itemize \series bold ADS_Application Manager \series default : this is the component which guarantee the correct communication between the Server and the ADS Application installed on each ADS on each electric car; \end_layout \begin_layout Itemize \series bold Payment Manager \series default : this is the component that calculates the fees for the rides at the end of each reservation and send a payment request to an external service; \end_layout \begin_layout Itemize \series bold Data Manager \series default : this is the component where the data is managed and viewed; \end_layout \begin_layout Itemize \series bold Notification Manager \series default : this is the component that manages all the notifications. \end_layout \begin_layout Standard Our application will use Google Maps API to manage information about the actors' position. \end_layout \begin_layout Standard \begin_inset VSpace medskip \end_inset The interactions between the main components are shown in figure: \end_layout \begin_layout Standard \begin_inset Float figure wide false sideways false status collapsed \begin_layout Plain Layout \align center \begin_inset Graphics filename res/img/ComponentView.png width 100text% height 100theight% keepAspectRatio \end_inset \end_layout \begin_layout Plain Layout \begin_inset Caption Standard \begin_layout Plain Layout Component View \end_layout \end_inset \end_layout \end_inset \end_layout \begin_layout Standard \begin_inset VSpace smallskip \end_inset In this representation, in order to avoid redundancy due a duplication of the same elements, we decide to use a different color for the actors to enlight the fact that only an active user can have the possibility to reserve a car. \end_layout \begin_layout Subsection Deployment view \end_layout \begin_layout Standard In this section in shown how the software components are distributed with respect to the hardware resources available in the system. The mobile applications communicate directly with application server via RESTful API while the browser applications communicate with the Web server that receives users' requests, interacts with the Business server and provides HTML pages in order to start the user experience. The system can retrieve information from each car communicating with their ADS via RESTful API. The Business server contains the application logic and the modules that handle the main functionalities of the system. Every module is accessible only by the allowed users. All the data needed for the operations handled by the modules are retrieved from the database in the Data server. The various interactions with the database are monitored by the DBMS in order to guarantee the ACID properties of the database. \end_layout \begin_layout Standard \begin_inset Float figure wide false sideways false status collapsed \begin_layout Plain Layout \align center \begin_inset Graphics filename res/img/DeploymentView.png width 76text% height 80theight% keepAspectRatio \end_inset \end_layout \begin_layout Plain Layout \begin_inset Caption Standard \begin_layout Plain Layout Deployment View \end_layout \end_inset \end_layout \end_inset \end_layout \begin_layout Standard \begin_inset Newpage newpage \end_inset \end_layout \begin_layout Subsection Runtime view \end_layout \begin_layout Standard In this section are explained through Sequence diagrams some of the most relevant interactions between components and actors of the system. Like in the RASD document, some assumptions are made in order to simplify the representation and clarify some aspects; by the way, some of the most important features, if considered implicit in a Sequence diagram, are explicitl y represented in another one. \end_layout \begin_layout Subsubsection* Login Sequence Diagram \end_layout \begin_layout Standard \begin_inset Float figure wide false sideways false status collapsed \begin_layout Plain Layout \align center \begin_inset Graphics filename res/img/Sequence Diagrams/login.png width 100text% height 100theight% keepAspectRatio \end_inset \end_layout \begin_layout Plain Layout \begin_inset Caption Standard \begin_layout Plain Layout Login Sequence Diagram \end_layout \end_inset \end_layout \end_inset \begin_inset VSpace medskip \end_inset \begin_inset Newpage newpage \end_inset \end_layout \begin_layout Subsubsection* Registration Sequence Diagram \end_layout \begin_layout Standard \begin_inset Float figure wide false sideways false status collapsed \begin_layout Plain Layout \align center \begin_inset Graphics filename res/img/Sequence Diagrams/registration.png width 100text% height 100theight% keepAspectRatio \end_inset \end_layout \begin_layout Plain Layout \begin_inset Caption Standard \begin_layout Plain Layout Registration Sequence Diagram \end_layout \end_inset \end_layout \end_inset \begin_inset VSpace medskip \end_inset \begin_inset Newpage newpage \end_inset \end_layout \begin_layout Subsubsection* Check Cars' Availability Sequence Diagram \end_layout \begin_layout Standard \begin_inset Float figure wide false sideways false status collapsed \begin_layout Plain Layout \align center \begin_inset Graphics filename res/img/Sequence Diagrams/availability.png width 100text% height 100theight% keepAspectRatio \end_inset \end_layout \begin_layout Plain Layout \begin_inset Caption Standard \begin_layout Plain Layout Check Cars’ Availability Sequence Diagram \end_layout \end_inset \end_layout \end_inset \begin_inset VSpace medskip \end_inset \begin_inset Newpage newpage \end_inset \end_layout \begin_layout Subsubsection* Modify Personal Information Sequence Diagram \end_layout \begin_layout Standard \begin_inset Float figure wide false sideways false status collapsed \begin_layout Plain Layout \align center \begin_inset Graphics filename res/img/Sequence Diagrams/editpersonalinfo.png width 100text% height 100theight% keepAspectRatio \end_inset \end_layout \begin_layout Plain Layout \begin_inset Caption Standard \begin_layout Plain Layout Modify Personal Information Sequence Diagram \end_layout \end_inset \end_layout \end_inset \begin_inset VSpace medskip \end_inset \begin_inset Newpage newpage \end_inset \end_layout \begin_layout Subsubsection* Car Reservation Sequence Diagram \end_layout \begin_layout Standard \begin_inset Float figure wide false sideways false status collapsed \begin_layout Plain Layout \align center \begin_inset Graphics filename res/img/Sequence Diagrams/reservecar.png width 100text% height 100theight% keepAspectRatio \end_inset \end_layout \begin_layout Plain Layout \begin_inset Caption Standard \begin_layout Plain Layout Car Reservation Sequence Diagram \end_layout \end_inset \end_layout \end_inset \begin_inset VSpace medskip \end_inset \begin_inset Newpage newpage \end_inset \end_layout \begin_layout Subsubsection* Car Unlock Sequence Diagram \end_layout \begin_layout Standard \begin_inset Float figure wide false sideways false status collapsed \begin_layout Plain Layout \align center \begin_inset Graphics filename res/img/Sequence Diagrams/opencar.png width 100text% height 100theight% keepAspectRatio \end_inset \end_layout \begin_layout Plain Layout \begin_inset Caption Standard \begin_layout Plain Layout Car Unlock Sequence Diagram \end_layout \end_inset \end_layout \end_inset \begin_inset VSpace medskip \end_inset \begin_inset Newpage newpage \end_inset \end_layout \begin_layout Subsubsection* Car Rental Sequence Diagram \end_layout \begin_layout Standard \begin_inset Float figure wide false sideways false status collapsed \begin_layout Plain Layout \align center \begin_inset Graphics filename res/img/Sequence Diagrams/rental.png width 100text% height 100theight% keepAspectRatio \end_inset \end_layout \begin_layout Plain Layout \begin_inset Caption Standard \begin_layout Plain Layout Car Rental Sequence Diagram \end_layout \end_inset \end_layout \end_inset \begin_inset VSpace medskip \end_inset \end_layout \begin_layout Standard \begin_inset Newpage newpage \end_inset \end_layout \begin_layout Subsection Component interfaces \end_layout \begin_layout Standard In this section we're going to describe the interfaces through which the various components of the system communicate. For each interface we'll provide a short but exhaustive description of the main exposed methods. \end_layout \begin_layout Subsubsection* \series bold Authentication Manager \end_layout \begin_layout Standard Functions implemented by \series bold Authentication Manager \series default : \begin_inset VSpace smallskip \end_inset \end_layout \begin_layout Standard \family typewriter register(UserData) \family default : This function creates a new \family typewriter User \family default instance in the system with all the information provided by the user during the registration phase. If the entered data are correct, an email is sent to the user address to confirm the correct registration to the service. \begin_inset VSpace smallskip \end_inset \end_layout \begin_layout Standard \family typewriter login(Credentials) \family default : This function allows any registered user to log into the system using his \shape italic username \shape default and \shape italic password \shape default . \begin_inset VSpace smallskip \end_inset \end_layout \begin_layout Standard \family typewriter checkCredentials(Credentials) \family default : This function verifies the \shape italic username \shape default - \shape italic password \shape default combination is correct. If the credentials are correct, the function returns a token to be used in the future requests to identify the user. Otherwise, an error is returned. \end_layout \begin_layout Subsubsection* \series bold AccountInformation Manager \end_layout \begin_layout Standard Functions implemented by \series bold AccountInformation Manager \series default : \end_layout \begin_layout Standard \begin_inset VSpace smallskip \end_inset \end_layout \begin_layout Standard \family typewriter remove(User) \family default : This function deletes the \family typewriter User \family default from the system. \begin_inset VSpace smallskip \end_inset \end_layout \begin_layout Standard \family typewriter activate(User) \family default : This function restores the privileges of the \family typewriter User \family default . \end_layout \begin_layout Standard \begin_inset VSpace smallskip \end_inset \end_layout \begin_layout Standard \family typewriter deactivate(User) \family default : This function removes some of the privileges from the \family typewriter User \family default . \begin_inset VSpace smallskip \end_inset \end_layout \begin_layout Standard \family typewriter editProfile(User, UserData) \family default : This function updates the existent \family typewriter User \family default instance in the system with all the new information provided by the \family typewriter UserData \family default object. \begin_inset VSpace smallskip \end_inset \end_layout \begin_layout Standard \family typewriter getHistory(User) \family default : This function allows a registered \family typewriter User \family default to consult his complete requests history. \begin_inset VSpace smallskip \end_inset \end_layout \begin_layout Standard \family typewriter enableMSO(User): \family default This function enables the Money Saving Option for the \family typewriter User \family default . \begin_inset VSpace smallskip \end_inset \end_layout \begin_layout Standard \family typewriter disableMSO(User): \family default This function disables the Money Saving Option for the \family typewriter User \family default . \end_layout \begin_layout Subsubsection* \series bold CheckAvailability Manager \end_layout \begin_layout Standard Functions implemented by \series bold CheckAvailability Manager \series default : \end_layout \begin_layout Standard \begin_inset VSpace smallskip \end_inset \end_layout \begin_layout Standard \family typewriter getUserPosition(User) \family default : This function will retrieve the information about the user’s position through the Google Maps API. \begin_inset VSpace smallskip \end_inset \end_layout \begin_layout Standard \family typewriter getAvailableCars(Location) \family default : This function will retrieve the needed information through the Car Manager and it will return a list of \shape italic available \shape default cars near the user's \family typewriter Location \family default . \end_layout \begin_layout Standard \begin_inset Newpage newpage \end_inset \end_layout \begin_layout Subsubsection* \series bold Reservation Manager \end_layout \begin_layout Standard Functions implemented by \series bold Reservation Manager \series default : \end_layout \begin_layout Standard \begin_inset VSpace smallskip \end_inset \end_layout \begin_layout Standard \family typewriter checkVerificationCode(User, int) \family default : This function verifies the \family typewriter User \family default - \shape italic verification \shape default \shape italic code \shape default combination is correct. \end_layout \begin_layout Standard \begin_inset VSpace smallskip \end_inset \end_layout \begin_layout Standard \family typewriter getUserPosition(User) \family default : This function will retrieve the information about the user’s position through the Google Maps API. \end_layout \begin_layout Standard \begin_inset VSpace smallskip \end_inset \end_layout \begin_layout Standard \family typewriter getReservableCars(Location) \family default : This function will retrieve the needed information through the Car Manager and it will return a list of \shape italic reservable \shape default cars near the user's \family typewriter Location \family default . \end_layout \begin_layout Standard \begin_inset VSpace smallskip \end_inset \end_layout \begin_layout Standard \family typewriter startReservation(Car, User) \family default : This function creates a new instance of \family typewriter Reservation \family default , tying together the \family typewriter Car \family default and \family typewriter User \family default instances passed as argument, and notifies it to the \family typewriter User \family default through the Notification Manager. \end_layout \begin_layout Standard \begin_inset VSpace smallskip \end_inset \end_layout \begin_layout Standard \family typewriter checkReservationStatus(Reservation) \family default : This function retrieves all the information about the \family typewriter Reservation \family default instance passed as argument, and shows them to the \family typewriter User \family default through the Notification Manager. \end_layout \begin_layout Standard \begin_inset VSpace smallskip \end_inset \end_layout \begin_layout Standard \family typewriter endReservation(Reservation) \family default : This function terminates the current \family typewriter Reservation \family default and send a payment request to the Payment Manager. \end_layout \begin_layout Standard \begin_inset VSpace smallskip \end_inset \end_layout \begin_layout Standard \family typewriter startRent(Reservation) \family default : This function creates a new instance of \family typewriter Rent \family default , updating the \family typewriter Reservation \family default instance passed as argument, and notifies it to the \family typewriter User \family default through the Notification Manager. \end_layout \begin_layout Standard \begin_inset VSpace smallskip \end_inset \end_layout \begin_layout Standard \family typewriter checkRentStatus(Rent) \family default : This function retrieves all the information about the \family typewriter Rent \family default instance passed as argument, and shows them to the \family typewriter User \family default through the Notification Manager. \end_layout \begin_layout Standard \begin_inset VSpace smallskip \end_inset \end_layout \begin_layout Standard \family typewriter isTerminable(Rent) \family default : This function will check through the Car Manager if all the conditions to end the \family typewriter Rent \family default are respected (for example if nobody is still in the car, and so on..) and it will return \family typewriter true \family default if the rent is terminable, \family typewriter false \family default otherwise. \end_layout \begin_layout Standard \begin_inset VSpace smallskip \end_inset \end_layout \begin_layout Standard \family typewriter endRent(Rent) \family default : This function terminates the current \family typewriter Rent \family default , notifies it to the user through the Notification Manager and sends a payment request to the Payment Manager. \end_layout \begin_layout Subsubsection* \series bold ADS_Application Manager \end_layout \begin_layout Standard Functions implemented by \series bold ADS_Application Manager \series default : \end_layout \begin_layout Standard \begin_inset VSpace smallskip \end_inset \family typewriter getStatus() \family default : This function asks the ADS to check the current \family typewriter Status \family default ( \shape slanted available \shape default , \shape slanted reserved \shape default , \shape slanted in_use \shape default , \shape slanted unavailable \shape default ) of the car. \end_layout \begin_layout Standard \begin_inset VSpace smallskip \end_inset \family typewriter getDamages() \family default : This function queries the ADS to check the eventual car’s damages through the sensors installed in there. \end_layout \begin_layout Standard \begin_inset VSpace smallskip \end_inset \family typewriter getPosition) \family default : This function queries the ADS to check the current position of the car. \end_layout \begin_layout Standard \begin_inset VSpace smallskip \end_inset \family typewriter getPassengers() \family default : This function queries the ADS the number of passengers actually inside the car. \end_layout \begin_layout Standard \begin_inset VSpace smallskip \end_inset \family typewriter getPowerGrid() \family default : This function queries the ADS to check if the car is plugged into the power grid. \end_layout \begin_layout Standard \begin_inset VSpace smallskip \end_inset \family typewriter lockDoors() \family default : This function queries the ADS the lock the car’s doors and to change the \family typewriter Status \family default of the car into \shape slanted available \shape default . \end_layout \begin_layout Standard \begin_inset VSpace smallskip \end_inset \family typewriter unlockDoors() \family default : This function queries the ADS the unlock the car’s doors and to change the \family typewriter Status \family default of the car into \shape slanted in_use \shape default . \end_layout \begin_layout Standard \begin_inset VSpace smallskip \end_inset \family typewriter updateCarStatus(Status) \family default : This function queries the ADS to change the car’s \family typewriter Status \family default into the one passed as argument. \end_layout \begin_layout Subsubsection* \series bold Car Manager \end_layout \begin_layout Standard Functions implemented by \series bold Car Manager \series default : \begin_inset VSpace smallskip \end_inset \end_layout \begin_layout Standard \family typewriter contactMaintainanceService(Car) \family default : Every time the Car Manager retrieve information about a car’s status, if necessary, it will send a maintainance request to an external service through this function. \begin_inset VSpace smallskip \end_inset \end_layout \begin_layout Standard \family typewriter ping(Car) \family default : This function queries a \family typewriter Car \family default to check whether it is online. \begin_inset VSpace smallskip \end_inset \end_layout \begin_layout Standard \family typewriter carsInRadius(Location) \family default : This function retrieves all the cars near the \family typewriter Location \family default passed as argument. \end_layout \begin_layout Subsubsection* \series bold Payment Manager \end_layout \begin_layout Standard Functions implemented by \series bold Payment Manager \series default : \begin_inset VSpace smallskip \end_inset \family typewriter applyReservationFees(Reservation) \family default : This function will apply the fees for each \family typewriter Reservation \family default instance. Actually, the user can terminate a reservation for free, but in the future if PowerEnjoy would decide to apply a fee for the termination of a reservation, it would be very easy to modify this value. If the user picks up the car, his reservation terminates and the system will create another instance \family typewriter Rent \family default : no fees will be applied to transform a \family typewriter Reservation \family default into a \family typewriter Rent \family default . \begin_inset VSpace smallskip \end_inset \family typewriter calculateRentFees(Rent) \family default : This function will calculate the fees for each \family typewriter Rent \family default instance. In this case we have to consider eventual discounts and other additional fees before sending the payment request to the external payment service. It would not be difficult in the future to change some parameters according to the PowerEnjoy policy. \begin_inset VSpace smallskip \end_inset \family typewriter calculateRentDiscount(Rent) \family default : This function will calculate the eventual discount for each \family typewriter Rent \family default instance. \begin_inset VSpace smallskip \end_inset \family typewriter calculateAdditionalFees(Rent) \family default : This function will calculate the eventual additional fees for each \family typewriter Rent \family default instance. \end_layout \begin_layout Subsubsection* \series bold Data Manager \end_layout \begin_layout Standard Functions implemented by \series bold Data Manager \series default : \begin_inset VSpace smallskip \end_inset \end_layout \begin_layout Standard \family typewriter store(Data) \family default : This function allows any authorized entity to store data into the DataBase. \begin_inset VSpace smallskip \end_inset \end_layout \begin_layout Standard \family typewriter retrieve(Data) \family default :: This function allows any authorized entity to read data from the DataBase. \begin_inset VSpace smallskip \end_inset \end_layout \begin_layout Standard \family typewriter delete(Data) \family default :: This function allows any authorized entity to delete data from the DataBase. \begin_inset VSpace smallskip \end_inset \end_layout \begin_layout Standard \family typewriter edit(Data) \family default :: This function allows any authorized entity to modify data into the DataBase. \end_layout \begin_layout Subsubsection* \series bold Notification Manager \end_layout \begin_layout Standard Functions implemented by \series bold Notification Manager \series default : \begin_inset VSpace smallskip \end_inset \end_layout \begin_layout Standard \family typewriter notify(User, Notification) \family default : This function is used to notify a message to the user. \end_layout \begin_layout Standard \begin_inset Newpage newpage \end_inset \end_layout \begin_layout Subsubsection* \series bold Other Specifications \end_layout \begin_layout Itemize The front-ends of the system (the mobile app and the web application) communicat e with the Application Server using the back-end interface implemented as a RESTful interface over the HTTPS protocol. \end_layout \begin_layout Itemize The users’ browsers will communicate with the web server via HTTPS requests. Any unencrypted request will be denied. \end_layout \begin_layout Itemize The RESTful interface is implemented in the Application server using JAX-RS and uses XML as the data representation language. \end_layout \begin_layout Itemize The Application Server communicates with the DBMS via the Java Persistence API over standard network protocols. \end_layout \begin_layout Itemize The Application Server is configurable by means of a XML configuration file, that will contain any other setting useful in the implementation phase. \end_layout \begin_layout Standard \begin_inset Newpage newpage \end_inset \end_layout \begin_layout Subsection Selected architectural styles and patterns \end_layout \begin_layout Subsubsection The Architecture \end_layout \begin_layout Standard The architecture of the system has been previously described at higher level. \end_layout \begin_layout Standard As we said, we adopted a \series bold multi-tier architecture \series default in which every tier is hosted on a different machine: the \shape italic Client \shape default tier is on the pc or smartphone the user access the system from, the \shape italic Web \shape default tier is hosted on a separate server used only for this purpose, while another server hosts the \shape italic Business \shape default tier. Finally a last server contains the \shape italic Data \shape default tier. \end_layout \begin_layout Standard This division between all levels has been made in order to allow update and maintenance on a particular tier without affecting the others, and to prevent the whole system to interrupt in case of fault of a component. We also adopted the \shape italic thin client \shape default paradigm to the interaction between user’s machine and the system: in this way all the application logic is on the application server, which has sufficien t computing power and is able to manage concurrency issue efficiently. \end_layout \begin_layout Subsubsection The Desing Pattern \end_layout \begin_layout Standard The Design pattern used for this system is the \series bold Model-View-Controller \series default (MVC). \end_layout \begin_layout Standard This choice has been made mainly for the flexibility that this pattern provides: the \shape italic model \shape default , the \shape italic view \shape default and the \shape italic controller \shape default are separated into different components that can be modified with a minimum impact with respect to the others, helping to achieve a better scalability and offering the possibility to add new functionalities to the system or to apply changes to the code. In more detail: \end_layout \begin_layout Itemize The \series bold Model \series default contains the representation of data and the application logic, so all the functions that manipulates data. \end_layout \begin_layout Itemize The \series bold View \series default makes the model suitable for the user interaction, providing a GUI: every user will access the system and all its functionalities through this component. Furthermore, it provides the possibility to have different representations (or views) for the same data, depending on the user’s preference or on the user’s permissions. \end_layout \begin_layout Itemize The \series bold Controller \series default , finally, is responsible for the communication between the View and the Model: in particular it responds to user’s actions and invokes changes on the model. \end_layout \begin_layout Standard \begin_inset Newpage newpage \end_inset \end_layout \begin_layout Subsection Other design decisions \end_layout \begin_layout Subsubsection Storage of passwords \end_layout \begin_layout Standard Users’ password will not be stored in plain-text, but they will be hashed and salted with cryptographic hash functions. This provides a last line of defense in case of data theft. \end_layout \begin_layout Subsubsection Google Maps \end_layout \begin_layout Standard The system uses an external service, Google Maps, to offload all the geolocaliza tion, distance calculation and map visualization processes. The reasons of this choice are the following: \end_layout \begin_layout Itemize manually developing maps for each city is not a viable solution due to the tremendous effort of coding and data collection required; \end_layout \begin_layout Itemize Google Maps is a well-established, tested and reliable software component already used by millions of people around the world; \end_layout \begin_layout Itemize Google Maps offers APIs, enabling programmatic access to its features; \end_layout \begin_layout Itemize Google Maps can be used both on the server side (calculation, shortest paths, traffic, incident reporting) and on the client side (map visualization); \end_layout \begin_layout Itemize the users feel comfortable with a software component they know and use everyday. \end_layout \begin_layout Standard \begin_inset Newpage newpage \end_inset \end_layout \begin_layout Section Algorithm Design \end_layout \begin_layout Standard In this section we will focus mostly on two important themes: the calculus of the reservations’ and rents’ fees and the uniform redistribution of the cars. It is very important to implement the former in a dynamic and easy-to-change way because of the continuously changing business strategies and it is fundamental to give a lot of attention to the latter because it would considera bly increase the quality of the service and incentivize the virtuous behaviours of the user, according to the core values of PowerEnjoy. \end_layout \begin_layout Subsection The uniform distribution of cars \end_layout \begin_layout Standard Let’s start from the attempt to redistribute in a uniform way the cars into each city. \begin_inset VSpace smallskip \end_inset \end_layout \begin_layout Standard The first kind of solution we will propose is valid from a theoretical point of view, but it is not so suitable to our service. We will explain it anyway to give a deep and better understanding of the problem and of our reasoning. \begin_inset VSpace smallskip \end_inset \end_layout \begin_layout Standard To guarantee an effectively uniform distribution of the cars, we would act in this way: \end_layout \begin_layout Enumerate For each point (intended as a couple of two values: \series bold latitude \series default and \series bold longitude \series default ) inside the city (intended as a \shape italic closed ensemble of points \shape default ), we would calculate the minimum distance with the first available car found. \end_layout \begin_layout Enumerate Among these minimum distances, we would take in account the greatest one and we would put a new available car in that exact point. \end_layout \begin_layout Standard By iterating these two steps, we would guarantee an uniform distribution of cars, starting from a 2-dimensional space (the city) already filled in part with other cars, unmovable. \begin_inset VSpace medskip \end_inset \end_layout \begin_layout Standard However this solution is not a feasible one because it would be necessary to use an ingent calculus power to effectively substain a similar amount of operations. Perhaps it would be possible to achieve the same result with a smaller quantity of points (taken randomly or in a less accurate way) or in the opposite way: we could calculate the maximum distant point from each available car inside the city, and decide to address the user there. \begin_inset VSpace smallskip \end_inset \end_layout \begin_layout Standard However this theoretical solution won’t take in account two important facts: \end_layout \begin_layout Enumerate the first one is that we cannot address the user into a specific point (intended as above, a couple of \shape italic latitude \shape default and \shape italic longitude \shape default ) but we have to address him/her into a recharging station \shape italic near \shape default the point, so we will be able anyway only to achieve an \shape italic approximately \shape default uniform distribution of cars. \end_layout \begin_layout Enumerate the second one is that the user will never revolutionize his destination, so we have to address him into a point not so \shape italic far \shape default from his final destination. \end_layout \begin_layout Standard So we abandoned the utopia of a \shape italic perfect \shape default uniform distribution of cars, and we focused mainly on the distribution of the car taking in account the PowerEnjoy power grid stations. \end_layout \begin_layout Standard \begin_inset VSpace smallskip \end_inset We first ranked them according to the \shape italic utility function \shape default of the user, in agreement with the point of view of some experts: let’s take in account Milan, the first city in which we offered our service. As showed in figure, we ranked the main zones of Milan giving them a number from 1 to 6, according to the attractivness of that place for our clients. \end_layout \begin_layout Standard \begin_inset Float figure wide false sideways false status collapsed \begin_layout Plain Layout \align center \begin_inset Graphics filename res/img/milan.png width 100text% height 100theight% keepAspectRatio \end_inset \end_layout \begin_layout Plain Layout \begin_inset Caption Standard \begin_layout Plain Layout Ranking of the Power Grid Stations in Milan \end_layout \end_inset \end_layout \end_inset \end_layout \begin_layout Standard Then we defined a customized radius of 500 - 1000 meters for each power grid station and we covered the whole map of Milan by drawing one circumference for each one of them, according to their given radius, as showed in figure. \end_layout \begin_layout Standard \begin_inset Float figure wide false sideways false status open \begin_layout Plain Layout \align center \begin_inset Graphics filename res/img/milan2.png width 100text% height 100theight% keepAspectRatio \end_inset \end_layout \begin_layout Plain Layout \begin_inset Caption Standard \begin_layout Plain Layout Radius of the Power Grid Stations in Milan \end_layout \end_inset \end_layout \end_inset \end_layout \begin_layout Standard In this way, when a user with the enabled \series bold Money Saving Option \series default would input his/her final destination at the beginning of a rent, the system would select a special parking area among all the ones present in the city by following these steps: \end_layout \begin_layout Enumerate The system will retrieve the latitude and longitude of the final destination of the user; \end_layout \begin_layout Enumerate The system will list all the circumferences (with the relative power grid station) that contains that specific point; \end_layout \begin_layout Enumerate If there is only one station (distant in the worst case more or less 500-1000 meters from the final destination of the user), the system will select it and will provide information about it to the user; \end_layout \begin_layout Enumerate If there isn’t any station with free power plugs, a message of error will be showed to the user; \end_layout \begin_layout Enumerate If there is more than one station that contains that specific point, the system will select the one with the maximum score according to this formula: \begin_inset Formula \[ score=freeSlot*[(ranking-2)+(10-distance/100)*2] \] \end_inset where: \end_layout \begin_layout Itemize \series bold freeSlot \series default is the number of available power plugs; \end_layout \begin_layout Itemize \series bold ranking \series default is the number from 1 to 6 assigned to the zone in which is contained the selected power grid station; \end_layout \begin_layout Itemize \series bold distance \series default is the quantity of meters that separates the final destination of the user from the selected power grid station. \end_layout \begin_layout Enumerate Example n°1: \end_layout \begin_deeper \begin_layout Standard The final destination of the user is in piazza delle Meraviglie, 34. At this address correspond the point with latitude x and longitude y, and there are 4 power grid stations that contain it. The power grid stations are characterized by the following information: \end_layout \begin_layout Enumerate 4 freeSlot, ranking 3, distance from the final destination of the user 500m; \end_layout \begin_layout Enumerate 3 freeSlot, ranking 4, distance from the final destination of the user 350m; \end_layout \begin_layout Enumerate 1 freeSlot, ranking 5, distance from the final destination of the user 650m; \end_layout \begin_layout Enumerate 2 freeSlot, ranking 3, distance from the final destination of the user 250m; \end_layout \begin_layout Standard By applying the formula written above, we would obtain the following score: \end_layout \begin_layout Enumerate 44 \end_layout \begin_layout Enumerate 45 \end_layout \begin_layout Enumerate 10 \end_layout \begin_layout Enumerate 32 \end_layout \begin_layout Standard The system will select the power grid station n°2 and it will provide informatio n to the user about to get there. \end_layout \end_deeper \begin_layout Enumerate Example n°2: \end_layout \begin_deeper \begin_layout Standard The final destination of the user is in piazza Trifoglio, 12. At this address correspond the point with latitude z and longitude w, and there are 2 power grid stations that contain it. The power grid stations are characterized by the following information: \end_layout \begin_layout Enumerate 0 freeSlot, ranking 5, distance from the final destination of the user 100m; \end_layout \begin_layout Enumerate 2 freeSlot, ranking 4, distance from the final destination of the user 450m; \end_layout \begin_layout Standard By applying the formula written above, we would obtain the following score: \end_layout \begin_layout Enumerate 0 \end_layout \begin_layout Enumerate 26 \end_layout \begin_layout Standard The system will select the power grid station n°2 and it will provide informatio n to the user about to get there. \end_layout \end_deeper \begin_layout Standard \begin_inset VSpace medskip \end_inset In this way we would achieve our goal to distribute cars in the smartest way we were able to think about. \end_layout \begin_layout Subsection How to apply the Reservation fees \end_layout \begin_layout Standard In this section we will analyze the structure of the code that will handle the payment for the reservation fees. \end_layout \begin_layout Subparagraph* applyReservationFees(Reservation) \end_layout \begin_layout Standard \SpecialChar ligaturebreak \begin_inset space ~ \end_inset \begin_inset ERT status open \begin_layout Plain Layout \backslash begin{lstlisting} \end_layout \begin_layout Plain Layout \end_layout \begin_layout Plain Layout /* This function will apply the fees for each Reservation instance. Actually, the user can terminate a reservation for free, but in the future if PowerEnjoy would decide to apply a fee for the termination of a reservation, it would be very easy to modify this value. If the user picks up the car, his reservation terminates and the system will create another object Rent: no fees will be applied to transform a reservation into a rent. On the other hand, if the reservation expires before the user picks up the car, the system will apply to him a fee of one euro. As said before, it would not be difficult in the future also to change this amount of money. \end_layout \begin_layout Plain Layout */ \end_layout \begin_layout Plain Layout \end_layout \begin_layout Plain Layout function applyReservationFees (Reservation res){ \end_layout \begin_layout Plain Layout if (res.isExpired()){ \end_layout \begin_layout Plain Layout // This function will return a 'true' value if the reservation is expired because of the time. \end_layout \begin_layout Plain Layout paymentHandler(res.User, res.expirationFee); \end_layout \begin_layout Plain Layout // This function will send a request of payment to the external payment service with as input the ID of the user and the amount of money. \end_layout \begin_layout Plain Layout } \end_layout \begin_layout Plain Layout else { \end_layout \begin_layout Plain Layout paymentHandler(res.User, 0); \end_layout \begin_layout Plain Layout // This case covers both the cases in which the user decides to terminate the reservation and in which he unlocks the car's doors. \end_layout \begin_layout Plain Layout } \end_layout \begin_layout Plain Layout \end_layout \begin_layout Plain Layout \backslash end{lstlisting} \end_layout \end_inset \begin_inset Newpage newpage \end_inset \end_layout \begin_layout Subsection How to calculate the Rent fees \end_layout \begin_layout Standard In this section we will analyze the structure of the code that will handle the payment for the reservation fees. \end_layout \begin_layout Subparagraph* calculateRentDiscount(Rent) \end_layout \begin_layout Standard \SpecialChar ligaturebreak \begin_inset space ~ \end_inset \begin_inset ERT status open \begin_layout Plain Layout \backslash begin{lstlisting} \end_layout \begin_layout Plain Layout \end_layout \begin_layout Plain Layout /* This function will calculate the eventual discount for each rent instance. */ \end_layout \begin_layout Plain Layout \end_layout \begin_layout Plain Layout void function calculateRentDiscount(Rent ren){ \end_layout \begin_layout Plain Layout \end_layout \begin_layout Plain Layout if (ren.atLeastTwoPassengers()){ \end_layout \begin_layout Plain Layout // This function will return a 'true' value if almost two passengers were in the car. \end_layout \begin_layout Plain Layout ren.totalCost *= 0.9; \end_layout \begin_layout Plain Layout // In this way we will apply a 10% of discount to the client. \end_layout \begin_layout Plain Layout } \end_layout \begin_layout Plain Layout \end_layout \begin_layout Plain Layout if (ren.report.batteryLevelAtTheEndOfRent >= 0.5){ \end_layout \begin_layout Plain Layout // This function will return the percentage of battery at the end of the rental. \end_layout \begin_layout Plain Layout ren.totalCost *= 0.8; \end_layout \begin_layout Plain Layout // In this way we will apply a 20% of discount to the client. \end_layout \begin_layout Plain Layout } \end_layout \begin_layout Plain Layout \end_layout \begin_layout Plain Layout if (ren.report.MSOactived() && ren.report.finalDestinationNotEmpty()){ \end_layout \begin_layout Plain Layout // The first function will return a 'true' value if the user enabled the Money Saving Option at the beginning of his/her rent. The second funtion will return a 'true' value if the user input his/her final destination. \end_layout \begin_layout Plain Layout if (ren.carParkedAt(ren.report.specialArea) && ren.carLeftUnderCharge()){ \end_layout \begin_layout Plain Layout // The first function will return a 'true' value if the user parked the car in the special area the system provided at the beginning of the rent. The second function will return a 'true' value if the car is left under charge. \end_layout \begin_layout Plain Layout ren.totalCost *= 0.6; \end_layout \begin_layout Plain Layout // In this way we will apply a 40% of discount to the client. \end_layout \begin_layout Plain Layout else if (ren.carLeftUnderCharge()){ \end_layout \begin_layout Plain Layout // This function will return a 'true' value if the car is left under charge in another recharging area (not the special one provided by the system at the beginning of the rent). \end_layout \begin_layout Plain Layout ren.totalCost *= 0.7; \end_layout \begin_layout Plain Layout // In this way we will apply a 30% of discount to the client. \end_layout \begin_layout Plain Layout } \end_layout \begin_layout Plain Layout } \end_layout \begin_layout Plain Layout else{ \end_layout \begin_layout Plain Layout if (ren.carLeftUnderCharge()){ \end_layout \begin_layout Plain Layout // This function will return 'true' if the car is left under charge in a recharging area. \end_layout \begin_layout Plain Layout ren.totalCost *= 0.7; \end_layout \begin_layout Plain Layout // In this way we will apply a 30% of discount to the client. \end_layout \begin_layout Plain Layout } \end_layout \begin_layout Plain Layout } \end_layout \begin_layout Plain Layout } \end_layout \begin_layout Plain Layout \end_layout \begin_layout Plain Layout \backslash end{lstlisting} \end_layout \end_inset \end_layout \begin_layout Subparagraph* calculateAdditionalFees(Rent) \end_layout \begin_layout Standard \SpecialChar ligaturebreak \begin_inset space ~ \end_inset \begin_inset ERT status open \begin_layout Plain Layout \backslash begin{lstlisting} \end_layout \begin_layout Plain Layout \end_layout \begin_layout Plain Layout /* This function will calculate the additional fees for each rent instance. */ \end_layout \begin_layout Plain Layout \end_layout \begin_layout Plain Layout void function calculateAdditionalFees(Rent ren){ \end_layout \begin_layout Plain Layout if (ren.report.batteryLevelAtTheEndOfRent <= 0.2 || \end_layout \begin_layout Plain Layout ren.report.distanceFromTheNearestPowerGridStationInKm >= 3){ \end_layout \begin_layout Plain Layout // The first value is the same explained above \end_layout \begin_layout Plain Layout // The second one is the distance from the nearest power grid station expressed in km \end_layout \begin_layout Plain Layout ren.totalCost *= 1.3; \end_layout \begin_layout Plain Layout // In this way we will apply a 30% of additional fee to the client. \end_layout \begin_layout Plain Layout } \end_layout \begin_layout Plain Layout } \end_layout \begin_layout Plain Layout \end_layout \begin_layout Plain Layout \backslash end{lstlisting} \end_layout \end_inset \end_layout \begin_layout Subparagraph* calculateRentFees(Rent) \end_layout \begin_layout Standard \SpecialChar ligaturebreak \begin_inset space ~ \end_inset \begin_inset ERT status open \begin_layout Plain Layout \backslash begin{lstlisting} \end_layout \begin_layout Plain Layout \end_layout \begin_layout Plain Layout /* This function will calculate the fees for each Rent instance. In this case we have to consider eventual discounts and other additional fees before sending the payment request to the external payment service. It would not be difficult in the future to change some parameters according to the PowerEnjoy policy. \end_layout \begin_layout Plain Layout */ \end_layout \begin_layout Plain Layout \end_layout \begin_layout Plain Layout function calculateRentFees (Rent ren){ \end_layout \begin_layout Plain Layout ren.totalCost = ren.report.totalTime * ren.report.pricePerMinute; \end_layout \begin_layout Plain Layout // We will first calculate the Total Cost as the multiplication of the Total Time of the Rental and the Actual Price Per Minute. In the future it would be easy to modify them, according to the PowerEnjoy policy. \end_layout \begin_layout Plain Layout \end_layout \begin_layout Plain Layout calculateRentDiscount(ren); \end_layout \begin_layout Plain Layout // In this way we will apply all the discount. \end_layout \begin_layout Plain Layout \end_layout \begin_layout Plain Layout calculateAdditionalFees(ren); \end_layout \begin_layout Plain Layout // In this way we will apply all the additional fees. \end_layout \begin_layout Plain Layout \end_layout \begin_layout Plain Layout paymentHandler(ren.User, ren.totalCost); \end_layout \begin_layout Plain Layout // This function will send a request of payment to the external payment service with as input the ID of the user and the amount of money . \end_layout \begin_layout Plain Layout \end_layout \begin_layout Plain Layout } \end_layout \begin_layout Plain Layout \end_layout \begin_layout Plain Layout \backslash end{lstlisting} \end_layout \end_inset \end_layout \begin_layout Standard \begin_inset Newpage newpage \end_inset \end_layout \begin_layout Section User Interface Design \end_layout \begin_layout Standard In this section we will provide an overview on how the user interfaces of our system will look like. \end_layout \begin_layout Subsection UX Diagram \end_layout \begin_layout Standard The UX Diagram shows the interactions between the different screens of the User Interface of the clients. \begin_inset Newline linebreak \end_inset The services are both accessible via web and mobile application. \end_layout \begin_layout Standard \begin_inset Float figure wide false sideways false status collapsed \begin_layout Plain Layout \align center \begin_inset Graphics filename res/img/UX Diagram.png width 100text% height 76theight% keepAspectRatio rotateAngle 90 \end_inset \end_layout \begin_layout Plain Layout \begin_inset Caption Standard \begin_layout Plain Layout UX Diagram \end_layout \end_inset \end_layout \end_inset \begin_inset Newpage newpage \end_inset \end_layout \begin_layout Subsection User UI \end_layout \begin_layout Standard The following mockups represent the user UI, regarding both the Web Browser and the Mobile Application interfaces. \end_layout \begin_layout Subsubsection Home Page \end_layout \begin_layout Standard \begin_inset Float figure wide false sideways false status collapsed \begin_layout Plain Layout \align center \begin_inset Graphics filename res/img/mockup/pc/HomePage.png width 60text% height 60theight% keepAspectRatio \end_inset \end_layout \begin_layout Plain Layout \begin_inset Caption Standard \begin_layout Plain Layout Home Page - Web Browser \end_layout \end_inset \end_layout \end_inset \end_layout \begin_layout Subsubsection Login \end_layout \begin_layout Standard \begin_inset Float figure wide false sideways false status collapsed \begin_layout Plain Layout \align center \begin_inset Graphics filename res/img/mockup/mobile/HomePageMobile.png width 60text% height 60theight% keepAspectRatio \end_inset \end_layout \begin_layout Plain Layout \begin_inset Caption Standard \begin_layout Plain Layout Login - Mobile Application \end_layout \end_inset \end_layout \end_inset \begin_inset Newpage newpage \end_inset \end_layout \begin_layout Subsubsection Registration \end_layout \begin_layout Standard \begin_inset Float figure wide false sideways false status collapsed \begin_layout Plain Layout \align center \begin_inset Graphics filename res/img/mockup/pc/Registration Page.png width 70text% height 70theight% keepAspectRatio \end_inset \end_layout \begin_layout Plain Layout \begin_inset Caption Standard \begin_layout Plain Layout Registration Page - Web Browser \end_layout \end_inset \end_layout \end_inset \begin_inset Float figure wide false sideways false status collapsed \begin_layout Plain Layout \align center \begin_inset Graphics filename res/img/mockup/mobile/RegistrationPageMobile.png width 70text% height 70theight% keepAspectRatio \end_inset \end_layout \begin_layout Plain Layout \begin_inset Caption Standard \begin_layout Plain Layout Registration Page - Mobile Application \end_layout \end_inset \end_layout \end_inset \end_layout \begin_layout Subsubsection Edit Personal Information \end_layout \begin_layout Standard \begin_inset Float figure wide false sideways false status collapsed \begin_layout Plain Layout \align center \begin_inset Graphics filename res/img/mockup/pc/EditPersonalInfo.png width 63text% height 63theight% keepAspectRatio \end_inset \end_layout \begin_layout Plain Layout \begin_inset Caption Standard \begin_layout Plain Layout Edit Personal Information - Web Browser \end_layout \end_inset \end_layout \end_inset \end_layout \begin_layout Subsubsection Edit Billing Information \end_layout \begin_layout Standard \begin_inset Float figure wide false sideways false status collapsed \begin_layout Plain Layout \align center \begin_inset Graphics filename res/img/mockup/pc/Edit Billing Information.png width 63text% height 63theight% keepAspectRatio \end_inset \end_layout \begin_layout Plain Layout \begin_inset Caption Standard \begin_layout Plain Layout Edit Billing Information - Web Browser \end_layout \end_inset \end_layout \end_inset \end_layout \begin_layout Subsubsection Enable / Disable the Money Saving Option \end_layout \begin_layout Standard \begin_inset Float figure wide false sideways false status collapsed \begin_layout Plain Layout \align center \begin_inset Graphics filename res/img/mockup/mobile/Enable MSO.png width 70text% height 70theight% keepAspectRatio \end_inset \end_layout \begin_layout Plain Layout \begin_inset Caption Standard \begin_layout Plain Layout Enable Money Saving Option - Mobile Application \end_layout \end_inset \end_layout \end_inset \begin_inset Float figure wide false sideways false status collapsed \begin_layout Plain Layout \align center \begin_inset Graphics filename res/img/mockup/mobile/Disable MSO.png width 70text% height 70theight% keepAspectRatio \end_inset \end_layout \begin_layout Plain Layout \begin_inset Caption Standard \begin_layout Plain Layout Disable Money Saving Option - Mobile Application \end_layout \end_inset \end_layout \end_inset \end_layout \begin_layout Subsubsection Start Reservation \end_layout \begin_layout Standard \begin_inset Float figure wide false sideways false status collapsed \begin_layout Plain Layout \align center \begin_inset Graphics filename res/img/mockup/mobile/Start Reservation.png width 70text% height 70theight% keepAspectRatio \end_inset \end_layout \begin_layout Plain Layout \begin_inset Caption Standard \begin_layout Plain Layout Start Reservation - Mobile Application \end_layout \end_inset \end_layout \end_inset \end_layout \begin_layout Subsubsection Terminate Reservation \end_layout \begin_layout Standard \begin_inset Float figure wide false sideways false status collapsed \begin_layout Plain Layout \align center \begin_inset Graphics filename res/img/mockup/mobile/End Reservation.png width 70text% height 70theight% keepAspectRatio \end_inset \end_layout \begin_layout Plain Layout \begin_inset Caption Standard \begin_layout Plain Layout Terminate Reservation - Mobile Application \end_layout \end_inset \end_layout \end_inset \end_layout \begin_layout Subsubsection Unlock the car \end_layout \begin_layout Standard \begin_inset Float figure wide false sideways false status collapsed \begin_layout Plain Layout \align center \begin_inset Graphics filename res/img/mockup/mobile/Unlock Doors.png width 70text% height 70theight% keepAspectRatio \end_inset \end_layout \begin_layout Plain Layout \begin_inset Caption Standard \begin_layout Plain Layout Unlock Car's Doors - Mobile Application \end_layout \end_inset \end_layout \end_inset \end_layout \begin_layout Subsubsection Lock the car \end_layout \begin_layout Standard \begin_inset Float figure wide false sideways false status collapsed \begin_layout Plain Layout \align center \begin_inset Graphics filename res/img/mockup/mobile/Lock Doors.png width 70text% height 70theight% keepAspectRatio \end_inset \end_layout \begin_layout Plain Layout \begin_inset Caption Standard \begin_layout Plain Layout Lock Car's Doors - Mobile Application \end_layout \end_inset \end_layout \end_inset \end_layout \begin_layout Standard \begin_inset Newpage newpage \end_inset \end_layout \begin_layout Section Requirements Traceability \end_layout \begin_layout Standard In the RASD document we have defined all the system's requirements: in this section we explaine how they map into the design elements defined in this document. \begin_inset VSpace smallskip \end_inset \end_layout \begin_layout Standard \begin_inset Tabular \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \series bold Component (DD) \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \series bold Requirements (RASD) \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout 4.1.1 Registration of a guest to the system \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout Authentication Manager \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout 4.1.2 Login of a user into the system \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout AccountInformation Manager \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout 4.1.9 Modify the profile information \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout CheckAvailability Manager \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout 4.1.3 Find the location of available cars in a specified area \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout 4.1.4 Book a car with the possibility to cancel the reservation \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout Reservation Manager \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout 4.1.6 Be notified of active reservation status \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout 4.1.7 End the rental \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout Car Manager \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout 4.1.3 Available cars in a specified area \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout 4.1.4 Book a car with the possibility to cancel the reservation \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout ADS_Application Manager \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout 4.1.5 Open his/her reserved car \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout 4.1.6 Active reservation status \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout Payment Manager \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout 4.1.8 Know the total cost at the end of the rental \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout 4.1.1 Registration of a guest to the system \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout Data Manager \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout 4.1.2 Login of a user into the system \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout Notification Manager \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout 4.1.6 Be notified of active reservation status \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \end_layout \end_inset \end_inset \end_layout \begin_layout Standard \begin_inset Newpage newpage \end_inset \end_layout \begin_layout Section Appendix \end_layout \begin_layout Subsection Tools used \end_layout \begin_layout Standard We used the following tools to produce this document: \end_layout \begin_layout Itemize \series bold LaTex \series default as typesetting system to write this document \end_layout \begin_layout Itemize \series bold LyX \series default as editor \end_layout \begin_layout Itemize \series bold Visio Professional \series default and \series bold draw.io \series default to draw all the diagrams \end_layout \begin_layout Subsection Hours of work \end_layout \begin_layout Standard \begin_inset Float figure wide false sideways false status open \begin_layout Plain Layout \align center \begin_inset Graphics filename res/img/hours.png width 50text% height 50theight% keepAspectRatio \end_inset \end_layout \begin_layout Plain Layout \begin_inset Newpage pagebreak \end_inset \end_layout \end_inset \end_layout \end_body \end_document