Разработка сайта радиостанции "DJ843" с формой заказа песни - Программирование, компьютеры и кибернетика курсовая работа

Разработка сайта радиостанции "DJ843" с формой заказа песни - Программирование, компьютеры и кибернетика курсовая работа




































Главная

Программирование, компьютеры и кибернетика
Разработка сайта радиостанции "DJ843" с формой заказа песни

Разработка одностраничного сайта радиостанции с возможностью отправки по электронной почте заявок на воспроизведение песен. Обработка ввода пользователя. Выбор хостинг-провайдера. Изучение особенностей взаимодействия клиентской программы с базой данных.


посмотреть текст работы


скачать работу можно здесь


полная информация о работе


весь список подобных работ


Нужна помощь с учёбой? Наши эксперты готовы помочь!
Нажимая на кнопку, вы соглашаетесь с
политикой обработки персональных данных

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
1. Разработать одностраничный сайт радиостанции «DJ843»с формой заказа песни.
2. Реализовать отправку заявок с сайта по электронной почте.
3. Добавить в информационную систему с клиент-серверной архитектурой «Песни и исполнители» возможность автоматического получения заявок на воспроизведение песен по электронной почте, отправленной с сайта.
В рамках данного курсового проекта необходимо расширить функциональность информационной системы с клиент-серверной архитектурой «Песни и исполнители».
Данная система предназначена для диджеев на радиостанции. Она организовывает список песен, которые будут проигрываться в эфире. Система носит также информационный характер: в базе данных хранятся песни и данные об исполнителях, возможных концертах, альбомах и их содержании, музыкантах, входящих в группы, и наличии самих файлов с песнями на радиостанции. Эти данные также помогут радиооператору и с организацией списка воспроизведения, и с информированием слушателей.
Программа имеет возможность хранить заявки радиослушателей и формировать отчет по списку запланированных для воспроизведения песен. В ходе выполнения данного курсового проекта необходимо добавить в программу возможность автоматического занесения в базу данных заявок на воспроизведение песен, пришедших по электронной почте, отправленной с сайта радиостанции. Такая функциональность обязательна для современных радиостанций: заказывать песню через интернет быстрее и проще, чем, например, по телефону.
Для выполнения поставленной задачи будет использоваться следующие технологии и программное обеспечение:
• среда программирования: MS VisualStudio 2012и язык программирования C#;
• язык разметки документовHTMLи язык программирования PHP;
• компилятор установочных файлов: ExcelsiorInstaller 2.2.
1. ВЫЯВЛЕНИЕ НЕОБХОДИМОЙ ФУНКЦИОНАЛЬНОСТИ
Сайт радиостанции, позволяющий заказать песню для исполнения в эфире, должен быть расположен в свободном доступе в сети Интернет.
Форма приема заявок должна содержать семь полей для ввода имени и адреса электронной почты радиослушателя, названия и исполнителя песни, желаемых даты и времени воспроизведения песни, а также произвольного комментария. Кнопка «Отправить» должна запускать PHP-скрипт. Его задача -- проверка корректности введенных данных и отправка письма с данными на определенный электронный почтовый ящик в определенном формате.
Клиентское приложение информационной системы «Песни и исполнители» должно автоматически один раз в три минуты проверять наличие новых писем в электронном почтовом ящике, на который отправляет письма PHP-скрипт. Если письмо получено и имеет правильный формат, необходимо проверить наличие запрошенной песни в базе данных информационной системы. Если такая песня действительно существует, она добавляется в список заявок на воспроизведение в эфире.
2. КРАТКИЙ ОБЗОР ИНФОРМАЦИОННОЙ СИСТЕМЫ
Вкладка «Заявки» показана на рисунке 2.5:
Здесь отображается информация о заявках радиослушателей. Её редактирование может осуществляться во всех режимах работы программы.
В нижней части страницы расположена кнопка «Отправить», нажатие которой должно вызывать отправку письма с информацией из всех вышеперечисленных полей ввода.
На рисунке 3.1 приведен снимок экрана браузера, в котором открыта разработанная интернет-страница.
После нажатия кнопки отправки формы происходит передача значений всех полей формы ее обработчику. Отправка осуществляется методом POST.
Если какое-либо поле ввода оказалось пустым или имеет неправильный формат, выводится соответствующая ошибка. Пример показан на рисунке 3.2.
Вместо каждой строки подставляется значение соответствующего текстового поля, очищенного от предваряющих и замыкающих пробелов.
Исходный код PHP-скрипта приведен в Приложении 2.
4. УЛУЧШЕНИЕКЛИЕНТСКОЙ ЧАСТИ ИНФОРМАЦИОННОЙ СИСТЕМЫ
Таблица 4.1. Классы для получения электронной почты
Содержит методы для декодирования письма и получения текстовой информации.
Класс для обработки параметров в значениях MIME-заголовков(заголовков электронных писем).
Основной класс для работы с протоколом Pop3.
Он содержит методы для подключения к почтовому серверу, завершения сеанса связи с сервером, получения следующего письма, удаления текущего письма, передачи команды почтовому серверу и чтению строк из ответа сервера.
Универсальный обработчик ответов почтового сервера.
Содержит методы для получения из ответа сервера информации о количестве писем и их размере, а также передачи обработанного письма на основе данных, полученных от почтового сервера
Исходный код этих классов приведен в Приложении 3.
5. ПРИМЕР ПОЛУЧЕНИЯ ЗАЯВКИ ПО ЭЛЕКТРОННОЙ ПОЧТЕ
Закажем для воспроизведения по радио песню «Маяк» группы Сплин. Для этого откроем сайт dj843.16mb.com и введем данные, как показано на рисунке 5.1:
Рисунок 5.1 - Форма заказа песни «Маяк» группы Сплин
электронный радиостанция заявка провайдер
После нажатия кнопки «Отправить», на сайте появилось сообщение, показанное на рисунке 5.2:
Рисунок 5.2 - Сообщение об отправке письма
Теперь закроем браузер, запустим клиентское приложение информационной системы.
Спустя три минуты после подключения приложения к базе данных, запрошенная нами заявка появилась в списке заявок, показанном на рисунке 5.3:
Рисунок 5.3 - Новая заявка в списке заявок информационной системы
С другими исходными данными результат аналогичен. Можно сделать вывод, что сайт и обновленная информационная система работают верно.
В ходе работы над курсовым проектом был разработан сайт радиостанции с возможностью оправки по электронной почте заявок на воспроизведение песен. В клиентское приложение информационной системы добавлена возможность получения заявок по электронной почте и автоматическое добавление их в базу данных и в список заявок, отображаемый в приложении.
Выполненная работа полностью удовлетворяет поставленной задаче.
В качестве дальнейшего развития информационной системы возможно расширение функциональности сайта радиостанции, заполнение его различной информацией о самой радиостанции, о песнях и исполнителях.


