1.1 Техническое задание
ГОСТ 19.201-78
1.1.1 Введение
В современных организациях и предприятиях значительная часть информационных процессов основывается на хранении и обработке больших объемов данных. Для обеспечения стабильной работы корпоративных информационных систем необходимо создавать серверные модули, обеспечивающие надежное хранение, обработку и предоставление данных другим компонентам системы.
Разрабатываемый программный продукт «База данных документов предприятия» предназначен для формирования основы серверной части корпоративной системы, обеспечивающей хранение структурированной информации, возможность поиска по данным и предоставление интерфейса взаимодействия с внешними приложениями.
1.1.2 Основания для разработки
Основанием для разработки является задание на курсовую работу по дисциплине «Технологии программирования», выданное на кафедре Прикладная математика ИЦТиЕН ФГБОУ ВО
«ТГАСУ» в 2026 году.
Наименование темы разработки: «База данных документов предприятия».
1.1.3 Функциональное назначение программы
Программный продукт должен обеспечивать хранение и обработку данных, необходимых
для работы серверного модуля. В рамках функционального назначения программа должна предоставлять следующие возможности:
- создание и ведение базы данных;
- добавление, изменение и удаление записей;
- хранение данных пользователей и прав доступа;
- хранение данных о документах, файлах и других объектах;
- выполнение поиска по сохраненным данным;
- предоставление интерфейса взаимодействия для внешних компонентов системы.
4
1.1.4 Эксплуатационное назначение программы
Программный продукт предназначен для эксплуатации в составе серверной инфраструктуры организации. Основное назначение заключается в обеспечении централизованного хранения
информации и возможности доступа к ней со стороны серверных приложений.
Программа может использоваться как основа для корпоративного поиска, индексирования
и дальнейшей обработки данных. Использование модуля позволит систематизировать информацию и ускорить выполнение операций поиска и обработки.
1.1.5 Требования к функциональным характеристикам
Входная информация должна быть представлена в виде данных, поступающих от пользователя с административными правами. Ввод данных должен поддерживать добавление новых объектов (документов формата .docx, .pdf), а также внесение изменений.
Программа должна обеспечивать выполнение следующих функций:
- создание структуры базы данных;
- хранение таблиц пользователей, документов, метаданных и логов;
- выполнение операций CRUD (Create, Read, Update, Delete);
- поиск по ключевым параметрам;
- ведение журнала изменений и событий.
Выходная информация должна представляться в виде результатов запросов, отчетов или
сообщений о выполнении операций.
1.1.6 Требования к надежности
Программа должна обеспечивать устойчивую работу при стандартных условиях эксплуатации. В случае некорректных входных данных программа должна выдавать сообщение об ошибке.
При сбоях соединения с базой данных должна выполняться повторная попытка подключения либо выдача сообщения о невозможности выполнения операции.
При ошибках аппаратного обеспечения восстановление работоспособности возлагается на
операционную систему и системного администратора.
Для предотвращения потери данных рекомендуется использование резервного копирования
базы данных.
1.1.7 Условия эксплуатации
Программный продукт должен эксплуатироваться на серверном компьютере. Условия эксплуатации должны соответствовать типовым условиям эксплуатации серверных систем.
Пользователь (администратор) должен обладать базовыми навыками работы с серверной
операционной системой и системой управления базами данных.
1.1.8 Требования к составу и параметрам технических средств
5
Для корректной работы программного продукта требуется следующая конфигурация оборудования:
- процессор: Intel Core i3 / AMD Ryzen 3 или выше;
- оперативная память: не менее 8 ГБ;
- свободное место на диске: не менее 5 ГБ (с учетом роста базы данных);
- сетевое подключение для доступа клиентских компонентов.
Допускается размещение программного продукта на виртуальном сервере.
1.1.9 Требования к информационной и программной совместимости
Язык реализации серверной части: C# (.NET 8). Взаимодействие программы с базой данных
обеспечивается с использованием провайдера Npgsql (ADO.NET для PostgreSQL) и паттерна репозиторий для доступа к данным.
1.1.10 Требования к программной документации
Программа должна сопровождаться следующими документами:
- руководство пользователя (администратора);
- описание структуры базы данных;
- инструкция по установке и настройке;
- описание функциональных возможностей программы.
Документация должна быть оформлена в текстовом виде и доступна для просмотра в стандартных редакторах.
1.1.11 Технико-экономические показатели
Использование программного продукта позволит повысить эффективность хранения и поиска информации.
Ожидаемые результаты внедрения:
- уменьшение времени поиска информации;
- снижение вероятности потери данных;
- повышение надежности хранения и обработки информации.
Затраты на разработку включают затраты времени разработчика и вычислительные ресурсы.
6
1.1.12 Стадии и этапы разработки
Разработка программного продукта включает следующие стадии:
- анализ предметной области и формирование требований;
- проектирование структуры базы данных;
- наполнение базы тестовыми данными;
- реализация программного модуля и тестирование;
- отладка и устранение ошибок;
- подготовка документации.
Сроки выполнения разработки: март 2026 года.
1.1.13 Порядок контроля и приемки
Контроль работоспособности программы осуществляется путем тестирования функциональных возможностей:
- проверка создания базы данных;
- проверка добавления и удаления данных;
- проверка корректности поиска;
- проверка работы механизма авторизации (выбор роли пользователя).
Приемка программного продукта проводится по результатам тестирования и проверки соответствия требованиям настоящего технического задания.
1.3 Спецификация
ГОСТ 19.001-77
Настоящая спецификация определяет состав программных документов и компонентов системы «База данных документов предприятия».
Обозначение документа: А.В.00001-01 01.
Таблица 1 – Спецификация
Обозначение Наименование Примечание
Документация
А.В.00001-01 01-ЛУ
СИСТЕМА ХРАНЕНИЯ ДОКУМЕНТОВ
Спецификация. Лист утверждения
А.В.00001-01 12 01
СИСТЕМА ХРАНЕНИЯ ДОКУМЕНТОВ
Текст программы
А.В.00001-01 12 01-ЛУ
СИСТЕМА ХРАНЕНИЯ ДОКУМЕНТОВ
Текст программы. Лист утверждения
7
Обозначение Наименование Примечание
А.В.00001-01 13 01
СИСТЕМА ХРАНЕНИЯ ДОКУМЕНТОВ
Описание программы
А.В.00001-01 13 01-ЛУ
СИСТЕМА ХРАНЕНИЯ ДОКУМЕНТОВ
Описание программы. Лист утверждения
А.В.00001-01 20 01
СИСТЕМА ХРАНЕНИЯ ДОКУМЕНТОВ
Ведомость эксплуатационных документов
А.В.00001-01 20 01-ЛУ
СИСТЕМА ХРАНЕНИЯ ДОКУМЕНТОВ
Ведомость эксплуатационных документов. Лист утверждения
А.В.00001-01 30 01
СИСТЕМА ХРАНЕНИЯ ДОКУМЕНТОВ
Формуляр
А.В.00001-01 30 01-ЛУ
СИСТЕМА ХРАНЕНИЯ ДОКУМЕНТОВ
Формуляр. Лист утверждения
А.В.00001-01 31 01
СИСТЕМА ХРАНЕНИЯ ДОКУМЕНТОВ
Описание применения
А.В.00001-01 31 01-ЛУ
СИСТЕМА ХРАНЕНИЯ ДОКУМЕНТОВ
Описание применения. Лист утверждения
А.В.00001-01 32 01
СИСТЕМА ХРАНЕНИЯ ДОКУМЕНТОВ
Руководство системного программиста
А.В.00001-01 32 01-ЛУ
СИСТЕМА ХРАНЕНИЯ ДОКУМЕНТОВ
Руководство системного программиста.
Лист утверждения
А.В.00001-01 33 01
СИСТЕМА ХРАНЕНИЯ ДОКУМЕНТОВ
Руководство программиста
А.В.00001-01 33 01-ЛУ СИСТЕМА ХРАНЕНИЯ ДОКУМЕНТОВ
8
Обозначение Наименование Примечание
Руководство программиста. Лист
утверждения
А.В.00001-01 34 01
СИСТЕМА ХРАНЕНИЯ ДОКУМЕНТОВ
Руководство оператора
А.В.00001-01 34 01-ЛУ
СИСТЕМА ХРАНЕНИЯ ДОКУМЕНТОВ
Руководство оператора. Лист утверждения
А.В.00001-01 51 01
СИСТЕМА ХРАНЕНИЯ ДОКУМЕНТОВ
Программа и методика испытаний
А.В.00001-01 51 01-ЛУ
СИСТЕМА ХРАНЕНИЯ ДОКУМЕНТОВ
Программа и методика испытаний.
Лист утверждения
А.В.00001-01 81 01
СИСТЕМА ХРАНЕНИЯ ДОКУМЕНТОВ
Пояснительная записка
А.В.00001-01 81 01-ЛУ
СИСТЕМА ХРАНЕНИЯ ДОКУМЕНТОВ
Пояснительная записка. Лист утверждения
Компоненты
Модули (Models)
User Модель данных пользователя
Document Модель данных документа
DocumentType Модель данных типа документа
Permission Модель данных прав доступа
Log Модель данных журнала
событий
Репозитории (Repositories)
9
Обозначение Наименование Примечание
IUserRepository Интерфейс репозитория
пользователей
UserRepository Репозиторий пользователей
IDocumentRepository Интерфейс репозитория документов
DocumentRepository Репозиторий документов
IDocumentTypeRepository Интерфейс репозитория типов документов
DocumentTypeRepository Репозиторий типов документов
Сервисы (Services)
IAuthService Интерфейс сервиса авторизации
AuthService Сервис авторизации
IDatabaseService Интерфейс сервиса работы с
БД
DatabaseService Сервис работы с БД
ILogService Интерфейс сервиса журналирования
LogService Сервис журналирования
DocumentService Сервис управления документами
Утилиты (Utils)
DatabaseInitializer Модуль инициализации базы данных
FileHelper Модуль работы с локальными файлами
SftpFileHelper Модуль работы с SFTPсервером
Главный модуль
10
Обозначение Наименование Примечание
Program
Главный модуль программы
(точка входа, консольный
интерфейс)
Конфигурация
appsettings.json Файл конфигурации (БД,
SFTP)
11
Утвержден
RU.02069295.00001-01 01 01-1-РП
Разработка базы данных документов предприятия
Загрузчик
Техническое задание
А.В. 00001-01 33 01
2026
Подп. И дата Инв.№ дубл. Взам. Инв. № Подп. И дата Инв.№подп.
12
СОГЛАСОВАНО УТВЕРЖДАЮ
Петрушкина Т.А. Онопенко Г.А.
Личная
подпись
Расшифровка
подписи
Личная
подпись
Расшифровка
подписи
Разработка базы данных документов предприятия
Загрузчик
Руководство программиста
А.В. 00001-01 33 01
Согласовано Представитель
предприятия разработчика
Петрушкина Т.А. Онопенко Г.А.
Личная
подпись
Расшифровка
подписи
Личная
подпись
Расшифровка
подписи
Пустогвар В.Д.
Личная
подпись
Расшифровка
Подписи
Лисовой В.А.
Личная
подпись
Расшифровка
Подписи
2026
Подп. И дата Инв.№ дубл. Взам. Инв. № Подп. И дата Инв.№подп.
13
2. Изготовление программного обеспечения
2.1 Программа и методика испытаний
ГОСТ 19.301-79
2.1.1 Объект испытаний
Наименование: «База данных документов предприятия».
Программа предназначена для автоматизации процессов хранения, поиска, редактирования
и удаления электронных документов с возможностью разграничения прав доступа пользователей.
Областью применения программы являются малые и средние организации, нуждающиеся в упорядоченном ведении электронного документооборота и обеспечении защиты информации от несанкционированного доступа.
2.1.2 Цель испытаний
Целью проведения испытаний является проверка соответствия программы требованиям
технического задания, а именно:
– проверка функционирования авторизации пользователей;
– проверка выполнения операций CRUD (Create, Read, Update, Delete) с документами;
– проверка работы механизма поиска документов по различным критериям;
– проверка системы разграничения прав доступа;
– проверка журналирования действий пользователей;
– проверка обработки некорректных вводимых данных;
– проверка устойчивости программы к ошибочным действиям пользователя.
2.1.3 Требования к программе
Испытуемая программа должна удовлетворять функциональным требованиям, заданным в
техническом задании ДСХД.001 ТЗ. Перечень требований, подлежащих проверке в процессе испытаний, с указанием их описания приведен в таблице 1.
Таблица 1 - Требование к программе
Требование Описание
Добавление документа С сохранением файла и метаданных
Просмотр списка документов Отображение всех документов
Поиск документов По названию, автору, ключевым словам, типу, дате
Редактирование метаданных Изменение метаданных
Удаление документов Логическое удаление
Авторизация пользователей Вход по логину/паролю, проверка прав
14
Журналирование Запись действий в таблицу logs
2.1.5 Технические средства, используемые во время испытаний
Испытания программного продукта проводились на серверной рабочей станции со следующими техническими характеристиками, обеспечивающими стабильную работу системы управления базами данных и серверного модуля. Конфигурация оборудования соответствует минимальным требованиям, указанным в техническом задании, и позволяет выполнять все необходимые операции по тестированию функциональных возможностей программы. Состав технических
средств, задействованных в процессе испытаний, представлен в таблице 2.
Таблица 2 - Технические средства
Компонент Характеристика
Процессор Intel Core i5-1135G7 (2.4 ГГц)
Оперативная память 8 ГБ
Дисковое пространство 100 ГБ свободного места
Монитор Разрешение 1920×1080
Операционная система Windows 10 (64-bit)
Сетевое оборудование Доступ в интернет (при работе с облачной БД)
2.1.5 Программные средства, используемые во время испытаний
Для проведения испытаний программного продукта использовалось следующее программное обеспечение, обеспечивающее функционирование серверного модуля, работу с базой данных
и возможность анализа результатов тестирования. Основным компонентом является среда исполнения .NET Runtime, необходимая для запуска программы, разработанной на платформе .NET 8. В
качестве системы управления базами данных используется PostgreSQL, который может быть развернут как локально, так и на удаленном сервере. Дополнительные средства, такие как pgAdmin и
Visual Studio Code, применялись для администрирования базы данных и оперативного редактирования конфигурационных файлов в процессе отладки.
Перечень программных средств, задействованных в ходе испытаний, приведен в таблице 3.
Таблица 3 – Программные средства
Компонент Назначение Версия
.NET Runtime Исполнение программы 8.0
PostgreSQL Сервер базы данных (опционально) 15.x
pgAdmin Управление БД (опционально) 4.x
Visual Studio Code Редактирование кода (опционально) Любая
15
2.1.6 Методы испытаний
Испытания программного продукта проводятся методом «черного ящика» на основе функциональных требований, заданных в техническом задании.
Каждый метод испытаний включает указание цели, методики проведения и таблицу с результатами тестирования.
2.1.6.1 Тестирование авторизации
Цель: Проверка корректности работы механизма аутентификации и авторизации пользователей.
Методика: Последовательный ввод различных комбинаций логинов и паролей.
Таблица 4 – Работа механизма аутентификации
№ Действие Ожидаемый результат Фактический результат
Статус
1.1 Ввод admin / admin123 Успешный вход, приветствие пользователя
Успешный вход,
отображение приветствия
Выполнено
1.2 Ввод admin / wrong
Отказ в доступе, сообщение «Неверный пароль»
Сообщение «Неверный пароль» Выполнено
1.3 Ввод unknown / any
Отказ в доступе, сообщение «Пользователь
не найден»
Сообщение
«Пользователь не
найден»
Выполнено
1.4 Пустой логин Запрос повторного
ввода
Повторный ввод,
сообщение об
ошибке
Выполнено
1.5 Пустой пароль Запрос повторного
ввода
Повторный ввод,
сообщение об
ошибке
Выполнено
2.1.6.2 Тестирование добавления документа
Цель: Проверка корректности сохранения документов и их метаданных.
Методика: Добавление документов с различными параметрами.
Таблица 5 – Корректность сохранения документов
№ Действие Ожидаемый результат
Фактический результат
Статус
2.1
Ввод корректных
данных (название,
файл .pdf, автор,
ключевые слова)
Документ сохранён,
файл скопирован в
папку UploadedFiles
Документ сохранён,
файл скопирован Выполнено
2.2 Пустое название
Сообщение об
ошибке, повтор ввода
Повтор ввода, сообщение об ошибке Выполнено
16
2.3 Файл без расширения
Сообщение «У файла должно быть
расширение»
Сообщение об
ошибке Выполнено
2.4 Недопустимый тип
(.exe)
Сообщение о недопустимом типе
Сообщение об
ошибке Выполнено
2.5 Несуществующий
путь к файлу
Сообщение «Файл
не найден»
Сообщение об
ошибке Выполнено
2.6 Добавление без прав
(guest) Отказ в доступе Сообщение «Нет
прав на добавление» Выполнено
2.1.6.3 Тестирование просмотра списка документов
Цель: Проверка корректности отображения списка документов.
Методика: Выбор пункта меню 1 при различных состояниях базы данных.
Таблица 6 – Отображение списка документов
№ Действие Ожидаемый результат Фактический результат
Статус
3.1 Выбор пункта 1 (при
наличии документов)
Отображение таблицы документов с колонками ID,
Название, Автор, Дата,
Тип
Таблица документов отображена
корректно
Выполнено
3.2
Выбор пункта 1 (при
отсутствии документов)
Сообщение «Документов
нет»
Сообщение «Документов нет»
Выполнено
2.1.6.4 Тестирование поиска документов
Цель: Проверка корректности работы механизма поиска.
Методика: Поиск документов по различным критериям.
Таблица 7 – Проверка механизма поиска
№ Действие Ожидаемый результат
Фактический
результат
Статус
4.1
Поиск по существующему названию
Найдены соответствующие документы
Документы
найдены Выполнено
4.2 Поиск по существующему автору
Найдены соответствующие документы
Документы
найдены Выполнено
4.3 Поиск по ключевым словам
Найдены соответствующие документы
Документы
найдены Выполнено
4.4 Поиск по типу документа
Найдены документы указанного типа
Документы
найдены Выполнено
4.5 Поиск по диапа- Найдены доку- Документы Выполнено
17
зону дат менты за указанный период
найдены
4.6 Поиск по несуществующему слову
Сообщение «Документы не
найдены»
Сообщение Выполнено
4.7 Пустой запрос
Сообщение об
ошибке, повтор
ввода
Повтор ввода Выполнено
2.1.6.5 Тестирование редактирования документа
Цель: Проверка корректности обновления метаданных документа.
Методика: Редактирование существующих документов.
Таблица 8 – Корректность обновления метаданных документа
№ Действие Ожидаемый результат
Фактический результат Статус
5.1 Изменение названия Данные обновлены
Обновление успешно Выполнено
5.2 Изменение автора Данные обновлены
Обновление успешно Выполнено
5.3 Изменение ключевых
слов
Данные обновлены
Обновление успешно Выполнено
5.4 Изменение типа документа
Тип документа
изменён Изменение успешно Выполнено
5.5 Отказ от изменений
(пропуск полей)
Данные не меняются
Данные сохранены без
изменений Выполнено
5.6 Ввод несуществующего ID
Сообщение «Документ не найден» Сообщение Выполнено
5.7 Ввод некорректного
ID (буквы) Повтор ввода Повтор ввода с сообщением
Выполнено
2.1.6.6 Тестирование удаления документа
Цель: Проверка корректности логического удаления документов.
Методика: Удаление документов с подтверждением и отказом.
Таблица 9 – Логическое удаление документа
№ Действие Ожидаемый результат Фактический
результат
Статус
6.1 Удаление с подтверждением
Документ помечен как
удалён, не отображается
в списке
Документ скрыт
из списка
Выполнено
6.2 Отказ от удаления Документ не удалён,
остаётся в списке
Документ в
списке
Выполнено
6.3 Удаление несуще- Сообщение «Документ Сообщение Выполнено
18
ствующего ID не найден»
6.4 Удаление без прав Сообщение «Нет прав на
удаление»
Сообщение Выполнено
2.1.6.7 Тестирование прав доступа
Цель: Проверка корректности разграничения прав доступа для различных ролей.
Методика: Выполнение операций под разными пользователями.
Таблица 10 – Права доступа
№ Действие Роль Ожидаемый
результат
Фактический
результат
Статус
7.1 Добавление документа admin Разрешено Успешно Выполнено
7.2 Добавление документа user Разрешено Успешно Выполнено
7.3 Добавление документа guest Отказано Сообщение
об ошибке Выполнено
7.4 Редактирование admin Разрешено Успешно Выполнено
7.5 Редактирование user Отказано Сообщение
об ошибке Выполнено
7.6 Удаление admin Разрешено Успешно Выполнено
7.7 Удаление user Отказано Сообщение
об ошибке Выполнено
7.8 Просмотр списка guest Разрешено Успешно Выполнено
2.1.6.8 Тестирование обработки ошибок
Цель: Проверка корректности обработки исключительных ситуаций.
Методика: Моделирование ошибочных ситуаций.
Таблица 11 – Обработка ошибок
№ Действие Ожидаемый результат Фактический
результат
Статус
8.1 Отсутствие соединения с БД Сообщение об ошибке
подключения
Сообщение Выполнено
8.2 Ввод неверного пункта меню Сообщение «Неверный
выбор», повтор меню Сообщение Выполнено
8.3 Попытка открыть файл без
пути
Сообщение «Файл отсутствует в хранилище»
Сообщение Выполнено
8.4 Попытка открыть удалённый
файл
Сообщение «Файл не
найден на диске» Сообщение Выполнено
8.5 Ввод ID = 0 при удалении Сообщение об ошибке,
повтор ввода
Повтор ввода Выполнено
8.6 Выход в меню (ввод 0) в любой операции Возврат в главное меню Возврат в меню Выполнено
19
2.1.7. Результаты испытаний
Таблица 12 - Результаты испытаний
Показатель Значение
Всего проведено тестов 48
Успешно пройдено 48
Обнаружено ошибок 0
Процент успешных тестов 100%
2.1.8 Дефекты и их устранение
Таблица 13 - Выявленные дефекты и их устранение:
№ Дефект Статус Комментарий
1
Двойной запрос имени файла при
добавлении Исправлен Удалён дублирующий блок ввода
2
Отсутствие сообщения при вводе
файла без расширения Исправлен Добавлена проверка
3
Выход в главное меню при неверном ID Исправлен Добавлены циклы повторного
ввода
4 Ошибка сравнения boolean с integer Исправлен Заменено = 1 на = TRUE
2.1.9 Лист регистрация изменений
Таблица 14 – Лист изменений
Версия Дата Изменение
0.1 10.03.2026 Начальная версия программы
0.2 12.03.2026 Добавлены циклы повторного ввода
0.3 14.03.2026 Исправлена авторизация
0.4 15.03.2026 Добавлен выбор типа документа
1.0 16.03.2026 Финальная версия, исправлены все ошибки
20
Утвержден
RU.02069295.00001-01 01 01-1-РП
Разработка базы данных документов предприятия
Загрузчик
Программа и методика испытаний
А.В. 00001-01 33 01
2026
Подп. И дата Инв.№ дубл. Взам. Инв. № Подп. И дата Инв.№подп.
21
СОГЛАСОВАНО УТВЕРЖДАЮ
Петрушкина Т.А. Онопенко Г.А.
Личная
подпись
Расшифровка
подписи
Личная
подпись
Расшифровка
подписи
Разработка базы данных документов предприятия
Загрузчик
Руководство программиста
А.В. 00001-01 33 01
Согласовано Представитель
предприятия разработчика
Петрушкина Т.А. Онопенко Г.А.
Личная
подпись
Расшифровка
подписи
Личная
подпись
Расшифровка
подписи
Пустогвар В.Д.
Личная
подпись
Расшифровка
Подписи
Лисовой В.А.
Личная
подпись
Расшифровка
Подписи
2026
Подп. И дата Инв.№ дубл. Взам. Инв. № Подп. И дата Инв.№подп.
22
3. Сопровождение программного обеспечения
2.1 Текст программы
Ссылка на облако с кодом проекта: https://disk.yandex.ru/d/jsIcUjcV6yIPGQ
2.2 Описание программы
(Общее) (Описание)
using Microsoft.Extensions.DependencyInjection; ‘Импорт пространства
имён для работы с Dependency Injection (внедрение зависимостей)
using Microsoft.Extensions.Configuration; ‘Импорт пространства
имён для работы с конфигурационными файлами
using DocumentStorageSystem.Models; ‘Импорт моделей данных (User,
Document, Permission и т.д.)
using DocumentStorageSystem.Repositories; ‘Импорт репозиториев для
работы с базой данных
using DocumentStorageSystem.Services; ‘Импорт сервисов бизнес-логики
using DocumentStorageSystem.Utils; ‘Импорт вспомогательных утилит (SFTP, форматирование)
using Npgsql ‘Импорт
драйвера для работы с PostgreSQL
(Класс Program)
namespace DocumentStorageSystem ‘Объявление пространства
имён для проекта
class Program ‘Начало объявления класса
Program
private static IServiceProvider _serviceProvider; ‘Статическое поле для хранения провайдера сервисов (DI контейнера)
private static IAuthService _authService; ‘Статическое поле для сервиса авторизации
private static ILogService _logService; ‘Статическое поле для сервиса журналирования
private static User _currentUser; ‘Статическое поле для хранения текущего авторизованного пользователя
(Main) (Точка входа)
static async Task Main(string[] args) ‘Объявление асинхронной точки входа в программу
Console.WriteLine("=== Система хранения документов ==="); ‘Вывод заголовка
программы в консоль
Try ‘Начало
блока обработки исключений
SetupServices(); ‘Вызов
метода инициализации всех сервисов и зависимостей
var dbService = _serviceProvider.GetService<IDatabaseService>(); ‘Получение из DI контейне-
23
ра сервиса для работы с базой данных
if (dbService == null || !await dbService.TestConnectionAsync()) ‘Проверка доступности
сервиса и подключения к базе данных
Console.WriteLine("Ошибка подключения к БД");
return; ‘Вывод сообщения об ошибке и завершение работы программы
await LoginAsync(); ‘Вызов метода авторизации пользователя
if (_currentUser != null) ‘Проверка успешности
авторизации
await MainMenuAsync(); ‘Запуск главного меню
программы
catch (Exception ex) ‘Перехват всех исключений
Console.WriteLine($"Критическая ошибка: {ex.Message}"); ‘Вывод сообщения об
ошибке
(SetupServices) (Инициализация сервисов)
static void SetupServices() ‘Объявление метода
настройки сервисов.
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.Build(); ‘Создание
конфигурации из файла appsettings.json
SftpFileHelper.Initialize(configuration); ‘Инициализация вспомогательного класса для работы с SFTP
var services = new ServiceCollection(); ‘Создание
коллекции для регистрации сервисов
services.AddSingleton<IConfiguration>(configuration); ‘Регистрация конфигурации как Singleton
(единый экземпляр)
services.AddScoped<IDatabaseService, DatabaseService>(); ‘Регистрация сервиса базы
данных с областью видимости на запрос
services.AddScoped<IAuthService, AuthService>(); ‘Регистрация сервиса авторизации
services.AddScoped<ILogService, LogService>(); ‘Регистрация сервиса журналирования
services.AddScoped<IDocumentRepository, DocumentRepository>(); ‘Регистрация репозитория
документов
services.AddScoped<IDocumentTypeRepository, DocumentTypeRepository>();
‘Регистрация репозитория типов документов
services.AddScoped<IUserRepository, UserRepository>(); ‘Регистрация репозитория
пользователей
services.AddScoped<DocumentService>(); ‘Регистрация сервиса
управления документами
(Класс AuthService)
public class AuthService : IAuthService ‘Объявление класса
AuthService, реализующего интерфейс IAuthService
private readonly string _connectionString; ‘Приватное поле для
хранения строки подключения к БД
public AuthService(IConfiguration configuration) ‘Конструктор класса, принимающий
конфигурацию
24
{
_connectionString = configuration.GetConnectionString("DefaultConnection");
} ‘Извлечение строки
подключения из конфигурации
(LoginAsync) (Вход в систему)
public async Task<User> LoginAsync(string login, string password) ‘Метод авторизации,
возвращающий объект пользователя или null
{
try
{ ‘Начало блока
обработки исключений
using (var connection = new NpgsqlConnection(_connectionString)) ‘Создание подключения к
PostgreSQL
await connection.OpenAsync(); ‘Асинхронное
открытие соединения с базой данных
var cmd = new NpgsqlCommand(@"
SELECT u.id_users, u.login, u.password_hash, u.full_name, u.email,
u.created_at, u.last_login, u.is_active, u.id_permission,
p.role, p.can_add, p.can_view, p.can_edit, p.can_delete, p.can_search
FROM users u
JOIN permissions p ON u.id_permission = p.id_permission
WHERE u.login = @login AND u.is_active = TRUE", connection);
‘Формирование SQL-запроса для получения данных пользователя с его правами
cmd.Parameters.AddWithValue("@login", login); ‘Добавление параметра логина в
SQL-запрос
using (var reader = await cmd.ExecuteReaderAsync()) ‘Выполнение запроса и получение reader
для чтения результатов
{
if (await reader.ReadAsync()) ‘Проверка,
найден ли пользователь в базе данных
string storedHash = reader.GetString(2); ‘Получение
хеша пароля из результата запроса
if (password != storedHash) ‘Сравнение
введённого пароля с сохранённым (в упрощённом виде)
{
Console.WriteLine("✗ Неверный пароль");
return null;
} ‘Вывод
сообщения об ошибке и возврат null
var user = new User
{
Id_users = reader.GetInt32(0),
Login = reader.GetString(1),
PasswordHash = storedHash,
FullName = reader.GetString(3),
Email = reader.GetString(4),
CreatedAt = reader.GetDateTime(5),
LastLogin = reader.IsDBNull(6) ? null : reader.GetDateTime(6),
25
IsActive = reader.GetBoolean(7),
Id_permission = reader.GetInt32(8),
Permission = new Permission
{
Id_permission = reader.GetInt32(8),
Role = reader.GetString(9),
CanAdd = reader.GetBoolean(10),
CanView = reader.GetBoolean(11),
CanEdit = reader.GetBoolean(12),
CanDelete = reader.GetBoolean(13),
CanSearch = reader.GetBoolean(14)
}
}; ‘Создание
объекта User из данных, полученных из БД
await UpdateLastLogin(user.Id_users); ‘Обновление
времени последнего входа пользователя
(Класс SftpFileHelper)
public static class SftpFileHelper ‘Объявление
статического класса для работы с SFTP
private static IConfiguration _configuration; ‘Приватное статическое поле для
хранения конфигурации
public static void Initialize(IConfiguration configuration) ‘Метод инициализации, передающий конфигурацию в класс
{
_configuration = configuration;
} ‘Сохранение
конфигурации в статическое поле
(GetAllAsync) (Получение списка документов)
public async Task<IEnumerable<Document>> GetAllAsync() ‘Метод получения всех
активных документов из БД
{
var documents = new List<Document>(); ‘Создание пустого списка для результатов
using (var connection = new NpgsqlConnection(_connectionString)) ‘Создание подключения к
PostgreSQL
await connection.OpenAsync(); ‘Открытие соединения
var cmd = new NpgsqlCommand(@"
SELECT d.id_document, d.title, d.author, d.file_name, d.file_path, d.upload_date,
dt.type_name
FROM documents d
LEFT JOIN documenttypes dt ON d.id_documenttype = dt.id_documenttype
WHERE d.is_deleted = false
ORDER BY d.upload_date DESC", connection); ‘Формирование SQL-запроса
для получения всех активных документов с их типами, отсортированных по дате загрузки
using (var reader = await cmd.ExecuteReaderAsync()) ‘Выполнение запроса и получение
reader
26
{
while (await reader.ReadAsync()) ‘Цикл
по всем записям результата
{
documents.Add(new Document
{
Id_document = reader.GetInt32(0),
Title = reader.GetString(1),
Author = reader.IsDBNull(2) ? null : reader.GetString(2),
FileName = reader.GetString(3),
FilePath = reader.GetString(4),
UploadDate = reader.GetDateTime(5),
DocumentType = new DocumentType { TypeName = reader.GetString(6) }
}); ‘Создание объекта Document из данных каждой строки
}
}
}
return documents; ‘Возврат списка документов
27
Утвержден
RU.02069295.00001-01 01 01-1-РП
Разработка базы данных документов предприятия
Загрузчик
Сопровождение программного обеспечения
А.В. 00001-01 33 01
2026
Подп. И дата Инв.№ дубл. Взам. Инв. № Подп. И дата Инв.№подп.
28
СОГЛАСОВАНО УТВЕРЖДАЮ
Петрушкина Т.А. Онопенко Г.А.
Личная
подпись
Расшифровка
подписи
Личная
подпись
Расшифровка
подписи
Разработка базы данных документов предприятия
Загрузчик
Сопровождение программного обеспечения
А.В. 00001-01 33 01
Согласовано Представитель
предприятия разработчика
Петрушкина Т.А. Онопенко Г.А.
Личная
подпись
Расшифровка
подписи
Личная
подпись
Расшифровка
подписи
Пустогвар В.Д.
Личная
подпись
Расшифровка
Подписи
Лисовой В.А.
Личная
подпись
Расшифровка
Подписи
2026
Подп. И дата Инв.№ дубл. Взам. Инв. № Подп. И дата Инв.№подп.
29
4. Эксплуатация программного обеспечения
4.1 Описание применения программного обеспечения
Программа «База данных документов предприятия» предназначена для автоматизации процессов централизованного хранения, поиска и обработки электронных документов в организациях
малого и среднего бизнеса.
Программа применяется в следующих областях:
– централизованное хранение электронных документов с разграничением прав доступа;
– ведение документооборота в отделах делопроизводства и архивного хранения;
– обработка договорной, финансовой и отчётной документации;
– обеспечение поиска документов по метаданным (название, автор, ключевые слова, тип,
дата).
Программа эксплуатируется в составе серверной инфраструктуры организации. Пользователями программы являются сотрудники, имеющие учетные записи с соответствующими правами
доступа (admin, user, guest).
4.2 Руководство пользователя
4.2.1 Общие сведения о программе
Программа «Система хранения документов» предназначена для организации централизованного хранения электронных документов, обеспечения поиска по метаданным и разграничения
прав доступа пользователей. Основными функциями программы являются: авторизация пользователей с проверкой прав доступа, добавление документов с сохранением файлов на SFTP-сервер,
просмотр списка документов, поиск по названию, автору, ключевым словам, типу документа и
диапазону дат, редактирование метаданных, удаление документов (логическое удаление), просмотр файлов документов с временной загрузкой на локальный компьютер, журналирование действий пользователей.
Технические и программные средства, обеспечивающие выполнение данной программы:
- процессор: Intel Core i5-1135G7 (2.4 ГГц) или эквивалентный;
- оперативная память: не менее 8 ГБ;
- дисковое пространство: не менее 100 ГБ свободного места (с учетом роста базы данных);
- устройства ввода: клавиатура;
- устройства вывода: монитор с разрешением не менее 1920×1080;
- сетевое оборудование: доступ в интернет (для работы с удаленной базой данных и SFTPсервером).
Программа работает под управлением операционной системы Windows 10/11 (64-bit). Для
функционирования программы требуется наличие установленной среды выполнения .NET
Runtime 8.0 и доступ к серверу PostgreSQL 14 и выше.
30
4.2.2 Структура программы
Программа «Система хранения документов» состоит из следующих компонентов:
1) Program.cs – главный модуль программы, содержащий точку входа, консольный интерфейс и обработку команд пользователя;
2) Модули моделей (Models) – классы сущностей: User, Document, DocumentType, Permission, Log.
3) Модули репозиториев (Repositories) – классы доступа к данным: DocumentRepository,
UserRepository, DocumentTypeRepository.
4) Модули сервисов (Services) – классы бизнес-логики: AuthService, DocumentService,
LogService, DatabaseService.
5) Модули утилит (Utils) – вспомогательные классы: DatabaseInitializer, FileHelper,
SftpFileHelper.
6) Файл конфигурации – appsettings.json, содержащий настройки подключения к базе
данных и SFTP-серверу.
7) Исполняемый файл – DocumentStorageSystem.exe (собирается из исходного кода).
Данная программа требует установки следующих компонентов:
- .NET Runtime 8.0
- PostgreSQL 14 или выше
- SSH-ключ для доступа к SFTP-серверу (при использовании удаленного хранения файлов)
5.3.1 Установка программы
Для установки программы необходимо выполнить следующие действия:
1) Скопировать исполняемый файл DocumentStorageSystem.exe и сопутствующие файлы
(DLL) в отдельную папку на сервере или рабочей станции.
2) Убедиться, что на компьютере установлена среда выполнения .NET Runtime 8.0. При
отсутствии установить с официального сайта Microsoft.
3) Убедиться, что сервер PostgreSQL доступен по сети и содержит созданную базу данных documentdb.
4) Разместить файл конфигурации appsettings.json в той же папке, что и исполняемый
файл.
4.2.3 Настройка программы
Для корректной работы программы необходимо отредактировать файл appsettings.json, указав параметры подключения:
{
"ConnectionStrings": {
"DefaultConnection":
"Host=адрес_сервера;Port=5432;Database=documentdb;Username=пользователь;Password=пар
оль"
},
"Storage": {
"Type": "SFTP",
31
"Host": "адрес_sftp_сервера",
"Port": 22,
"Username": "имя_пользователя",
"KeyPath": "путь_к_приватному_ключу",
"RemotePath": "/путь_к_папке_хранения/"
}
}
Параметры настройки:
- DefaultConnection – строка подключения к базе данных PostgreSQL;
- Storage:Host – адрес SFTP-сервера для хранения файлов;
- Storage:Port – порт SFTP-сервера (по умолчанию 22);
- Storage:Username – имя пользователя для подключения к SFTP;
- Storage:KeyPath – путь к приватному ключу SSH для аутентификации;
- Storage:RemotePath – путь на SFTP-сервере, куда будут сохраняться файлы.
При первом запуске программа автоматически создаст необходимые таблицы в базе данных и заполнит их начальными данными (роли admin, user, guest; типы документов; тестовые
пользователи admin/admin123 и user/user123).
4.2.4 Проверка программы
Проверка работоспособности программы производится в следующем порядке:
1) Запустить исполняемый файл DocumentStorageSystem.exe.
2) Убедиться, что программа выводит сообщение «=== Система хранения документов
===» и «Инициализация базы данных...».
3) Ввести логин admin и пароль admin123.
4) Убедиться, что отображается приветствие и информация о правах доступа.
5) Выбрать пункт меню 2. Добавить документ и добавить тестовый документ.
6) Выбрать пункт меню 1. Просмотр списка документов и убедиться, что добавленный
документ отображается в списке.
7) Выбрать пункт меню 3. Найти документы и выполнить поиск по различным критериям.
8) Выбрать пункт меню 4. Редактировать документ и изменить метаданные документа.
9) Выбрать пункт меню 6. Просмотреть файл документа и убедиться, что файл открывается.
10) Выбрать пункт меню 5. Удалить документ и удалить тестовый документ.
11) Выбрать пункт меню 0. Выход для завершения работы программы.
Если программа выполняет все перечисленные операции без ошибок, проверка считается
успешно завершенной.
В случае возникновения ошибок при подключении к базе данных или SFTP-серверу следует проверить настройки в файле appsettings.json и доступность сетевых ресурсов.
4.2.5 Дополнительные возможности
Программа обладает следующими дополнительными возможностями:
- Журналирование действий – все действия пользователей (вход, добавление, редактирование, удаление, просмотр документов) фиксируются в журнале событий.
32
- Разграничение прав доступа – в зависимости от роли пользователя (admin, user, guest)
доступны различные операции.
- Поддержка различных форматов файлов – программа поддерживает загрузку файлов
форматов: pdf, docx, doc, txt, xlsx, pptx, jpg, png.
- Временное кэширование – при просмотре файла документ временно сохраняется в локальную папку и автоматически удаляется после закрытия.
- Мягкое удаление – удаленные документы не удаляются физически из базы данных, а помечаются флагом is_deleted, что позволяет восстановить их при необходимости.
4.2.6 Сообщения системному программисту
В процессе работы программы могут возникать следующие сообщения (табл. 1).
Таблица 15 – Сообщение об ошибке
Сообщение Описание Действие
«Ошибка подключения к БД»
Программа не может установить
соединение с PostgreSQL
Проверить доступность сервера БД,
корректность строки подключения в
appsettings.json, запущен ли сервер
PostgreSQL
«SFTP ошибка:
Permission denied»
Не удается аутентифицироваться
на SFTP-сервере
Проверить правильность имени пользователя и пути к ключу в appsettings.json,
добавить публичный ключ на сервер
«SFTP ошибка: No
such file or directory»
Указанный файл не найден на
SFTP-сервере
Проверить существование файла и корректность пути в базе данных
«Ошибка: файл не
найден»
Указанный локальный файл для
загрузки не существует
Проверить правильность введенного
пути к файлу
«Ошибка: недопустимый тип файла»
Попытка загрузить файл с неподдерживаемым расширением
Использовать разрешенные форматы:
pdf, docx, doc, txt, xlsx, pptx, jpg, png
«Ошибка: недостаточно прав»
Пользователь пытается выполнить
операцию, не имея соответствующих прав
Обратиться к администратору для получения прав или войти под учетной
записью с необходимыми правами
«Документ не
найден»
Запрос документа по несуществующему ID
Проверить корректность введенного ID
документа
«Хеш пароля: ...» Отладочное сообщение о проверке
пароля администратора
Нормальное состояние при первом запуске, не требует вмешательства
При возникновении критических ошибок, не описанных выше, следует обратиться к разработчику программы. Для диагностики рекомендуется проверить журнал событий в таблице logs
базы данных.