Научная статья на тему 'РАЗРАБОТКА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ДЛЯ МОНИТОРИНГА И РЕДАКТИРОВАНИЯ ИНФОРМАЦИИ О СТУДЕНТАХ'

РАЗРАБОТКА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ДЛЯ МОНИТОРИНГА И РЕДАКТИРОВАНИЯ ИНФОРМАЦИИ О СТУДЕНТАХ Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
90
8
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
списки / программное обеспечение / оперативная память / шифрование / lists / software / RAM / encryption

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Шельпук Михаил Игоревич, Микаева Светлана Анатольевна, Журавлева Юлия Алексеевна, Шигапова Вера Александровна, Коваленко Ольга Юрьевна

В ходе работы была создана программа, которая позволяет реализовать следующие способы работы с данными: хранение информации об обучающихся, редактирование данных в случае их изменения или неправильного ввода, сортировка списков на основании параметров, защита данных современными криптографическими моделями. Программа работает исправно даже при вводе неправильных данных, что обеспечивает её устойчивость. В данной программе предусмотрена защита личных данных, которые содержатся в базе, а ключ доступа для дешифровки данных формируется случайным образом и доступен только лицам с соответствующим уровнем допуска. Основой разработки является работа с массивами данных как с использованием динамической, так и статической памяти. Продукт ориентирован на различные сферы деятельности, подразумевающие в своём использовании взаимодействие с большим количеством данных как в упорядоченном, так и в запрашиваемом формате. Также предусмотрена сортировка данных о пользователях в алфавитном порядке с учётом пола.

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Шельпук Михаил Игоревич, Микаева Светлана Анатольевна, Журавлева Юлия Алексеевна, Шигапова Вера Александровна, Коваленко Ольга Юрьевна

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

SOFTWARE DEVELOPMENT FOR MONITORING AND EDITING INFORMATION ABOUT STUDENTS

In the course of the work, a program was created that allows you to implement the following ways of working with data: storing information about students, editing data in case of changes or incorrect input, sorting lists based on parameters, data protection with modern cryptographic models. The program works properly even when entering incorrect data, which ensures its stability. This program provides for the protection of personal data contained in the database, and the access key for decrypting data is generated randomly and is available only to persons with the appropriate level of access. The basis of the development is working with data arrays using both dynamic and static memory. The product is focused on various fields of activity, implying in its use interaction with a large amount of data both in an ordered and in the requested format. It also provides sorting of user data in alphabetical order, taking into account gender.

Текст научной работы на тему «РАЗРАБОТКА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ДЛЯ МОНИТОРИНГА И РЕДАКТИРОВАНИЯ ИНФОРМАЦИИ О СТУДЕНТАХ»

УДК 004.001

РАЗРАБОТКА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ДЛЯ МОНИТОРИНГА И РЕДАКТИРОВАНИЯ ИНФОРМАЦИИ О СТУДЕНТАХ

Статья поступила в редакцию 05.06.2022, в окончательном варианте - 21.10.2022.

Шельпук Михаил Игоревич, Российский технологический университет МИРЭА, 119454, Российская Федерация, г. Москва, проспект Вернадского, 78,

студент, ORCID: 0000-0001-5450-4376, e-mail: maestrochess18@mail.ru Микаева Светлана Анатольевна, Российский технологический университет МИРЭА, 119454, Российская Федерация, г. Москва, проспект Вернадского, 78,

доктор технических наук, доцент, ORCID: 0000-0001-6992-455Х, e-mail: mikaeva_s@mirea.ru Журавлева Юлия Алексеевна, Российский технологический университет МИРЭА, 119454, Российская Федерация, г. Москва, проспект Вернадского, 78,

кандидат технических наук, доцент, ORCID: 0000-0003-3919-5127, e-mail: ulypil@mail.ru Шигапова Вера Александровна, Российский технологический университет МИРЭА, 119454, Российская Федерация, г. Москва, проспект Вернадского, 78,

преподаватель, ORCID: 0000-0001-9967-4520, e-mail: twinkle17@bk.ru

Коваленко Ольга Юрьевна, Мордовский государственный университет им. Н. П. Огарёва, 430005, Российская Федерация, г. Саранск, ул. Большевистская, 68/1,

доктор технических наук, доцент, ORCID: 0000-0003-3919-5127, e-mail: crystall2000@mail.ru

В ходе работы была создана программа, которая позволяет реализовать следующие способы работы с данными: хранение информации об обучающихся, редактирование данных в случае их изменения или неправильного ввода, сортировка списков на основании параметров, защита данных современными криптографическими моделями. Программа работает исправно даже при вводе неправильных данных, что обеспечивает её устойчивость. В данной программе предусмотрена защита личных данных, которые содержатся в базе, а ключ доступа для дешифровки данных формируется случайным образом и доступен только лицам с соответствующим уровнем допуска. Основой разработки является работа с массивами данных как с использованием динамической, так и статической памяти. Продукт ориентирован на различные сферы деятельности, подразумевающие в своём использовании взаимодействие с большим количеством данных как в упорядоченном, так и в запрашиваемом формате. Также предусмотрена сортировка данных о пользователях в алфавитном порядке с учётом пола. Ключевые слова: списки, программное обеспечение, оперативная память, шифрование