body { background: url("note.png"); }
<form action="form_processing.php" method="post">
<input size="60" name="your_name"></p>
<input size="60" name="artist"></p>
<p>Желаемое время (ЧЧ:ММ, ЧЧ.ММ):<br>
<textarea name="message" rows="5" cols="50"></textarea></p>
<p><input value="Отправить" type="submit"></p>
Код PHP-скрипта для страницы радиостанции
/* Осуществляем проверку вводимых данных и их защиту от враждебных
$your_name = htmlspecialchars($_POST["your_name"]);
$email = htmlspecialchars($_POST["email"]);
$artist = htmlspecialchars($_POST["artist"]);
$song = htmlspecialchars($_POST["song"]);
$time = htmlspecialchars($_POST["time"]);
$date = htmlspecialchars($_POST["date"]);
$message = htmlspecialchars($_POST["messages"]);
/* Устанавливаем e-mail адресата */
/* Проверяем заполнены ли обязательные поля ввода, используя check_input
$your_name = check_input($_POST["your_name"], "Введите ваше имя!");
$email = check_input($_POST["email"], "Введите ваш e-mail!");
show_error("Е-mail адрес не существует");
$artist = check_input($_POST["artist"], "Укажите исполнителя песни!");
$song = check_input($_POST["song"], "Выберите название песни!");
$time = check_input($_POST["time"], "Укажите желаемое время!");
show_error("Формат ввода времени не верен. Следует вводить \"ЧЧ:ММ\", \"Ч:ММ\", \"Ч.ММ\" или \"ЧЧ.ММ\"");
$date = check_input($_POST["date"], "Укажите желаемую дату!");
show_error("Формат ввода даты не верен. Следует вводить \"ДД.ММ.ГГГГ\"");
$message = check_input($_POST["message"], "Вы забыли написать комментарий!");
/* Создаем новую переменную, присвоив ей значение */
/* Отправляем сообщение, используя mail() функцию */
$from = "From: $your_name <$email> \r\n Reply-To: $email \r\n";
mail($myemail, "DJ843", $message_to_myemail, $from);
<p>Ваше сообщение было успешно отправлено!</p>
<p><a href="index.html">Вернуться назад</a></p>
/* Если при заполнении формы были допущены ошибки, сработает
function check_input($data, $problem = "")
if ($problem && strlen($data) == 0)
return preg_match('/^([01]?[0-9]|2[0-3])(:|\.)[0-5][0-9]$/', $time);
if (checkdate($month, $day, $year))
return preg_match("|^[-0-9a-z_\.]+@[-0-9a-z_^\.]+\.[a-z]{2,6}$|i", $email);
<p>Исправьте, пожалуйста, следующую ошибку:</p>
Исходный текст классов для получения почты
usingSystem.Text.RegularExpressions;
privatereadonlystring _ContentTransferEncoding = String.Empty;
privatereadonlyDictionary<string, object> _Headers;
privatereadonlystring _Source = String.Empty;
///<param name="source">Исходный текст письма</param>
// выделение заголовков (до первых двух переводов строк)
intheadersTail = source.IndexOf("\r\n\r\n");
string h = headersTail == -1 ? source :source.Substring(0, headersTail);
// выделение тела с конца заголовков
string b = source.Substring(headersTail + 4,
source.Length - headersTail - 4); // 4 = "\r\n\r\n".Length
if (_Headers.ContainsKey("Content-Transfer-Encoding"))
_Headers["Content-Transfer-Encoding"].ToString().ToLower();
/// Разбор адреса электронной почты
///<paramname="source">Строка, из которой нужно получить адрес</param>
privateMailAddressParseMail(string source)
if (String.IsNullOrEmpty(source)) returnnull;
@"(?<name>[^\<]*?)[\<]{0,1}(?<email>[A-Za-zА-Яа-яЁё0-9_\-\.]+@[A-Za-zА-Яа-яЁё0-9_\-\.]+)[\>]{0,1}",
RegexOptions.IgnoreCase | RegexOptions.Multiline);
if (m == null || String.IsNullOrEmpty(m.Value)) returnnull;
string email = m.Groups["email"].Value.Trim();
if (String.IsNullOrEmpty(email)) returnnull;
string name = m.Groups["name"].Value.Trim("\" ".ToCharArray());
///<paramname="h">Источник, из которого нужно получить заголовки</param>
privateDictionary<string, object>ParseHeaders(string h)
StringComparer.CurrentCultureIgnoreCase);
// декодирование текстовых данных в заголовках
@"([\x22]{0,1})\=\?(?<cp>[\w\d\-]+)\?(?<ct>[\w]{1})\?(?<value>[^\x3f]+)\?\=([\x22]{0,1})",
RegexOptions.Multiline | RegexOptions.IgnoreCase);
h = Regex.Replace(h, @"([\r\n]+)^(\s+)(.*)?$", " $3",
// разбор заголовков и занесение их в коллекцию
varmyReg = newRegex(@"^(?<key>[^\x3A]+)\:\s{1}(?<value>.+)$",
MatchCollection mc = myReg.Matches(h);
string key = m.Groups["key"].Value;
// если указанный ключ уже есть в коллекции,
// тип данных - строка, преобразование в коллекцию
// добавление в коллекцию первого элемента
// добавление в коллекцию текущего элемента
// вставляем коллекцию элементов в найденный заголовок
((ArrayList)result[key]).Add(m.Groups["value"].Value);
m.Groups["value"].Value.TrimEnd("\r\n ".ToCharArray()));
///Функция обратного вызова, обрабатывается в методе ParseHeaders,
/// производит декодирование данных в заголовках, в соответствии с
privatestringHeadersEncode(Match m)
Encodingcp = Encoding.GetEncoding(m.Groups["cp"].Value);
switch (m.Groups["ct"].Value.ToUpper())
result = ParseQuotedPrintable(m.Groups["value"].Value);
Convert.FromBase64String(m.Groups["value"].Value));
///<param name="source">Текст для декодирования</param>
privatestringParseQuotedPrintable(string source)
source = Regex.Replace(source, @"(\=)([^\dABCDEFabcdef]{2})", "");
returnRegex.Replace(source, @"\=(?<char>[\d\w]{2})",
///Функция обратного вызова для ParseQuotedPrintable
privatestringQuotedPrintableEncode(Match m)
NumberStyles.AllowHexSpecifier)).ToString();
///Возврат текстовых данных текущей части письма
return !IsText ? String.Empty : _Data.ToString();
if (Headers.ContainsKey("Subject"))
return Headers["Subject"].ToString();
if (!Headers.ContainsKey("To")) returnnull;
_To = ParseMail(Headers["To"].ToString());
if (!Headers.ContainsKey("Return-Path")) returnnull;
_ReturnPath = ParseMail(Headers["Return-Path"].ToString());
returnConvert.ToDateTime(Headers["Date"]);
if (!Headers.ContainsKey("From")) returnnull;
_From = ParseMail(Headers["From"].ToString());
publicDictionary<string, object> Headers
publicstringContentTransferEncoding
/// Возвращает true, если в текущей части письма нет никаких данных
return _Data == null || (_Data isstring
&&String.IsNullOrEmpty(_Data.ToString()));
/// Возвращает true, если текущая часть письма содержит текстовые данные
using System.Text.RegularExpressions;
/// Класс для обработки параметров в значениях MIME-заголовков
privatereadonlyDictionary<string, string> _Parameters;
privatereadonlystring _Source = String.Empty;
privatereadonlystring _Type = String.Empty;
///<param name="source">Параметр</param>
if (String.IsNullOrEmpty(source)) return;
// все содержимое источника является информацией о типе
_Type = source.Substring(0, typeTail);
string p = source.Substring(typeTail + 1,
String Comparer.CurrentCultureIgnoreCase);
@"(?<key>.+?)=((""(?<value>.+?)"")|((?<value>[^\;]+)))[\;]{0,1}",
MatchCollection mc = myReg.Matches(p);
if (!_Parameters.ContainsKey(m.Groups["key"].Value))
_Parameters.Add(m.Groups["key"].Value.Trim(),
Public Dictionary<string, string>ParametersDictionary
/// Основной класс для работы с протоколом Pop3
///<param name="formMain">Главная форма приложения</param>
///<param name="host">Имяхоста</param>
///<param name="userName">Логин доступа</param>
///<param name="password">Пароль доступа</param>
public Pop3Client(FormMainformMain, string host, stringuserName,
/// Подключение к почтовому серверу
IPHostEntrymyIPHostEntry = Dns.GetHostEntry(_Host);
if (myIPHostEntry == null || myIPHostEntry.AddressList == null
|| myIPHostEntry.AddressList.Length<= 0)
varformMessage = newFormMessage("Ошибка");
"Не удалось определить IP-адрес по хосту.");
// получение сетевой конечной точки
varmyIPEndPoint = newIPEndPoint(myIPHostEntry.AddressList[0],
_Socket = newSocket(AddressFamily.InterNetwork, SocketType.Stream,
// размер приемного буфера в байтах
Command(String.Format("USER {0}", _UserName));
Command(String.Format("PASS {0}", _Password));
varformMessage = newFormMessage("Ошибка");
// запрос статистики почтового ящика
varformMessage = newFormMessage("Ошибка");
_ServerResponse.ParseStat(outMessageCount, outMessagesSize);
/// Завершение сеанса связи с сервером
if (_Index >MessageCount) returnfalse;
Command(String.Format("RETR {0}", _Index));
varformMessage = newFormMessage("Ошибка");
///<param name="index">Номер письма</param>
varformMessage = newFormMessage("Ошибка");
String.Format("Индекс должен быть от 1 и не больше{0}",
Command(String.Format("DELE {0}", index));
varformMessage = newFormMessage("Ошибка");
/// Отправление команды почтовому серверу
///<param name="cmd">Команда</param>
varformMessage = newFormMessage("Ошибка");
"Соединение с сервером не установлено. Откройте соединение методом Connect.");
byte[] b = Encoding.ASCII.GetBytes(String.Format("{0}\r\n", cmd));
if (_Socket.Send(b, b.Length, SocketFlags.None) != b.Length)
varformMessage = newFormMessage("Ошибка");
"При отправке данных удаленному серверу произошла ошибка.");
/// Чтение первой строки ответа сервера из буфера
var b = newbyte[_Socket.ReceiveBufferSize];
var result = newStringBuilder(_Socket.ReceiveBufferSize);
while (_Socket.Poll(1000000, SelectMode.SelectRead)
_Socket.Receive(b, _Socket.ReceiveBufferSize,
result.Append(Encoding.ASCII.GetChars(b, 0, s));
returnresult.ToString().TrimEnd("\r\n".ToCharArray());
/// Получение содержимого ответа сервера из буфера
var b = newbyte[_Socket.ReceiveBufferSize];
var result = newStringBuilder(_Socket.ReceiveBufferSize);
while (_Socket.Poll(1000000, SelectMode.SelectRead)
_Socket.Receive(b, _Socket.ReceiveBufferSize,
result.Append(Encoding.GetEncoding("windows-1251").GetChars(
usingSystem.Text.RegularExpressions;
/// Универсальный обработчик ответов почтового сервера
IsError = source.StartsWith("-ERR"); // ошибка или нет
// сообщение о результате выполнения команды
varmyReg = newRegex(@"(\+OK|\-ERR)\s{1}(?<msg>.*)?",
RegexOptions.Multiline | RegexOptions.IgnoreCase);
Server Message = myReg. Is Match(source) ? myReg. Match(source).Groups["msg"].Value : source;
if (source.IndexOf("\r\n") == -1) return;
Body = source.Substring(source.IndexOf("\r\n") + 2,
source.Length - source.IndexOf("\r\n") - 2);
if (Body.IndexOf("\r\n\r\n.\r\n") != -1)
Body = Body.Substring(0, Body.IndexOf("\r\n\r\n.\r\n"));
/// Реализация неявного оператора преобразования
publicstaticimplicitoperatorPop3Result(string value)
/// Получение из ответа сервера информации о количестве писем и их размере.
/// Используется только при команде STAT
///<paramname="messagesCount">Количество сообщений (начиная с 1)</param>
///<param name="messagesSize">Общий размер сообщений</param>
publicvoidParseStat(outintmessagesCount, outintmessagesSize)
varmyReg = newRegex(@"(?<count>\d+)\s+(?<size>\d+)");
int.TryParse(m.Groups["count"].Value, outmessagesCount);
int.TryParse(m.Groups["size"].Value, outmessagesSize);
/// Передача обработанного письма на основе данных, полученных от почтового сервера
///<paramname="m">Переменная, в которую будет передано обработанное письмо</param>
/// Показатель ошибки в ответе сервера
/// Сообщение сервера (первая строка)
publicstringServerMessage { get; set; }
/// Тело ответа сервера, исключая код ответа и сообщение
Исходный текст метода обработки события таймера
///<param name="sender">Отправитель</param>
///<param name="e">Параметры</param>
privatevoidtimerMail_Tick(object sender, EventArgs e)
Pop3Client myPop3 = newPop3Client(this, "pop.yandex.ru", "dj843", "isdjisdj");
string[] separator = new[] { "\r\n" };
string[] message = messageText.Split(separator,
StringSplitOptions.RemoveEmptyEntries);
for (int i = 4; i <message.Length; i++)
SqlCommand com = _Connection.CreateCommand();
com.CommandText = "EXECUTE FindSongSelect @N1, @N2";
com.Parameters.Add("@N1", SqlDbType.NVarChar).Value = message[1];
com.Parameters.Add("@N2", SqlDbType.NVarChar).Value = message[0];
SqlDataAdapterdataAdapter = newSqlDataAdapter(com);
int.Parse(message[2].Substring(6, 4)),
int.Parse(message[2].Substring(3, 2)),
int.Parse(message[2].Substring(0, 2)),
int.Parse(message[3].Substring(0, 2)),
int.Parse(message[3].Substring(3, 2)),
com.CommandText = "EXECUTE RequestInsert @N1, @N2, @N3";
com.Parameters.Add("@N1", SqlDbType.Int).Value = nSong;
com.Parameters.Add("@N2", SqlDbType.DateTime).Value = time;
com.Parameters.Add("@N3", SqlDbType.Text).Value = text;
dataAdapter = newSqlDataAdapter(com);
bindingSourceRequest.DataSource = RunSP("RequestSelect");
///<param name="sender">Отправитель</param>
///<param name="e">Параметры</param>
privatevoidFormMain_Shown(object sender, EventArgs e)
Функциональное назначение, обоснование необходимости WEB-сайта, технические требования. Структурная схема системы, выбор языка программирования и программных средств. Перенос сайта на хостинг, регистрация на поисковиках. Тестирование на кроссбраузерность. дипломная работа [4,9 M], добавлен 18.12.2011
Рассмотрение средств создания web-страниц: HTML, CSS и РНР. Разработка приложения в PhpMyAdmin, работающего с базой данных "Спортивные организации города". Соединение с сервером и базой данных. Создание сайта "Институт" в Macromedia Dreamweaver 8. курсовая работа [461,8 K], добавлен 10.07.2015
Методы создания сайта; выбор и сравнение программных платформ. Разработка структуры и дизайна сайта. Установка Joomla!, настройка расширений и выбор хостинга. Аппаратно-программные способы и средства обеспечения информационной безопасности веб-сайта. дипломная работа [3,6 M], добавлен 08.04.2014
Сайтостроение. Классификация сайтов. CMS, выбор системы управления контентом для сайта. Регистрация домена, хостинг, размещение сайта в сети. VPS или виртуальный выделенный сервер. Поисковая оптимизация сайта. Файл robots.txt. Карта сайта sitemap.xml. курсовая работа [139,4 K], добавлен 18.02.2015
Понятие и виды хостинга. Характеристика способов раскрутки веб-сайта. Обоснование необходимости и особенности разработки сайта для гостиничного предприятия, его назначение. Анализ сайтов-конкурентов. Выбор хостинга и домена, метода продвижения сайта. контрольная работа [310,6 K], добавлен 25.12.2012
Предметная область и проектирование сайта: определение потенциальных пользователей, информационные направления сайта (контент, дизайн, навигация, web-формы). Разработка сайта и дополнительные технические сведения: web-server и СУБД, CMS и хостинг. курсовая работа [637,4 K], добавлен 18.06.2012
Выбор средств разработки. Написание сценариев PHP. Разработка базы данных MySQL. Описания организации иерархической многопользовательской модульной структуры сайта с возможностью управления содержанием. Создание средств для удаленного администрирования. практическая работа [4,8 M], добавлен 12.06.2013
Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д. PPT, PPTX и PDF-файлы представлены только в архивах. Рекомендуем скачать работу .

© 2000 — 2021



<strong>Разработка сайта радиостанции "DJ843" с формой заказа песни курсовая работа. Программирование, компьютеры и кибернетика.</strong>
Реферат: Титрование с применением окислительно-восстановительной реакции
Реферат На Тему Курортна Інфраструктура Господарства Автономної Республіки Крим
Контрольная работа по теме Механизмы контроля и 'группы поддержки' Чан Кайши в Гоминьдане в ходе Первого и Второго Северного походов (1926-1928 гг.)
Дипломная работа по теме Издержки предприятия
Дипломная работа по теме Изучение жанра антиутопии на уроках литературы в школе
Реферат: Описание систем радиоавтоматики
Контрольная работа по теме Экономика Автономной Республики Крым
Реферат: Эволюция языков программирования
Быть Честным С Самим Собой Итоговое Сочинение
Сравнение Монолитного Ядра И Микроядра Реферат
Курсовая работа по теме Діяльність ПАТ 'Дніпроспецсталь'
Доклад по теме Банан
Курсовая работа: Совершенствование маркетинговой деятельности промышленного предприятия
Реферат: Понятие и юридическое значение актов управления
Реферат Социальная Защита Населения Проблемы И Решения
Реферат Гост 2022 Образец
Реферат: Нетрадиционные источники энергии и их использование человеком. Скачать бесплатно и без регистрации
Контрольная работа: Валютні ф'ючерси
Курсовая работа по теме Выразительное чтение младших школьников
Реферат: Проблемы построения розничной торговой сети. Скачать бесплатно и без регистрации
<a href="https://telegra.ph/Sovershenstvovanie-sistemy-upravleniya-ehlektronnym-dokumentooborotom-v-municipalnom-uchrezhdenii---Menedzhment-i-trudovye-otnos-10-01">Совершенствование системы управления электронным документооборотом в муниципальном учреждении - Менеджмент и трудовые отношения презентация</a>
<a href="https://telegra.ph/Harakteristika-predpriyatiya-ODO-BelRosStrojByt---Menedzhment-i-trudovye-otnosheniya-otchet-po-praktike-10-01">Характеристика предприятия ОДО "БелРосСтройБыт" - Менеджмент и трудовые отношения отчет по практике</a>
<a href="https://telegra.ph/Suvorov-i-razvitie-voennogo-iskusstva-v-70-90-gg---Istoriya-i-istoricheskie-lichnosti-referat-09-30">Суворов и развитие военного искусства в 70-90 гг. - История и исторические личности реферат</a>


Report Page