حالت آفلاین — محتوا از حافظهٔ کش نمایش داده می‌شود
همهٔ تمرین‌ها

لیست دانشجویان در اکسل

تمرین آسان 1157 visibility link download flag

یک برنامه گرافیکی بسازید که اطلاعات دانشجویان و نمرات آن‌ها را مدیریت کند و این داده‌ها را در یک فایل Excel (فرمت csv) ذخیره و بازیابی کند.

امکان افزودن دانشجو با نام، شماره دانشجویی و نمره
نمایش لیست دانشجویان و نمرات
قابلیت ویرایش و حذف رکوردها از لیست
👨‍💻 5 ساعت قبل کاربر ناشناس این تمرین رو مشاهده کرد

پاسخ‌ها 4

import pandas as pd

class StudentManager:
    def __init__(self, filename='students.csv'):
        self.filename = filename
        self.load_data()

    def load_data(self):
        try:
            self.data = pd.read_csv(self.filename)
        except FileNotFoundError:
            self.data = pd.DataFrame(columns=['Name', 'StudentID', 'Score'])

    def save_data(self):
        self.data.to_csv(self.filename, index=False)

    def add_student(self, name, student_id, score):
        self.data = self.data.append({'Name': name, 'StudentID': student_id, 'Score': score}, ignore_index=True)
        self.save_data()

    def display_students(self):
        print(self.data)

    def edit_student(self, student_id, name=None, score=None):
        if name:
            self.data.loc[self.data['StudentID'] == student_id, 'Name'] = name
        if score is not None:
            self.data.loc[self.data['StudentID'] == student_id, 'Score'] = score
        self.save_data()

    def delete_student(self, student_id):
        self.data = self.data[self.data['StudentID'] != student_id]
        self.save_data()

# Example usage
manager = StudentManager()
manager.add_student('Ali', '123', 85)
manager.display_students()
manager.edit_student('123', score=90)
manager.delete_student('123')
manager.display_students()
پاسخ هوش مصنوعی Ai Python
from csv import *
from tkinter import *
def get_next_id():
    try:
        with open("Exel_Peractis_Code.csv", mode='r', newline='') as f:
            rows = list(DictReader(f))
            if not rows:
                return 1
            return int(rows[-1]['id']) + 1
    except FileNotFoundError:
        return 1

def writer_csv():
    with open("Exel_Peractis_Code.csv", mode = "a", newline="") as file:
        dict_students = {'id':get_next_id(),'name':name.get(),'student_number':student_number.get(),'score':score.get()}
        writerer = DictWriter(file, fieldnames=['id', 'name', 'student_number', 'score'])

        with open('Exel_Peractis_Code.csv', mode = 'r', newline="") as fr:
            if len(list(DictReader(fr))) == 0:
                writerer.writeheader()

        writerer.writerow(dict_students)

def edit_csv():
    target_id = edit_id.get().strip()
    if not target_id:
        print("No id entered")
        return

    new_data = []
    with open("Exel_Peractis_Code.csv", mode='r', newline='') as file:
        reader = DictReader(file)
        for row in reader:
            if row['id'] == target_id:
                row['name'] = name_edit.get()
                row['student_number'] = student_number_edit.get()
                row['score'] = score_edit.get()
            new_data.append(row)       

        with open("Exel_Peractis_Code.csv", mode='w', newline='') as file:
            writer = DictWriter(file, fieldnames=['id', 'name', 'student_number', 'score'])
            writer.writeheader()
            writer.writerows(new_data)

def delete_csv():
    target_id = id_delete.get().strip()
    if not target_id:
        print("No id entered")
        return

    new_data = []
    found = False

    with open("Exel_Peractis_Code.csv", mode='r', newline='') as file:
        reader = DictReader(file)
        for row in reader:
            if row['id'] != target_id:
                new_data.append(row)
            else:
                found = True

    if found:
        with open("Exel_Peractis_Code.csv", mode='w', newline='') as file:
            writer = DictWriter(file, fieldnames=['id', 'name', 'student_number', 'score'])
            writer.writeheader()
            writer.writerows(new_data)
        print(f"Row with id {target_id} deleted.")
    else:
        print(f"No row with id {target_id} found.")


main = Tk()         
main.geometry("700x500")
main.title("Peractis")

name_label = Label(main, text="First_Name:")
student_number_label = Label(main, text="Student_Number:")
score_label = Label(main, text="Score:")

