181 lines
7.7 KiB
TeX
181 lines
7.7 KiB
TeX
\documentclass{article}
|
||
|
||
\usepackage[french]{babel} % français
|
||
\usepackage[T1]{fontenc} % encodage
|
||
\usepackage[hidelinks]{hyperref} % liens cliquable dans la table des matières
|
||
\usepackage{graphicx} % images
|
||
\usepackage{listingsutf8} % intégration code
|
||
\usepackage{xcolor} % couleurs personnalisés
|
||
\usepackage{geometry} % change les dimensions de la page
|
||
\usepackage{enumitem} % liste personnalisée
|
||
\usepackage{amssymb, pifont} % police (todolist)
|
||
|
||
\geometry{ % définition taille pages
|
||
a4paper,
|
||
left=20mm,
|
||
top=20mm
|
||
}
|
||
|
||
% définition de la liste de choses à faire/faites (https://tex.stackexchange.com/q/247681/)
|
||
\newlist{todolist}{itemize}{3}
|
||
\setlist[todolist]{label=$\square$}
|
||
\newcommand{\fait}{\rlap{\raisebox{0.3ex}{\hspace{0.4ex}\scriptsize \ding{56}}}$\square$}
|
||
|
||
% définition blocs de codes
|
||
\lstset{
|
||
breaklines=true,
|
||
extendedchars=true,
|
||
inputencoding=utf8/latin1
|
||
}
|
||
|
||
% Python definition (c) 1998 Michael Weber
|
||
% Additional definitions (2013) Alexis Dimitriadis
|
||
% modified by https://tex.stackexchange.com/questions/235783/listings-recognize-numbers-and-1e-3
|
||
\definecolor{maroon}{cmyk}{0, 0.87, 0.68, 0.32}
|
||
\definecolor{halfgray}{gray}{0.55}
|
||
\definecolor{ipython_frame}{RGB}{207, 207, 207}
|
||
\definecolor{ipython_bg}{RGB}{247, 247, 247}
|
||
\definecolor{ipython_red}{RGB}{186, 33, 33}
|
||
\definecolor{ipython_green}{RGB}{0, 128, 0}
|
||
\definecolor{ipython_cyan}{RGB}{64, 128, 128}
|
||
\definecolor{ipython_purple}{RGB}{170, 34, 255}
|
||
\lstdefinelanguage{iPython}{
|
||
morekeywords={access,and,break,class,continue,def,del,elif,else,except,exec,finally,for,from,global,if,import,in,is,lambda,not,or,pass,print,raise,return,try,while},
|
||
morekeywords=[2]{abs,all,any,basestring,bin,bool,bytearray,callable,chr,classmethod,cmp,compile,complex,delattr,dict,dir,divmod,enumerate,eval,execfile,file,filter,float,format,frozenset,getattr,globals,hasattr,hash,help,hex,id,input,int,isinstance,issubclass,iter,len,list,locals,long,map,max,memoryview,min,next,object,oct,open,ord,pow,property,range,raw_input,reduce,reload,repr,reversed,round,set,setattr,slice,sorted,staticmethod,str,sum,super,tuple,type,unichr,unicode,vars,xrange,zip,apply,buffer,coerce,intern},
|
||
sensitive=true,
|
||
morecomment=[l]\#,
|
||
morestring=[b]',
|
||
morestring=[b]",
|
||
morecomment=[s]{"""}{"""},
|
||
morestring=[s]{'''}{'''},
|
||
morestring=[s]{r'}{'},
|
||
morestring=[s]{r"}{"},
|
||
morestring=[s]{r'''}{'''},
|
||
morestring=[s]{r"""}{"""},
|
||
morestring=[s]{u'}{'},
|
||
morestring=[s]{u"}{"},
|
||
morestring=[s]{u'''}{'''},
|
||
morestring=[s]{u"""}{"""},
|
||
literate=
|
||
*{+}{{{\color{ipython_purple}+}}}1
|
||
{-}{{{\color{ipython_purple}-}}}1
|
||
{*}{{{\color{ipython_purple}$^\ast$}}}1
|
||
{/}{{{\color{ipython_purple}/}}}1
|
||
{^}{{{\color{ipython_purple}\^{}}}}1
|
||
{?}{{{\color{ipython_purple}?}}}1
|
||
{!}{{{\color{ipython_purple}!}}}1
|
||
{\%}{{{\color{ipython_purple}\%}}}1
|
||
{<}{{{\color{ipython_purple}<}}}1
|
||
{>}{{{\color{ipython_purple}>}}}1
|
||
{|}{{{\color{ipython_purple}|}}}1
|
||
{\&}{{{\color{ipython_purple}\&}}}1
|
||
{~}{{{\color{ipython_purple}~}}}1
|
||
{==}{{{\color{ipython_purple}==}}}2
|
||
{<=}{{{\color{ipython_purple}<=}}}2
|
||
{>=}{{{\color{ipython_purple}>=}}}2
|
||
{+=}{{{+=}}}2
|
||
{-=}{{{-=}}}2
|
||
{*=}{{{$^\ast$=}}}2
|
||
{/=}{{{/=}}}2,
|
||
commentstyle=\color{ipython_cyan}\ttfamily,
|
||
stringstyle=\color{ipython_red}\ttfamily,
|
||
keepspaces=true,
|
||
showspaces=false,
|
||
showstringspaces=false,
|
||
rulecolor=\color{ipython_frame},
|
||
frame=single,
|
||
frameround={t}{t}{t}{t},
|
||
framexleftmargin=6mm,
|
||
numbers=left,
|
||
numberstyle=\tiny\color{halfgray},
|
||
backgroundcolor=\color{ipython_bg},
|
||
basicstyle=\scriptsize\ttfamily,
|
||
keywordstyle=\color{ipython_green}\ttfamily,
|
||
escapechar=\¢,
|
||
escapebegin=\color{ipython_green},
|
||
}
|
||
|
||
\title{Projet final Tkinter}
|
||
\author{Anri Kennel\thanks{Numéro d'étudiant : 20010664}\, (L2-A)\\Module Programmation d’interfaces $\cdot$ Paris 8}
|
||
\date{Année universitaire 2021-2022}
|
||
|
||
\begin{document}
|
||
\maketitle
|
||
\tableofcontents
|
||
|
||
\begin{center}
|
||
\emph{Les explications sont en commentaire du code.}
|
||
\end{center}
|
||
\clearpage
|
||
|
||
\section{Consigne}
|
||
|
||
\begin{todolist}
|
||
\item[\fait] Page de login \texttt{/1.5}
|
||
\begin{todolist}
|
||
\item[\fait] Nom d'utilisateur ne contient que des lettres et des chiffres
|
||
\item[\fait] Mot de passe de minimum 8 caractères dont 1 caractère spécial, une majuscule et une minuscule (possibilité d'afficher ou non en clair le mot de passe)
|
||
\item[\fait] Un bouton de connexion (possibilité aussi d'utiliser la touche Entrer pour aller plus vite) qui permet de se rendre sur l'interface Caissier ou Manager
|
||
\item[\fait] Un bouton pour quitter l'application
|
||
\end{todolist}
|
||
\item Page de manager (définit par un nom d'utilisateur et un mot de passe) \texttt{/7.5}
|
||
\begin{todolist}
|
||
\item Peut ajouter et supprimer un caissier
|
||
\item Peut voir la liste des caissiers
|
||
\item Un suivi des ventes
|
||
\item Un bouton pour vider tous les champs de saisie
|
||
\item Un bouton pour quitter l'application
|
||
\item Un bouton pour se mettre en "mode caissier"
|
||
\end{todolist}
|
||
\item Page de caissier (définit par un identifiant, un nom d'utilisateur, un mot de passe, un nom, un prenom, une date de naissance, une adresse et une code postal) \texttt{/6}
|
||
\begin{todolist}
|
||
\item Afficher le stock disponible
|
||
\begin{todolist}
|
||
\item 4 rayons de chacun au moins 10 articles de votre choix (fruits/légumes, boulangerie, boucherie/poissonnerie ou produits d'entretien)
|
||
\item Au clic sur le produit, l'identifiant, le nom, la quantité en stock et le prix s'affichent
|
||
\item Possibilité de rajouter des produits en stock
|
||
\end{todolist}
|
||
\item Affichage d'un ticket de caisse
|
||
\begin{todolist}
|
||
\item Date de vente
|
||
\item ID, nom, quantité, prix des produits achetés
|
||
\item Prix total
|
||
\item Un bouton pour valider
|
||
\end{todolist}
|
||
\item Interface d'export des statistiques (stock le montant total de vente par jour)
|
||
\end{todolist}
|
||
\end{todolist}
|
||
|
||
Avec à savoir :
|
||
\begin{todolist}
|
||
\item Ergonomie \texttt{/2}
|
||
\item[\fait] Utilisateurs stockés dans la base de donnée \texttt{/2}
|
||
\begin{todolist}
|
||
\item[\fait] Possibilité de recréer la base de donnée automatiquement si elle n'existe plus
|
||
\end{todolist}
|
||
\item Ajout d'autres fonctionnalités \texttt{/1}
|
||
\begin{todolist}
|
||
\item Heure de connexion stricte pour les caissiers
|
||
\item Meilleur caissier (avec le plus de ventes sur la journée/semaine précédente par exemple)
|
||
\item Exporter le ticket de caisse en format image
|
||
\item Chiffrer les mots de passes dans la base de donnée
|
||
\end{todolist}
|
||
\item[\fait] Lisibilité du code
|
||
\begin{todolist}
|
||
\item[\fait] Toutes les fonctions sont nommés et typés \textit{(j'utilises Python \texttt{3.9.7})}
|
||
\end{todolist}
|
||
\end{todolist}
|
||
|
||
|
||
\clearpage
|
||
\section{Code}
|
||
\subsection[\texttt{main.py}]{\texttt{main.py}, fichier principale}
|
||
\begin{lstinputlisting}[language=iPython]{../main.py}\end{lstinputlisting}
|
||
|
||
\subsection[\texttt{db.py}]{\texttt{db.py}, gère la communication avec la base de donnée en sa globalité}
|
||
\begin{lstinputlisting}[language=iPython]{../db.py}\end{lstinputlisting}
|
||
|
||
\subsection[\texttt{users.py}]{\texttt{users.py}, implante la partie pour les utilisateurs}
|
||
\begin{lstinputlisting}[language=iPython]{../users.py}\end{lstinputlisting}
|
||
|
||
\end{document}
|