SOFTWARE DEVELOPMENT FOR MONITORING AND EDITING INFORMATION ABOUT STUDENTS

The article was received by the editorial board on 05.06.2022, in the final version — 21.10.2022.

Shelpuck Mikhail I., Russian Technological University MIREA, 78 Vernadsky Avenue, Moscow, 119454, Russian Federation,

student, ORCID: 0000-0001-5450-4376, e-mail: maestrochess18@mail.ru

Mikaeva Svetlana A., Russian Technological University MIREA, 78 Vernadsky Avenue, Moscow, 119454, Russian Federation,

Doct. Sci. (Engineering), Associate Professor, ORCID: 0000-0001-6992-455Х, e-mail: mikaeva_s@mirea.ru

Zhuravleva Yulia A., Russian Technological University MIREA, 78 Vernadsky Avenue, Moscow, 119454, Russian Federation,

Cand. Sci. (Engineering), Associate Professor, ORCID: 0000-0003-3919-5127, e-mail: ulypil@mail.ru Shigapova Vera A., Russian Technological University MIREA, 78 Vernadsky Avenue, Moscow, 119454, Russian Federation,

teacher, ORCID: 0000-0001-9967-4520, e-mail: twinkle17@bk.ru

Kovalenko Olga Yu., Ogarev Mordovia State University, 68/1 Bolshevistskaya St., Saransk, 430005, Russian Federation,

Doct. Sci. (Engineering), Associate Professor, ORCID: 0000-0003-3919-5127, e-mail: crystall2000@mail.ru

In the course of the work, a program was created that allows you to implement the following ways of working with data: storing information about students, editing data in case of changes or incorrect input, sorting lists based on parameters, data protection with modern cryptographic models. The program works properly even when entering incorrect data, which ensures its stability. This program provides for the protection of personal data contained in the database, and the access key for decrypting data is generated randomly and is available only to persons with the appropriate level of access. The basis of the development is working with data arrays using both dynamic and static memory. The product is focused on various fields of activity, implying in its use interaction with a large amount of data both in an ordered and in the requested format. It also provides sorting of user data in alphabetical order, taking into account gender. Keywords: lists, software, RAM, encryption

Graphical annotation (Графическая аннотация)

Введение. Проблемой оценивания результатов обучения в настоящее время широко занимаются как отечественные, так и зарубежные ученые. Работы многих исследователей показывают, что если при проектировании основной образовательной программы влияние субъективности не является очевидным, то при оценивании ее освоения фактор субъективизма становится критическим, так как результат оценивания непосредственно наблюдаем и используется, зачастую в неизменном виде, в задачах управления развитием образовательных и трудовых ресурсов [1]. Разработки программ для электронной информационно-образовательной среды (ЭИОС) ведутся во многих вузах. Так в Мордовском госуниверситете разработана программа для ЭИОС, которая позволяет составлять портфолио участников образовательного процесса (в том числе публикации, электронные об -разовательные ресурсы, участие в грантах и т.д.) с возможностью верификации, заполнять рейтинг план дисциплин, фиксировать и производить мониторинг хода образовательного процесса, обеспечивать общение между участниками образовательного процесса, сохранять отчетности обучаю -щихся с отзывами и обеспечивать доступ к внешним ресурсам [2]. В настоящее время существуют программные обеспечения для анкетирования, тестирования, мониторинга и управления работой студентов [3-6]. Однако данные программы, как правило, имеют узкую область использования и не всегда используют важные преимущества составляющих компонентов. В базе данных, как и в любой другой целостной системе должны быть согласованы все её компоненты, а именно: данные в файле меняться по ходу их замены в программе, участки памяти являться когерентными, а функции работать исправно с расчётом на влияние человеческого фактора (не только вмешательства извне, но и опечатки). Современные базы данных должны иметь возможность изменения во времени. Для этого используется динамическая оперативная память. Предлагаемая программа использует как динамическую оперативную память, элементной базой которых являются конденсаторы, так и статическую, роль основных элементов которой играют триггеры. Такое совмещение типов памяти позволяет повысить общую производительность системы, поскольку набор триггеров в микросхеме значительно превосходит по скорости передачи импульсов аналогичный набор конденса -торов, что определяет как практическую ценность, так и актуальность работы.

Однако, как было сказано ранее, полностью отказаться от динамической памяти невозможно, так как без неё редактирование информации, к примеру, аксиоматически невозможно. Ранее было принято разрабатывать базы данных на различных языках программирования в связке, так как имелась необходимость максимально автоматизировать процессы формирования запросов и возврата необходимых данных. Однако они имеют много недостатков. Задачей была не эффективность и за -щищённость такого приложения, а максимальная простота в использовании и распространённость. Представленный программный продукт является уникальным в своей области, поскольку ранее никто ещё не разрабатывал базу данных в виде единого полноценно функционирующего приложения, не использующего связок с другими приложениями. Использование новых паттернов позволяет считать его не менее качественным и широким по функционалу, чем разработки прошлых лет. Стоит отметить, что работа по проектированию систем имеет большую историю, связанную с появлением разных языков программирования.

