Untitled

 avatar
unknown
python
19 days ago
4.2 kB
6
Indexable
import json
import sys

FILE_NAME = "students.json"

def load_data():
    try:
        with open(FILE_NAME, "r") as file:
            return json.load(file)
    except (FileNotFoundError, json.JSONDecodeError):
        return []

def save_data(data):
    with open(FILE_NAME, "w") as file:
        json.dump(data, file, indent=4)

def add_student(student_id, name, surname, gpa):
    data = load_data()
    data.append({"id": student_id, "name": name, "surname": surname, "gpa": gpa})
    save_data(data)
    print("Student added successfully.")

def delete_student(student_id):
    data = load_data()
    updated_data = [student for student in data if student["id"] != student_id]
    save_data(updated_data)
    print("Student deleted successfully.")

def update_student(student_id, name=None, surname=None, gpa=None):
    data = load_data()
    for student in data:
        if student["id"] == student_id:
            if name:
                student["name"] = name
            if surname:
                student["surname"] = surname
            if gpa:
                student["gpa"] = gpa
            break
    save_data(data)
    print("Student updated successfully.")

def search_by_id(student_id):
    data = load_data()
    for student in data:
        if student["id"] == student_id:
            print(student)
            return
    print("Student not found.")

def search_by_name_surname(name, surname):
    data = load_data()
    for student in data:
        if student["name"] == name and student["surname"] == surname:
            print(student)
            return
    print("Student not found.")

def display_all_students():
    data = load_data()
    if not data:
        print("No students available.")
        return

    total_gpa = 0
    for student in data:
        print(student)
        total_gpa += float(student["gpa"])

    average_gpa = total_gpa / len(data)
    print(f"\nAverage GPA of all students: {average_gpa:.2f}")

if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("Usage: python script.py <command> [arguments]")
        print("commands:")
        print("- add <id> <name> <surname> <gpa> (Adds student to the file)")
        print("- update <id> <name> <surname> <gpa> (Updates student's information by their ID)")
        print("- search_by_id <id> (Finds student by their ID)")
        print("- search_by_name <name> <surname> (Finds student by their name & surname)")
        print("- delete <id> (Deletes student from file based on their ID)")
        print("- list (Lists all students)")
        sys.exit(1)

    command = sys.argv[1].lower()

    if command == "add":
        if len(sys.argv) != 6:
            print("Usage: python script.py add <id> <name> <surname> <gpa>")
        else:
            _, _, student_id, name, surname, gpa = sys.argv
            add_student(student_id, name, surname, gpa)

    elif command == "delete":
        if len(sys.argv) != 3:
            print("Usage: python script.py delete <id>")
        else:
            _, _, student_id = sys.argv
            delete_student(student_id)

    elif command == "update":
        if len(sys.argv) < 3:
            print("Usage: python script.py update <id> [name] [surname] [gpa]")
        else:
            student_id = sys.argv[2]
            name = sys.argv[3] if len(sys.argv) > 3 else None
            surname = sys.argv[4] if len(sys.argv) > 4 else None
            gpa = sys.argv[5] if len(sys.argv) > 5 else None
            update_student(student_id, name, surname, gpa)

    elif command == "search_by_id":
        if len(sys.argv) != 3:
            print("Usage: python script.py search_by_id <id>")
        else:
            _, _, student_id = sys.argv
            search_by_id(student_id)

    elif command == "search_by_name":
        if len(sys.argv) != 4:
            print("Usage: python script.py search_by_name <name> <surname>")
        else:
            _, _, name, surname = sys.argv
            search_by_name_surname(name, surname)

    elif command == "list":
        display_all_students()

    else:
        print("Invalid command. Available commands: add, delete, update, search_by_id, search_by_name, list.")
Leave a Comment