name = Entry(main)
student_number = Entry(main)
score = Entry(main)
btn = Button(main, text="Register", command=writer_csv)

name_label.grid(row=0, column=0)
name.grid(row=0, column=1)
student_number_label.grid(row=1, column=0)
student_number.grid(row=1, column=1)
score_label.grid(row=2, column=0)
score.grid(row=2, column=1)
btn.grid(row=3, column=0)

# EDIT

name_label_edit = Label(main, text="First_Name:")
student_number_label_edit = Label(main, text="Student_Number:")
score_label_edit = Label(main, text="Score:")

name_edit = Entry(main)
student_number_edit = Entry(main)
score_edit = Entry(main)
button = Button(main, text="Edit", command=edit_csv)

name_label_edit.grid(row=4, column=0)
name_edit.grid(row=4, column=1)
student_number_label_edit.grid(row=5, column=0)
student_number_edit.grid(row=5, column=1)
score_label_edit.grid(row=6, column=0)
score_edit.grid(row=6, column=1)
label_edit = Label(main, text='edit_id:')
edit_id = Entry(main)
edit_id.grid(row=7, column=1)
label_edit.grid(row=7, column=0)
button.grid(row=8, column=0)

# DELETE

id_delete_label = Label(main, text="Id_For_Delete:")
id_delete = Entry(main)
id_delete.grid(row=9, column=1)
id_delete_label.grid(row=9, column=0)
btn_delete = Button(main, text="Delete", command=delete_csv)
btn_delete.grid(row=10, column=0)
main.mainloop() 
from tkinter import *
import csv
import pandas as pd

main = Tk()
main.title("Attendance")
main.geometry("1000x750")

def click():
    file = open('data.csv', 'a', newline='')
    w = csv.DictWriter(file, fieldnames=['First Name', 'Student Number', 'Score'])

    with open('data.csv', 'r', newline='') as fr:
        if len(list(csv.DictReader(fr))) == 0:
            w.writeheader()

    w.writerow({
        'First Name': fname.get(),
        'Student Number': snum.get(),
        'Score': score.get()
    })

    get_data()

    fname.delete(0, END)
    snum.delete(0, END)
    score.delete(0, END)

    file.close()


def get_data():
    file = open('data.csv', 'r', newline='')
    r = csv.DictReader(file)

    data = ''

    for row in r:
        data += f"{row['First Name']}, {row['Student Number']}, {row['Score']}\n"

    messagebox.config(text=data)
    file.close()


def sh2():
    din = Toplevel(main)
    din.title("Edit Data")
    din.geometry("800x500")

    global old_fname
    global old_snum
    global old_score
    global new_name
    global new_snum
    global new_score

    seperator = Frame(din, height=4, bg="black")
    seperator.grid(row=3, column=0, columnspan=5, sticky="ew", pady=10)

    x1 = Label(din, text="Enter Old First Name: ", font=("Arial", 24), pady=10)
    x1.grid(row=0, column=0)

    old_fname = Entry(din, font=("Arial", 24))
    old_fname.grid(row=0, column=1)

    x2 = Label(din, text="Enter Old Student Number: ", font=("Arial", 24), pady=10)
    x2.grid(row=1, column=0)

    old_snum = Entry(din, font=("Arial", 24))
    old_snum.grid(row=1, column=1)

    x3 = Label(din, text="Enter Old Score: ", font=("Arial", 24), pady=10)
    x3.grid(row=2, column=0)

    old_score = Entry(din, font=("Arial", 24))
    old_score.grid(row=2, column=1)

    x4 = Label(din, text="Enter New First Name: ", font=("Arial", 24), pady=10)
    x4.grid(row=4, column=0)

    new_name = Entry(din, font=("Arial", 24))
    new_name.grid(row=4, column=1)

    x5 = Label(din, text="Enter New Student Number: ", font=("Arial", 24), pady=10)
    x5.grid(row=5, column=0)

    new_snum = Entry(din, font=("Arial", 24))
    new_snum.grid(row=5, column=1)

    x6 = Label(din, text="Enter New Score: ", font=("Arial", 24), pady=10)
    x6.grid(row=6, column=0)

    new_score = Entry(din, font=("Arial", 24))
    new_score.grid(row=6, column=1)

    lan = Button(din, text="Submit", font=("Arial", 24), command=n, pady=10)
    lan.grid(row=7, column=0, columnspan=1, sticky='ew')


