Sistema de registo de alunos e professores

from tkinter import *
import tkinter.ttk as ttk
import tkinter.messagebox as tkMessageBox
import sqlite3
from datetime import datetime


def Database():
global conn, cursor
conn = sqlite3.connect("sistema_registo_escolar.db")
cursor = conn.cursor()
cursor.execute(
"CREATE TABLE IF NOT EXISTS REGISTRATION (RID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, NOME TEXT,IDADE INTEGER, "
"DATANASCIMENTO TEXT, SEXO TEXT, ESTATUTO TEXT, MORADA TEXT, CONTACTO TEXT)")
conn.commit()


def DisplayForm():
root = Tk()
root.geometry("900x500")
root.title("Sistema de registo de alunos e professores")
global tree
global SEARCH
global nome, datanascimento, sexo, classificao, morada, contacto
global estatuto2 # Added global variable for estatuto2
SEARCH = StringVar()
nome = StringVar()
datanascimento = StringVar()
sexo = StringVar()
morada = StringVar()
contacto = StringVar()
classificao = StringVar()
estatuto2 = StringVar()

TopViewForm = Frame(root, width=600, bd=1, relief=SOLID)
TopViewForm.pack(side=TOP, fill=X)

LFrom = Frame(root, width="350", bg="#15244C")
LFrom.pack(side=LEFT, fill=Y)

LeftViewForm = Frame(root, width=500, bg="#0B4670")
LeftViewForm.pack(side=LEFT, fill=Y)

MidViewForm = Frame(root, width=600)
MidViewForm.pack(side=RIGHT)

lbl_text = Label(TopViewForm, text="Sistema de registo de alunos e professores ", font=('verdana', 18), width=600, bg="cyan")
lbl_text.pack(fill=X)

Label(LFrom, text="Nome ", font=("Arial", 12), bg="#15244C", fg="white").pack(side=TOP)
Entry(LFrom, font=("Arial", 10, "bold"), textvariable=nome).pack(side=TOP, padx=10, fill=X)

Label(LFrom, text="Data de Nascimento ", font=("Arial", 12), bg="#15244C", fg="white").pack(side=TOP)
Entry(LFrom, font=("Arial", 10, "bold"), textvariable=datanascimento).pack(side=TOP, padx=10, fill=X)

Label(LFrom, text="Sexo ", font=("Arial", 12), bg="#15244C", fg="white").pack(side=TOP)
sexo.set("Selecionar Sexo")
content = {'Masculino', 'Feminino'}
OptionMenu(LFrom, sexo, *content).pack(side=TOP, padx=10, fill=X)

Label(LFrom, text="Estatuto ", font=("Arial", 12), bg="#15244C", fg="white").pack(side=TOP)
classificao.set("Selecionar Estatuto")
content = {'Estudante', 'Professor', 'Auxiliar'}
OptionMenu(LFrom, classificao, *content).pack(side=TOP, padx=10, fill=X)

Label(LFrom, text="Morada ", font=("Arial", 12), bg="#15244C", fg="white").pack(side=TOP)
Entry(LFrom, font=("Arial", 10, "bold"), textvariable=morada).pack(side=TOP, padx=10, fill=X)

Label(LFrom, text="Contacto ", font=("Arial", 12), bg="#15244C", fg="white").pack(side=TOP)
Entry(LFrom, font=("Arial", 10, "bold"), textvariable=contacto).pack(side=TOP, padx=10, fill=X)

Button(LFrom, text="Submeter", font=("Arial", 10, "bold"), bg="cyan", command=register).pack(side=TOP, padx=10,
pady=5, fill=X)

lbl_txtsearch = Label(LeftViewForm, text="Digite o Nome", font=('verdana', 10), bg="#0B4670")
lbl_txtsearch.pack()
search = Entry(LeftViewForm, textvariable=SEARCH, font=('verdana', 15), width=10)
search.pack(side=TOP, padx=10, fill=X)

