├── .idea
├── .gitignore
├── inspectionProfiles
│ └── profiles_settings.xml
├── material_theme_project_new.xml
├── misc.xml
├── modules.xml
├── todo-py.iml
└── vcs.xml
├── data.json
└── main.py
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 |
--------------------------------------------------------------------------------
/.idea/inspectionProfiles/profiles_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/material_theme_project_new.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
10 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/todo-py.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/data.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "title": "test-my-project",
4 | "done": false
5 | },
6 | {
7 | "title": "push-and-pull-project-in-repository",
8 | "done": false
9 | },
10 | {
11 | "title": "publish-project-in-server-arvanClude",
12 | "done": true
13 | },
14 | {
15 | "title": "for-test",
16 | "done": false
17 | },
18 | {
19 | "title": "for-exam",
20 | "done": true
21 | }
22 | ]
--------------------------------------------------------------------------------
/main.py:
--------------------------------------------------------------------------------
1 | import json
2 | import os
3 |
4 | DATA_FILE = "data.json"
5 |
6 | def load_tasks():
7 | if os.path.exists(DATA_FILE):
8 | with open(DATA_FILE, "r") as f:
9 | return json.load(f)
10 | return []
11 |
12 | def save_tasks(tasks):
13 | with open(DATA_FILE, "w") as f:
14 | json.dump(tasks, f, indent=2)
15 |
16 | def list_tasks(tasks):
17 | if not tasks:
18 | print("هیچ کاری وجود ندارد.")
19 | else:
20 | print("\nلیست کارها:")
21 | for i, task in enumerate(tasks, start=1):
22 | status = "✅" if task["done"] else "❌"
23 | print(f"{i}. {task['title']} [{status}]")
24 | print()
25 |
26 | def add_task(tasks):
27 | title = input("عنوان کار جدید را وارد کن: ")
28 | tasks.append({"title": title, "done": False})
29 | save_tasks(tasks)
30 | print("کار اضافه شد.\n")
31 |
32 | def mark_done(tasks):
33 | list_tasks(tasks)
34 | try:
35 | number = int(input("شماره کاری که انجام شده را وارد کن: "))
36 | if 1 <= number <= len(tasks):
37 | tasks[number - 1]["done"] = True
38 | save_tasks(tasks)
39 | print("با موفقیت علامتگذاری شد.\n")
40 | else:
41 | print("شماره نامعتبر.\n")
42 | except ValueError:
43 | print("ورودی باید عدد باشد.\n")
44 |
45 | def delete_task(tasks):
46 | list_tasks(tasks)
47 | try:
48 | number = int(input("شماره کاری که میخواهی حذف کنی را وارد کن: "))
49 | if 1 <= number <= len(tasks):
50 | removed = tasks.pop(number - 1)
51 | save_tasks(tasks)
52 | print(f"«{removed['title']}» حذف شد.\n")
53 | else:
54 | print("شماره نامعتبر.\n")
55 | except ValueError:
56 | print("ورودی باید عدد باشد.\n")
57 |
58 | def main():
59 | tasks = load_tasks()
60 | while True:
61 | print("=== مدیر لیست کارها ===")
62 | print("1. نمایش کارها")
63 | print("2. افزودن کار جدید")
64 | print("3. علامتگذاری انجامشده")
65 | print("4. حذف کار")
66 | print("5. خروج")
67 |
68 | choice = input("انتخاب شما: ")
69 |
70 | if choice == "1":
71 | list_tasks(tasks)
72 | elif choice == "2":
73 | add_task(tasks)
74 | elif choice == "3":
75 | mark_done(tasks)
76 | elif choice == "4":
77 | delete_task(tasks)
78 | elif choice == "5":
79 | print("خروج از برنامه. موفق باشی! 👋")
80 | break
81 | else:
82 | print("گزینه نامعتبر است.\n")
83 |
84 | if __name__ == "__main__":
85 | main()
86 |
87 |
88 | # update featureTodo
89 |
--------------------------------------------------------------------------------