diff --git a/.gitignore b/.gitignore index f7e2e93..9bd603d 100644 --- a/.gitignore +++ b/.gitignore @@ -245,3 +245,33 @@ object_script.*.Debug # SQLite study.db + +# LaTeX + +## Core latex/pdflatex auxiliary files: +*.aux +*.lof +*.log +*.lot +*.fls +*.out +*.toc +*.fmt +*.fot +*.cb +*.cb2 +.*.lb + +## Build tool auxiliary files: +*.fdb_latexmk +*.synctex +*.synctex(busy) +*.synctex.gz +*.synctex.gz(busy) +*.pdfsync +*.rubbercache +rubber.cache + +## Build tool directories for auxiliary files +# latexrun +latex.out/ diff --git a/docs/portfolio/README.md b/docs/portfolio/README.md new file mode 100644 index 0000000..7a6e303 --- /dev/null +++ b/docs/portfolio/README.md @@ -0,0 +1,33 @@ +Portfolio-Dokumentation (LaTeX-Templates) +========================================= + +Diese Vorlagen decken die geforderten Abgaben aus der Aufgabenstellung DLBDSOOFPP01_D ab. Jede Phase hat einen eigenen LaTeX-Entwurf, der die Inhalte und Formatvorgaben (2 cm Ränder, Arial/ähnlich, 1,5 Zeilenabstand, Blocksatz, 6 pt Absatzabstand) berücksichtigt. + +Struktur +-------- +- `preamble.tex` – gemeinsame Pakete, Seitenlayout und Metadaten. +- `phase1/phase1.tex` – Konzeptionsphase (max. 5 Seiten). +- `phase2/phase2.tex` – Reflexions- und Entwurfsdokument (max. 5 Seiten). +- `phase3/abstract.tex` – Abstract (1–2 Seiten). +- `phase3/installationsanleitung.tex` – Installationsanleitung (max. 1 Seite). + +Kompilieren +----------- +Aus dem Ordner `docs/portfolio`: + +```bash +latexmk -pdf phase1/phase1.tex +latexmk -pdf phase2/phase2.tex +latexmk -pdf phase3/abstract.tex +latexmk -pdf phase3/installationsanleitung.tex +``` + +Alternativ: `pdflatex` zweimal pro Datei. Passe die Makros in `preamble.tex` (Name, Matrikelnummer, Kurs) an, damit die Titelseiten stimmen. + +Benennung für Abgabe (laut Aufgabenstellung) +--------------------------------------------- +- Phase 1 PDF: `Nachname-Vorname_Matrikelnummer_Kurs_Phase1.pdf` +- Phase 2 PDF: `Nachname-Vorname_Matrikelnummer_Kurs_Phase2.pdf` +- Phase 3 Abstract: `Nachname-Vorname_Matrikelnummer_Kurs_Phase3_Abstract.pdf` +- Phase 3 Installationsanleitung: `Nachname-Vorname_Matrikelnummer_Kurs_Phase3_Installationsanleitung.pdf` +- Gesamt-Zip: `Nachname-Vorname_Matrikelnummer_Python.zip` mit Unterordnern `Phase1`, `Phase2`, `Phase3` wie in der Aufgabenstellung beschrieben. diff --git a/docs/portfolio/phase1/phase1.pdf b/docs/portfolio/phase1/phase1.pdf new file mode 100644 index 0000000..d6a1a43 Binary files /dev/null and b/docs/portfolio/phase1/phase1.pdf differ diff --git a/docs/portfolio/phase1/phase1.tex b/docs/portfolio/phase1/phase1.tex new file mode 100644 index 0000000..31565f1 --- /dev/null +++ b/docs/portfolio/phase1/phase1.tex @@ -0,0 +1,55 @@ +\documentclass[12pt]{article} +\input{../preamble.tex} + +\begin{document} +\documentinfo{Konzeptionsphase: Dashboard f\"ur das Studium}{Portfolioteil 1 (max. 5 Seiten)} + +\section{Ziele des Dashboards} +\begin{itemize}[leftmargin=*] + \item Abschlussziel: \textit{z.\,B. Bachelorabschluss in 3 Jahren, Meilensteine pro Semester}. + \item Notenziel: \textit{z.\,B. Gesamtnotenschnitt $\leq$ 2{,}0; Mindestnoten pro Modul}. + \item Weitere Kennzahlen (optional): \textit{ECTS-Fortschritt, offene Pr\"ufungsleistungen, Lernzeit/Woche}. +\end{itemize} + +\section{Geplante Inhalte und Visualisierung} +\begin{itemize}[leftmargin=*] + \item \textbf{Startseite/Overview:} Fortschrittsbalken f\"ur ECTS, aktueller Notenschnitt, verbleibende Semester bis Zieltermin. + \item \textbf{Modul-Detail:} Tabelle mit Modulstatus, Note, Pr\"ufungsform, Wiederholtermine. + \item \textbf{Zeitplanung:} Kalender/Timeline mit Abgabefristen und empfohlenen Lernslots. + \item \textbf{Warnhinweise:} Hervorhebung von Risiken (\"uberdue ECTS, Notenrisiken, Terminkonflikte). +\end{itemize} + +\section{Dashboard-Skizze} +\begin{figure}[H] + \centering + \fbox{\parbox{0.9\textwidth}{Platz f\"ur die Skizze (z.\,B. Export aus Figma/Excalidraw oder eingescanntes Handdrawing).}} + \caption{Skizze des geplanten Dashboards (Soll die Ziele aus Abschnitt~1 abdecken).} +\end{figure} + +\section{UML-Klassendiagramm (Entity-Ebene)} +\begin{itemize}[leftmargin=*] + \item Pflichtklassen laut Aufgabenstellung: \texttt{Studiengang}, \texttt{Semester}, \texttt{Modul}, \texttt{Pr\"ufungsleistung}. + \item Erg\"anzungen (falls ben\"otigt): \textit{z.\,B. Benutzerprofil, Lernplan, Terminplanung}. + \item Beziehungen: \textit{Aggregation/Komposition zwischen Studiengang--Semester--Modul--Pr\"ufungsleistung; Vererbung nur falls sinnvoll}. +\end{itemize} +\begin{figure}[H] + \centering + \fbox{\parbox{0.9\textwidth}{Platz f\"ur das UML-Klassendiagramm (Entity-Fokus).}} + \caption{Entity-Klassen und Beziehungen (Komposition/Aggregation klar kennzeichnen).} +\end{figure} + +\section{Annahmen und Randbedingungen} +\begin{itemize}[leftmargin=*] + \item Datenquelle: \textit{myCampus-Export manuell importiert? Lokale SQLite?} + \item Aktualisierungszyklus: \textit{z.\,B. w\"ochentlich/monatlich}. + \item Nichtziele: \textit{z.\,B. keine automatische myCampus-Schnittstelle, kein Mobile-Frontend}. +\end{itemize} + +\section{Offene Fragen / Feedbackbedarf} +\begin{itemize}[leftmargin=*] + \item Welche Kennzahlen priorisieren (max. 2--3 zentrale Ziele)? + \item Welche Visualisierung unterst\"utzt die Zielerreichung am besten? + \item Braucht es zus\"atzliche Entity-Klassen f\"ur persistente Daten? +\end{itemize} + +\end{document} diff --git a/docs/portfolio/phase2/phase2.tex b/docs/portfolio/phase2/phase2.tex new file mode 100644 index 0000000..48e9706 --- /dev/null +++ b/docs/portfolio/phase2/phase2.tex @@ -0,0 +1,63 @@ +\documentclass[12pt]{article} +\input{../preamble.tex} + +\begin{document} +\documentinfo{Reflexions- und Entwurfsdokument}{Portfolioteil 2 (max. 5 Seiten)} + +\section{Untersuchung objektorientierter Konzepte in Python} +\subsection{Klassen- und Objektmodell} +\begin{itemize}[leftmargin=*] + \item Wie werden Entity-Klassen aus Phase 1 in Python umgesetzt? (\textit{Attribute, Typannotationen, Properties}). + \item Umgang mit Immutabilit\"at/Mutabilit\"at und Validierung. +\end{itemize} + +\subsection{Vererbung, Komposition, Aggregation} +\begin{itemize}[leftmargin=*] + \item Welche Beziehungen aus dem Klassendiagramm bleiben Vererbung, welche Komposition/Aggregation? + \item Python-spezifische Aspekte: Mehrfachvererbung vermeiden, \texttt{@dataclass} f\"ur Value-Objekte? +\end{itemize} + +\subsection{Polymorphie und Schnittstellen} +\begin{itemize}[leftmargin=*] + \item Nutzung von ABCs/Protokollen f\"ur Services (z.\,B. Repository/Exporter). + \item Beispielcode-Auszug (kurz) zur Demonstration. +\end{itemize} + +\subsection{Persistenz und Datenhaltung} +\begin{itemize}[leftmargin=*] + \item Speicherung (SQLite/JSON), Mappings zwischen Modellen und Speicherformat. + \item Fehler- und Konsistenzstrategien. +\end{itemize} + +\section{Gesamtarchitektur des Prototypen} +\subsection{Schichtenmodell / MVVM-Anpassung} +\begin{itemize}[leftmargin=*] + \item Views, ViewModels, Services/Repositories, Domain-Modelle. + \item Abh\"angigkeiten und Datenfl\"usse (Input \textrightarrow\ ViewModel \textrightarrow\ Repository \textrightarrow\ Persistenz). +\end{itemize} + +\subsection{UML-Klassendiagramm (vollst\"andig)} +\begin{figure}[H] + \centering + \fbox{\parbox{0.9\textwidth}{Platz f\"ur das vollst\"andige UML-Klassendiagramm des Prototypen.}} + \caption{Alle Python-Klassen inkl. Services/ViewModels/Helper.} +\end{figure} +\begin{itemize}[leftmargin=*] + \item Begr\"unde Erweiterungen gegen\"uber Phase 1 (z.\,B. Controller, Repositories, DTOs). + \item Notiere technische Annahmen (GUI-Framework, Datenformat). +\end{itemize} + +\section{Entscheidungen und Reflexion} +\begin{itemize}[leftmargin=*] + \item Welche Anpassungen am Klassendiagramm waren f\"ur Python notwendig? + \item Welche OO-Konzepte sind kritisch f\"ur den Prototypen (z.\,B. Komposition f\"ur Module/Pr\"ufungen)? + \item Offene Risiken (Termine, technische Schulden) und Gegenma\"nahmen. +\end{itemize} + +\section{N\"achste Schritte f\"ur Phase 3} +\begin{itemize}[leftmargin=*] + \item Implementierungsplan (Reihenfolge der Features, Tests, Dokumentation). + \item Pr\"ufung der Abgabestruktur (Zip mit Phase1/Phase2/Phase3, GitHub-Link, Installationsanleitung, Abstract). +\end{itemize} + +\end{document} diff --git a/docs/portfolio/phase3/abstract.tex b/docs/portfolio/phase3/abstract.tex new file mode 100644 index 0000000..3510e29 --- /dev/null +++ b/docs/portfolio/phase3/abstract.tex @@ -0,0 +1,34 @@ +\documentclass[12pt]{article} +\input{../preamble.tex} + +\begin{document} +\documentinfo{Abstract}{Portfolioteil 3 (1--2 Seiten)} + +\section{Zielsetzung} +Kurze Zusammenfassung der Projektziele (\textit{Dashboards f\"ur Studienfortschritt, Kennzahlen, Nutzer:innenmehrwert}). + +\section{Vorgehensweise} +Stichpunkte zu Phasen und Methodik: +\begin{itemize}[leftmargin=*] + \item Konzeptionsphase: Ziele, Dashboard-Skizze, Entity-Klassen. + \item Reflexion/Entwurf: OO-Konzepte in Python, finale Architektur. + \item Finalisierung: Implementierung, Tests, Bereitstellung (GitHub), Dokumentation. +\end{itemize} + +\section{Ergebnisse} +\begin{itemize}[leftmargin=*] + \item Funktionsumfang des Prototyps (\textit{Ansichten, Kennzahlen, Speicherpfad}). + \item Qualit\"atssicherung (\textit{Tests, manuelle Checks, QA-Skripte}). + \item Erreichte Ziele (ECTS/Noten-Tracking, Visualisierungen). +\end{itemize} + +\section{Erkenntnisse und Lessons Learned} +\begin{itemize}[leftmargin=*] + \item Technische Erkenntnisse (\textit{OO-Konzepte in Python, Bibliotheken, Architekturentscheidungen}). + \item Prozessbezogene Erkenntnisse (\textit{Zeitplanung, Feedbackschleifen}). +\end{itemize} + +\section{Ausblick} +Geplante Weiterentwicklung (\textit{Automatisierte Importe, erweiterte Analytics, Deployment}). + +\end{document} diff --git a/docs/portfolio/phase3/installationsanleitung.tex b/docs/portfolio/phase3/installationsanleitung.tex new file mode 100644 index 0000000..6037eeb --- /dev/null +++ b/docs/portfolio/phase3/installationsanleitung.tex @@ -0,0 +1,32 @@ +\documentclass[12pt]{article} +\input{../preamble.tex} + +\begin{document} +\documentinfo{Installationsanleitung}{Portfolioteil 3 (max. 1 Seite)} + +\section{Voraussetzungen} +\begin{itemize}[leftmargin=*] + \item Betriebssystem: Windows 10/11 (getestet) oder Linux. + \item Python-Version: 3.10+ (64-bit). + \item Git f\"ur den Download des Repository. +\end{itemize} + +\section{Schritte} +\begin{enumerate}[leftmargin=*] + \item Repository klonen: \texttt{git clone study-dashboard}. + \item In das Verzeichnis wechseln: \texttt{cd study-dashboard}. + \item Abh\"angigkeiten installieren: \texttt{bash scripts/bootstrap.sh}. + \item Anwendung starten: \texttt{bash scripts/run-app.sh}. + \item Tests/QA (optional): \texttt{bash scripts/run-qa.sh}. +\end{enumerate} + +\section{Bekannte Einschr\"ankungen} +\begin{itemize}[leftmargin=*] + \item \textit{Beispiel:} Keine automatische myCampus-Integration; Datenimport aktuell manuell. + \item \textit{Beispiel:} Gepr\"ufte Plattform: Windows 11 / Linux; macOS nicht getestet. +\end{itemize} + +\section{Support} +Kontakt: \texttt{} f\"ur R\"uckfragen. GitHub-Issues k\"onnen f\"ur Fehlermeldungen genutzt werden. + +\end{document} diff --git a/docs/portfolio/preamble.tex b/docs/portfolio/preamble.tex new file mode 100644 index 0000000..3ea8bf0 --- /dev/null +++ b/docs/portfolio/preamble.tex @@ -0,0 +1,34 @@ +\usepackage[ngerman]{babel} +\usepackage[T1]{fontenc} +\usepackage[utf8]{inputenc} +\usepackage[a4paper, margin=2cm]{geometry} +\usepackage{setspace} +\onehalfspacing +\usepackage{graphicx} +\usepackage{float} +\usepackage{booktabs} +\usepackage{enumitem} +\setlist{nosep} +\usepackage{csquotes} +\usepackage[colorlinks=true, linkcolor=black, urlcolor=blue]{hyperref} +\usepackage{helvet} % Arial-ähnlich +\renewcommand{\familydefault}{\sfdefault} +\setlength{\parindent}{0pt} +\setlength{\parskip}{6pt} + +% Metadaten anpassen +\newcommand{\studentname}{Vorname Nachname} +\newcommand{\matrikelnummer}{12345678} +\newcommand{\kurs}{DLBDSOOFPP01\_D} +\newcommand{\docdate}{\today} + +\newcommand{\documentinfo}[2]{% + \begin{center} + {\LARGE #1}\\[0.5em] + {\large #2}\\[0.5em] + {\large \studentname\ (\matrikelnummer)}\\[0.25em] + {\large Kurs: \kurs}\\[0.25em] + {\large Datum: \docdate} + \end{center} + \vspace{1em} +}