ניתוח הקוד של אפליקציית "מנהל חברותות מתקדם" ================================================== הקוד שכתבת יוצר אפליקציה גרפית (GUI) באמצעות ספריית `tkinter` בפייתון. מטרת האפליקציה היא לנהל ולשדך חברותות (זוגות לימוד) על בסיס קריטריונים שונים. להלן פירוט של החלקים המרכזיים בקוד: 1. ייבוא ספריות (שורות 1-10) -------------------------------- הקוד מתחיל בייבוא של כל הספריות הנחוצות לפעולת האפליקציה: - `tkinter`: ליצירת הממשק הגרפי. - `json`: לניהול ושמירה של נתונים (כמו שמירת מצב עבודה). - `random`: לערבוב רשימת התלמידים לפני השידוך כדי למנוע הטיות. - `reportlab`: ליצירת קובצי PDF. - `openpyxl`: ליצירת קובצי Excel (XLSX). - `docx`: ליצירת קובצי Word (DOCX). 2. הגדרת המחלקה הראשית `ChavrutaManagerApp` (שורה 12) ------------------------------------------------------ כל הלוגיקה של האפליקציה נמצאת בתוך המחלקה הזו. א. אתחול (`__init__` - שורה 13): -------------------------------- - מגדיר את החלון הראשי של האפליקציה (כותרת, גודל). - מאתחל משתנים שישמשו לאורך חיי האפליקציה: - `students`: רשימת התלמידים. - `pairs`: רשימת הזוגות שנוצרו. - `locked_pairs`: זוגות ש"ננעלו" על ידי המשתמש ולא ישתנו. - מגדיר את כללי השידוך: - `default_matching`: כללים בסיסיים להתאמה לפי "חוזק" (חזק, בינוני, חלש). - `extended_matching`: כללים להתאמות מתקדמות יותר (סגנון למידה, מיקוד, אישיות, דייקנות). - מגדיר עיצוב מודרני ונעים לאפליקציה באמצעות `ttk.Style`. - מוסיף תמיכה מלאה בעברית (RTL - Right-to-Left). ב. בניית הממשק (`setup_ui` - שורה 82): ---------------------------------------- - הפונקציה הזו בונה את כל האלמנטים הוויזואליים של האפליקציה: - **כותרת ראשית**. - **כפתורי פעולות**: "נקה הכל", "שמור רשימה", "טען רשימה", "ייבוא שמות", "הגדרות" וכו'. - **שורת חיפוש וסינון**: מאפשרת לחפש תלמיד לפי שם ולסנן את הרשימה לפי מאפיינים שונים. - **טבלת התלמידים**: האזור המרכזי בו המשתמש מזין את פרטי התלמידים. הטבלה נגללת אנכית ואופקית. - **כפתורי יצירה וייצוא**: "צור חברותות", "ייצא ל-TXT/PDF/DOCX/XLSX". - **כלים נוספים**: "התאמה ידנית", "דוח אי התאמות", "סטטיסטיקות". - **שורת סטטוס**: מציגה מידע עדכני בתחתית החלון (כמה תלמידים, כמה זוגות וכו'). 3. פונקציות מרכזיות --------------------- א. ניהול נתונים: ------------------ - `add_rows` (שורה 488): מוסיפה שורות חדשות לטבלת התלמידים. - `clear_all` (שורה 519): מנקה את כל הנתונים מהאפליקציה לאחר אישור מהמשתמש. - `parse_students` (שורה 564): קוראת את הנתונים מטבלת התלמידים ומכניסה אותם לרשימת `self.students` בצורה מסודרת. ב. שמירה וטעינה: ------------------- - `save_workspace` (שורה 229): שומרת את *כל* המצב הנוכחי של האפליקציה (רשימת תלמידים, פילטרים, זוגות נעולים) לקובץ JSON. זה מאפשר למשתמש להפסיק את העבודה ולהמשיך מאותה נקודה מאוחר יותר. - `load_workspace` (שורה 262): טוענת מצב עבודה שמור מקובץ JSON. ג. לוגיקת השידוך: ------------------- - `is_compatible_strength` (שורה 648): בודקת אם שני תלמידים מתאימים מבחינת "חוזק" והעדפות. - `is_compatible_extended` (שורה 659): בודקת התאמה לפי הקריטריונים המורחבים. - `generate_chavrutas` (שורה 669): זוהי פונקציית הליבה של תהליך השידוך. היא מבצעת את הפעולות הבאות: 1. קוראת את נתוני התלמידים. 2. מערבבת את הרשימה. 3. משבצת תחילה את הזוגות ה"נעולים". 4. עוברת על שאר התלמידים ומנסה למצוא להם בן זוג מתאים על בסיס כללי ההתאמה. 5. בסיום, מעדכנת את רשימת הזוגות (`self.pairs`) ואת רשימת הנשארים (`self.leftovers`). ד. כלים מתקדמים: ------------------ - `open_manual_matching_window` (שורה 313): פותחת חלון חדש המאפשר למשתמש ליצור, לבטל, לנעול ולשחרר זוגות באופן ידני. - `show_mismatch_report` (שורה 433): יוצרת דוח שמסביר מדוע תלמידים מסוימים נשארו ללא חברותא. זה כלי חשוב לאיתור בעיות בהגדרות או בנתונים. ה. ייצוא נתונים: ----------------- - פונקציות הייצוא (`export_to_txt`, `export_to_pdf`, וכו') לוקחות את רשימת הזוגות שנוצרה ומעצבות אותה לקובץ בפורמט הרצוי. (הערה: חלק מהפונקציות הללו לא ממומשות במלואן בקוד שסופק). 4. חווית משתמש (UX) ----------------------- - **Tooltips**: רמזים קטנים שמופיעים כשעוברים עם העכבר מעל כפתורים (`_add_tooltip`). - **פילטור דינמי**: הרשימה מתעדכנת בזמן אמת עם כל שינוי בסינון או בחיפוש (`apply_filters`). - **שורת סטטוס**: נותנת משוב מיידי על מצב הנתונים. לסיכום, מדובר באפליקציה חזקה ושימושית המשלבת ממשק משתמש נוח עם לוגיקה מורכבת לשידוך זוגות לימוד. היא בנויה בצורה מודולרית ומאפשרת גמישות רבה למשתמש.