Untitled

 avatar
unknown
plain_text
6 months ago
5.0 kB
7
Indexable
import os

students = []  # Lista za studentariju prljavu
student_id_counter = 1  # Counter za generisanje ID
data_file = 'students.txt'  # File za sejvovanje studentarije, ovde Studenti obitavaju


def add_student_to_file(student):
    #Append Studentariju u text file.
    with open(data_file, 'a') as file:
        file.write(f"{student['id']},{student['name']},{student['grades']}\n")


def add_student_interactive():
   #Dodaje novog studenta interaktivno sa ID-jem isto bi trebalo da pokrije ako neko ukuca nesto glupo
    global student_id_counter  # Ovo sranje mora ovako da se napise "global" zato sto ako ne napisem gleda ga samo kao lokalnu varijablu, morao za ovo sranje da gledam na netu objasnjenje

    name = input("Enter student's name: ")

    # Scenario ako slucajno nije slovo
    if not name:
        raise ValueError("Student name cannot be empty.")
#maleni while loop, trazi prompt od usera usranog sve dok ne ukuca "q" tj trazice da upisujes predmete dok ne stisnes to dugme brt
    grades = {}
    while True:
        subject = input("Enter subject (or 'q' to quit): ")
        if subject.lower() == 'q':
            break

        try:
            grade = float(input(f"Enter grade for {subject}: "))
        except ValueError:
            print("Please enter a valid number for the grade.")
            continue

        # U slucaju da nije ocena, tj da nije broj i pojavi se bas ovaj tip error poruke.ps: mozemo da modifikujemo i da dodamo nesto, sta znam nemoj da me smaras.
        if not isinstance(grade, (int, float)):
            raise TypeError(f"Grade for {subject} must be a number.")

        grades[subject] = grade

    # Kreira novog studenta usranog sa sve ID-jem, ludnica jedna
    student = {
        'id': student_id_counter,
        'name': name,
        'grades': grades
    }
    students.append(student)

    print(f"Added student: ID: {student_id_counter}, Name: {name}, Grades: {grades}")

    # Append the student data to the file|mislim da ovde nema sta al ajde da komntarisem
    add_student_to_file(student)

    # Increment the ID counter for the next student|maleni counter klasicni
    student_id_counter += 1

def update_grades():
    #Promene ocena ako bas zelis
    student_id = int(input("Enter student ID to update: "))
    subject = input("Enter subject for which to update the grade: ")

    # Trebalo bi da ga nadje Po ID-ju, studenta da nadje
    for student in students:
        if student['id'] == student_id:
            # Ako postoji predmet
            if subject in student['grades']:
                try:
                    new_grade = float(input(f"Enter new grade for {subject}: "))
                    student['grades'][subject] = new_grade
                    print(f"Updated {student['name']}'s grade for {subject} to: {new_grade}")

                    # ovo da sejvuje, plus maleni value error ako izadje neki
                    save_students()
                    return
                except ValueError:
                    print("Please enter a valid number for the grade.")
                    return
            else:
                print(f"No grade found for subject: {subject}")
                return

    print(f"Student with ID {student_id} not found.")


def save_students():
    #Sacuvaj studentariju
    with open(data_file, 'w') as file:
        for student in students:
            file.write(f"{student['id']},{student['name']},{student['grades']}\n")




def view_students():
    #Pokazi mi studente
    if not students:
        print("No students available.")
        return
    #sledece linija bukvalno
    print("\nStudents List:")
    #neke crtice printa, izbacuje studentsku listu kao fiskalni racun od maksija
    print("-" * 40)
    for student in students:
        print(f"ID: {student['id']}, Name: {student['name']}")
        for subject, grade in student['grades'].items():
            print(f"  {subject}: {grade}")
        print("-" * 40)



if os.path.exists(data_file):
    with open(data_file, 'r') as file:
        for line in file:
            parts = line.strip().split(',')
            student_id = int(parts[0])
            name = parts[1]
            grades = eval(parts[2])  # Konvertuje u dictionary
            students.append({'id': student_id, 'name': name, 'grades': grades})
            student_id_counter = max(student_id_counter, student_id + 1)


# Raspored funkcija se treba srediti, stavio sam da ide u txt fajl sve
# Treba testirati da se vidi da li pokrivamo sve scenarije ako neko izlupeta neke gluposti i upise npr "!" umesto ID
#NIKADA ME NECES ZAUSTAVITI SHOMI DA ISKOMENTARISM GLUPO KOD!!!
### neki meni da ubacim pa da ima sve ponudjene opcije sta da radi, sad mi palo na pamet dok pricam sa tobom



students = []
add_student_interactive()
update_grades()
view_students()
Editor is loading...
Leave a Comment