Lapin-Blanc 3 лет назад
Родитель
Сommit
75adea05d8
4 измененных файлов: 301 добавлений и 0 удалений
  1. +78
    -0
      encodage_eleves.py
  2. +177
    -0
      formulaire.py
  3. +1
    -0
      requirements.txt
  4. +45
    -0
      utils.py

+ 78
- 0
encodage_eleves.py Просмотреть файл

@@ -0,0 +1,78 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sqlite3
from utils import dessine_tableau

def main():
db = sqlite3.connect('ecole.sqlite3')
cursor = db.cursor()

cursor.execute("""CREATE TABLE IF NOT EXISTS eleves(
ID_Eleve INTEGER PRIMARY KEY AUTOINCREMENT,
Prenom TEXT,
Nom TEXT);
""")

while True:
choix = input("\nVeuillez choisir une action à réaliser [A]jouter, [L]ister, " \
"[M]odifier, [S]upprimer, [Q]uitter : ")
if choix == "":
continue
if choix[0] in 'lL':
cursor.execute("""SELECT * FROM eleves ORDER BY ID_eleve;""")
liste_eleves = cursor.fetchall()
titres = ['Id', 'Prénom', 'Nom']
dessine_tableau(liste_eleves, titres)
if choix[0] in 'aA':
prenom = input("\nVeuillez entrer un prenom : ").capitalize()
nom = input("Veuillez entrer un nom : ").upper()
cursor.execute("""SELECT prenom, nom FROM eleves;""")
liste_eleves = cursor.fetchall()
if (prenom, nom) in liste_eleves:
print('Cet élève existe déjà !')
elif prenom=="" or nom=="":
print('Vous devez renseigner le nom et le prénom')
else:
cursor.execute("""INSERT INTO eleves(prenom, nom)
VALUES(?,?);""",
(prenom, nom))
db.commit()
if choix[0] in 'mM':
id_eleve = input("Veuillez entrez l'identifiant de l'élève à modifier : ")
cursor.execute("""SELECT prenom, nom FROM eleves WHERE ID_Eleve=?""", (id_eleve,))
prenom, nom = cursor.fetchone()
n_prenom = input(f"\nVeuillez entrer un prenom (actuellement {prenom}): ")
n_nom = input(f"Veuillez entrer un nom (actuellement {nom}): ")
if n_prenom:
prenom = n_prenom
if n_nom:
nom = n_nom
cursor.execute("""UPDATE eleves
SET prenom=?,
nom=?
WHERE ID_Eleve=?;""",
(prenom.capitalize(), nom.upper(), id_eleve))
db.commit()

if choix[0] in 'sS':
id_eleve = input("Veuillez entrez l'identifiant de l'élève à supprimer : ")
cursor.execute("""SELECT prenom, nom FROM eleves WHERE ID_Eleve=?""", (id_eleve,))
prenom, nom = cursor.fetchone()
confirmation = input(f"Confirmez-vous la suppression de {prenom} {nom} ? [O/n] : ")
if not confirmation=='n':
cursor.execute("""DELETE FROM eleves WHERE ID_Eleve=?""",(id_eleve,))
db.commit()
if choix[0] in 'qQ':
break

print('Bye !')
db.close()

if __name__ == '__main__':
main()

+ 177
- 0
formulaire.py Просмотреть файл

@@ -0,0 +1,177 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import PySimpleGUI as sg
import sqlite3

db = sqlite3.connect('ecole.sqlite3')
cursor = db.cursor()

cursor.execute("""CREATE TABLE IF NOT EXISTS eleves(
ID_Eleve INTEGER PRIMARY KEY AUTOINCREMENT,
Prenom TEXT,
Nom TEXT);
""")
cursor.execute("""SELECT id_eleve, nom, prenom
FROM eleves
ORDER BY nom, prenom;
""")
liste_eleves = cursor.fetchall()

def make_main_window():
col = [
[sg.Button('Ajouter', size=(10, 1), bind_return_key=True)],
[sg.Button('Modifier', size=(10, 1))],
[sg.Button('Supprimer', size=(10, 1))],
[sg.Button('Quitter', size=(10, 1))],
]
layout = [
[sg.Text('Liste des élèves')],
[sg.Table(values=liste_eleves,
headings=['Id', 'Prénom', 'Nom'],
max_col_width=25,
col_widths=[0, 20, 20],
hide_vertical_scroll=True,
background_color='light blue',
text_color='black',
auto_size_columns=False,
justification='right',
num_rows=len(liste_eleves),
alternating_row_color='lightyellow',
key='table_eleves',
tooltip='Liste des élèves'), sg.Column(col)],
]
window = sg.Window('Formulaire',
layout=layout,
size=(500, 500),
finalize=True)
return window