def n():
    df = pd.read_csv("data.csv")

    first = old_fname.get()
    snum = int(old_snum.get())
    score = int(old_score.get())

    mask = (
        (df["First Name"] == first) &
        (df["Student Number"] == snum) &
        (df["Score"] == score)
    )

    df.loc[mask, "First Name"] = new_name.get()
    df.loc[mask, "Student Number"] = int(new_snum.get())
    df.loc[mask, "Score"] = int(new_score.get())

    df.to_csv("data.csv", index=False)


def show():
    win = Toplevel(main)
    win.title("Delete Data")
    win.geometry("800x500")

    global h1
    global h2
    global h3

    x1 = Label(win, text="Enter First Name: ", font=("Arial", 24), pady=10)
    x1.grid(row=1, column=0)

    h1 = Entry(win, font=("Arial", 24))
    h1.grid(row=1, column=1)

    x2 = Label(win, text="Enter Student Number: ", font=("Arial", 24), pady=10)
    x2.grid(row=2, column=0)

    h2 = Entry(win, font=("Arial", 24))
    h2.grid(row=2, column=1)

    x3 = Label(win, text="Enter Score: ", font=("Arial", 24), pady=10)
    x3.grid(row=3, column=0)

    h3 = Entry(win, font=("Arial", 24))
    h3.grid(row=3, column=1)

    a4 = Button(win, text="Submit", font=("Arial", 24), command=d, pady=10)
    a4.grid(row=4, column=0, columnspan=1, sticky='ew')


def d():

    df = pd.read_csv("data.csv")

    first = h1.get()
    snum = int(h2.get())
    score = int(h3.get())

    mask = (
        (df["First Name"] == first) &
        (df["Student Number"] == snum) &
        (df["Score"] == score)
    )

    df = df[~mask]

    df.to_csv("data.csv", index=False)


label1 = Label(main, text="First Name: ", font=("Arial", 24), pady=10)
label1.grid(row=0, column=0)

fname = Entry(main, font=("Arial", 24))
fname.grid(row=0, column=1)

label2 = Label(main, text="Student Number: ", font=("Arial", 24), pady=10)
label2.grid(row=1, column=0)

snum = Entry(main, font=("Arial", 24))
snum.grid(row=1, column=1)

label3 = Label(main, text="Score: ", font=("Arial", 24), pady=10)
label3.grid(row=2, column=0)

score = Entry(main, font=("Arial", 24))
score.grid(row=2, column=1)

btn = Button(main, text="Submit", font=("Arial", 24), command=click, pady=10)
btn.grid(row=3, column=0, columnspan=2, sticky='ew')

btn2 = Button(main, text="Get Data", font=("Arial", 24), command=get_data, pady=10)
btn2.grid(row=4, column=0, columnspan=2, sticky='ew')

btn3 = Button(main, text="Delete Data", font=("Arial", 24), command=show, pady=10)
btn3.grid(row=5, column=0, columnspan=2, sticky='ew')

btn4 = Button(main, text="Edit Data", font=("Arial", 24), command=sh2, pady=10)
btn4.grid(row=8, column=0, columnspan=2, sticky='ew')

messagebox = Message(main, text='', font=("Arial", 20), pady=10)
messagebox.grid(row=14, column=0, columnspan=2, sticky='ew')

main.mainloop()
import csv
import os
from tkinter import ttk
import tkinter as tk
from tkinter import messagebox
student = []
def cheak_edit_student(name,student_code,score,row):
    name_no_space = name.replace(" ","")
    if not(name_no_space.isalpha()):
        return False, "name is not string"
    else:
        try:
            student_code = int(student_code)
        except ValueError:
            return False, "student code is not integer"
        else:
            if student_code <= 0:
                return False, "The student code is invalid."
            else:
                run = True
                for rows in student:
                        if student_code == int(rows[1]):
                            if rows != row:
                                run = False
                                return False, "The student code is a duplicate."
                if run:
                    try:
                        score = float(score)
                    except ValueError:

                        return False, "score is not float"
                    else:
                        if score > 20 or score < 0:
                            return False, "The score is invalid."
                        else:
                            return True, "Student added."
def save_students_in_CSV():
    with open("students.csv", mode='w', newline='',encoding="utf-8") as file:
        writer = csv.writer(file)
        writer.writerows(student)