Описание составляющих программы. Предлагаемая программа представляет собой реализацию абстрактной базы данных, оснащённой основными принципами использования оперативной памяти (рис. 1). Не менее важным является само понятие динамической памяти, которая реализуется

в программе, например, в виде создания определённых полей и свойств классов с выделением им определённого количества ячеек (байт). Основополагающим в концепции динамической памяти является её определение как полупроводниковой памяти. Современные персональные компьютеры включают в себя практически всю элементную базу. Обращаясь к ней можно выделить детальные особенности принципа построения памяти. Память подключена к шине, обеспечивающей питание (так как динамическая память является энергозависимой) и другие функции. В плату поступают потоки команд и данных, для которых непосредственно определяется понятие адресации (по строкам и столбцам). Первыми важными элементами являются входной и выходной регистры данных. Далее на микросхеме можно увидеть дешифраторы как базовые элементы, формирующие пространственную систему горизонтальных и вертикальных линий, в состав которых входят запоминающие элементы.

( КОНЕЦ ПРОГРАММЫ >

Рисунок 1 - Блок-схема работы приложения

Вертикальные и горизонтальные линии пересекаются, а их пересечением является запоминающий элемент, к которому также подходит вертикальный провод, вместе с запоминающим элементом он называется строкой. Также в микросхеме присутствует вертикальный провод, который в совокупности со всеми запоминающими элементами, подходящими к нему, называется столбцом. Для строк и столбцов сформированы регистры адреса. Данные адреса передаются в соответствующие дешифраторы адресов строк и столбцов. Устройства синхронизации и управления в совокупности с усилителями считывания и записи образуют дополнительную физическую систему. Усилители в совокупности с массивом запоминающих элементов и входными/выходными регистрами данных образуют полноценную связанную структуру. Однако большая интегральная схема запоминающего устройства также включает в себя дешифратор команд, счетчик регенерации, буфер адреса, матрицу элементов памяти, а также банки памяти, сюда же можно отнести схемы коммутации данных и схему управления. Чтение и запись (каждая по отдельности) занимают как минимум пять тактов процессора, что обусловлено установкой адреса столбца, формированием сигнала RAS, а также возвратом этих сигналов в неактивное состояние. Корреляция между записью данных в память и её управлением на уровне компилируемого языка С++ находится именно на уровне записи в файл (взаимодействие с криптографическими системами защиты находится на аналогичном уровне). Строгость в оформлении работы с памятью в вышеприведённом языке программирования позволяет прослеживать каждый шаг в выполнении поставленных задач (чтения, записи, изменения или удаления информации в файле). Существует такое понятие, как указатель, который является ссылкой на то место в памяти, на котором находится необходимая нам информация. Суть функций чтения и записи заключается в последовательном извлечении из файла информации по указателям, при этом присутствует определённая семантика, от которой зависит всё прохождение по данным (например, математическая формула перехода от одних данных к другим будет зависеть от того,

сколько байт памяти мы выделили под определённый вид данных). В программе приведён бинарный способ чтения и записи информации. Сделано это для того, чтобы не возникало проблем со служебными символами, такими как табуляция, перенос строки и нуль-символ, которые могут быть прочитаны как обычный текст и тем самым вызвать ошибку в работе программы. Возвращаясь к динамической памяти стоит уточнить, что программа выполняется последовательно, что означает опять же динамическое изменение записанных данных, что приводит нас к проблеме когерентности, которая усиленно решается всё более эффективными методами и сегодня. Само понятие когерентности означает, что участки памяти (не обязательно динамической) должны быть связаны не только с микропроцессором, но и сами с собой. Это необходимо для того, чтобы динамически изменяющиеся данные принимали новое значение и в других участках, а точнее, у этих участков должна быть информация о соответствующих изменениях. В противном случае возникнет так называемый «конфликт по данным», который, помимо всего прочего, может быть не обнаружен процессором и управляющими программами сразу [7-9].

Классы, методы и код, используемые в программе. При выполнении задачи были созданы некоторые экземпляры классов, затем к программе был подключён файл, в котором будут храниться все данные. После последовательно считывается информация о каждом студенте и проверяется его пол и фамилия для реализации разделения группы студентов на две другие: женскую и мужскую, сортированные по алфавиту.

В данном случае под классами-наследниками понимаются классы, наследующие основной функционал от классов-родителей (класс Program - родительский по отношению к классам File, Session, Student). Классы-друзья - классы, связанные с другими и имеющие определённые параметры доступа, в то время как не связанные не будут иметь таких прав. Концепция программы складывается в первую очередь из задач, постановленных перед любой базой данных: хранением, изменением (при необходимости), удалением и защищённостью (как критерий) системы в целом, они решаются благодаря различным способам работы с памятью, ниже приведены некоторые из них.

Функционал:

Student - класс для хранения основной информации о студенте, является дочерним классом Program. Является дружественным классом File.

bool Check_book () - метод класса Student для проверки существования студента с таким же номером зачетной книжки. Если не существует, возвращает истину, в противном случае - ложь.

Public: Student () - конструктор класса. Вызывается при создании объекта. Создает указатели на все необходимые переменные, описанные в области private.

~ Student () - деструктор класса, удаляет всю информацию, хранящуюся в объекте класса. Вызывается при уничтожении класса (пример очистки ненужной памяти, ссылки на которые были удалены или потеряли свою востребованность в семантическом плане).

Program - основной класс программы, он наследуется другими классами, содержит функции вывода на экран, а также методы, позволяющие правильно работать программе в любых ситуациях.

void print () - функция класса Program, перегружаемая функция для вывода информации в консоль. Виды функции: void print (char* val) - служит для вывода массива символов; void print (int val) -служит для вывода целочисленной информации; void print (const char val []) - служит для вывода массива символов.

Их использование обусловлено предназначением для различного функционала (об этом гово -рят различные типы переменных, от которых вызываются функции).

inline void Wait () - INLINE-функция, которая ждет нажатия клавиши ВВОД для продолжения выполнения программы.

virtual void print_v (char* val) - виртуальная функция, переопределяемая в классах-наследова-телях. Получает указатель на массив символов в переменную val в результате своего выполнения вывода val в консоль.

Sub - структура для описания предмета в какой-либо сессии студента, содержит имя предмета и оценку.

Session - класс для хранения информации о сессиях студента, является дочерним классов Program. Является дружественным классом File.

Crypto - класс для шифровки, дешифровки файла с данными.

File - класс, наследник Program, предназначен для работы с файлом.

int* pos - указатель на переменную целого типа, хранящую порядковый номер студента в файле.

int* count - указатель на переменную целого типа, хранящую количество студентов, записанных в файл.

char* gbn_t - указатель на массив символов, в котором записывается номер зачетной книжки студента, информацию о котором нужно удалить или изменить.

void Read_student() - метод для считывания информации о студенте из файла.

virtual void print_v(bool Full) - виртуальная переопределяемая функция класса File, которая выводит на экран информацию о студентах. Параметр Full отвечает за то, какую информацию выводить.

void Print_students (int rez, bool Task) - метод класса File для вызова функции print_v. Параметр rez отвечает за то, какую информацию выводить, параметр Task - также за информацию, которую мы хотим вывести.

Menu - класс, который отвечает за навигацию в программе и отрисовку меню, является наследником от класса Program.

int* ans - указатель на целочисленную переменную, которая отвечает за то, в какой пункт меню перейдет пользователь. Вводится с клавиатуры.

Mystr - класс для обработки массива символов.

void operator += (const char other []) - метод класса Mystr перегрузки оператора +=, в результате своего выполнения происходит конкатенация строки в data и строки, которая подается вторым параметром.

Указатели обеспечивают правильный (в совокупности с функциями) доступ к данным, во избежание конфликта по данным каждому было присвоено строго определённое значение длины, поскольку и динамическое, и статическое изменения затруднили или вовсе сделали бы невозможным обращение к требуемым участкам памяти. При написании программы были задействованы различные паттерны проектирования и основы объектно-ориентированного программирования, использованы принципы прямого доступа к памяти, приоритетности прерываний и параллелизма процессора.

Фрагмент кода программы представлен в приложении.

При попытке считать данные без прав доступа злоумышленник получит лишь защищённый код (рис. 2).

р 9t53Sjn6GHg7gyo3 ,Н>(1Е1НИ1=1 D0^<y$töUEbTöflTBSgOvqn...b"' ™Йюр>0езб | Рц_Д-сХН€хБ-хм! И13#№»/ 5v© TS3/bn#»p7&:ыЧктьКЯШ DI<riDAK\r«a€[e:iE)Tyj&Nuefl4• B°S МВОЩ1в0О| 5eöjpe

„ЧЦв<Ш][л[ <К,Ш?;ДЯ®§кг@вГй~4!_Ф$Ф'аСсйг1ЬЫигс0Ь0Е®1Саз)9МВйСС$ъ;ЗТоИ0-м\ЬиЪЭ;;гуЪРс--РА=0та§Усл;

Рисунок 2 - Пример вывода защищенного кода

Главное меню имеет упрощённый вид - нумерованный список (рис. 3а). При необходимости возможно добавление и удаление студентов (рис. 3б). В программе предусмотрена полноценная работа с информацией. Меню редактирования информации представлено на рисунке 3в.

IWfefMT« ыримт I • Добавить студент« I - Уделить студент) I И женить длимые студент« I - выметя «с» 6л>у студентов

> - выметя сомски согласно идение

> ■ Выйти Я] программ

>»> _

а)

