# -*- coding: utf-8 -*-
"""
Spyder Editor
This is a temporary script file.
"""
import tkinter as tk
from tkinter import messagebox
import random
import json
class SinhVien():
def __init__(self, mssv, hoten, diemtl, diemthi):
[Link] = mssv
[Link] = hoten
[Link] = diemtl
[Link] = diemthi
[Link] = (diemthi + diemtl) / 2
self.xeploai_Theo_He_4()
def xeploai_Theo_He_4(self):
if [Link] >=8.5:
[Link] = "A"
return
elif [Link] >= 7 and [Link] <= 8.4:
[Link] = "B"
return
elif [Link] >= 5.5 and [Link] <= 6.9:
[Link] = "C"
return
elif [Link] >= 4 and [Link] <= 5.4:
[Link] = "D"
return
[Link] = "F"
return
try:
with open("[Link]", "r") as file:
data = [Link](file)
except (FileExistsError, FileNotFoundError):
ketqua = []
with open("[Link]", "w") as file:
[Link](ketqua, file)
database = []
for item in data:
mssv = item["mssv"]
hoten = item["hoten"]
diemtl = item["diemtl"]
diemthi = item["diemthi"]
sv = SinhVien(mssv, hoten, diemtl, diemthi)
[Link](sv)
def update_data():
with open("[Link]", "w") as file:
ketquaxuat = []
for i in range(0,len(database)):
data = {
"mssv":database[i].mssv,
"hoten":database[i].hoten,
"diemtl":database[i].diemtl,
"diemthi":database[i].diemthi
}
[Link](data)
[Link](ketquaxuat, file)
class QuanLySinhVien():
def __init__(self, window: tk, title):
[Link] = window
[Link] = title
self.init_window()
def init_window(self):
[Link]("400x600")
[Link]([Link])
self.name_label = [Link]([Link], text="Ho va ten")
self.name_label.grid(row= 0, column= 0)
self.name_entry = [Link]([Link])
self.name_entry.grid(row= 0, column= 1)
self.diemtl_label = [Link]([Link], text="Diem tieu luan")
self.diemtl_label.grid(row= 1, column= 0)
self.diemtl_entry = [Link]([Link])
self.diemtl_entry.grid(row= 1, column= 1)
self.diemthi_label = [Link]([Link], text="Diem thi")
self.diemthi_label.grid(row= 2, column= 0)
self.diemthi_entry = [Link]([Link])
self.diemthi_entry.grid(row= 2, column= 1)
self.add_Button = [Link]([Link], text= "Them Sinh Vien", command=
self.add_student)
self.add_Button.grid(row= 3, column= 0, columnspan = 2)
self.Label_show = [Link]([Link], text= "Thong Tin Sinh Vien")
self.Label_show.grid(row = 4, column = 0, columnspan= 2)
self.show_frame = [Link]([Link])
self.show_frame.grid(row= 5, column= 0, columnspan = 2)
self.listbox_show = [Link](self.show_frame, width = 50, height = 10)
self.listbox_show.grid(row= 0, column= 0, sticky= "nsew")
self.listbox_show.bind(("<<ListboxSelect>>"),self.handle_listbox_selection)
self.student_listbox_scrollbar = [Link](self.show_frame, orient =
[Link])
self.student_listbox_scrollbar.grid(row = 0, column= 1, sticky= "ns")
self.Label_delete = [Link]([Link], text= "Muon xoa sinh vien, click
chuot vao ten sinh vien can xoa")
self.Label_delete.grid(row = 6, column= 0, columnspan = 2)
self.search_label = [Link]([Link], text= "Tim kiem sinh vien")
self.search_label.grid(row = 7, column= 0)
self.search_entry = [Link]([Link])
self.search_entry.grid(row= 7, column= 1)
self.search_button = [Link]([Link], text= "Tim kiem", command=
self.search_student)
self.search_button.grid(row= 7, column= 2)
self.student_frame_rusult = [Link]([Link])
self.student_frame_rusult.grid(row= 8, column= 0, columnspan= 2)
self.search_result_box = [Link](self.student_frame_rusult, width = 50,
height = 10)
self.search_result_box.grid(row= 0, column= 0, columnspan= 2, sticky=
"nsew")
self.show_infor()
[Link]()
def search_student(self):
search_term = self.search_entry.get().lower()
matching_student = []
for student in database:
if search_term in [Link]() or search_term in
[Link]():
matching_student.append(student)
self.search_result_box.delete(0, [Link])
for student in matching_student:
student_info= self.format_student_infor(student)
self.search_result_box.insert([Link], student_info)
def handle_listbox_selection(self, event):
selection = [Link]()
if selection:
index = selection[0]
self.remove_student(index)
def remove_student(self, index):
confirmation= [Link]("Xoa Sinh Vien", "Are you sure?")
if confirmation:
del database[index]
[Link]("Thong Bao", "Xoa Thanh Cong")
update_data()
self.show_infor()
def format_student_infor(self, student: SinhVien):
info = f"{[Link]} - {[Link]} - {[Link]} -
{[Link]} - {[Link]} - {[Link]}"
return info
def show_infor(self):
self.listbox_show.delete(0, [Link])
[Link]()
for i in range(0, len(database)):
student_info = self.format_student_infor(database[i])
self.listbox_show.insert([Link], student_info)
def add_student(self):
name = self.name_entry.get()
try:
diemtl = (float)(self.diemtl_entry.get())
except ValueError:
[Link]("Loi", "Moi ban nhap lai diem tl")
return
try:
diemthi = (float)(self.diemthi_entry.get())
except ValueError:
[Link]("Loi", "Moi ban nhap lai diem thi")
return
if self.handle_name(name) == 0:
return
if self.handle_diemtl(diemtl) == 0:
return
if self.handle_diemthi(diemthi) == 0:
return
sv = SinhVien(self.create_Student_ID(), name, diemtl, diemthi)
[Link](sv)
[Link]("Thong Bao", "Them Sinh Vien Moi Thanh Cong")
update_data()
self.show_infor()
def sapxepGiamDanTheoDiemTongKet(self):
for i in range(0, len(database) - 1):
for j in range(i + 1, len(database)):
if (float)(database[i].diemtongket) < (float)
(database[j].diemtongket):
k = database[i]
database[i] = database[j]
database[j] = k
def create_Student_ID(self):
namnhaphoc = str([Link](2010, 2023))
khoa = "14"
mssv = namnhaphoc + khoa
a = []
while len(a) != 4:
flag = 1
temp = [Link](0, 9)
for i in range(0, len(a)):
if temp == a[i]:
flag = 0
if flag == 1:
[Link](temp)
chusocuoi = ""
for i in range(0, 4):
chusocuoi = chusocuoi + "".join(str(a[i]))
mssv = mssv + chusocuoi
return mssv
def handle_name(self, name):
if len(name) == 0:
[Link]("Loi", "Moi ban nhap ten")
return 0
return 1
def handle_diemtl(self, diemtl):
if diemtl >= 0 and diemtl <= 10:
return 1
[Link]("Loi", "Moi ban nhap lai diem tl")
return 0
def handle_diemthi(self, diemthi):
if diemthi >= 0 and diemthi <= 10:
return 1
[Link]("Loi", "Moi ban nhap lai diem thi")
return 0
window = [Link]()
app = QuanLySinhVien(window, "Quan Ly Sinh Vien")
[Link]()