def save_edit_student(name_entry, student_code_entry, score_entry, row, window6,window4):
    name = str(name_entry.get())
    student_code = str(student_code_entry.get())
    score = str(score_entry.get())
    result, error = cheak_edit_student(name,student_code,score,row)
    if result:
        row[0] = name
        row[1] = student_code
        row[2] = score
        save_students_in_CSV()
        show_info_and_close(window6,"Edited!","The student was successfully edited.")
        window4.destroy()
    else:
        show_error_and_close(window6,error)
        window4.destroy()
def edit_student_by_code(student_code, window4):
    window6 = tk.Toplevel(window)
    window6.geometry("500x400")
    window6.title("students - edit")
    code = student_code.get()

    if code == "":
        show_error_and_close(window6, "the student code is empty")
        window4.destroy()
        return
    try:
        code = int(code)
    except ValueError:
        show_error_and_close(window6,"the student code is not integer")
        window4.destroy()
        return
    found = False
    for row in student:
        if code == int(row[1]):
            found = True
            break

    if not found:
        show_error_and_close(window6, "Student not found.")
        window4.destroy()
        return
    name_label = tk.Label(window6, text="New name: ")
    name_label.grid(row=0,column=0)
    name_entry = tk.Entry(window6)
    name_entry.grid(row=1,column=0)
    student_code_label = tk.Label(window6, text="New student code: ")
    student_code_label.grid(row=0,column=1)
    student_code_entry = tk.Entry(window6)
    student_code_entry.grid(row=1,column=1)
    score_label = tk.Label(window6, text="New score: ")
    score_label.grid(row=0, column=2)
    score_entry = tk.Entry(window6)
    score_entry.grid(row=1, column=2)

    name_entry.insert(0, row[0])
    student_code_entry.insert(0, row[1])
    score_entry.insert(0, row[2])
    add_button = tk.Button(
        window6,
        text="edit",
        command=lambda: save_edit_student(
            name_entry,
            student_code_entry,
            score_entry,
            row,
            window6,
            window4
        )
    )
    add_button.grid(row=2, column=1)
def show_info_and_close(window ,title, message):
    messagebox.showinfo(title, message)
    window.destroy()
def show_error_and_close(window, message):
    messagebox.showerror("error", message)
    window.destroy()
def delete_student_by_code(et,window):
    code = et.get()
    try:
        if code != '':
            et_int = int(code)
        else:
            show_error_and_close(window, "the student code is empty")
            return
    except ValueError:
        show_error_and_close(window, "the student code is not integer")
    else:
        run = True
        for row in student:
            if et_int == int(row[1]):
                show_info_and_close(window,"Removed",f"student {row[0]} Removed")
                student.remove(row)
                run = False
                save_students_in_CSV()
                break
        if run:
            show_error_and_close(window, "Student not found.")
def save_new_student(name_entry, student_code_entry, score_entry,window):
    name = str(name_entry.get())
    student_code = str(student_code_entry.get())
    score = str(score_entry.get())
    result,message = cheak_new_student(name,student_code,score)
    if result:
        student.append(
            [name,student_code,score]
        )
        save_students_in_CSV()
        show_info_and_close(window, "Added!",message)
    else:
        show_error_and_close(window, message)
def readCSV():
    if os.path.exists("students.csv"):
        with open("students.csv", "r", newline="",encoding="utf-8") as file:
            reader = csv.reader(file)
            for row in reader:
                student.append(row)
def cheak_new_student(name,student_code,score):
    name_no_space = name.replace(" ","")
    if not(name_no_space.isalpha()):
        return False, "name is not string"
    else:
        try:
            student_code = int(student_code)
        except ValueError:
            return False, "student code is not integer"
        else:
            if student_code <= 0:
                return False, "The student code is invalid."
            else:
                run = True
                for rows in student:
                        if student_code == int(rows[1]):
                            run = False
                            return False, "The student code is a duplicate."
                if run:
                    try:
                        score = float(score)
                    except ValueError:

                        return False, "score is not float"
                    else:
                        if score > 20 or score < 0:
                            return False, "The score is invalid."
                        else:
                            return True, "Student added."