lbl_txtsearch1 = Label(LeftViewForm, text="Estatuto", font=('verdana', 10), bg="#0B4670")
lbl_txtsearch1.pack()
estatuto2.set("Selecionar Estatuto")
content = {'Estudante', 'Professor', 'Auxiliar'}
OptionMenu(LeftViewForm, estatuto2, *content).pack(side=TOP, padx=10, fill=X)

btn_search = Button(LeftViewForm, text="Pesquisa", bg="cyan", command=SearchRecord)
btn_search.pack(side=TOP, padx=10, pady=10, fill=X)
btn_view = Button(LeftViewForm, text="Ver tudo", bg="cyan", command=DisplayData)
btn_view.pack(side=TOP, padx=10, pady=10, fill=X)
btn_Limpar = Button(LeftViewForm, text="Limpar", bg="cyan", command=limpar)
btn_Limpar.pack(side=TOP, padx=10, pady=10, fill=X)
btn_apagar = Button(LeftViewForm, text="Apagar", bg="cyan", command=apagar)
btn_apagar.pack(side=TOP, padx=10, pady=10, fill=X)
btn_actualizar = Button(LeftViewForm, text="Actualizar", bg="cyan", command=actualizacao)
btn_actualizar.pack(side=TOP, padx=10, pady=10, fill=X)

scrollbarx = Scrollbar(MidViewForm, orient=HORIZONTAL)
scrollbary = Scrollbar(MidViewForm, orient=VERTICAL)

tree = ttk.Treeview(MidViewForm, columns=("RID", "Nome", "Idade", "Datanascimento", "Sexo", "Estatuto", "Morada", "Contacto"),
selectmode="extended", height=100, yscrollcommand=scrollbary.set, xscrollcommand=scrollbarx.set)

scrollbary.config(command=tree.yview)
scrollbary.pack(side=RIGHT, fill=Y)

scrollbarx.config(command=tree.xview)
scrollbarx.pack(side=BOTTOM, fill=X)

tree.heading('RID', text="ID", anchor=W)
tree.heading('Nome', text="Nome", anchor=W)
tree.heading('Idade', text="Idade", anchor=W)
tree.heading('Datanascimento', text="Data de Nascimento", anchor=W)
tree.heading('Sexo', text="Sexo", anchor=W)
tree.heading('Estatuto', text="Estatuto", anchor=W)
tree.heading('Morada', text="Morada", anchor=W)
tree.heading('Contacto', text="Contacto", anchor=W)

tree.column('#0', stretch=NO, minwidth=0, width=0)
tree.column('#1', stretch=NO, minwidth=0, width=50)
tree.column('#2', stretch=NO, minwidth=0, width=100)
tree.column('#3', stretch=NO, minwidth=0, width=150)
tree.column('#4', stretch=NO, minwidth=0, width=100)
tree.column('#5', stretch=NO, minwidth=0, width=150)
tree.column('#6', stretch=NO, minwidth=0, width=100)

tree.pack()
DisplayData()
root.mainloop()


def calcular_idade(datanascimento):
birthdate = datetime.strptime(datanascimento, '%d/%m/%Y')
today = datetime.today()
age = today.year - birthdate.year - ((today.month, today.day) < (birthdate.month, birthdate.day))
return age


def register():
Database()
vnome = nome.get()
vdatanascimento = datanascimento.get()
vsexo = sexo.get()
vestatuto = classificao.get()
vmorada = morada.get()
vcontacto = contacto.get()

if vnome == '' or vdatanascimento == '' or vsexo == '' or vmorada == '' or vcontacto == '':
tkMessageBox.showinfo("Atenção", "Preencha os espaços vazios!!!")
else:
idade = calcular_idade(vdatanascimento)
cursor.execute(
'INSERT INTO REGISTRATION (NOME, IDADE, DATANASCIMENTO, SEXO, ESTATUTO, MORADA, CONTACTO) VALUES (?, ?, ?, ?, ?, ?, ?)',
(vnome, idade, vdatanascimento, vsexo, vestatuto, vmorada, vcontacto))
conn.commit()
tkMessageBox.showinfo("Sucesso", "Registro adicionado com sucesso")
DisplayData()
conn.close()