def make_add_window(caption,
role='create',
initial_values=None,
eleve_id=None):
prenom, nom = ('','') if not initial_values else initial_values
layout = [
[sg.Text(text='Prénom', size=(10,2)),
sg.InputText(default_text=prenom,
size=(20,2),
k='prenom')],
[sg.Text(text='Nom', size=(10,2)),
sg.InputText(default_text=nom,
size=(20,2),
k='nom')],
[sg.Button('Valider', bind_return_key=True),
sg.Button('Annuler', bind_return_key=True)]
]
window = sg.Window(caption,
layout=layout,
finalize=True)
window.role = role
window.eleve_id = eleve_id
return window


def main():
window1, window2 = make_main_window(), None

while True:
window, event, values = sg.read_all_windows()
# print(f'window : {window}, event : {event}, values : {values}')
if window == window1:
if event in (sg.WIN_CLOSED, 'Quitter'):
break
if event == 'Ajouter':
window2 = make_add_window('Ajouter', role='create')
window2.make_modal()
if event == 'Supprimer':
try:
id_eleve = liste_eleves[values['table_eleves'][0]][0]
except IndexError:
sg.popup_ok('Veuillez sélectionner un enregistrement à supprimer')
continue
confirmation = sg.popup("Confirmez-vous la suppression ?",
button_type=sg.POPUP_BUTTONS_OK_CANCEL,
custom_text=("Oui", "Non"))
if confirmation=="Non":
continue
cursor.execute("""DELETE FROM eleves WHERE ID_Eleve=?""",(id_eleve,))
db.commit()
cursor.execute("""SELECT id_eleve, nom, prenom
FROM eleves
ORDER BY nom, prenom;
""")
liste_eleves = cursor.fetchall()
window1['table_eleves'].update(values=liste_eleves,
num_rows=len(liste_eleves))

if event == 'Modifier':
try:
id_eleve, nom, prenom = liste_eleves[values['table_eleves'][0]]
except IndexError:
sg.popup_ok('Veuillez sélectionner un enregistrement à modifier')
continue
window2 = make_add_window('Modifier',
initial_values=[prenom, nom],
role='modify',
eleve_id=id_eleve)
window2.make_modal()

if window == window2:
if event in (sg.WIN_CLOSED, 'Annuler'):
window2.close()
window2 = None
if window.role == 'create' and event == 'Valider':
prenom = values['prenom'].capitalize()
nom = values['nom'].upper()
# print(f"prenom : {prenom}, nom : {nom}")
cursor.execute("""INSERT INTO eleves(prenom, nom)
VALUES(?,?);""", (prenom, nom))
db.commit()
cursor.execute("""SELECT id_eleve, nom, prenom
FROM eleves
ORDER BY nom, prenom;
""")
liste_eleves = cursor.fetchall()
window1['table_eleves'].update(values=liste_eleves, num_rows=len(liste_eleves))
window2.close()
window2 = None

if window.role == 'modify' and event == 'Valider':
confirmation = sg.popup("Confirmez-vous la modification ?",
button_type=sg.POPUP_BUTTONS_OK_CANCEL,
custom_text=("Oui", "Non"))
if confirmation=="Non":
continue
prenom = values['prenom'].capitalize()
nom = values['nom'].upper()
# print(f"prenom : {prenom}, nom : {nom}")
cursor.execute("""UPDATE eleves
SET prenom=?,
nom=?
WHERE id_eleve=?;
""", (prenom, nom, window.eleve_id))
db.commit()
cursor.execute("""SELECT id_eleve, nom, prenom
FROM eleves
ORDER BY nom, prenom;
""")
liste_eleves = cursor.fetchall()
window1['table_eleves'].update(values=liste_eleves,
num_rows=len(liste_eleves))
window2.close()
window2 = None

window1.close()
if window2 is not None:
window2.close()

db.close()
print('Bye !')

if __name__ == "__main__":
main()

+ 1
- 0
requirements.txt Просмотреть файл

@@ -0,0 +1 @@
PySimpleGUI==4.32.1

+ 45
- 0
utils.py Просмотреть файл

@@ -0,0 +1,45 @@
def dessine_tableau(tableau, titres=None):
lengths = []
if titres:
tableau.insert(0, titres)
nb_columns = len(tableau[0])
nb_rows = len(tableau)
for i in range(nb_columns):
lengths.append(max([len(str(x[i])) for x in tableau]))
print('╭', end='')
for col in range(nb_columns):
print('─'*lengths[col], end='')
if not col+1==nb_columns:
print('┬', end='')
print('╮')

if titres:
print('│', end='')
for col, cell in enumerate(tableau[0]):
width = lengths[col]
print(f"{cell: <{width}}", end='│')
print()
print('┝', end='')
for col in range(nb_columns):
print('━'*lengths[col], end='')
if not col+1==nb_columns:
print('┿', end='')
else:
print('┥')
starting_row = 1 if titres else 0
for row in tableau[starting_row:]:
if row:
print('│', end='')
for col, cell in enumerate(row):
width = lengths[col]
print(f"{cell: <{width}}", end='│')
print()
print('╰', end='')
for col in range(nb_columns):
print('─'*lengths[col], end='')
if not col+1==nb_columns:
print('┴', end='')
print('╯')

Загрузка…
Отмена
Сохранить