def add_student():
    window2 = tk.Toplevel(window)
    window2.geometry("500x400")
    window2.title("students - add")
    name_label = tk.Label(window2, text="name: ")
    name_label.grid(row=0,column=0)
    name_entry = tk.Entry(window2)
    name_entry.grid(row=1,column=0)
    student_code_label = tk.Label(window2, text="student code: ")
    student_code_label.grid(row=0,column=1)
    student_code_entry = tk.Entry(window2)
    student_code_entry.grid(row=1,column=1)
    score_label = tk.Label(window2, text="score: ")
    score_label.grid(row=0, column=2)
    score_entry = tk.Entry(window2)
    score_entry.grid(row=1, column=2)
    add_button = tk.Button(
        window2,
        text="Add",
        command=lambda: save_new_student(
            name_entry,
            student_code_entry,
            score_entry,
            window2
        )
    )
    add_button.grid(row=2, column=1)
def delete_student():
    run = True
    window3 = tk.Toplevel(window)
    window3.geometry("500x400")
    window3.title("students - delete")
    if len(student) == 0:
            show_error_and_close(window3, "No student was found.")
            run = False
    if run:
        treeview = ttk.Treeview(
            window3,
            columns=("Name", "Student Code", "Score"),
            show="headings"
        )
        treeview.heading("Name", text="Name")
        treeview.heading("Student Code", text="Student Code")
        treeview.heading("Score", text="Score")
        for row in student:
            treeview.insert(
                "",
                tk.END,
                values=(row[0], row[1], row[2])
            )
        treeview.column("Name", width=150)
        treeview.column("Student Code", width=150)
        treeview.column("Score", width=100)
        treeview.pack(fill=tk.BOTH, expand=True)
        frame = tk.Frame(window3)
        frame.pack()

        tk.Label(frame, text="student code: ").grid(row=0, column=0)

        entry_code = tk.Entry(frame)
        entry_code.grid(row=0, column=1)

        btn = tk.Button(
            frame,
            text="Delete",
            command=lambda: delete_student_by_code(entry_code,window3)
        )
        btn.grid(row=1, column=0, columnspan=2)
def edit_student():
    window4 = tk.Toplevel(window)
    window4.geometry("500x400")
    window4.title("student - edit")
    if len(student) == 0:
        show_error_and_close(window4,"No student was found.")
        return
    treeview = ttk.Treeview(
        window4,
        columns=("Name", "Student Code", "Score"),
        show="headings"
    )
    treeview.heading("Name", text="Name")
    treeview.heading("Student Code", text="Student Code")
    treeview.heading("Score", text="Score")
    for row in student:
        treeview.insert(
            "",
            tk.END,
            values=(row[0], row[1], row[2])
        )
    treeview.column("Name", width=150)
    treeview.column("Student Code", width=150)
    treeview.column("Score", width=100)
    treeview.pack(fill=tk.BOTH, expand=True)
    frame = tk.Frame(window4)
    frame.pack()
    la = tk.Label(frame, text="student code: ")
    la.grid(row=0, column=0)

    et = tk.Entry(frame)
    et.grid(row=0, column=1)
    btn = tk.Button(
        frame,
        text="Edit",
        command=lambda: edit_student_by_code(et,window4)
    )
    btn.grid(row=1, column=0, columnspan=2)
def show_students():
    window5 = tk.Toplevel(window)
    window5.geometry("500x400")
    window5.title("students - show")
    treeview = ttk.Treeview(
        window5,
        columns=("Name", "Student Code", "Score"),
        show="headings"
    )
    treeview.heading("Name", text="Name")
    treeview.heading("Student Code", text="Student Code")
    treeview.heading("Score", text="Score")
    for row in student:
        treeview.insert(
            "",
            tk.END,
            values=(row[0], row[1], row[2])
        )
    treeview.column("Name", width=150)
    treeview.column("Student Code", width=150)
    treeview.column("Score", width=100)
    treeview.pack(fill=tk.BOTH, expand=True)
readCSV()
window = tk.Tk()
window.geometry("500x400")
window.title("students")
button1 = tk.Button(window, text="Add Student", command=add_student)
button2 = tk.Button(window, text="Delete Student", command=delete_student)
button3 = tk.Button(window, text="Edit Student", command=edit_student)
button4 = tk.Button(window, text="Show Students", command=show_students)
button5 = tk.Button(window, text="Exit", command=window.destroy)
button1.pack()
button2.pack()
button3.pack()
button4.pack()
button5.pack()
window.mainloop()

ارسال جواب

جوابت را با Markdown بنویس و ثبت کن

×
بستن