def SearchRecord():
Database()
name_search = SEARCH.get()
status_search = estatuto2.get()

if name_search != "" and status_search != "Selecionar Estatuto":
query = "SELECT * FROM REGISTRATION WHERE NOME LIKE ? AND ESTATUTO = ?"
params = ('%' + name_search + '%', status_search)
elif name_search != "":
query = "SELECT * FROM REGISTRATION WHERE NOME LIKE ?"
params = ('%' + name_search + '%',)
elif status_search != "Selecionar Estatuto":
query = "SELECT * FROM REGISTRATION WHERE ESTATUTO = ?"
params = (status_search,)
else:
query = "SELECT * FROM REGISTRATION"
params = ()

tree.delete(*tree.get_children())
cursor = conn.execute(query, params)
fetch = cursor.fetchall()
for data in fetch:
tree.insert('', 'end', values=(data))
cursor.close()
conn.close()


def actualizacao():
Database()
vnome = nome.get()
vdatanascimento = datanascimento.get()
vsexo = sexo.get()
vestatuto = classificao.get()
vmorada = morada.get()
vcontacto = contacto.get()

if vnome == '' or vdatanascimento == '' or vsexo == '' or vmorada == '' or vcontacto == '':
tkMessageBox.showinfo("Atenção", "Preencha todos os espaços!!!")
else:
curItem = tree.focus()
contents = (tree.item(curItem))
selecteditem = contents['values']
idade = calcular_idade(vdatanascimento)
cursor.execute(
'UPDATE REGISTRATION SET NOME=?, IDADE=?, DATANASCIMENTO=?, SEXO=?, ESTATUTO=?, MORADA=?, CONTACTO=? WHERE RID = ?',
(vnome, idade, vdatanascimento, vsexo, vestatuto, vmorada, vcontacto, selecteditem[0]))
conn.commit()
tkMessageBox.showinfo("Mensagem", "Atualizado com sucesso")
limpar()
DisplayData()
conn.close()


def apagar():
Database()
if not tree.selection():
tkMessageBox.showwarning("Atenção", "Selecione o registro a ser apagado")
else:
result = tkMessageBox.askquestion('Confirmar', 'Deseja apagar o registro selecionado?', icon="warning")
if result == 'yes':
curItem = tree.focus()
contents = (tree.item(curItem))
selecteditem = contents['values']
tree.delete(curItem)
cursor.execute("DELETE FROM REGISTRATION WHERE RID = ?", (selecteditem[0],))
conn.commit()
tkMessageBox.showinfo("Sucesso", "Registro apagado com sucesso")
conn.close()


def limpar():
tree.delete(*tree.get_children())
DisplayData()
SEARCH.set("")
nome.set("")
datanascimento.set("")
sexo.set("Selecionar Sexo")
classificao.set("Selecionar Estatuto")
morada.set("")
contacto.set("")


def DisplayData():
Database()
tree.delete(*tree.get_children())
cursor = conn.execute("SELECT * FROM REGISTRATION")
fetch = cursor.fetchall()
for data in fetch:
tree.insert('', 'end', values=(data))
cursor.close()
conn.close()


def OnDoubleClick(self):
curItem = tree.focus()
contents = (tree.item(curItem))
selecteditem = contents['values']
nome.set(selecteditem[1])
datanascimento.set(selecteditem[3])
sexo.set(selecteditem[4])
classificao.set(selecteditem[5])
morada.set(selecteditem[6])
contacto.set(selecteditem[7])


DisplayForm()
if __name__ == '__main__':
mainloop()

Comentários

Mensagens populares deste blogue

Criar Cartões de Visita

12 signos egípcios

Calcular a percentagem de ocupação