Articoli

Sviluppare un programma che simuli la gestion di riviste ed articoli (paper). Tutte le classi si trovano nel package papers. La classe principale è Papers. La classe TestApp nel package example contiene esempi e include i principali casi di test. Le eccezioni sono lanciate tramite la classe JException; è richiesto di effettuare solo i controlli esplicitamente menzionati nel testo e non tutti quelli possibili o ragionevoli. Quando un metodo lancia un'eccezione non devono essere fatte modifiche ai dati.
Suggerimento: dopo l'implementazione di un metodo eseguite la TestApp per verificare i risultati.

La documentazione JDK è disponile all'URL https://oop.polito.it/api/.

R1: Riviste

Il metodo int addJournal (String jName, String type, int expectedValue) inserisce una nuova rivista dati il nome, il tipo ed il valore atteso della rivista. Lancia un'eccezione se il nome della rivista esiste già. Il risultato è il numero di caratteri del nome.

Il metodo getJournalNamesInAlphabeticalOrder() restituisce la lista dei nomi delle riviste in ordine alfabetico.

R2: Autori ed articoli

Il metodo registerAuthors (String... authors) registra gli autori (un autore è rappresentato dal suo nome). I nomi duplicati sono ignorati. Il metodo retsituisce la lista degli autori in ordine alfabetico.

Il metodo String addPaper (String jName, String type, String paperTitle, String... authorNames) aggiunge alla rivista (indicata da nome tipo) il titolo di un articolo ed i nomi degli autori.
Lancia un'eccezione in quattro casi:

  1. la rivista non è presente in quanto il suo nome non viene trovato,
  2. il tipo della rivista differisce da quello inserito alla registrazione,
  3. il titolo dell'articolo è ripetuto,
  4. uno o più degli autori indicati non sono stati registrati.
Il risultato è in nome della rivista seguito da ":" e il titolo dell'articolo.

R3: Articoli

Il metodo getPapers (String author) restituisce la lista dei titoli (in ordine alfabetico) degli articoli di un dato autore. Lancia un'eccezione se l'autore non è registrato.

Il metodo getNumberOfPapersByAuthor() restituisce una SortedMap le cui chiavi sono i nomi degli autori in ordine alfabetico ed i valori sono i numeri di articoli associati a ciascun autore. Autori registrati che non hanno articoli non compaiono.

R4: Statistiche

Il metodo groupJournalsByType() restituisce una SortedMap avente per chiavi i tipi delle riviste e come valori i relativi nomi delle riviste.

Il metodo groupJournalsByExpectedValue() restituisce una SortedMap le cui chiavi sono i valori attesi delle riviste ed i valori sono le riviste aventi tale valore atteso.

Il metodo getNumberOfPapersByJournal() restituisce una SortedMap avente per chiavi i nomi delle riviste e come valore il numero di articoli in tali riviste. Non devono comparire le riviste che non hanno articoli.