Рисунок 3 - Окна программы

■бсвитс Ii iip ит *

Либашиь студент«

- Ywm

Нмгнкть данные студента |

■ Bmkctw К* fajy

- ЙЫП«™ (АИСЙИ Mi™ НО 1 ilfli'l IIHÜ I

ваРти Ч1№гр«<т

VAJbrnfJUü.llll-H нпЭДмзцин о- it«™ £туде™га :ис. валабзюа Дмитрий и^омойич 1ймер зачетмок hhh-.*H: 1

Сессия 1

б)

I - Лабэвип, г>г г

> - »»Фоеигцн» о nwwwTJi iryw)

S ■ ДОбНКТЬ принт

1 • УД1ЛиТь npMf*T

9 - Сохранить KjMthtMriJ

в)

Важным моментом является то, что определённые классы и методы могут быть написаны в любом порядке, а связано это в первую очередь с тем, что перед непосредственным выполнением программы происходит проверка её синтаксиса и последовательности действий (на этой стадии выполнения могут быть обнаружены ошибки или вызваны исключения).

Результаты и обсуждения. Структура языка С++ такова, что после выполнения функций данные, ссылки на которые обрываются, должны быть удалены, это как раз и необходимо для соблюдения принципов когерентности, ведь сюда в ходе последующего выполнения программы будут записаны новые данные. Также это необходимо, очевидно, для того, чтобы не засорять свободную память, тем самым понижая производительность системы. Такое отношение к данным обусловлено ориентированностью языка на более точные программные разработки, в которых необходима точность. В дополнение ко всему управление самой памятью происходит пользователем (разработчиком) вручную. Такой способ работы с памятью занимает большое количество времени, однако позволяет более точно оформить взаимодействие структур данных, файлов, баз данных и реализацию потоков. По этой причине С++ является высокопроизводительным (по сравнению с другими языками), что иной раз доказывает рациональное использование ресурсов процессора.

