1
0
فهرست منبع

Загрузить файлы 'Лекции/2.5.1300_Управление_режимом_контроля_печати_конфиденциальных_документов'

u23-27gurkin 4 روز پیش
والد
کامیت
0beafb4d1d

+ 234 - 0
Лекции/2.5.1300_Управление_режимом_контроля_печати_конфиденциальных_документов/Защитник печати_2.5.1300.py

@@ -0,0 +1,234 @@
+import tkinter as tk
+from tkinter import messagebox, ttk
+class PrintSecurityGame:
+    def __init__(self, root):
+        self.root = root
+        self.root.title("Защитник печати")
+        self.root.geometry("800x600")
+        self.root.configure(bg="#f0f8ff")
+
+        self.score = 0
+        self.current_scene = 1
+
+        # Словарь сцен: номер → метод
+        self.scenes = {
+            1: self.scene_1,
+            2: self.scene_2,
+            3: self.scene_3,
+            4: self.scene_4,
+            5: self.scene_5
+        }
+
+        self.display_scene()
+
+    def display_scene(self):
+        """Очищает окно и отображает текущую сцену"""
+        for widget in self.root.winfo_children():
+            widget.destroy()
+
+        if self.current_scene in self.scenes:
+            self.scenes[self.current_scene]()
+        else:
+            self.game_over()
+
+    def game_over(self):
+        """Финал игры: показ результата"""
+        frame = tk.Frame(self.root, bg="#f0f8ff")
+        frame.pack(pady=50)
+
+        tk.Label(
+            frame,
+            text="Игра завершена!",
+            font=("Arial", 24, "bold"),
+            bg="#f0f8ff",
+            fg="#2c3e50"
+        ).pack(pady=20)
+
+        # Оценка результата по набранным баллам
+        if self.score >= 45:
+            result = "Отлично! Система полностью защищена."
+        elif self.score >= 30:
+            result = "Хорошо! Есть небольшие уязвимости."
+        elif self.score >= 15:
+            result = "Удовлетворительно. Требуется доработка защиты."
+        else:
+            result = "Критические уязвимости! Пересмотрите политику безопасности."
+
+        tk.Label(
+            frame,
+            text=f"Ваш итоговый счёт: {self.score}/50\n\n{result}",
+            font=("Arial", 14),
+            bg="#f0f8ff",
+            fg="#2c3e50",
+            justify="center"
+        ).pack(pady=20)
+
+        tk.Button(
+            frame,
+            text="Начать заново",
+            command=self.restart,
+            bg="#3498db",
+            fg="white",
+            font=("Arial", 12),
+            padx=20
+        ).pack(pady=10)
+
+    def restart(self):
+        """Перезапуск игры"""
+        self.score = 0
+        self.current_scene = 1
+        self.display_scene()
+
+    # --- Сцены игры ---
+
+    def scene_1(self):
+        """Сцена 1: Аутентификация пользователей"""
+        tk.Label(
+            self.root,
+            text="Сцена 1: Настройка аутентификации",
+            font=("Arial", 18, "bold"),
+            bg="#f0f8ff",
+            fg="#2c3e50"
+        ).pack(pady=20)
+
+        tk.Label(
+            self.root,
+            text="Выберите методы аутентификации для доступа к принтеру.",
+            font=("Arial", 12),
+            bg="#f0f8ff",
+            fg="#34495e",
+            wraplength=700,
+            justify="center"
+        ).pack(pady=10)
+
+        # Переменные для чекбоксов
+        self.auth_vars = {
+            "smartcard": tk.BooleanVar(),
+            "pin": tk.BooleanVar(),
+            "biometry": tk.BooleanVar(),
+            "mfa": tk.BooleanVar()
+        }
+
+        tk.Checkbutton(
+            self.root,
+            text="Смарт‑карта",
+            variable=self.auth_vars["smartcard"],
+            bg="#f0f8ff",
+            font=("Arial", 11)
+        ).pack(anchor="w", padx=100, pady=5)
+
+        tk.Checkbutton(
+            self.root,
+            text="PIN‑код (6+ цифр)",
+            variable=self.auth_vars["pin"],
+            bg="#f0f8ff",
+            font=("Arial", 11)
+        ).pack(anchor="w", padx=100, pady=5)
+
+        tk.Checkbutton(
+            self.root,
+            text="Биометрия (отпечаток)",
+            variable=self.auth_vars["biometry"],
+            bg="#f0f8ff",
+            font=("Arial", 11)
+        ).pack(anchor="w", padx=100, pady=5)
+
+        tk.Checkbutton(
+            self.root,
+            text="Многофакторная аутентификация (MFA)",
+            variable=self.auth_vars["mfa"],
+            bg="#f0f8ff",
+            font=("Arial", 11)
+        ).pack(anchor="w", padx=100, pady=5)
+
+        # Кнопка проверки
+        tk.Button(
+            self.root,
+            text="Применить настройки",
+            command=self.check_scene_1,
+            bg="#27ae60",
+            fg="white",
+            font=("Arial", 12),
+            padx=20
+        ).pack(pady=30)
+
+    def check_scene_1(self):
+        """Проверка условий сцены 1"""
+        selected = [
+            self.auth_vars["smartcard"].get(),
+            self.auth_vars["pin"].get(),
+            self.auth_vars["biometry"].get(),
+            self.auth_vars["mfa"].get()
+        ]
+
+        if sum(selected) >= 2 and self.auth_vars["mfa"].get():
+            self.score += 10
+            messagebox.showinfo("Успех", "Правильно! MFA + ещё один метод обеспечивают надёжную защиту.")
+            self.current_scene += 1
+            self.display_scene()
+        else:
+            messagebox.showwarning(
+                "Ошибка",
+                "Выберите минимум 2 метода, включая MFA."
+            )
+
+    def scene_2(self):
+        """Сцена 2: Контроль вывода на печать"""
+        tk.Label(
+            self.root,
+            text="Сцена 2: Настройка контроля печати",
+            font=("Arial", 18, "bold"),
+            bg="#f0f8ff",
+            fg="#2c3e50"
+        ).pack(pady=20)
+
+        tk.Label(
+            self.root,
+            text="Настройте правила вывода документов на принтер.",
+            font=("Arial", 12),
+            bg="#f0f8ff",
+            fg="#34495e",
+            wraplength=700,
+            justify="center"
+        ).pack(pady=10)
+
+        # Максимальное число копий
+        tk.Label(
+            self.root,
+            text="Максимальное число копий:",
+            font=("Arial", 11),
+            bg="#f0f8ff"
+        ).pack(anchor="w", padx=100, pady=5)
+
+        self.copies_var = tk.IntVar(value=1)
+        ttk.Spinbox(
+            self.root,
+            from_=1,
+            to=10,
+            textvariable=self.copies_var,
+            width=5
+        ).pack(anchor="w", padx=100, pady=5)
+
+        # Водяной знак
+        tk.Label(
+            self.root,
+            text="Добавить водяной знак:",
+            font=("Arial", 11),
+            bg="#f0f8ff"
+        ).pack(anchor="w", padx=100, pady=5)
+
+        self.watermark_var = tk.StringVar(value="Конфиденциально")
+        watermark_options = [
+            "Нет",
+            "Конфиденциально",
+            "ФИО пользователя",
+            "Дата и время",
+            "ID задания"
+        ]
+        ttk.Combobox(
+            self.root,
+            textvariable=self.watermark_var,
+            values=watermark_options,
+            state="readonly",
+            width=20
+        ).pack(anchor="w", padx=100, pady=5)