Введение В современном мире информационные технологии занимают важнейшее место в нашей жизни. Каждый год возникает все больше цифровых сервисов, требующих регистрации, а значит - учета личных данных пользователей. Это приводит, в свою очередь, к необходимости запоминать множество паролей и конфиденциальной информации о себе. В итоге пользователи часто пользуются одинаковыми или слишком простыми паролями, что существенно снижает уровень безопасности. Массово используемые решения для хранения паролей - онлайн- сервисы и менеджеры паролей - не удовлетворяют всех потребностей пользователей, например некоторые пользователи хотели бы иметь доступ к своим конфиденциальным данным через CLI менеджера паролей и секретов прямо в терминале. Сервисы для хранения личных данных требуют подключения к интернету, имеют платную подписку или просто вызывают сомнения по поводу конфиденциальности и безопасности данных. Это становится критично для тех, кто хочет полностью контролировать свои данные и хранить их локально, не отправляя посторонним. Актуальность работы продиктована необходимостью создания надежной и удобной системы для локального хранения паролей и секретных данных. Сейчас есть множество программных решений, но не все из них соответствуют потребностями индивидуального пользователя или обеспечивают достаточно низкий уровень защиты и простоты. Способы уже реализованы, но не все подходят под текущие задачи, а значит появляется необходимость разработке своей системы, под эти требования и защищающей данные пользователя. Цель курсовой работы - разработка и проектирование информационной системы локального хранения паролей и секретов. Изм Лист . № докум Подпись Дата КПК.09.02.07.001 - 05ПЗ Лист 0 Для достижения поставленной цели необходимо решить следующие задачи: Провести описание предметной области; Разработать программные модули; Изм Лист . Спроектировать модели баз данных; Провести тестирование и оценку работы системы. № докум Подпись Дата КПК.09.02.07.001 - 05ПЗ Лист 0 1 Описание предметной области В современной цифровой среде пользователи сталкиваются с серьезной проблемой управления множеством учетных данных без надежного локального инструмента. информации превращается информационной системы Без в процесс внедрения сохранения хаотичные записи специализированной конфиденциальной или использование одинаковых, уязвимых паролей, что снижает уровень безопасности. Использование сторонних облачных сервисов часто вызывает сомнения из-за рисков утечки, необходимости подключения к интернету и наличия платных подписок. Отсутствие удобного доступа к секретам напрямую через интерфейс командной строки (CLI) доставляет неудобства продвинутым пользователям. В результате возникает острая нехватка безопасного, независимого и полностью подконтрольного пользователю программного решения для локальной работы. Основной целью разрабатываемой информационной системы является обеспечение безопасного, локального и удобного хранения паролей и секретных данных пользователя без передачи их в сеть. Данная система необходима для централизованного управления учетными записями, генерации криптографически стойких паролей и быстрого доступа к ним в офлайн-режиме. Главными плюсами такого решения выступают полный контроль пользователя над своими данными, отсутствие зависимости от сторонних серверов и абонентской платы. Кроме того, внедрение CLIинтерфейса позволит легко интегрировать менеджер паролей в повседневную работу, обеспечивая высокую скорость взаимодействия с секретами прямо в терминале. Предметной областью исследования является процесс локального хранения, шифрования и управления конфиденциальной информацией индивидуального пользователя. Участники: Пользователь. Изм Лист . № докум Подпись Дата КПК.09.02.07.001 - 05ПЗ Лист 0 Объекты: Пароли, Секреты, Логины, Категории, База, Мастер-пароль. Примерные функциональные модули системы включают в себя: модуль авторизации (проверка мастер-пароля), модуль криптографии (надежное шифрование и дешифрование данных), модуль управления записями (создание, чтение, редактирование и удаление секретов), а также модуль интерфейса командной строки (CLI) для взаимодействия в терминале. Пример использования системы: пользователь запускает программу через терминал, вводит свой единственный мастер-пароль для расшифровки локальной базы данных. Затем он выбирает функцию добавления новой записи нового сервиса и сохраняет связку логин-пароль в нужную категорию. При необходимости авторизоваться на сайте или сервере, пользователь отправляет команду на поиск через CLI-интерфейс, копирует нужный секрет прямо в буфер обмен и безопасно завершает сеанс работы с локальной базой. На основе примера использования можно выделить следующие роли взаимодействия с информационной системой:Обычный пользователь: вносит и использует личные данные от социальных сетей, почты и сайтов, требуя надежного офлайн-доступа к своим паролям без отправки их посторонним лицам. Продвинутый пользователь: работает со сложными секретами (APIключами, токенами доступа), активно получая доступ к своим конфиденциальным данным через CLI менеджера паролей прямо в терминале для ускорения рабочих процессов. Изм Лист . № докум Подпись Дата КПК.09.02.07.001 - 05ПЗ Лист 0 2 Проектирование модели базы данных Для создания надежной информационной системы необходимо правильно выбрать способ хранения данных. Поскольку наш проект предполагает работу с конфиденциальной информацией, база данных должна обеспечивать надежность, поддержку транзакций и удобство интеграции с языком Python. В этом разделе мы рассмотрим три популярные СУБД: MySQL, PostgreSQL и SQLite, чтобы определить наиболее подходящую для нашего локального менеджера паролей. Первым вариантом является MySQL — одна из самых известных систем с открытым исходным кодом. К ее преимуществам можно отнести высокую скорость работы, бесплатность и огромное сообщество разработчиков. Однако для нашего проекта у MySQL есть критический недостаток: это клиент- серверная СУБД. Это означает, что для работы программы пользователю придется отдельно устанавливать и настраивать сервер базы данных, что лишает наше приложение портативности и простоты, необходимых для локального хранилища. Вторым вариантом мы рассмотрели PostgreSQL. Это мощная и объектно-реляционная СУБД, которая славится своей надежностью, строгим соблюдением стандартов и отличной поддержкой сложных транзакций. К плюсам можно отнести масштабируемость и продвинутую систему безопасности. Минусы для нашего случая такие же, как и у MySQL: PostgreSQL — это тяжеловесное решение, требующее отдельного администрирования. Использование такой системы для хранения личных паролей одного пользователя является избыточным и технически сложным. Третьим вариантом выступает SQLite. В отличие от предыдущих систем, SQLite — это встраиваемая СУБД, которая хранит всю базу данных в одном обычном файле на диске. Главные преимущества здесь — полное отсутствие настройки), высокая скорость работы с локальными данными и встроенная поддержка в стандартную библиотеку Python. Основным минусом Изм Лист . № докум Подпись Дата КПК.09.02.07.001 - 05ПЗ Лист 0 SQLite считается плохая работа при огромном количестве одновременных записей от разных пользователей, но для нашей задачи (индивидуальное использование) этот недостаток совершенно не важен. В итоге, проанализировав все варианты, для разработки был выбран SQLite. Эта СУБД идеально соответствует теме курсовой работы "локальное хранение". Нам не нужно заставлять пользователя устанавливать серверные компоненты — достаточно одного файла базы данных, который легко переносить и резервировать. Простота настройки в сочетании с надежностью делает SQLite лучшим решением для создания компактного и быстрого менеджера паролей. Рисунок 1– ER – диаграмма Сущность: Users user_id - INT (PK) username - VARCHAR(255) master_password_hash - VARCHAR(255) encryption_salt - VARCHAR(255) created_at - TIMESTAMP Сущность: Categories category_id - INT (PK) Изм Лист . № докум Подпись Дата КПК.09.02.07.001 - 05ПЗ Лист 0 user_id - INT (FK) name - VARCHAR(255) description - TEXT Сущность: Secrets secret_id - INT (PK) user_id - INT (FK) category_id - INT (FK) title - VARCHAR(255) login - VARCHAR(255) password_hash - VARCHAR(255) website_url - VARCHAR(255) notes - TEXT created_at - TIMESTAMP updated_at - TIMESTAMP Сущность: SecretCategories secret_categories_id - INT (PK) category_id - INT (FK) secret_id - INT (FK) Сущность: AccessLogs log_id - INT (PK) secret_id - INT (FK) action - VARCHAR(255) accessed_at - TIMESTAMP Сущность: PasswordHistory history_id - INT (PK) secret_id - INT (FK) changed_at - TIMESTAMP Изм Лист . № докум Подпись Дата КПК.09.02.07.001 - 05ПЗ Лист 0 3 Разработка структуры и пользовательского интерфейса системы При разработке любой информационной системы важно выбрать удобный способ взаимодействия пользователя с программой. Поскольку наш проект направлен на локальную работу через терминал, нам нужно выбрать подходящую библиотеку для создания интерфейса командной строки (CLI). В этом разделе я рассмотрю три популярных инструмента: стандартный модуль argparse, современную библиотеку Typer и функциональный фреймворк Click, чтобы определить лучший вариант для реализации проекта. Первый вариант — это стандартная библиотека argparse, которая встроена в Python по умолчанию. Главный плюс этого модуля в том, что его не нужно отдельно устанавливать, и программа будет работать на любом компьютере, где есть Python. Однако у argparse есть существенные минусы: код получается очень длинным и запутанным, особенно когда команд становится много. Для новичка такая структура выглядит громоздко, а реализация простых вещей вроде скрытого ввода пароля требует написания дополнительных функций. Второй инструмент — библиотека Typer. Это современный фреймворк, который делает код очень коротким и красивым за счет использования подсказок типов данных. Плюсы Typer в том, что он сам создает меню помощи и работает очень быстро. Но есть и минусы: для работы Typer нужно устанавливать много зависимостей, а сам фреймворк требует хорошего знания современных стандаsртов Python. Также он является надстройкой над другими библиотеками, что усложняет архитектуру. Третий вариант — фреймворк Click. Это золотая середина для создания консольных программ. Его главные плюсы заключаются в использовании декораторов, которые позволяют быстро привязать функции программы к командам в терминале. В Click уже встроены отличные инструменты для работы: он умеет сам запрашивать подтверждение пароля, скрывать символы Изм Лист . № докум Подпись Дата КПК.09.02.07.001 - 05ПЗ Лист 0 при вводе и выводить понятные подсказки. Единственным небольшим минусом можно считать необходимость установки внешней библиотеки через pip, но это полностью оправдывается удобством разработки. Изучив все три варианта, для своей курсовой работы я выбрал фреймворк Click. Он проще в освоении, чем Typer, но при этом гораздо мощнее и удобнее, чем стандартный argparse. Благодаря встроенной функции hide_input=True, Click идеально подходит для нашего менеджера паролей, так как позволяет безопасно вводить мастер-пароль, не показывая его на экране. Это делает итоговую программу надежной и удобной в использовании. В начале исходного кода системы управления паролями (файл main.py, строки 1-34) осуществляется подключение всех необходимых модулей для обеспечения работы приложения. Сначала импортируются стандартные библиотеки Python: os для работы с файловой системой и правами доступа, sys для управления выполнением программы, json для хранения данных сессии, time для реализации таймера бездействия, getpass для безопасного ввода паролей без эхо-вывода, threading для организации фонового таймера сессии и typing для аннотации типов переменных. Затем подключается сторонняя библиотека click для создания интуитивно понятного командного интерфейса. После этого импортируются собственные модули проекта: из файла database.py импортируются все функции для взаимодействия с SQLite базой данных (инициализация БД, CRUD-операции над секретами и категориями, ведение логов доступа и истории паролей), из crypto.py - функции симметричного шифрования данных (AES), хеширования паролей и проверки подлинности, из auth.py - функции регистрации и аутентификации пользователей. Изм Лист . № докум Подпись Дата КПК.09.02.07.001 - 05ПЗ Лист 0 Рисунок 2 – Создание объекта Fernet Назначение: Создание криптографического ключа из пароля и соли через PBKDF2 с 480,000 итерациями. Использует алгоритм SHA-256 для деривации ключа длиной 32 байта. Рисунок 3 – Хэширование мастер-ключа Назначение: Преобразование пароля в необратимый хеш SHA-256 с добавлением соли для защиты от rainbow-таблиц. Р и су Назначение: ок 4 – Верификация пароля через сравнения хэшей Безопасное сравнение выполнения через hmac.compare_digest(). Изм Лист . № докум Подпись Дата хешей с постоянным КПК.09.02.07.001 - 05ПЗ н временем Лист 0 Рисунок 5 – Шифрование данных Назначение: Симметричное шифрование данных через Fernet (AES в режиме CBC с HMAC-проверкой). Рисунок 6 – Загрузка сессии пользовател Назначение: Восстановление пользовательской сессии при запуске приложения из файла session.json. Создает объект AuthUser с сохраненными параметрами. Изм Лист . № докум Подпись Дата КПК.09.02.07.001 - 05ПЗ Лист 0 Рисунок 7 – Проверка авторизации Назначение: Проверка наличия активной сессии и безопасный ввод мастер-пароля через getpass.getpass() (без эхо-вывода). Изм Лист . № докум Подпись Дата КПК.09.02.07.001 - 05ПЗ Лист 0 4 Тестирование и оценка работы системы Тестирование программного обеспечения является важнейшим этапом жизненного цикла разработки, направленным на проверку соответствия созданного продукта заявленным требованиям и выявление возможных дефектов. В рамках данного пункта проводится оценка работоспособности, надежности и безопасности разработанной информационной системы локального хранения паролей и секретов, чтобы подтвердить ее способность обеспечивать независимое хранение данных без передачи в сеть. В ходе тестирования основной упор будет сделан на проверку ключевого функционала, обеспечивающего жизненный цикл работы с конфиденциальной информацией. В частности, мы будем тестировать механизм авторизации пользователя по единственному мастер-паролю , процесс добавления нового секрета в базу , а также функционал списка и безопасного копирования данных в буфер обмена через интерфейс командной строки (CLI). Таблица 1 – Проверка инициализации базы данных Test Case # Test#1 Приоритет тестирования Высокий Заголовок/название теста Инициализация базы данных Краткое изложение теста Пользователь должен успешно создаёт базу данных 1. Запустить программу через терминал с аргументом init Этапы теста 2. Проверить наличие БД, использовав любую команду Ожидаемый результат База данных успешно создана и готова к работе Фактический результат База данных создана, программа готова для дальнейшей работы Статус Зачет Предварительное условие Система установлена, локальная база данных отсувствует База данных корректнаяя, пользователь может выполнять Постусловие операции, связанные с ней Примечания/комментарии Изм Лист . № докум Подпись Дата Ввод пароля в терминале должен быть скрыт (символы не отображаются на экране) КПК.09.02.07.001 - 05ПЗ Лист 0 Результат первого тест-кейса показал, что создание базы данных проходит корректно и она верно функционирует с методами программы. Это показывает гибкость управления своими секретами. Таблица 2 – Проверка авторизации и расшифровки базы данных Test Case # Test#2 Приоритет тестирования Высокий Заголовок/название теста Авторизация по мастер-паролю Краткое изложение теста Пользователь должен успешно пройти авторизацию и получить сессию для дальнейшней работы с базой данных 1. Запустить программу через терминал с аргументом login 2. Ввести логин Этапы теста 3. Ввести мастер-пароль 4. Нажать Enter Мастер-пароль: WatafaShmele67 Тестовые данные Введенный мастер-пароль проверен, сессия успешно Ожидаемый результат создана, выведено сообщение о готовности к работе Фактический результат Сессия создана, программа готова для дальнейшей работы Статус Зачет Предварительное условие операции с паролями Примечания/комментарии № докум сессия отсувствует, мастер-пароль был задан ранее Рабочая сессия активна, пользователь может выполнять Постусловие Изм Лист . Система установлена, локальная база данных создана, Подпись Дата Ввод пароля в терминале должен быть скрыт (символы не отображаются на экране) КПК.09.02.07.001 - 05ПЗ Лист 0 По итогам выполнения второго тест-кейса можно констатировать, что модуль авторизации и криптографии функционирует корректно. Система надежно защищает хранилище и корректно обрабатывает правильный мастер-пароль, предоставляя доступ к данным. Таблица 3 – Проверка добавления нового секрета Test Case # Test#3 Приоритет тестирования Высокий Заголовок/название теста Сохранение новой записи в базу Краткое изложение теста Пользователь должен успешно добавить новую связку логин-пароль для стороннего сервиса 1. Ввести команду добавления записи 2. Указать название сервиса 3. Ввести логин Этапы теста 4. Ввести пароль 5. Подтвердить сохранение Название: GitHub Логин: student Тестовые данные Пароль: ArmsSda Новая запись зашифрована и добавлена в локальную базу Ожидаемый результат данных, выведено уведомление об успешном сохранении Фактический результат Запись добавлена в базу данных, данные зашифрованы Статус Зачет Предварительное условие Пользователь успешно авторизован в системе и имеет активную сессию (Test#1 пройден) В локальной БД появилась новая структура с данными Постусловие пользователя Примечания/комментарии - Результат третьего тест-кейса показал, что модуль управления записями корректно обрабатывает пользовательский ввод и надежно Изм Лист . № докум Подпись Дата КПК.09.02.07.001 - 05ПЗ Лист 0 сохраняет новые секреты. Запись успешно интегрируется в общую структуру зашифрованного файла. Таблица 4 – Проверка извлечения данных через CLI Test Case # Test#4 Приоритет тестирования Высокий Заголовок/название теста Поиск и копирование пароля Краткое изложение теста Пользователь должен найти нужный секрет и скопировать его напрямую в буфер обмена 1. Ввести команду просмотра списка секретов 2. Выбрать нужную запись из предложенного списка Этапы теста 3. Выбрать какую информацию надо сохранить в буфер Поисковый запрос: GitHub Тестовые данные Система находит требуемую запись и скрытно помещает пароль в буфер обмена ОС пользователя без вывода Ожидаемый результат пароля в консоль Фактический результат Пароль скопирован в буфер обмена, в терминале появилось сообщение: Пароль от GitHub скопирован Зачет Статус Предварительное условие Пользователь авторизован, запись GitHub существует в базе Буфер обмена содержит пароль, система готова к новым Постусловие командам Примечания/комментарии - Выполнение четвертого тест-кейса подтвердило удобство и надежность использования CLI-интерфейса для взаимодействия с программой. Процесс извлечения данных происходит быстро, а копирование секрета без визуального отображения на экране минимизирует риск его компрометации. По результатам проведенного тестирования можно сделать вывод, что все ключевые функции локальной информационной системы (авторизация по мастер-паролю, защищенное добавление записей, копирование секретов Изм Лист . № докум Подпись Дата КПК.09.02.07.001 - 05ПЗ Лист 0 через командную строку) работают стабильно и корректно. В ходе тестирования были выявлены и оперативно устранены некоторые незначительные ошибки, такие как отсутствие предупреждения при вводе слишком короткого логина. Все обнаруженные проблемы были успешно исправлены до выпуска финальной версии системы. Изм Лист . № докум Подпись Дата КПК.09.02.07.001 - 05ПЗ Лист 0 Заключение В ходе выполнения курсовой работы была успешно спроектирована и разработана информационная система локального хранения паролей и секретов. Актуальность данного проекта подтверждается возрастающей потребностью пользователей в безопасном, независимом и полностью подконтрольном инструменте для управления конфиденциальными данными без использования сторонних облачных сервисов. В процессе работы были решены все поставленные задачи. На этапе анализа предметной области были определены основные требования к системе и сценарии взаимодействия пользователя с ней. При проектировании базы данных был сделан обоснованный выбор в пользу встраиваемой СУБД SQLite, которая идеально подошла для концепции локального хранения информации в едином файле. Программная реализация системы была выполнена на языке Python. Использование современных библиотек, таких как cryptography, позволило обеспечить высокий уровень безопасности: мастер-пароль не хранится в открытом виде (используется хеширование с солью), а все пользовательские секреты надежно шифруются симметричным алгоритмом. Для обеспечения удобства работы был разработан лаконичный интерфейс командной строки (CLI) на базе фреймворка Click, что позволило пользователю быстро находить и безопасно копировать нужные пароли прямо в терминале. Проведенное тестирование подтвердило корректную работу всех ключевых функциональных модулей: инициализации базы данных, авторизации, добавления новых записей и извлечения данных в буфер обмена. Выявленные в процессе разработки недочеты были успешно устранены. Главная цель курсовой работы достигнута. Разработанный локальный менеджер паролей является стабильным и готовым к использованию программным продуктом. В дальнейшем функционал системы может быть расширен, например, за счет добавления модуля автоматического резервного Изм Лист . № докум Подпись Дата КПК.09.02.07.001 - 05ПЗ Лист 0 копирования зашифрованной базы данных одноразовых кодов (2FA) для сторонних сервисов. Изм Лист . № докум Подпись Дата и внедрения КПК.09.02.07.001 - 05ПЗ генератора Лист 0 Библиография 1 Варфоломеева, А. О. Информационные системы предприятия: учебное пособие / А. О. Варфоломеева, А. В. Коряковский, В. П. Романов. – 2-е изд., перераб. и доп. – Москва: ИНФРА-М, 2023. – 330 с. – (Среднее профессиональное образование). – ISBN 978-5-16-014729-1. – Текст: электронный. – URL: https://znanium.com/catalog/product/1964965 2 Васильков, А. В. Безопасность и управление доступом в информационных системах: учебное пособие / А. В. Васильков, И. А. Васильков. – Москва: ФОРУМ: ИНФРА-М, 2022. – 368 с. – (Среднее профессиональное образование). – ISBN 978-5-91134-360-6. – Текст: электронный. – URL: https://znanium.com/catalog/product/1836631 3 Гагарина, Л. Г. Разработка и эксплуатация автоматизированных информационных систем: учебное пособие / Л. Г. Гагарина. – Москва: ФОРУМ: ИНФРА-М, 2021. – 384 с. – (Среднее профессиональное образование). – ISBN 978-5-8199-0735-1. – Текст: электронный. – URL: https://znanium.com/catalog/product/1214882 4 Галиновский, А. Л. Информационные системы управления качеством в автоматизированных и автоматических производствах: учебное пособие / А. Л. Галиновский, С. В. Бочкарев, И. Н. Кравченко [и др.]; под ред. А. Л. Галиновского. – Москва: ИНФРА-М, 2020. – 284 с. – (Среднее профессиональное образование). – ISBN 978-5-16-015662-0. – Текст: электронный. – URL: https://znanium.com/catalog/product/1045095 5 Голицына, О. Л. Базы данных: учебное пособие / О. Л. Голицына, Н. В. Максимов, И. И. Попов. – 4-е изд., перераб. и доп. – Москва: ФОРУМ: ИНФРА-М, 2020. – 400 с. – (Среднее профессиональное образование). – ISBN 978-5-00091-601-8. – Текст: https://znanium.com/catalog/product/1091314 электронный. – URL: 6 Емельянова, Н. З. Устройство и функционирование информационных систем: учебное пособие / Н. З. Емельянова, Т. Л. Партыка, И. И. Попов. – 2Изм Лист . № докум Подпись Дата КПК.09.02.07.001 - 05ПЗ Лист 0 е изд., перераб. и доп. – Москва: ФОРУМ, 2021. – 448 с.: ил. – (Профессиональное образование). – ISBN 978-5-91134-662-1. – Текст: электронный. – URL: https://znanium.com/catalog/product/1236301 7 Жуков, Р. А. Язык программирования Python. Практикум: учебное пособие / Р. А. Жуков. – Москва: ИНФРА-М, 2023. – 216 с. + Доп. материалы [Электронный ресурс]. – (Среднее профессиональное образование). – ISBN 978-5-16-015638-5. – Текст: https://znanium.com/catalog/product/1916202 электронный. – URL: 8 Заботина, Н. Н. Методы и средства проектирования информационных систем: учебное пособие / Н. Н. Заботина. – Москва: ИНФРА-М, 2023. – 331 с. + Доп. материалы [Электронный ресурс]. – (Среднее профессиональное образование). – ISBN 978-5-16-015597-5. – Текст: электронный. – URL: https://znanium.com/catalog/product/1902833 9 Затонский, А. В. Информационные технологии: разработка информационных моделей и систем: учебное пособие / А. В. Затонский. – Москва: РИОР: ИНФРА-М, 2023. – 344 с. + Доп. материалы [Электронный ресурс]. – (Среднее профессиональное https://doi.org/10.12737/15092. – ISBN образование). 978-5-369-01823-1. электронный. – URL: https://znanium.com/catalog/product/1902847 – – DOI: Текст: 10 Исаев, Г. Н. Управление качеством информационных систем: учебное пособие / Г. Н. Исаев. – Москва: ИНФРА-М, 2021. – 248 с. – (Среднее профессиональное образование). – ISBN 978-5-16-015650-7. – Текст: электронный. – https://znanium.com/catalog/product/1189952/catalog/product/1189952 URL: 11 Официальная документация библиотеки Cryptography [Электронный ресурс] / Python Cryptographic Authority. – Текст: электронный. – URL: https://cryptography.io/en/latest/ (дата обращения: 20.04.2026). Изм Лист . № докум Подпись Дата КПК.09.02.07.001 - 05ПЗ Лист 0 12 Официальная документация по языку программирования Python 3 [Электронный ресурс] / Python Software Foundation. – Текст: электронный. – URL: https://docs.python.org/3/ (дата обращения: 19.04.2026). 13 Официальная документация СУБД SQLite [Электронный ресурс] / SQLite Consortium. – Текст: электронный. https://www.sqlite.org/docs.html (дата обращения: 28.04.2026). – URL: 14 Официальная документация фреймворка Click [Электронный ресурс] / Pallets Projects. – Текст: электронный. – URL: https://click.palletsprojects.com/ (дата обращения: 21.04.2026). Изм Лист . № докум Подпись Дата КПК.09.02.07.001 - 05ПЗ Лист 0
0
You can add this document to your study collection(s)
Sign in Available only to authorized usersYou can add this document to your saved list
Sign in Available only to authorized users(For complaints, use another form )