Как и во многих других случаях для обеспечения работоспособности кода к программе были подключены пространства имён и действующие библиотеки других разработчиков, обеспечивающих сокращение написания кода, а также дающих дополнительные возможности. Для повышения производительности и работоспособности программы был использован принцип совмещения опе -раций в обоих своих проявлениях.

Параллелизм здесь заключается в работе функций (методов) не с самими ссылками на объекты, а с их копиями, в данном случае все данные меняются в ходе выполнения, в связи с этим непосредственная работа с данными по прямым ссылкам является затруднительной, а в некоторых случаях даже невозможной. Конвейеризация заключается в работе с копиями ссылок на объекты в последовательном формате. Для конвейеров, в зависимости от его типа, можно математически вычислить его загруженность, время работы и производительность. Его использование оправдано в том случае, если загруженность будет близка к максимальной, поскольку малое количество данных хоть и будет обрабатываться чуть быстрей, но вызовет дополнительные потери из-за обращения к процессору и другим инструкциям, необходимым для целостной работы конвейера.

В результате проведённой работы была написана программа, основной функционал которой: работа с потоками команд и данных, статическая и динамическая виды памяти. С её помощью удобно хранить информацию об обучающихся, редактировать её по мере необходимости, а удобный интерфейс позволяет наглядно оценить полный или краткий список информации о конкретном студенте, также есть алфавитная сортировка и разделение в зависимости от пола. Поскольку программа должна иметь достойное практическое значение, в ней были использованы функции, защищающие от опечаток (например, если вместо оценки будет введена какая-то буква), а также от информации, ошибки в которой могут быть не замечены на протяжении длительного периода времени (например, введён 20002 год рождения). Использование современных криптографических моделей и методов защиты гарантирует целостность, достоверность введённой информации и отсутствие возможности хищения личных данных обучающихся. Программа может эффективно применяться разными людьми: от школьников до специалистов по работе с информацией.

Работа над программой может быть продолжена в направлении ее совершенствования, например, для ее адаптации к образовательной деятельности высших учебных заведений. Так как следует учитывать, что в настоящее время электронную информационно-образовательную среду современного университета рассматривают как средство реализации различных видов обратной связи между участниками информационно-образовательного процесса, фактор внедрения инструментов информационного-образовательного взаимодействия [10]. Эти требования с учетом запросов хорошо подготовленных пользователей могут привести к необходимости изменения концепции программы, исходя из потребности установления обратной связи «образовательное учреждение-студент». Для этого по списку главного меню «4-Вывести всю базу студентов» следует предусмотреть переход к окну «Информация для группы». В данном окне можно предусмотреть предоставление списка предметов (дисциплин) в зависимости от направления подготовки, курса, семестра. При переходе к конкретной дисциплине можно предусмотреть возможность просмотра следующих материалов, предоставляемых преподавателем (кафедрой) по данной дисциплине: рабочая программа дисциплины, рейтинг-план дисциплины, тестовые задания, ведомость текущей успеваемости, контактная среда для общения преподавателя со студентом в форме письменных сообщений. Можно также обеспечить среду для передачи файлов: учебных материалов от преподавателя студентам и отчетов от студентов преподавателю. Для осуществления связи «образовательное учреждение - студент» необходимо организовать защищенный и персонифицированный вход в программу как преподавателей, так и студентов. Добавление новых функций возможно путем усовершенствования предложенной блок-схемы, а не путем создания нового проекта, так как программа использует как динамическую, так и статическую оперативную память.

