Queer European MD passionate about IT
浏览代码

Working on final assignment

Davte 4 年之前
父节点
当前提交
e54fb8472f

+ 10 - 1
compitino/main.tex

@@ -19,7 +19,13 @@ top=30mm,
 
 
 \forestset{qtree/.style={for tree={parent anchor=south,
 \forestset{qtree/.style={for tree={parent anchor=south,
            child anchor=north,align=center,inner sep=0pt}}}
            child anchor=north,align=center,inner sep=0pt}}}
-\lstset{upquote=true,showstringspaces=false}
+\lstset{
+    upquote=true,
+    inputencoding=utf8,
+    extendedchars=true,
+    literate={à}{{\`a}}1,  % Accept à in `lstlisting` environments
+    showstringspaces=false
+}
 \lstdefinestyle{SQLu}{
 \lstdefinestyle{SQLu}{
     language=SQL,
     language=SQL,
     basicstyle=\small\ttfamily,
     basicstyle=\small\ttfamily,
@@ -43,8 +49,10 @@ top=30mm,
     \maketitle % Insert the title, author and date
     \maketitle % Insert the title, author and date
     \section{Descrizione di massima del dominio (testo)}\label{sec:testo}
     \section{Descrizione di massima del dominio (testo)}\label{sec:testo}
         \input{\folder/testo.tex}
         \input{\folder/testo.tex}
+    \clearpage
     \section{Descrizione del dominio}\label{sec:dominio}
     \section{Descrizione del dominio}\label{sec:dominio}
         \input{\folder/dominio.tex}
         \input{\folder/dominio.tex}
+%    \clearpage
     \section{Schema concettuale}\label{sec:schema-concettuale}
     \section{Schema concettuale}\label{sec:schema-concettuale}
         \begin{figure}[hb]
         \begin{figure}[hb]
           \centering
           \centering
@@ -53,6 +61,7 @@ top=30mm,
           \label{fig:schema-concettuale}
           \label{fig:schema-concettuale}
         \end{figure}
         \end{figure}
         \input{\folder/schema_concettuale.tex}
         \input{\folder/schema_concettuale.tex}
+    \clearpage
     \section{Schema logico}\label{sec:schema-logico}
     \section{Schema logico}\label{sec:schema-logico}
         \begin{figure}[htb]
         \begin{figure}[htb]
           \centering
           \centering

+ 10 - 8
compitino/secondo_compitino/dominio.tex

@@ -4,7 +4,7 @@ L'applicazione ``Una cervecita fresca" deve fornire supporto ai birrai e alle
 birraie artigianali nella produzione delle loro birre fatte in casa con il
 birraie artigianali nella produzione delle loro birre fatte in casa con il
 metodo all-grain.
 metodo all-grain.
 
 
-Ogni utente dell'app (birraio o birraia) lavora per uno o più birrifici, e può
+Ogni utente dell'app (birraio o birraia) può lavorare per uno o più birrifici, e può
 visualizzare le ricette dei birrifici per cui lavora.
 visualizzare le ricette dei birrifici per cui lavora.
 Del birraio o birraia sono rilevanti il nome, il cognome, il soprannome,
 Del birraio o birraia sono rilevanti il nome, il cognome, il soprannome,
 l'indirizzo email, il codice fiscale.
 l'indirizzo email, il codice fiscale.
@@ -12,6 +12,8 @@ Ogni birrificio ha un nome, un anno di fondazione, un motto e uno stemma.
 Il birrificio ha inoltre una capacità produttiva, cioè il numero massimo di
 Il birrificio ha inoltre una capacità produttiva, cioè il numero massimo di
 litri che può produrre in un singolo ciclo produttivo.
 litri che può produrre in un singolo ciclo produttivo.
 Per ogni birrificio possono lavorare più persone.
 Per ogni birrificio possono lavorare più persone.
+Ogni birrificio può lavorare a una sola produzione per volta, mettendo a
+disposizione tutta la sua capacità produttiva, o solo una parte di questa.
 
 
 Ogni birrificio ha accesso a una o più ricette: ogni ricetta ha un nome, un
 Ogni birrificio ha accesso a una o più ricette: ogni ricetta ha un nome, un
 creatore o creatrice, una data di creazione, una eventuale ricetta madre
 creatore o creatrice, una data di creazione, una eventuale ricetta madre
@@ -53,13 +55,13 @@ Ogni nota ha un testo.
 Esistono particolari note, dette di degustazione, che esprimono anche un
 Esistono particolari note, dette di degustazione, che esprimono anche un
 giudizio da 1 a 10 sulla qualità del prodotto.
 giudizio da 1 a 10 sulla qualità del prodotto.
 
 
-Il birrificio tiene un inventario degli ingredienti in magazzino, specificando
-per ogni ingrediente acquistato la quantità e la fattura.
-Ogni fattura del birrificio è caratterizzata da una data, un numero di fattura,
-un importo e un fornitore.
-L'inventario è generato dinamicamente dall'applicazione, sottraendo agli
-ingredienti acquistati quelli in uso o consumati da produzioni (secondo le
-quantità specificate nelle ricette).
+Il birrificio tiene un registro degli acquisti, conservando i dati della
+fattura e specificando per ogni ingrediente acquistato la quantità.
+Ogni fattura registrata dal birrificio è caratterizzata da una data, un numero
+di fattura, un importo e un fornitore.
+I fornitori hanno una ragione sociale, una partita IVA e un indirizzo.
+L'inventario mostra, per ogni ingrediente, la quantità disponibile e quella
+totale (compresi cioè gli ingredienti ``prenotati" da preparazioni in corso).
 
 
 Oltre che come birrario o birraia, ci si può anche registrare come cliente,
 Oltre che come birrario o birraia, ci si può anche registrare come cliente,
 specificando un indirizzo di spedizione.
 specificando un indirizzo di spedizione.

文件差异内容过多而无法显示
+ 0 - 0
compitino/secondo_compitino/schema.drawio


二进制
compitino/secondo_compitino/schema_concettuale.pdf


+ 71 - 1
compitino/secondo_compitino/schema_concettuale.tex

@@ -1,3 +1,73 @@
 % !TEX root = ../main.tex
 % !TEX root = ../main.tex
 
 
-Vincoli non catturati graficamente: \textellipsis
+\paragraph{Elenco degli ingredienti disponibili}
+*l* committente ha chiesto espressamente l'elenco degli ingredienti disponibili.
+Tuttavia, questo è calcolabile a partire dagli acquisti e dalle produzioni.
+Ho convinto *l* committente a non memorizzare separatamente l'inventario degli
+ingredienti, rassicurandol* che avrei fornito una vista logica ``Inventario".
+
+\begin{lstlisting}[style=SQLu][float,floatplacement=H]
+CREATE VIEW IngredientiAcquistatiTotali (IdIngrediente, Ingrediente,
+                                         Totale)
+AS (SELECT i.IdIngrediente IdIngrediente, i.Descrizione Ingrediente,
+        SUM(a.Quantità) Totale
+    FROM Acquisti a
+    JOIN Ingredienti i ON i.IdIngrediente = a.IdIngrediente
+    GROUP BY i.IdIngrediente, i.Descrizione)
+
+CREATE VIEW IngredientiInUso (IdIngrediente, Ingrediente, InUso)
+AS (SELECT i.IdIngrediente IdIngrediente, i.Descrizione Ingrediente,
+        SUM(ir.Quantità) InUso
+    FROM IngredientiRicette ir
+    JOIN Ingredienti i ON i.IdIngrediente = ir.IdIngrediente
+    JOIN Produzioni p ON p.IdRicetta = ir.IdRicetta
+    WHERE p.Stato IS NULL
+    GROUP BY i.IdIngrediente, i.Descrizione)
+
+CREATE VIEW IngredientiUsati (IdIngrediente, Ingrediente,
+                              QuantitàUsata)
+AS (SELECT i.IdIngrediente IdIngrediente, i.Descrizione Ingrediente,
+        SUM(ir.Quantità) Usati
+    FROM IngredientiRicette ir
+    JOIN Ingredienti i ON i.IdIngrediente = ir.IdIngrediente
+    JOIN Produzioni p ON p.IdRicetta = ir.IdRicetta
+    WHERE p.Stato = 0
+    GROUP BY i.IdIngrediente, i.Descrizione)
+
+CREATE VIEW Inventario (IdIngrediente, Ingrediente, QuantitàTotale,
+                        QuantitàDisponibile)
+AS (SELECT iat.IdIngrediente IdIngrediente, iat.Ingrediente Ingrediente,
+        (iat.Totale - COALESCE(iu.Usati, 0)) QuantitàTotale,
+        (iat.Totale - COALESCE(iu.Usati, 0)
+          - COALESCE(iiu.InUso, 0)) QuantitàDisponibile
+    FROM IngredientiAcquistatiTotali iat
+    LEFT JOIN IngredientiUsati iu
+              ON iu.idIngrediente = iat.IdIngrediente
+    LEFT JOIN IngredientiInUso iiu
+              ON iiu.idIngrediente = iat.IdIngrediente
+    WHERE iat.Totale - COALESCE(iu.Usati, 0) > 0)
+\end{lstlisting}
+
+Ogni volta che si inizia una produzione, l'applicazione controlla che  la
+quantità di ingredienti disponibili superi la quantità degli ingredienti
+necessari alla preparazione.
+
+L'applicazione può anche mostrare una ``lista della spesa" basandosi su ricette
+che si vogliono preparare e sulla vista inventario.
+
+L'applicazione mostrerà ad ogni birrai* solo le ricette di cui è aut*r* o di un
+birrificio per cui lavora.
+
+\begin{minipage}{\linewidth}
+    \paragraph{Vincoli non catturati graficamente}
+    \begin{itemize}
+        \item Il tipo di ingrediente determina l'unità di misura.
+        Esiste un breve elenco di tipi ingredienti disponibili con la relativa unità di
+        misura.
+        Non ho creato una classe ``TipiIngredienti" per contenere il numero di classi,
+        ma in effetti il tipo determina funzionalmente l'unità di misura ed esistono
+        pochi tipi, mentre ci sono molti ingredienti per ogni tipo.
+        \item In ogni produzione, il NumeroBottiglie diviso per 0.5 non deve superare la
+        CapacitàProduttiva del birrificio.
+    \end{itemize}
+\end{minipage}

+ 4 - 2
compitino/secondo_compitino/testo.tex

@@ -25,8 +25,10 @@ anche:
 ``Una cervecita fresca" è un'applicazione che consente ai produttori amatoriali di birra di
 ``Una cervecita fresca" è un'applicazione che consente ai produttori amatoriali di birra di
 mantenere un database organizzato delle loro ricette di birra. L'applicazione consente agli
 mantenere un database organizzato delle loro ricette di birra. L'applicazione consente agli
 utenti di creare, archiviare e modificare ricette, e successivamente eliminarle, se l'utente
 utenti di creare, archiviare e modificare ricette, e successivamente eliminarle, se l'utente
-desidera farlo. L'applicazione è destinata solo ai produttori di birra con metodo \href{https://www.birradegliamici.com/fare-la-birra/all-grain/}{all-grain}, e quindi tutte le ricette sono per
-questo tipo di birre (le birre ``estratto" non sono supportate).
+desidera farlo. L'applicazione è destinata solo ai produttori di birra con metodo
+\href{https://www.birradegliamici.com/fare-la-birra/all-grain/}{all-grain}, e
+quindi tutte le ricette sono per questo tipo di birre (le birre ``estratto" non
+sono supportate).
 
 
 Ogni birrificio domestico dispone di un'attrezzatura specifica, le cui caratteristiche portano a
 Ogni birrificio domestico dispone di un'attrezzatura specifica, le cui caratteristiche portano a
 una particolare ``dimensione del lotto": il numero massimo di litri che possono essere prodotti
 una particolare ``dimensione del lotto": il numero massimo di litri che possono essere prodotti

部分文件因为文件数量过多而无法显示