Progetto per Programmazione web e mobile e Ingegneria del software (a.a. 2020/2021)
Si richiede la progettazione di un software per il supporto ad un servizio di noleggio auto/moto/bici/monopattino on-demand. Le specifiche di seguito espresse sono da considerarsi come minime per la tesina in oggetto e possono essere estese dallo studente qualora questo non violi la natura e lβintento del software richiesto. Lo studente, durante la stesura del progetto, deve dimostrare capacitΓ di interazione con il committente e con i membri del suo gruppo al fine di estendere o integrare, se necessario, le specifiche riportate di seguito.
Descrizione generale del sistema
Si richiede di progettare e sviluppare un software di gestione di un servizio di noleggio mezzi on-demand. I mezzi a disposizione sono autovetture, moto, biciclette e monopattini. Il noleggio auto puΓ² anche prevedere un autista. Per la prenotazione del mezzo il cliente deve comunicare i propri dati personali, il giorno e lβora del noleggio ed il luogo dove il mezzo verrΓ rilasciato e per lβauto con autista Γ¨ anche necessario indicare la destinazione. Per il ritiro dei mezzi si usufruirΓ di parcheggi o stalli appositi. Il cliente (o un eventuale addetto alla consegna mezzi) comunicherΓ al sistema lβavvenuta consegna o lβavvenuto rilascio. Il mezzo puΓ² essere ritirato/lasciato, su richiesta, in punti diversi da stalli o parcheggi. Nel proporre i mezzi ai clienti il software dovrΓ tenere conto della possibilitΓ di offrire un mezzo fuori stallo nellβottica di agevolare il piΓΉ possibile il cliente. (Facoltativo: il software puΓ² suggerire al cliente la posizione piΓΉ vicina alla sua destinazione finale dove lasciare il mezzo).
Il cliente deve comunicare per tempo qualsiasi cambiamento nella destinazione finale e puΓ² scegliere il tipo di veicolo.
Per il pagamento deve essere prevista un calcolo della tariffa in funzione del percorso, del tempo di utilizzo e del tipo di veicolo ed il pagamento deve essere effettuato (mancia compresa per lβautista, volontaria) allβatto della prenotazione.
Il sistema deve notificare al cliente ed allβamministratore dellβazienda di noleggio qualunque ritardo nelle consegne. Il cliente, che potrΓ effettuare una prenotazione solo dopo aver dichiarato di possedere un dispositivo portatile*, riceverΓ un alert nel caso in cui egli sia in ritardo con la consegna del mezzo ed in questo caso dovrΓ giustificarne il motivo (traffico, guasto, β¦.) fornendo anche uno stimato alla consegna. Nel caso di ritardo il cliente, per non incorrere in sovrapprezzo, potrΓ riconsegnare il mezzo in un posto diverso da quello pattuito in precedenza. Eventuali sovrapprezzi o penali per mancata riconsegna verranno addebitati direttamente sulla carta del cliente.
Si ricorda che da specifiche NON Γ¨ richiesta unβapplicazione web o una particolare architettura, gli studenti dovranno condurre la fase di analisi senza far riferimento ad una particolare architettura nΓ© ipotizzare soluzioni specifiche. Soltanto nella seconda fase della progettazione e soprattutto per gli studenti che sosterranno anche la prova di Programmazione Web e Mobile sarΓ possibile optare per una scelta implementativa tipo piattaforma web.
Nota: il pagamento non va implementato ma solo progettato
- Servizi offerti a tutti gli utenti
- Autenticazione e Registrazione: FunzionalitΓ che permette agli utenti di creare il proprio account e autenticarsi. CiΓ² Γ¨ necessario per accedere alle funzionalitΓ principali del sistema (Ricercare un veicolo disponibile, effettuare una prenotazione)
- Modifica dei dati personali: AttivitΓ di aggiornamento e/o inserimento delle informazioni relative allβutente che ha effettuato lβaccesso.
- Servizi offerti ai Clienti
- Inserimento e rimozione dei metodi di pagamento: Il sistema permette al cliente che ha effettuato lβaccesso di memorizzare uno o piΓΉ metodi di pagamenti per poterli poi utilizzare rapidamente quando necessario. Il cliente puΓ² rimuovere il metodo di pagamento precedentemente inserito.
- Inserimento e aggiornamento della patente di guida: Il sistema permette al cliente che ha effettuato l'accesso di memorizzare una patente per verificare che sia abilitato alla guida del mezzo che desidera prenotare. Il cliente puΓ² aggiornare la patente precedentemente inserita.
- Ricerca dei veicoli: Il cliente ha la possibilitΓ di eseguire una ricerca tra tutti i veicoli registrati, visualizzando solo quelli che rispondono alle sue esigenze.
- Modifica della prenotazione: Il cliente puΓ², nella propria area personale, accedere alle proprie prenotazioni e modificarne alcune delle informazioni precedentemente inserite.
- Ritiro e consegna: Il cliente, nella propria area personale, ha la possibilitΓ di effettuare il ritiro del veicolo precedentemente prenotato. Il cliente, al termine della prenotazione, ha la possibilitΓ di effettuare la consegna del veicolo precedentemente prenotato.
- Consegna fuori dallo stallo: Il cliente, qualora lo desideri, ha la possibilitΓ di consegnare il veicolo precedentemente prenotato nel luogo che preferisce.
- Segnala guasto: Il cliente, qualora dovesse verificarsi un mal funzionamento del mezzo prenotato, puΓ² segnalarlo nella propria area personale.
- Ritardo consegna: Il cliente, qualora dovesse superare la data e l'ora stabilita nella prenotazione per la consegna, puΓ² notificare un nuovo orario o un nuovo luogo di consegna nella propria area personale.
- Servizi offerti agli Amministratori
- Aggiungi veicolo: L'amministratore, nella propria area personale, ha la possiblitΓ di aggiungere un nuovo veicolo a quelli registrati.
- Rimuovi veicolo: L'amministratore, nella propria area personale, ha la possibilitΓ di rimuovere un veicolo tra quelli precedentemente registrati.
- Modifica stato veicolo: L'amministratore, nella propria area personale, ha la possibilitΓ di modificare lo stato di un veicolo tra quelli precedentemente registrati.
- Prenotazioni effetuate: L'amministratore, nella propria area personale, ha la possibilitΓ di cercare le prenotazioni effettuate dai clienti inserendo l'email del cliente desiderato.
- Aggiungi utente: L'amministratore, nella propria area personale, ha la possbilitΓ di aggiungere un nuovo utente alla piattaforma.
- Rimuovi utente: L'amministratore, nella propria area personale, ha la possiblitΓ di rimuovere un utente dalla piattaforma.
- Modifica dati utente: L'amministratore, nella propria area personale, ha la possiblitΓ di modificare i dati di un utente della piattaforma.
- Servizi offerti agli Autisti
- Conferma prenotazione: L'autista, nella propria area personale, ha la possibilitΓ di prendere in carico una nuova prenotazione che richiede un autista.
- Visualizza prenotazioni: L'autista, nella propria area personale, ha la possibilitΓ di visualizzare tutte le prenotazioni prese in carico.
- Ritiro e consegna: L'autista, nella propria area personale, ha la possibilitΓ di effettuare il ritiro del veicolo precedentemente prenotato da un cliente che ha richiesto un autista. Al termine della prenotazione, ha la possibilitΓ di effettuare la consegna del veicolo precedentemente prelevato.
- Servizi offerti ai Parcheggiatori
- Veicoli nel parcheggio: Il parcheggiatore, nella propria area personale, puΓ² visualizzare tutti i veicoli presenti nel suo parcheggio che hanno una prenotazione.
- Veicoli che arriveranno al parcheggio: Il parcheggiatore, nella propria area personale, puΓ² visualizzare tutti i veicoli che verranno consegnati dai clienti nel suo parcheggio.
- Ritiro e consegna: Il parcheggiatore, nella propria area personale, ha la possibilitΓ di effettuare il ritiro del veicolo precedentemente prenotato da un cliente. Al termine della prenotazione, ha la possibilitΓ di effettuare la consegna del veicolo precedentemente prelevato.
Per la realizzazione di questa applicazione web Γ¨ stato scelto di utilizzare come gestore di pacchetti JavaScript NPM.
Si Γ¨ deciso di utilizzare il framework ExpressJS e la libreria di JavaScript ReactJS poichΓ© entrambi semplificano lo sviluppo di applicazioni web e mobile.
Per la realizzazione delle interfacce grafiche, si Γ¨ scelto di utilizzare il framework reactstrap.
Per gestire le richieste HTTP POST e GET tra client e server, si Γ¨ utilizzata la libreria βaxiosβ, SQLite, Express, React, NodeJS.
Aprire un terminale nella directory in cui si vuole installare dropcar ed eseguire i seguenti comandi
git clone https://github.com/EmanueleSeminara/Error404-dropcar
Configurazione Backend:
cd backend
npm install
Creare un file chiamato .env e inserirlo nella cartella backend con i seguenti dati
MAIL_USER=yourEmail@gmail.com
MAIL_PASSWORD=emailPassword
SESSION_SECRET=a secret sentence not to share with anybody and anywhere, used to sign the session ID cookie
GOOGLE_KEY=your API key for Distance Matrix API (Google)
Eseguire il backend con il seguente comando:
npm start
Configurazione Frontend:
cd .. //se vi trovate nella cartella backend
cd frontend
npm install
npm start
Alla fine del caricamento andare su http://localhost:3000/
All'interno del download troverai la cartella backend organizzata in questa maniera:
./backend/
βββ app.js
βββ db
βΒ Β βββ db.js
βΒ Β βββ dropcar.sqlite
βββ .gitignore
βββ middleware
βΒ Β βββ isAdmin.js
βΒ Β βββ isDriver.js
βΒ Β βββ isGuest.js
βΒ Β βββ isLoggedIn.js
βΒ Β βββ isValet.js
βββ models
βΒ Β βββ adminManagement.js
βΒ Β βββ distance.js
βΒ Β βββ driverManagement.js
βΒ Β βββ guestManagement.js
βΒ Β βββ mail.js
βΒ Β βββ passport-config.js
βΒ Β βββ reservationManagement.js
βΒ Β βββ searchManagement.js
βΒ Β βββ userManagement.js
βΒ Β βββ valetManagement.js
βΒ Β βββ vehicleManagement.js
βββ package.json
βββ package-lock.json
βββ routes
βββ admin.js
βββ driver.js
βββ guest.js
βββ reservation.js
βββ search.js
βββ user.js
βββ valet.js
βββ vehicle.js
All'interno del download troverai la cartella frontend organizzata in questa maniera:
./frontend/
βββ package.json
βββ package-lock.json
βββ public
βΒ Β βββ favicon.ico
βΒ Β βββ index.html
βΒ Β βββ logo192.png
βΒ Β βββ logo512.png
βΒ Β βββ manifest.json
βΒ Β βββ robots.txt
βββ src
βββ App.css
βββ App.js
βββ App.test.js
βββ Components
βΒ Β βββ Amministratore
βΒ Β βΒ Β βββ GestionePrenotazioni
βΒ Β βΒ Β βΒ Β βββ CardPrenotazione.js
βΒ Β βΒ Β βΒ Β βββ PannelloVisualizzaPrenotazioni.js
βΒ Β βΒ Β βββ GestioneUtenti
βΒ Β βΒ Β βΒ Β βββ CardModificaUtente.js
βΒ Β βΒ Β βΒ Β βββ CardRimuoviUtente.js
βΒ Β βΒ Β βΒ Β βββ PannelloAggiungiUtente.js
βΒ Β βΒ Β βΒ Β βββ PannelloModificaUtente.js
βΒ Β βΒ Β βΒ Β βββ PannelloRimuoviUtente.js
βΒ Β βΒ Β βββ GestioneVeicoli
βΒ Β βΒ Β βΒ Β βββ CardModificaVeicolo.js
βΒ Β βΒ Β βΒ Β βββ CardRimuoviVeicolo.js
βΒ Β βΒ Β βΒ Β βββ PannelloAggiungiVeicolo.js
βΒ Β βΒ Β βΒ Β βββ PannelloModificaVeicolo.js
βΒ Β βΒ Β βΒ Β βββ PannelloRimuoviVeicolo.js
βΒ Β βΒ Β βββ PannelloAmministratore.js
βΒ Β βββ Autista
βΒ Β βΒ Β βββ CardConfermaPrenotazione.js
βΒ Β βΒ Β βββ CardRitiraConsegnaAutista.js
βΒ Β βΒ Β βββ PannelloAutista.js
βΒ Β βΒ Β βββ PannelloConfermaPrenotazione.js
βΒ Β βΒ Β βββ PannelloRitiraConsegnaAutista.js
βΒ Β βββ Cliente
βΒ Β βΒ Β βββ GestioneAccount
βΒ Β βΒ Β βΒ Β βββ CardEliminaCarta.js
βΒ Β βΒ Β βΒ Β βββ PannelloEliminaCarta.js
βΒ Β βΒ Β βΒ Β βββ PannelloInserimentoCarta.js
βΒ Β βΒ Β βΒ Β βββ PannelloInserimentoPatente.js
βΒ Β βΒ Β βΒ Β βββ PannelloModifcaPassword.js
βΒ Β βΒ Β βΒ Β βββ PannelloModifcaPatente.js
βΒ Β βΒ Β βΒ Β βββ PannelloModificaDati.js
βΒ Β βΒ Β βββ GestionePrenotazione
βΒ Β βΒ Β βΒ Β βββ CardConsegnaFuoriStallo.js
βΒ Β βΒ Β βΒ Β βββ CardPrenotazione.js
βΒ Β βΒ Β βΒ Β βββ CardRitardoConsegna.js
βΒ Β βΒ Β βΒ Β βββ CardRitiroConsegna.js
βΒ Β βΒ Β βΒ Β βββ CardSegnalaGuasto.js
βΒ Β βΒ Β βΒ Β βββ PannelloConsegnaFuoriStallo.js
βΒ Β βΒ Β βΒ Β βββ PannelloRiepilogoPrenotazione.js
βΒ Β βΒ Β βΒ Β βββ PannelloRitardoConsegna.js
βΒ Β βΒ Β βΒ Β βββ PannelloRitiraConsegna.js
βΒ Β βΒ Β βΒ Β βββ PannelloSegnalaGuasto.js
βΒ Β βΒ Β βΒ Β βββ VisualizzaMiePrenotazioni.js
βΒ Β βΒ Β βββ Noleggio
βΒ Β βββ Footer.js
βΒ Β βββ NavbarCliente.js
βΒ Β βββ NavbarDipendente.js
βΒ Β βββ Navbar.js
βΒ Β βββ Pagamento
βΒ Β βΒ Β βββ CardPagamento.js
βΒ Β βΒ Β βββ PagamentoPDF.js
βΒ Β βΒ Β βββ PannelloPagamento.js
βΒ Β βββ Parcheggiatore
βΒ Β βΒ Β βββ CardConsegna.js
βΒ Β βΒ Β βββ CardRitiro.js
βΒ Β βΒ Β βββ PannelloConsegna.js
βΒ Β βΒ Β βββ PannelloParcheggiatore.js
βΒ Β βΒ Β βββ PannelloRitiro.js
βΒ Β βββ Ricerca
βΒ Β βββ CardPrenotaVeicolo.js
βΒ Β βββ FormRicerca.js
βΒ Β βββ RicercaConAutista.js
βΒ Β βββ RicercaFuoriStallo.js
βΒ Β βββ RicercaVeicoli.js
βββ ComponentsCss
βΒ Β βββ CardModificaVeicolo.css
βΒ Β βββ Footer.css
βΒ Β βββ GestionePrenotazione.css
βΒ Β βββ Login.css
βΒ Β βββ main.css
βΒ Β βββ ModificaPassword.css
βΒ Β βββ Navbar.css
βΒ Β βββ Pannel.css
βΒ Β βββ PannellDipendente.css
βΒ Β βββ PannelloAmministratore.css
βΒ Β βββ PannelloEliminaCarta.css
βΒ Β βββ PannelloGestioneAdmin.css
βΒ Β βββ PannelloInserimentoPatente.css
βΒ Β βββ RecuperoPassword.css
βΒ Β βββ Registrazione.css
βΒ Β βββ Ricerca.css
βΒ Β βββ util.css
βΒ Β βββ visualizzaPrenotazioni.css
βββ fonts
βΒ Β βββ font-awesome-4.7.0
βΒ Β βΒ Β βββ css
βΒ Β βΒ Β βΒ Β βββ font-awesome.css
βΒ Β βΒ Β βΒ Β βββ font-awesome.min.css
βΒ Β βΒ Β βββ fonts
βΒ Β βΒ Β βΒ Β βββ FontAwesome.otf
βΒ Β βΒ Β βΒ Β βββ fontawesome-webfont.eot
βΒ Β βΒ Β βΒ Β βββ fontawesome-webfont.svg
βΒ Β βΒ Β βΒ Β βββ fontawesome-webfont.ttf
βΒ Β βΒ Β βΒ Β βββ fontawesome-webfont.woff
βΒ Β βΒ Β βΒ Β βββ fontawesome-webfont.woff2
βΒ Β βΒ Β βββ HELP-US-OUT.txt
βΒ Β βΒ Β βββ less
βΒ Β βΒ Β βΒ Β βββ animated.less
βΒ Β βΒ Β βΒ Β βββ bordered-pulled.less
βΒ Β βΒ Β βΒ Β βββ core.less
βΒ Β βΒ Β βΒ Β βββ fixed-width.less
βΒ Β βΒ Β βΒ Β βββ font-awesome.less
βΒ Β βΒ Β βΒ Β βββ icons.less
βΒ Β βΒ Β βΒ Β βββ larger.less
βΒ Β βΒ Β βΒ Β βββ list.less
βΒ Β βΒ Β βΒ Β βββ mixins.less
βΒ Β βΒ Β βΒ Β βββ path.less
βΒ Β βΒ Β βΒ Β βββ rotated-flipped.less
βΒ Β βΒ Β βΒ Β βββ screen-reader.less
βΒ Β βΒ Β βΒ Β βββ stacked.less
βΒ Β βΒ Β βΒ Β βββ variables.less
βΒ Β βΒ Β βββ scss
βΒ Β βΒ Β βββ _animated.scss
βΒ Β βΒ Β βββ _bordered-pulled.scss
βΒ Β βΒ Β βββ _core.scss
βΒ Β βΒ Β βββ _fixed-width.scss
βΒ Β βΒ Β βββ font-awesome.scss
βΒ Β βΒ Β βββ _icons.scss
βΒ Β βΒ Β βββ _larger.scss
βΒ Β βΒ Β βββ _list.scss
βΒ Β βΒ Β βββ _mixins.scss
βΒ Β βΒ Β βββ _path.scss
βΒ Β βΒ Β βββ _rotated-flipped.scss
βΒ Β βΒ Β βββ _screen-reader.scss
βΒ Β βΒ Β βββ _stacked.scss
βΒ Β βΒ Β βββ _variables.scss
βΒ Β βββ montserrat
βΒ Β βΒ Β βββ Montserrat-BlackItalic.ttf
βΒ Β βΒ Β βββ Montserrat-Black.ttf
βΒ Β βΒ Β βββ Montserrat-BoldItalic.ttf
βΒ Β βΒ Β βββ Montserrat-Bold.ttf
βΒ Β βΒ Β βββ Montserrat-ExtraBoldItalic.ttf
βΒ Β βΒ Β βββ Montserrat-ExtraBold.ttf
βΒ Β βΒ Β βββ Montserrat-ExtraLightItalic.ttf
βΒ Β βΒ Β βββ Montserrat-ExtraLight.ttf
βΒ Β βΒ Β βββ Montserrat-Italic.ttf
βΒ Β βΒ Β βββ Montserrat-LightItalic.ttf
βΒ Β βΒ Β βββ Montserrat-Light.ttf
βΒ Β βΒ Β βββ Montserrat-MediumItalic.ttf
βΒ Β βΒ Β βββ Montserrat-Medium.ttf
βΒ Β βΒ Β βββ Montserrat-Regular.ttf
βΒ Β βΒ Β βββ Montserrat-SemiBoldItalic.ttf
βΒ Β βΒ Β βββ Montserrat-SemiBold.ttf
βΒ Β βΒ Β βββ Montserrat-ThinItalic.ttf
βΒ Β βΒ Β βββ Montserrat-Thin.ttf
βΒ Β βΒ Β βββ OFL.txt
βΒ Β βββ poppins
βΒ Β βββ Poppins-BlackItalic.ttf
βΒ Β βββ Poppins-Black.ttf
βΒ Β βββ Poppins-BoldItalic.ttf
βΒ Β βββ Poppins-Bold.ttf
βΒ Β βββ Poppins-ExtraBoldItalic.ttf
βΒ Β βββ Poppins-ExtraBold.ttf
βΒ Β βββ Poppins-ExtraLightItalic.ttf
βΒ Β βββ Poppins-ExtraLight.ttf
βΒ Β βββ Poppins-Italic.ttf
βΒ Β βββ Poppins-LightItalic.ttf
βΒ Β βββ Poppins-Light.ttf
βΒ Β βββ Poppins-MediumItalic.ttf
βΒ Β βββ Poppins-Medium.ttf
βΒ Β βββ Poppins-Regular.ttf
βΒ Β βββ Poppins-SemiBoldItalic.ttf
βΒ Β βββ Poppins-SemiBold.ttf
βΒ Β βββ Poppins-ThinItalic.ttf
βΒ Β βββ Poppins-Thin.ttf
βββ images
βΒ Β βββ cane.png
βΒ Β βββ icons
βΒ Β βΒ Β βββ favicon.ico
βΒ Β βββ img-01.png
βΒ Β βββ logo.svg
βΒ Β βββ logo_testo.svg
βΒ Β βββ logo_testo_.svg
βΒ Β βββ serverError.png
βΒ Β βββ sfondoLogin-.svg
βΒ Β βββ sfondoLogin.svg
βΒ Β βββ svgAmministratore
βΒ Β βββ AggiungiUtente.svg
βΒ Β βββ AggiungiVeicolo.svg
βΒ Β βββ Logout.svg
βΒ Β βββ ModificaDatiUtente.svg
βΒ Β βββ ModificaStatoVeicolo.svg
βΒ Β βββ PrenotazioniEffettuate.svg
βΒ Β βββ RimuoviUtente.svg
βΒ Β βββ RimuoviVeicolo.svg
βΒ Β βββ sfondoAdmin-.svg
βΒ Β βββ sfondoAdmin.svg
βββ index.css
βββ index.js
βββ logo.svg
βββ pages
βΒ Β βββ 404.js
βΒ Β βββ Errorpage.js
βΒ Β βββ Login.js
βΒ Β βββ RecuperoPassword.js
βΒ Β βββ Registrazione.js
βββ reportWebVitals.js
βββ setupTests.js