Заключение. Рассмотренный подход совершенствования программы с установлением обратной связи «образовательное учреждение - студент» позволит, оставляя в своей основе принцип, что современные базы данных должны иметь возможность изменения во времени, обеспечить появление в программе новых функций. При этом важно, что добавление новых функций возможно путем усовершенствования предложенной блок-схемы, а не путем создания нового проекта. Таким образом, предлагаемая программа, которая использует как динамическую, так и статическую оперативную память, дает возможность системно решать проблему согласованности всех её компонентов, как существующих, так и вновь введенных, с учетом меняющихся условий окружающей среды.

Библиографический список

1. Кунц, Е. Ю. Использование компетентностной модели образовательной программы для принятия управленческих решений в образовательной организации / Е. Ю. Кунц, П. С. Ложников // Прикаспийский журнал: управление и высокие технологии. - 2022. - № 2 (58). - С. 27-34.

2. Федин, М. В. Электронная информационно-образовательная среда / М. В. Федин, М. В. Панкратов, К. А. Лещанкин // Свидетельство о регистрации программы для ЭВМ RU 2019615133, 18.04.2019. - Заявка № 2019613801 от 10.04.2019.

3. Федин, М. В. Программный модуль для системы анкетирования в электронной информационной-образовательной среде / М. В. Федин, М. В. Панкратов, К. А. Лещанкин // Свидетельство о регистрации программы для ЭВМ RU 2019665955, 03.12.2019. - Заявка № 2019664591 от 20.11.2019.

4. Федин, М. В. Программный модуль для подсистемы тестирования электронной информационной-образовательной среды / М. В. Федин, М. В. Панкратов, К. А. Лещанкин // Свидетельство о регистрации программы для ЭВМ RU 2019665806, 28.11.2019. - Заявка № 2019664661 от 20.11.2019.

5. Астахова, И. Ф. Разработка моделей и методов автоматизации обучения и контроля знаний студентов с помощью искусственного интеллекта / И. Ф. Астахова, А. А. Пшеничных // Фундаментальные исследования. -2011. - № 12-1. - С. 77-80.

6. Рыбанов, А. А. Разработка web-ориентированной информационной системы мониторинга и управления процессом прохождения производственной практики / А. А. Рыбанов, А. В. Рыльков // Молодой ученый. -2013. - № 7 (54). - С.34-36.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

7. Гради, Б. Объектно-ориентированный анализ и проектирование с примерами приложений на С++. Второе издание / Б. Гради. - 2008. - 720 с.

8. Герберд, Ш. Полный справочник по C++ : пер. с англ. / Ш. Герберд. - 4-е изд. - Москва : Издательский дом «Вильямс», 2006. - 800 с.

9. Бьюли, А. Изучаем SQL / А. Бьюли // Символ. - 2007. - 311 с.

10. Рулиене, Л. Н. Электронная информационно-образовательная среда современного университета : монография / Л. Н. Рулиене, Н. Б. Сэкулич, С. Д. Намсараев. - Улан-Удэ : Изд-во Бурятского госуниверситета. 2018. - 148 с.

References

1. Kunts, E. Yu. Ispolzovanie kompetentnostnoy modeli obrazovatelnoy programmy dlya prinyatiya upravlench-eskikh resheniy v obrazovatelnoy organizatsii [Using the competence model of an educational program for making managerial decisions in an educational organization]. Prikaspiyskiy zhurnal: upravlenie i vysokie tekhnologii [Caspian Journal: Control and High Technologies], 2022, no. 2 (58), pp. 27-34.

2. Fedin, M. V. Elektronnaya informatsionno-obrazovatelnaya sreda [Electronic information and educational environment]. Svidetelstvo o registratsii programmy dlya EHVMRU 2019615133 [Certificate of registration of the computer program RU 2019615133], 2019.

3. Fedin, M. V. Programmnyy modul dlya sistemy anketirovaniya v elektronnoy informatsionnoy-obrazovatelnoy srede [Software module for the questionnaire system in the electronic and information-educational environment]. Svidetelstvo o registratsii programmy dlya EHVM RU 2019665955 [Certificate of registration of the computer program RU 2019665955], 2019.

4. Fedin, M. V. Programmnyy modul dlya podsistemy testirovaniya elektronnoy informacionnoy-obrazovatelnoy sredy [Software module for the testing subsystem of the electronic and information-educational environment]. Svi-detelstvo o registratsii programmy dlya EHVM RU 2019665806 [Certificate of registration of the computer program RU 2019665806], 2019.

