-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
164 lines (131 loc) · 5.42 KB
/
main.py
File metadata and controls
164 lines (131 loc) · 5.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
# main.py - נקודת הכניסה לתוכנית
# מערכת ניהול ספרייה אישית
"""
מערכת ניהול ספרייה אישית
========================
מערכת מלאה לניהול ספרייה אישית הכוללת:
- ניהול ספרים (הוספה, עריכה, מחיקה, חיפוש)
- ניהול חברים (הוספה, עריכה, מחיקה, חיפוש)
- ניהול השאלות (השאלה, החזרה, מעקב)
- דוחות וסטטיסטיקות
- ייצוא ל-CSV
- גיבוי ושחזור מסד נתונים
תכונות בונוס:
- Dark Mode - מצב כהה
- גרפים עם matplotlib
- מערכת קנסות לאיחורים
הפעלה:
python main.py
--AsafMoradi--
"""
import tkinter as tk
import sys
import os
# תיקון קידוד לעברית בקונסול Windows
if sys.platform == 'win32':
try:
sys.stdout.reconfigure(encoding='utf-8', errors='replace')
except:
pass
# הוספת התיקייה הנוכחית לנתיב
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from gui import LibraryApp
from db import Database, BookRepository, MemberRepository, LoanRepository
from models import Book, Member, Loan
from datetime import datetime, timedelta
def create_sample_data() -> None:
"""
יצירת נתונים לדוגמה במסד הנתונים
נקרא רק אם מסד הנתונים ריק
"""
db = Database("library.db")
book_repo = BookRepository(db)
member_repo = MemberRepository(db)
loan_repo = LoanRepository(db)
# בדיקה אם יש כבר נתונים
if book_repo.get_all():
db.close()
return
print("יוצר נתונים לדוגמה...")
# הוספת ספרים לדוגמה
sample_books = [
Book("9780134685991", "Effective Java", "Joshua Bloch", "תכנות", 2018),
Book("9780596517748", "JavaScript: The Good Parts", "Douglas Crockford", "תכנות", 2008),
Book("9780132350884", "Clean Code", "Robert C. Martin", "תכנות", 2008),
Book("9780201633610", "Design Patterns", "Gang of Four", "תכנות", 1994),
Book("9780062316097", "Sapiens", "Yuval Noah Harari", "היסטוריה", 2015),
Book("9780062464347", "Homo Deus", "Yuval Noah Harari", "היסטוריה", 2017),
Book("9780316769488", "The Catcher in the Rye", "J.D. Salinger", "רומן", 1951),
Book("9780061120084", "To Kill a Mockingbird", "Harper Lee", "רומן", 1960),
Book("9780451524935", "1984", "George Orwell", "מדע בדיוני", 1949),
Book("9780060935467", "Harry Potter", "J.K. Rowling", "פנטזיה", 1997),
]
for book in sample_books:
book_repo.add(book)
# הוספת חברים לדוגמה
sample_members = [
Member("ישראל ישראלי", "israel@example.com", "050-1234567"),
Member("שרה כהן", "sara@example.com", "052-9876543"),
Member("דוד לוי", "david@example.com", "054-5555555"),
Member("רחל אברהם", "rachel@example.com", "053-1111111"),
Member("משה פרץ", "moshe@example.com", "058-2222222"),
]
member_ids = []
for member in sample_members:
member_id = member_repo.add(member)
if member_id:
member_ids.append(member_id)
# יצירת השאלות לדוגמה
if member_ids:
# השאלה פעילה
loan1 = Loan(
book_isbn="9780134685991",
member_id=member_ids[0],
loan_date=(datetime.now() - timedelta(days=7)).strftime("%Y-%m-%d"),
return_date=(datetime.now() + timedelta(days=7)).strftime("%Y-%m-%d")
)
loan_repo.add(loan1)
# השאלה באיחור
loan2 = Loan(
book_isbn="9780596517748",
member_id=member_ids[1],
loan_date=(datetime.now() - timedelta(days=20)).strftime("%Y-%m-%d"),
return_date=(datetime.now() - timedelta(days=6)).strftime("%Y-%m-%d")
)
loan_repo.add(loan2)
# השאלה שהוחזרה - הכנסה ישירה
db.cursor.execute('''
INSERT INTO loans (book_isbn, member_id, loan_date, return_date, actual_return_date, status)
VALUES (?, ?, ?, ?, ?, ?)
''', (
"9780062316097",
member_ids[2],
(datetime.now() - timedelta(days=30)).strftime("%Y-%m-%d"),
(datetime.now() - timedelta(days=16)).strftime("%Y-%m-%d"),
(datetime.now() - timedelta(days=17)).strftime("%Y-%m-%d"),
"returned"
))
db.commit()
db.close()
print("נתוני דוגמה נוצרו בהצלחה!")
print(f" - {len(sample_books)} ספרים")
print(f" - {len(sample_members)} חברים")
print(f" - 3 השאלות")
def main():
"""פונקציה ראשית - נקודת הכניסה לתוכנית"""
print("=" * 50)
print("מערכת ניהול ספרייה אישית")
print("=" * 50)
# יצירת נתונים לדוגמה (רק אם ריק)
create_sample_data()
# יצירת חלון ראשי
root = tk.Tk()
# יצירת האפליקציה
app = LibraryApp(root)
print("\nהמערכת פועלת...")
print("לסגירה - סגור את החלון או לחץ על 'יציאה'")
# הפעלת לולאת האירועים
root.mainloop()
print("\nהמערכת נסגרה. להתראות!")
if __name__ == "__main__":
main()