Compare commits
1
Commits
v3.0
..
74c384e6ce
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
74c384e6ce |
No files matched your search
-22
@@ -1,22 +0,0 @@
|
|||||||
# Файлы данных
|
|
||||||
*.json
|
|
||||||
|
|
||||||
# Python
|
|
||||||
__pycache__/
|
|
||||||
*.py[cod]
|
|
||||||
*$py.class
|
|
||||||
*.so
|
|
||||||
.Python
|
|
||||||
env/
|
|
||||||
venv/
|
|
||||||
*.egg-info/
|
|
||||||
|
|
||||||
# IDE
|
|
||||||
.vscode/
|
|
||||||
.idea/
|
|
||||||
*.swp
|
|
||||||
*.swo
|
|
||||||
|
|
||||||
# OS
|
|
||||||
.DS_Store
|
|
||||||
Thumbs.db
|
|
||||||
@@ -1,15 +1,3 @@
|
|||||||
# Менеджер задач - Учебный проект
|
# course-students
|
||||||
|
|
||||||
Приложение для управления задачами в рамках образовательного курса по программированию.
|
Публичный репозиторий для студентов образовательного курса
|
||||||
|
|
||||||
## Структура курса
|
|
||||||
|
|
||||||
- **Тема 1**: Основы Python, создание проекта
|
|
||||||
- **Тема 2**: Работа со списками задач
|
|
||||||
- **Тема 3**: Сохранение данных в файл
|
|
||||||
|
|
||||||
## Запуск
|
|
||||||
|
|
||||||
```bash
|
|
||||||
python main.py
|
|
||||||
```
|
|
||||||
@@ -1,83 +0,0 @@
|
|||||||
"""
|
|
||||||
Менеджер задач - Версия 3.0
|
|
||||||
Тема 3: Сохранение данных в файл
|
|
||||||
"""
|
|
||||||
|
|
||||||
from task import Task
|
|
||||||
from task_manager import TaskManager
|
|
||||||
|
|
||||||
|
|
||||||
def print_menu():
|
|
||||||
"""Вывести меню программы"""
|
|
||||||
print("\n=== Менеджер задач ===")
|
|
||||||
print("1. Добавить задачу")
|
|
||||||
print("2. Показать все задачи")
|
|
||||||
print("3. Завершить задачу")
|
|
||||||
print("4. Удалить задачу")
|
|
||||||
print("5. Сохранить")
|
|
||||||
print("6. Загрузить")
|
|
||||||
print("7. Статистика")
|
|
||||||
print("0. Выход")
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
manager = TaskManager()
|
|
||||||
|
|
||||||
# Автоматическая загрузка при старте
|
|
||||||
manager.load()
|
|
||||||
print("Данные загружены!")
|
|
||||||
|
|
||||||
while True:
|
|
||||||
print_menu()
|
|
||||||
choice = input("Выберите действие: ")
|
|
||||||
|
|
||||||
if choice == "1":
|
|
||||||
title = input("Название задачи: ")
|
|
||||||
desc = input("Описание (необязательно): ")
|
|
||||||
manager.add_task(title, desc)
|
|
||||||
print("Задача добавлена!")
|
|
||||||
|
|
||||||
elif choice == "2":
|
|
||||||
tasks = manager.list_tasks()
|
|
||||||
if tasks:
|
|
||||||
for i, task in enumerate(tasks, 1):
|
|
||||||
print(f"{i}. {task}")
|
|
||||||
else:
|
|
||||||
print("Список задач пуст")
|
|
||||||
|
|
||||||
elif choice == "3":
|
|
||||||
idx = int(input("Номер задачи: ")) - 1
|
|
||||||
task = manager.get_task_by_index(idx)
|
|
||||||
if task:
|
|
||||||
task.mark_complete()
|
|
||||||
print("Задача выполнена!")
|
|
||||||
|
|
||||||
elif choice == "4":
|
|
||||||
idx = int(input("Номер задачи для удаления: ")) - 1
|
|
||||||
if manager.remove_task(idx):
|
|
||||||
print("Задача удалена!")
|
|
||||||
else:
|
|
||||||
print("Задача не найдена")
|
|
||||||
|
|
||||||
elif choice == "5":
|
|
||||||
manager.save()
|
|
||||||
print("Данные сохранены в tasks.json")
|
|
||||||
|
|
||||||
elif choice == "6":
|
|
||||||
manager.load()
|
|
||||||
print("Данные загружены из tasks.json")
|
|
||||||
|
|
||||||
elif choice == "7":
|
|
||||||
print(f"Всего задач: {len(manager.list_tasks())}")
|
|
||||||
print(f"Выполнено: {manager.get_completed_count()}")
|
|
||||||
print(f"В ожидании: {manager.get_pending_count()}")
|
|
||||||
|
|
||||||
elif choice == "0":
|
|
||||||
# Автосохранение перед выходом
|
|
||||||
manager.save()
|
|
||||||
print("Данные сохранены. До свидания!")
|
|
||||||
break
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
||||||
-44
@@ -1,44 +0,0 @@
|
|||||||
"""
|
|
||||||
Модуль для сохранения и загрузки данных
|
|
||||||
Работа с файлами JSON
|
|
||||||
"""
|
|
||||||
|
|
||||||
import json
|
|
||||||
from task import Task
|
|
||||||
|
|
||||||
|
|
||||||
def save_tasks_to_file(tasks, filename="tasks.json"):
|
|
||||||
"""Сохранить список задач в файл JSON"""
|
|
||||||
data = []
|
|
||||||
for task in tasks:
|
|
||||||
data.append({
|
|
||||||
"title": task.title,
|
|
||||||
"description": task.description,
|
|
||||||
"completed": task.completed
|
|
||||||
})
|
|
||||||
|
|
||||||
with open(filename, "w", encoding="utf-8") as f:
|
|
||||||
json.dump(data, f, ensure_ascii=False, indent=2)
|
|
||||||
|
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
def load_tasks_from_file(filename="tasks.json"):
|
|
||||||
"""Загрузить список задач из файла JSON"""
|
|
||||||
try:
|
|
||||||
with open(filename, "r", encoding="utf-8") as f:
|
|
||||||
data = json.load(f)
|
|
||||||
|
|
||||||
tasks = []
|
|
||||||
for item in data:
|
|
||||||
task = Task(item["title"], item.get("description", ""))
|
|
||||||
if item.get("completed", False):
|
|
||||||
task.mark_complete()
|
|
||||||
tasks.append(task)
|
|
||||||
|
|
||||||
return tasks
|
|
||||||
except FileNotFoundError:
|
|
||||||
return []
|
|
||||||
except json.JSONDecodeError:
|
|
||||||
print("Ошибка чтения файла. Данные могут быть повреждены.")
|
|
||||||
return []
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
"""
|
|
||||||
Модуль для работы с задачами
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
class Task:
|
|
||||||
"""Класс, представляющий одну задачу"""
|
|
||||||
|
|
||||||
def __init__(self, title, description=""):
|
|
||||||
self.title = title
|
|
||||||
self.description = description
|
|
||||||
self.completed = False
|
|
||||||
|
|
||||||
def mark_complete(self):
|
|
||||||
"""Отметить задачу как выполненную"""
|
|
||||||
self.completed = True
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
status = "✓" if self.completed else "○"
|
|
||||||
return f"[{status}] {self.title}"
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
"""
|
|
||||||
Менеджер списка задач
|
|
||||||
Управление коллекцией задач
|
|
||||||
"""
|
|
||||||
|
|
||||||
from task import Task
|
|
||||||
from storage import save_tasks_to_file, load_tasks_from_file
|
|
||||||
|
|
||||||
|
|
||||||
class TaskManager:
|
|
||||||
"""Класс для управления списком задач"""
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
self.tasks = []
|
|
||||||
|
|
||||||
def add_task(self, title, description=""):
|
|
||||||
"""Добавить новую задачу в список"""
|
|
||||||
task = Task(title, description)
|
|
||||||
self.tasks.append(task)
|
|
||||||
return task
|
|
||||||
|
|
||||||
def list_tasks(self):
|
|
||||||
"""Вернуть список всех задач"""
|
|
||||||
return self.tasks
|
|
||||||
|
|
||||||
def get_task_by_index(self, index):
|
|
||||||
"""Получить задачу по индексу"""
|
|
||||||
if 0 <= index < len(self.tasks):
|
|
||||||
return self.tasks[index]
|
|
||||||
return None
|
|
||||||
|
|
||||||
def remove_task(self, index):
|
|
||||||
"""Удалить задачу по индексу"""
|
|
||||||
if 0 <= index < len(self.tasks):
|
|
||||||
return self.tasks.pop(index)
|
|
||||||
return None
|
|
||||||
|
|
||||||
def get_completed_count(self):
|
|
||||||
"""Вернуть количество выполненных задач"""
|
|
||||||
return sum(1 for task in self.tasks if task.completed)
|
|
||||||
|
|
||||||
def get_pending_count(self):
|
|
||||||
"""Вернуть количество ожидающих задач"""
|
|
||||||
return len(self.tasks) - self.get_completed_count()
|
|
||||||
|
|
||||||
def save(self, filename="tasks.json"):
|
|
||||||
"""Сохранить задачи в файл"""
|
|
||||||
return save_tasks_to_file(self.tasks, filename)
|
|
||||||
|
|
||||||
def load(self, filename="tasks.json"):
|
|
||||||
"""Загрузить задачи из файла"""
|
|
||||||
self.tasks = load_tasks_from_file(filename)
|
|
||||||
return self.tasks
|
|
||||||
Reference in new issue
Block a user