5. Astakhova, I. F. Razrabotka modeley i metodov avtomatizatsii obucheniya i kontrolya znaniy studentov s pomoshchu iskusstvennogo intellekta [Development of models and methods for automating learning and controlling students' knowledge using artificial intelligence]. Fundamentalnye issledovaniya [Fundamental Research], 2011, no. 12-1, pp. 77-80.

6. Rybanov, A. A. Razrabotka web-orientirovannoy informatsionnoy sistemy monitoringa i upravleniya protsessom prokhozhdeniya proizvodstvennoy praktiki [Development of a web-oriented information system for monitoring and managing the process of passing an industrial practice].Molodoy uchenyy [Young Scientist], 2013, no. 7 (54), pp. 34-36.

7. Gradi, B. Obektno-orientirovannyy analiz i proektirovanie s primerami prilozheniy na S++. Vtoroe izdanie [Object-oriented analysis and design with examples of applications in C ++. The second edition], 2008. 720 p.

8. Gerberd, Sh. Polnyy spravochnikpo C++ [The Complete C++ Reference], 2006. 800 p.

9. Byuli Д IzuchaemSQL [Learning SQL], 2007. 311 p.

10. Ruliene, L. N. Elektronnaya informatsionno-obrazovatelnaya sreda sovremennogo universiteta : monografiya [Electronic information and educational environment of a modern university : monograph]. Ulan-Ude, Publishing House of the Buryat State University, 2018. 148 p.

Приложение Фрагмент кода, реализующего защиту информации: class Crypto { private:

char* Gen_pass() { srand(time(NULL)); char* pass = new char[17];

for (int i = 0; i < 16; ++i) {

switch (rand() % 3) { case 0:

pass[i] = rand() % 10 + '0';

break;

case 1:

pass[i] = rand() % 26 + 'A';

break;

case 2:

pass[i] = rand() % 26 + 'a'; }

}

pass[16] = '\0';

return pass; }

public:

void Encrypt() { Mystr PATH_ENC(PATH); PATH_ENC += ".enc"; ifstream File;

File.open(PATH, ios::binary); ofstream File_enc;

File_enc.open(PATH_ENC.Get(), ios::binary | ios::app); File_enc.seekp(0, ios::beg); int length;

File.seekg(0, ios::end);

length = File.tellg();

File.seekg(0, ios::beg);

char* szPassword = Gen_pass();

int dwLength = strlen(szPassword);

File_enc.write((char*)&dwLength, sizeof(dwLength));

File_enc.write((char*)szPassword, dwLength + 1);

HCRYPTPROV hProv;

HCRYPTKEY hKey;

HCRYPTHASH hHash;

if (! CryptAcquireContext(&hPro v, NULL, NULL, PROV_RSA_AES, CRYPT_VERIFYCONTEXT)) {

cout << "Error during CryptAcquireContext!"; }

if (!CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash)) {

cout << "Error during CryptCreateHash!"; }

if (! CryptHashData(hHash, (BYTE*)szPassword, (DWORD)dwLength, 0)) {

cout << "Error during CryptHashData!"; }

if (! CryptDeriveKey(hProv, CALG_RC4, hHash, CRYPT_EXPORTABLE, &hKey)) {

cout << "Error during CryptDeriveKey!"; }

size_t enc_len = 8;

DWORD dwBlockLen = 1000 - 1000 % enc_len; DWORD dwBufferLen = 0;

if (enc_len > 1) {

dwBufferLen = dwBlockLen + enc_len; }

else {

dwBufferLen = dwBlockLen; }

int count = 0; bool final = false; while (count != length) {

if (length - count < dwBlockLen) { dwBlockLen = length - count;

final = true; }

BYTE* temp = new BYTE[dwBufferLen](); File.read((char*)temp, dwBlockLen);

if (!CryptEncrypt(hKey, NULL, final, 0, temp, &dwBlockLen, dwBufferLen)) {

cout << "Error during CryptEncrypt. \n"; }

File_enc.write((char*)temp, dwBlockLen);

count = count + dwBlockLen; }

if (hHash) {

if (! (CryptDestroyHash(hHash)))

cout << "Error during CryptDestroyHash"; }

if (hKey) {

if ( ! (CryptDestroyKey(hKey)))

cout << "Error during CryptDestroyKey"; }

if (hProv) {

if ( ! (CryptReleaseContext(hProv, 0)))

cout << "Error during CryptReleaseContext"; }

File.close();

File_enc.close();

if (remove(PATH) != 0) {

cout << "ERROR -- ошибка при удалении файла^"; }

}

void Decrypt() { Mystr PATH_ENC(PATH); PATH_ENC += ".enc"; ofstream File;

File.open(PATH, ios::binary | ios::app); ifstream File_enc;

File_enc.open(PATH_ENC.Get(), ios::binary); int length;

File_enc.seekg(0, ios::end); length = File_enc.tellg(); File_enc.seekg(0, ios::beg); if (length == -1 || length == 0) {

return; }

int dwLength;

File_enc.read((char*)&dwLength, sizeof(dwLength)); char* szPassword = new char[dwLength]; File_enc.read((char*)szPassword, dwLength + 1); HCRYPTPROV hProv; HCRYPTKEY hKey; HCRYPTHASH hHash;

if ( ! CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_AES, CRYPT_VERIFYCONTEXT)) {

cout << "Error during CryptAcquireContext! "; }

if (! CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash)) {

cout << "Error during CryptCreateHash!"; }

