126 lines
3.4 KiB
Dart
126 lines
3.4 KiB
Dart
import 'dart:async';
|
||
import 'dart:io';
|
||
|
||
void main() {
|
||
runApp();
|
||
}
|
||
|
||
Future<void> runApp() async {
|
||
final TaskManager taskManager = TaskManager();
|
||
|
||
while (true) {
|
||
print('\nВыберите действие:');
|
||
print('1. Добавить задачу');
|
||
print('2. Показать все задачи');
|
||
print('3. Удалить задачу');
|
||
print('4. Выполнить задачу');
|
||
print('5. Выйти');
|
||
|
||
String? choice = stdin.readLineSync();
|
||
switch (choice) {
|
||
case '1':
|
||
print('Введите описание задачи:');
|
||
String? description = stdin.readLineSync();
|
||
if (description != null && description.isNotEmpty) {
|
||
await Future.delayed(Duration(seconds: 1));
|
||
taskManager.addTask(Task(
|
||
description: description,
|
||
timestamp: DateTime.now(),
|
||
));
|
||
}
|
||
break;
|
||
case '2':
|
||
taskManager.showTasks();
|
||
break;
|
||
case '3':
|
||
print('Введите номер задачи для удаления: ');
|
||
String? indexInput = stdin.readLineSync();
|
||
if (indexInput != null) {
|
||
int index = int.tryParse(indexInput) ?? -1;
|
||
taskManager.removeTask(index);
|
||
}
|
||
break;
|
||
case '4':
|
||
print('Введите номер задачи для выполнения:');
|
||
String? completeIndexInput = stdin.readLineSync();
|
||
if (completeIndexInput != null) {
|
||
int index = int.tryParse(completeIndexInput) ?? -1;
|
||
taskManager.completeTask(index);
|
||
}
|
||
break;
|
||
case '5':
|
||
print('Выход из программы.');
|
||
return;
|
||
default:
|
||
print('Неверный выбор, попробуйте снова.');
|
||
}
|
||
}
|
||
}
|
||
|
||
enum TaskStatus { pending, completed }
|
||
|
||
class Task {
|
||
String description;
|
||
DateTime timestamp;
|
||
TaskStatus status;
|
||
|
||
Task({
|
||
required this.description,
|
||
required this.timestamp,
|
||
this.status = TaskStatus.pending,
|
||
});
|
||
|
||
String getStatusString() {
|
||
switch (status) {
|
||
case TaskStatus.pending:
|
||
return 'В ожидании';
|
||
case TaskStatus.completed:
|
||
return 'Завершена';
|
||
}
|
||
}
|
||
}
|
||
|
||
class TaskManager {
|
||
final List<Task> _tasks = [];
|
||
|
||
void addTask(Task task) {
|
||
_tasks.add(task);
|
||
print('Задача добавлена: "${task.description}"');
|
||
}
|
||
|
||
void showTasks() {
|
||
if (_tasks.isEmpty) {
|
||
print('Список задач пуст.');
|
||
return;
|
||
}
|
||
|
||
_tasks.asMap().forEach((i, task) {
|
||
print('${i + 1}. ${task.description} (${task.getStatusString()}) (${task.timestamp.format()})');
|
||
});
|
||
}
|
||
|
||
void removeTask(int index) {
|
||
if (index < 1 || index > _tasks.length) {
|
||
print('Неверный номер задачи.');
|
||
return;
|
||
}
|
||
String removedTask = _tasks[index - 1].description;
|
||
_tasks.removeAt(index - 1);
|
||
print('Задача удалена: "$removedTask"');
|
||
}
|
||
|
||
void completeTask(int index) {
|
||
if (index < 1 || index > _tasks.length) {
|
||
print('Неверный номер задачи.');
|
||
return;
|
||
}
|
||
_tasks[index - 1].status = TaskStatus.completed;
|
||
print('Задача "${_tasks[index - 1].description}" выполнена.');
|
||
}
|
||
}
|
||
|
||
extension DateTimeFormatter on DateTime {
|
||
String format() {
|
||
return '${this.day}-${this.month}-${this.year} ${this.hour}:${this.minute}';
|
||
}
|
||
} |