if ( ! CryptHashData(hHash, (BYTE*)szPassword, (DWORD)dwLength, 0)) {

cout << "Error during CryptHashData! ";

}

if (! CryptDeriveKey(hProv, CALG_RC4, hHash, CRYPT_EXPORTABLE, &hKey)) {

cout << "Error during CryptDeriveKey!"; }

size_t enc_len = 8;

DWORD dwBlockLen = 1000 - 1000 % enc_len; DWORD dwBufferLen = 0;

if (enc_len > 1) {

dwBufferLen = dwBlockLen + enc_len; }

else {

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

dwBufferLen = dwBlockLen; }

int count = sizeof(dwLength) + strlen(szPassword) + 1;

bool final = false;

while (count != length) {

if (length - count < dwBlockLen) {

dwBlockLen = length - count;

final = true; }

BYTE* temp = new BYTE[dwBlockLen]; File_enc .read((char*)temp, dwBlockLen);

if (!CryptDecrypt(hKey, 0, final, 0, temp, &dwBlockLen)) {

cout << "Error during CryptEncrypt. \n"; }

File.write((char*)temp, dwBlockLen);

count = count + dwBlockLen; }

if (hHash) {

if (! (CryptDestroyHash(hHash)))

cout << "Error during CryptDestroyHash"; }

if (hKey) {

if (! (CryptDestroyKey(hKey)))

cout << "Error during CryptDestroyKey"; }

if (hProv) {

if (! (CryptReleaseContext(hProv, 0)))

cout << "Error during CryptReleaseContext"; }

File.close(); File_enc.close();

if (remove(PATH_ENC.Get()) != 0) {

cout << "ERROR -- ошибка при удалении файла^"; }

} };

class Menu : Program {

public:

Menu() {

ans = new int;

SetConsoleCP(1251);

SetConsoleOutputCP( 1251);

system("cls");

file = new File; }

~Menu() {

delete file;

delete ans; }

bool hub() { file = new File; system("cls");

рпП("Выберите вариант\n");

print("1 - Добавить студента^");

print("2 - Удалить студента^");

print("3 - Изменить данные студента^");

print("4 - Вывести всю базу студентов^");

print("5 - Вывести всех студентов по заданию: \n");

print("6 - Выйти из программы^");

print(" >>>> ");

cin >> *ans;

cin_cl();

switch (*ans) {

case 1: {

system("cls");

print("Добавление нового студента(Введите -1, чтобы вернуться назад)^");

file->Add_student();

Wait();

break; }

case 2: { system("cls");

print(" Удаление студента\n");

file->Delete_student();

Wait();

break; }

case 3: {

file->Edit_student(); Wait();

break; }

case 4: { system("cls");

рпП("Вывод всех студентов^");

print("1 - Вывод всей информации^");

print("2 - Вывод части информации^");

print("3 - Назад\n");

print(">>> ");

cin >> *ans;

switch (*ans) {

case 1:

file->Print_students(4, false);

Wait();

break;

case 2:

file->Print_students(2, false);

Wait();

break;

case 3:

break; }

break; }

case 5:

system("cls");

рпП("Условия задания: \n");

print("1 - Вывести список студентов без оценок 5: \n");

print("2 - Назад\n");

print(">>> ");

cin >> *ans;

switch (*ans) {

case 1:

file->Print_students(4, true);

Wait();

break;

case 2:

break; }

break; Wait(); break; case 6:

return false; }

return true;

delete file; }

private:

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

File* file = nullptr;

int* ans = nullptr;

};

int main() {

Menu* menu = new Menu(); while (menu->hub()); delete menu;

return 0;

}

class Mystr { private:

char* data = nullptr; public:

Mystr(const char in[]) {

data = new char[strlen(in) + 1]();

for (int i = 0; i < strlen(in); i++) {

*(data + i) = in[i];

}

data[strlen(data)] = '\0'; }

~Mystr() {

delete[] data; }

void operator += (const char other[]) {

char* temp = new char[strlen(data) + strlen(other) + 1]();

int i = 0;

for (; i < strlen(data); i++) {

*(temp + i) = *(data + i); }

for (int j = 0; j < strlen(other); j++) {

*(temp + i + j) = *(other + j); }

temp[strlen(temp)] = '\0'; delete[] data;

data = new char[strlen(temp) + 1](); for (i = 0; i < strlen(temp); i++) {

*(data + i) = *(temp + i); }

data[strlen(data)] = '\0'; }

char* Get() {

return data; }

i Надоели баннеры? Вы всегда можете отключить рекламу.