Логическое проектирование

Федеральное государственное бюджетное образовательное учреждение высшего образования «Чувашский государственный университет имени И. Н. Ульянова»

Факультет информатики и вычислительной техники

Кафедра вычислительной техники

 

 

Отчет по курсовой работе

по дисциплине Базы данных

на тему «Разработка платформы для автоматизации заполнения протоколов СНО»

 

 

Работу выполнил: студент группы ИВТ-41-15 Агниашвили Д.В.

Работу принял: Ржавин В.В.

 

 

г. Чебоксары, 2017

 

Оглавление

Анализ предметной области

Концептуальное проектирование

Метод ER-диаграмм

Логическое проектирование

Создание запросов

Разработка форм

Описание форм

Разработка отчетов

Технология создания приложений PHP

Анализ многомерных данных

 

 

Бизнес правила.

1. Запрещается давать больше призовых мест, чем 40% от общего числа участников.

2. Запрещаетсяизменять данные людям, которые не получили права редактирования.

3. На «Ч.Г.У.» в одной секции максимум только 3 рекомендации к публикации в сборнике трудов конференции.

4.

 

Пользователи данной базы данных:

1. Секретарь

2. Сотрудник СНО факультета

3. Сотрудник СНО университета

4. Администратор

 

Состав базы данных.

1) Пользователь:

a. #ID

b. #НОМ_ФАКУЛЬТЕТА;

c. #НОМ_РОЛИ;

d. ID ВКонтакте;

e. Имя;

f. Фамилия;

g. Ссылка на фото;

2) Секция:

a. #ID

b. #НОМ_СЕКЦИИ;

c. #НОМ_ФАКУЛЬТЕТА;

d. Название;

e. Дата проведения;

f. Аудитория;

g. Статистика;

3) Факультет:

a. #ID

b. Короткое название;

c. Полное название

d. Название в родительном падеже

e. ФИО Декана

f. ФИО научного руководителя СНО

4) Комиссия:

a. #ID

b. #НОМ_СЕКЦИИ;

c. #НОМ_СТАТУСА;

d. ФИО;

e. #ДОЛЖНОСТИ;

5) Статус:

a. #ID;

b. Название;

6) Доклад:

a. #ID;

b. #НОМ_СЕКЦИИ;

c. Название;

d. Место;

e. Отметка «По программе»;

7) Рекомендации

a. #ID;

b. Название

c. Отметка, что доступно

8) Руководитель:

a. #ID;

b. #НОМ_ ДОКЛАДА;

c. ФИО;

d. Должность;

9) Докладчик:

a. #ID;

b. #НОМ_ДОКЛАДА;

c. #НОМ_ОПЦИИ;

d. ФИО;

e. Телефон;

10) Опции докладчика:

a. #ID;

b. #ДОКЛАДЧИКА;

c. #ТИП_ДОКЛАДЧИКА;

d. meta_key;

e. meta_value;

Типы связей.

Пользователь добавляет секцию (M:1)

Пользователь числится на факультете (M:1)

Секция имеет комиссию (1:M)

Комиссия делится на виды (M:1)

На секции показывают доклады (1:M)

У докладов есть руководители (1:M)

У докладов есть докладчики (1:M)

 

 

Концептуальное проектирование

Название Описание
1. Пользователь Содержит информацию о пользователе системы
2. Секция Содержит информацию о секции
3. Руководитель Содержит информацию о руководителе доклада
4. Комиссия Содержит информацию о комиссии секции
5. Докладчик Содержит информацию о докладчике
6. Доклад Содержит информацию о докладе

 

 

Метод ER-диаграмм.

 

 

Логическое проектирование

Метод декомпозиции

Определим все функциональные зависимости, сведем их в таблицу и построим диаграмму функциональных зависимостей:

РИСУНОК

 

Создание запросов.

Описание запросов

Текст запроса
1) Выдать всех секретарей секций SELECT * FROM `commission` WHERE `id_status` = 1;
2) Выдать список секций, которые были на ИВТ или ИГФ SELECT * FROM `sections` WHERE `id_fac` = 1 OR `id_fac` = 5;
3) Выдать список секций, которые проводятся 14.11.2017 SELECT * FROM `sections` WHERE `datetime` = ‘2017-11-14’
4)  
5)  
6)  
7) Выдать секцию с самым большим количеством докладчиков SELECT * FROM `sections` WHERE `count_users` = (SELECT MAX(`count_users`) FROM `sections`)
8)  
9)  
10)  
11)  
12)  
13)  
14)  

 

 

Имя запроса Текст запроса
  Все группы с префиксом Иванов Выводит список всех спикеров, у которых ФИО начинается с Иванов SELECT * FROM `speakers` WHERE `fio` LIKE `%Иванов%` AND `type` IN (`chuvsu`,`_chuvsu`);
  ORDER BY 'date' LIMIT 5 Выводит все поля 5-ти самых последних секций SELECT * FROM `sections` ORDER BY 'date' LIMIT 5;
  Фильтр пользователей Сортирует студентов по ФИО и выдает докладчиков SELECT * FROM `users` WHERE `id_report` = ORDER BY `fio`;
  Созданиеархивной таблицы Создает временную таблицу сообщений студентов. CREATE TABLE IF NOT EXISTS `msgs_rar` ( `id` int(255) NOT NULL AUTO_INCREMENT, `datetime` datetime NOT NULL, `user_id` int(16) NOT NULL, `message` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, `level` int(11) NOT NULL DEFAULT '0', UNIQUE KEY `id` (`id`));
  Удаление таблицы. Удаляет все записи из таблицы DROPTABLE `bot_sms`
  Обновление записи Администратор публикует идею UPDATE `ideas` SET `posted` = 1 WHERE `ID` =?
  Группирование данных Выдаёт из таблицы работ студентов выполненные работы SELECT COUNT(*),`lab_works`.`name_id`, SUM(`lab_works`.`is_complied`),`objects`.`name_object` FROM `lab_works` INNER JOIN `objects` ON `lab_works`.`name_id` = `objects`.`ID` WHERE `lab_works`.`user_id`=? AND `lab_works`.`type_works`=? AND `lab_works`.`time_start` <=? AND `lab_works`.`unix_time` >=? GROUP BY `lab_works`.`name_id`
  Вывод дублей Выводит повторяющие ФИО докладчиков SELECT `fio` FROM `speakers` GROUP BY ` fio` HAVING COUNT `fio`) > 1
  Добавление записи INSERT INTO `users` (`id_vk`,`fio`,`GUID`) VALUES (?,?,?)
  Вывод плановых работ   Выводит список работ которые нужно сдавать студенту SELECT `reports`.`ID` AS `ID_REPORT`, `speakers`.`ID` AS `ID_SPEAKER`, `reports`.`id_section`, `reports`.`name_report`, `reports`.`place`, IFNULL(`speakers`.`id_report`,0) AS `id_report`, IFNULL(`speakers`.`fio`,0) AS `fio`, IFNULL(`speakers`.`type`,0) AS `type` FROM `reports` LEFT JOIN `speakers` ON `reports`.`ID` =`speakers`.`id_report` WHERE `reports`.`id_section` =? AND `reports`.`place` > 0 ORDER BY Выводит список работ которые нужно сдавать студенту SELECT `all_labs`.`ID` AS `all_labs_ID`, `objects`.`name_object`, `object_types`.`type`, `all_labs`.`serial_num`, `all_labs`.`id_type`, `all_labs`.`id_object`, `all_labs`.`name`, IFNULL(`all_labs_unicum`.`ID`, '0') AS `all_labs_unicum_ID`, IFNULL(`all_labs_unicum`.`is_started`, '0') AS `is_started`, IFNULL(`all_labs_unicum`.`id_complied`, '0') AS `is_complied` FROM `all_labs` LEFT JOIN ( SELECT * FROM `all_labs_unicum` WHERE `all_labs_unicum`.`id_user` =? ) AS `all_labs_unicum` ON `all_labs`.`ID` = `all_labs_unicum`.`id_all_labs` INNER JOIN `objects` ON `all_labs`.`id_object` = `objects`.`ID` INNER JOIN `object_types` ON `object_types`.`ID` = `all_labs`.`id_type` WHERE `all_labs`.`id_group` =? AND `all_labs`.`term` =? ORDER BY `id_type`, `id_object`,`serial_num` SELECT SUM(`mark`)/COUNT(`mark`) FROM `works` WHERE `id_user` =? AND `id_type`!= 1
  Данные за период Вывести все доклады у всех секций за определенный период SELECT * FROM `sections` INNER JOIN `reports` ON ` reports `.`id_ section` = ` sections `.`ID` WHERE ` reports`.`date` >=?  

 

Виды запросов

Вид запроса Шифр (ы)
  Запросы с выражениями, использующие 1. операторы строковых значений 2. все операторы сравнения с образцом 3. операторы обработки дат 4. операторы условных выражений 5. статистические функции по подмножеству 6. комплексные текстовые константы и константы даты  
  Использование логических операторов, включающих в себя комбинацию «И», «ИЛИ»  
  Запрос с вычисляемым полем  
  Запрос с предикатом TOP  
  Запрос, созданный из фильтра  
  Запрос с внутренним соединением по нескольким полям  
  Запрос с использованием внешнего соединения  
  Запрос с рекурсивным соединением  
  Запросы с параметрами  
  Запросы на группирование данных Вычислений итоговых значений по всем записям  
  Запросы на группирование данных Вычислений итоговых значений по группам записей 7, 13
  Отбор повторяющихся записей и записей без подчиненных  
  Запросы на удаление записи  
  Запросы на обновление записи  
  Запросы на добавление записей  
  Запросы на создание таблицы  
  Подчиненный запрос  
  Перекрестный запрос  

Разработка форм

Описание форм

Название формы Тип формы Назначение Примечание
  Данные по факультету Простая    
  Идеи сервиса Синхронизир    
  Настройки профиля      
  Работа с секциями      
  Секции      

Разработка отчетов

Название отчета Тип отчета Назначение
  Дипломы    
  Благодарность    
       

 

Название формы Тип формы Назначение
  Вывод таблицы посещаемости у 1 студента   Простая Вывод всей посещаемости за определенную неделю
  Загрузка портфолио студента Синхронизированная форма Вывод и изменение записей городов
  Добавление посещаемости   Синхронизированная форма Посещаемость группы
  Добавление пары Ленточная, всплывающая, Форма добавления расписания
  Форма Диалоговое окно, синхронизированная, всплывающая Посещаемость группы (Журнал учителя)
  Добавление плановой работы Диалоговое окно, синхронизированная, всплывающая Добавление работ, которые нужно сдать студентам
  Форма для председателей секций Простая Вывод всех таблиц, запросов и форм в виде дерева
  Редактирование роли студента Диалоговое окно Можно назначить роли для студентов
  Регистрационная форма Форма, состоящая из вкладок, синхронизированная, Регистрация абитуриента

 

 

Реализация

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

· создавать интерфейс, используя стандартные компоненты;

· передавать управление процессам, в зависимости от состояния системы;

· создавать оболочки для баз данных, как и сами базы данных;

· разрабатывать более надежные программы путем обработки исключительных ситуаций возникающих при некорректной работе программы.

Современные средства разработки характеризуются параметрами:

· поддержка объектно-ориентированного стиля программирования;

· возможность использования CASE-технологий, как для проектирования разрабатываемой системы, так и для разработки моделей реляционных баз данных;

· использование визуальных компонент для наглядного проектирования интерфейса;

· поддержка БД.

Выше перечисленными свойствами обладают языки программирования:

· VisualC++.

· Delphi;

· PHP;

· Python;

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

Для реализации данной АИС был выбран язык программирования PHP версии 7, так как она предоставляет наиболее широкие возможности для программирования web-приложений.

PHP — скриптовый язык общего назначения, интенсивно применяемый для разработки веб-приложений. В настоящее время поддерживается подавляющим большинством хостинг-провайдеров и является одним из лидеров среди языков[2], применяющихся для создания динамических веб-сайтов.

 

Преимущества PHP по сравнению с аналогичными программными продуктами.

· –быстрота разработки приложения;

· –высокая производительность разработанного приложения;

· низкие требования разработанного приложения к ресурсам компьютера;

· наращиваемость за счет встраивания новых компонентов и инструментов в среду PHP с помощью Composer;

· возможность разработки новых компонентов и инструментов собственными средствами PHP (существующие компоненты и инструменты доступны в исходных кодах);

· удачная проработка иерархии объектов.

К тому же работодателей интересует прежде всего скорость и качество создания программ, а эти характеристики может обеспечить только среда визуального проектирования, способная взять на себя значительные объемы рутинной работы по подготовке приложений, а также согласовать деятельность группы постановщиков, кодировщиков, тестеров и технических писателей. Возможности PHP полностью отвечают подобным требованиям и подходят для создания систем любой сложности.

В качестве системы управления базами данных (СУБД ) был выбран программный механизм, предназначенный для записи, поиска, сортировки, обработки (анализа) и печати информации, содержащейся в базе данных. К наиболее распространенным типам СУБД относятся: MS SQL Server, Oracle, Informix, Sybase, MS Access. В качестве основной была выбрана СУБД MySQL. С точки зрения простоты администрирования MySQL лучше продуман, что и повлияло на выбор данной системы.

 

Анализ многомерных данных

(тут будут графики разные с помощью MorrisJS)

 

 

Интеграция базы данных MySQL с WORD

Для Word используются файлы с расширением.docx, которые есть ничто иное как обычный zip-архив, поэтому решение напрашивается само собой: класс-генератор документов должен быть наследником класса ZipArchive, который доступен «из коробки». А остальное — дело техники.

 

require_once ('lib/PHPWord.php');

$controller = explode('/', $_GET['route']);

if (!isset($controller[1]) || strlen($controller[1]) == 0)

{die();}

$sectionID = intval(trim(strip_tags($controller[1])));

$sectionClass = new Section($sectionID,$db);

if (!$sectionClass->isIsset ())

{die();}

$sectionFacultyData = $sectionClass->getFacultySection();

$comision = new Commission($sectionID,$db);

 

$comisData = $comision->getCommision();

$report = new Report($sectionID,$db);

$positions = $sectionClass->getArrayPositions();

$fasc = $sectionClass->getArrayFaculties();

$courses = $sectionClass->getArrayCourses();

$uid = md5(uniqid(rand(), true));

$sectionData = $sectionClass->getDataSection ();

$dateArr = explode(':', $sectionData['time']);

$sectionData['time'] = $dateArr[0].":".$dateArr[1];

$stmt = $db->dbStream->prepare("SELECT `place`, COUNT(`place`)

FROM `reports`

 

WHERE `reports`.`id_section` =? GROUP BY `place`");

$stmt->bindValue(1, $sectionID, PDO::PARAM_INT);

try{$stmt->execute();}catch (PDOException $error) {trigger_error("Ошибка при работе с базой данных: {$error}");}

$countM = $stmt->fetchAll(PDO::FETCH_ASSOC);

$countmesta = 0;

$count = 0;

foreach ($countM as $key => $value)

{

$countmesta =($value['place']!= 0)? $countmesta + $value['COUNT(`place`)']: $countmesta;

$count += $value['COUNT(`place`)'];

}

if ($countmesta > ceil($count*0.4))

{

$answer = ['code' => '2',];

echo(json_encode($answer));

die();

}

$stmt = $db->dbStream->prepare("SELECT

`reports`.`ID` AS `ID_REPORT`,

`speakers`.`ID` AS `ID_SPEAKER`,

`speakers`.`id_position`,

`reports`.`id_section`,

`reports`.`name_report`,

`reports`.`place`,

IFNULL(`speakers`.`id_report`,0) AS `id_report`,

IFNULL(`speakers`.`fio`,0) AS `fio`,

IFNULL(`speakers`.`type`,0) AS `type`

FROM `reports`

LEFT JOIN `speakers`

ON `reports`.`ID` =`speakers`.`id_report`

WHERE `reports`.`id_section` =?

ORDER BY `reports`.`place` ");

$stmt->bindValue(1, $sectionID, PDO::PARAM_INT);

try{$stmt->execute();}catch (PDOException $error) {trigger_error("Ошибка при работе с базой данных: {$error}");}

$people = $stmt->fetchAll(PDO::FETCH_ASSOC);

/*

* Считаем количество

*/

$stmt = $db->dbStream->prepare("SELECT `meta_key`,`meta_value` FROM `count_people` WHERE `id_section` =?");

$stmt->bindValue(1, $sectionID, PDO::PARAM_INT);

try{$stmt->execute();}catch (PDOException $error) {trigger_error("Ошибка при работе с базой данных: {$error}");}

$comisCount = $stmt->fetchAll(PDO::FETCH_ASSOC);

$arrayCOUNT = array();

foreach ($comisCount as $countkey)

{

if (!isset($arrayCOUNT[$countkey['meta_key']]))

{

$arrayCOUNT[$countkey['meta_key']] = intval($countkey['meta_value']);

} else

{

$arrayCOUNT[$countkey['meta_key']] += $countkey['meta_value'];

}

}

/*

* Считаем количество коммисии

*/

$stmt = $db->dbStream->prepare("SELECT `id_position`, COUNT(`id_position`) FROM `commission` WHERE `id_section` =? GROUP BY `id_position`");

$stmt->bindValue(1, $sectionID, PDO::PARAM_INT);

try{$stmt->execute();}catch (PDOException $error) {trigger_error("Ошибка при работе с базой данных: {$error}");}

$comisCount = $stmt->fetchAll(PDO::FETCH_ASSOC);

foreach ($comisCount as $countkey)

{

if (!isset($arrayCOUNT[$countkey['id_position']]))

{

$arrayCOUNT[$countkey['id_position']] = intval($countkey['COUNT(`id_position`)']);

} else

{

$arrayCOUNT[$countkey['id_position']] += $countkey['COUNT(`id_position`)'];

}

}

/*

* Считаем количество докладчиков

*/

foreach ($people as $user)

{

if (!isset($arrayCOUNT[$user['id_position']]))

{

$arrayCOUNT[$user['id_position']] = 1;

} else

{

$arrayCOUNT[$user['id_position']]++;

}

 

}

$count = 0;

foreach ($arrayCOUNT as $arrayC)

{

$count += $arrayC;

}

 

 

$PHPWord = new PHPWord();

 

// New portrait section

$section = $PHPWord->createSection();

$PHPWord->setDefaultFontName('Times New Roman');

$PHPWord->setDefaultFontSize(12);

// Add text elements

$PHPWord->addFontStyle('facultyStyle', array('bold'=>true, 'size'=>12));

$PHPWord->addFontStyle('textFontStyle', array('size'=>12));

$PHPWord->addFontStyle('italicStyle', array('bold'=>true, 'italic'=>true, 'size'=>12));

$PHPWord->addParagraphStyle('pStyle', array('align'=>'center', 'spaceAfter'=>100));

$section->addText($sectionFacultyData['full_name'],'facultyStyle', 'pStyle');

$section->addText('ПРОТОКОЛ','textFontStyle', 'pStyle');

$section->addText('заседания Регионального фестиваля студентов и молодёжи «Человек. Гражданин. Учёный» (ЧГУ-2017) от 14 ноября 2017 года','textFontStyle', 'pStyle');

$section->addText("Секция «".$sectionData['name']."»", 'facultyStyle', 'pStyle');//underline

$section->addText('ауд. '.$sectionData['cabinet'].', '.$sectionData['date'].' начало в '.$sectionData['time'], 'facultyStyle', 'pStyle');

$section->addTextBreak(1);

// Define table style arrays

$styleTable = array('borderSize'=>6, 'borderColor'=>'000000', 'cellMargin'=>80);

$styleFirstRow = array('borderBottomSize'=>6, 'borderBottomColor'=>'000000', 'bgColor'=>'FFFFFF');

 

// Define cell style arrays

$styleCell = array('valign'=>'center');

$styleCellBTLR = array('valign'=>'center', 'textDirection'=>PHPWord_Style_Cell::TEXT_DIR_BTLR);

 

// Define font style for first row

$fontStyle = array('align'=>'left');

$italicStyle = array('italic'=>true, 'align'=>'center');

 

 

// Add table style

$PHPWord->addTableStyle('myOwnTableStyle', $styleTable, $styleFirstRow);

 

// Add table

$table = $section->addTable('myOwnTableStyle');

 

// Add row

$table->addRow();

 

// Add cells

$table->addCell(3000, $styleCell)->addText('Состав комиссии', $italicStyle);

$table->addCell(4000, $styleCell)->addText('Ф.И.О.', $italicStyle);

$table->addCell(3000, $styleCell)->addText('Должность', $italicStyle);

// Add more rows / cells

for($i = 1; $i <= count($comisData); $i++) {

$table->addRow();

if($comisData[$i-1]['id_status'] == 1)

{

$table->addCell(3000)->addText('Председатель секции', $italicStyle);

 

} elseif($comisData[$i-1]['id_status'] == 2)

{

$table->addCell(3000)->addText('Секретарь секции', $italicStyle);

} else

{

$table->addCell(3000)->addText('Другие члены жюри', $italicStyle);

}

$table->addCell(4000)->addText($comisData[$i-1]['fio']);

$table->addCell(3000)->addText($comisData[$i-1]['name']);

}

$section->addTextBreak(1);

$PHPWord->addParagraphStyle('textStyle', array('align'=>'left', 'spaceAfter'=>100));

$section->addText('Присутствовали (количество):'.$count.' чел.', null, 'textStyle');

$section->addText('Из них (указать в числах):', null, 'textStyle');

foreach ($positions as $position)

{

if (isset($arrayCOUNT[$position['ID']]) && $arrayCOUNT[$position['ID']] > 0)

{

$section->addText($arrayCOUNT[$position['ID']].' '.$main->num2word($arrayCOUNT[$position['ID']], [(strtolower($position['name'])), $position['name_2'], $position['name_3']]), null, 'textStyle');

}

}

 

$section = $PHPWord->createSection();

$section->addText('I. ВЫСТУПИЛИ:', null, 'textStyle');

// Add table style

$PHPWord->addTableStyle('myOwnTableStyle', $styleTable, $styleFirstRow);

// Add table

$table = $section->addTable('myOwnTableStyle');

$table->addRow();

$table->addCell(200, $styleCell)->addText('№ п/п', $italicStyle);

$table->addCell(3000, $styleCell)->addText('Ф.И.О. докладчика', $italicStyle);

$table->addCell(1500, $styleCell)->addText('Группа', $italicStyle);

$table->addCell(2000, $styleCell)->addText('Название доклада', $italicStyle);

$table->addCell(3000, $styleCell)->addText('Ф.И.О. и должность научного руководителя', $italicStyle);

$index = 1;

$stmt = $db->dbStream->prepare("SELECT * FROM `reports` WHERE `id_section` =?");

$stmt->bindValue(1, $sectionID, PDO::PARAM_INT);

try{$stmt->execute();}catch (PDOException $error) {trigger_error("Ошибка при работе с базой данных: {$error}");}

$reports = $stmt->fetchAll(PDO::FETCH_ASSOC);

 

foreach ($reports as $report)

{

$table->addRow();

$table->addCell(200, $styleCell)->addText($index, $fontStyle);

$stmt = $db->dbStream->prepare("SELECT * FROM `speakers` WHERE `id_report` =?");

$stmt->bindValue(1, $report['ID'], PDO::PARAM_INT);

try{$stmt->execute();}catch (PDOException $error) {trigger_error("Ошибка при работе с базой данных: {$error}");}

$users = $stmt->fetchAll(PDO::FETCH_ASSOC);

if ($stmt->rowCount()!= 0)

{

$userStrName = "";

$userStrGroup = "";

foreach ($users as $key => $user)

{

$stmt = $db->dbStream->prepare("SELECT * FROM `speakermeta` WHERE `speaker_id` =? ");

$stmt->bindValue(1, $user['ID'], PDO::PARAM_INT);

try{$stmt->execute();}catch (PDOException $error) {trigger_error("Ошибка при работе с базой данных: {$error}");}

$meta = $stmt->fetchAll(PDO::FETCH_ASSOC);

$tArr = array();

foreach ($meta as $m => $me)

{

$tArr[$me['meta_key']] = $me['meta_value'];

}

switch ($user['type']) {

case 'chuvsu':

$userStrGroup.= (strlen($tArr[$listUserTypes[$user['type']]]) > 0)? (isset($users[$key + 1]))? $tArr[$listUserTypes[$user['type']]].', ': $tArr[$listUserTypes[$user['type']]]: '';

$tArr['b_k'] = ($tArr['b_k'] == 1)? ($tArr['stip'] == 1)? "Бюджет, получает":"Бюджет": "Контракт";

break;

case '_chuvsu':

$userStrGroup.= (strlen($tArr[$listUserTypes[$user['type']]]) > 0)? (isset($users[$key + 1]))? $tArr[$listUserTypes[$user['type']]]." ".$tArr['inst'].', ': $tArr[$listUserTypes[$user['type']]]." ".$tArr['inst']: '';

//$table->addCell(2300, $styleCell)->addText($tArr['name_group'], $fontStyle);

//$table->addCell(2000, $styleCell)->addText("", $fontStyle);

break;

case 'school':

$userStrGroup.= (strlen($tArr[$listUserTypes[$user['type']]]) > 0)? (isset($users[$key + 1]))? $tArr['school'].', ': $tArr['school']: '';

//$table->addCell(2300, $styleCell)->addText($tArr['class'], $fontStyle);

//$table->addCell(2000, $styleCell)->addText("", $fontStyle);

break;

}

 

$userStrName.= (isset($users[$key + 1]))? $user['fio'].', ': $user['fio'];

}

$table->addCell(3000, $styleCell)->addText($userStrName, $fontStyle);

$table->addCell(1500, $styleCell)->addText($userStrGroup, $fontStyle);

}

else

{

$table->addCell(2000, $styleCell)->addText("", $fontStyle);

$table->addCell(2000, $styleCell)->addText("", $fontStyle);

}

$table->addCell(2000, $styleCell)->addText($report['name_report'], $fontStyle);

$stmt = $db->dbStream->prepare("SELECT * FROM `managers` INNER JOIN `positions` ON `positions`.`ID`=`managers`.`id_position` WHERE `id_report` =? ");

$stmt->bindValue(1, $report['ID'], PDO::PARAM_INT);

try{$stmt->execute();}catch (PDOException $error) {trigger_error("Ошибка при работе с базой данных: {$error}");}

$managers = $stmt->fetchAll(PDO::FETCH_ASSOC);

if ($stmt->rowCount()!= 0)

{

$str = "";

foreach ($managers as $m => $mng)

{

$str.= (isset($managers[$m + 1]))? $mng['fio']." ".mb_strtolower($mng['name']).', ': $mng['fio']." ".mb_strtolower($mng['name']).'';

}

$table->addCell(3000, $styleCell)->addText($str, $fontStyle);

}

else

{

$table->addCell(3000, $styleCell)->addText("", $fontStyle);

}

$index++;

}

$section->addTextBreak(1);

$section->addText('II. РЕШИЛИ:', null, 'textStyle');

$section->addText('1) По итогам обсуждения заслушанных докладов присудить следующие призовые места:', null, 'textStyle');

$PHPWord->addTableStyle('myOwnTableStyle', $styleTable, $styleFirstRow);

// Add table

$table = $section->addTable('myOwnTableStyle');

$table->addRow();

$table->addCell(200, $styleCell)->addText('Место', $italicStyle);

$table->addCell(2000, $styleCell)->addText('Ф.И.О. докладчика', $italicStyle);

$table->addCell(3000, $styleCell)->addText('Группа', $italicStyle);

$table->addCell(1000, $styleCell)->addText('Бюджет/Контракт', $italicStyle);

$table->addCell(2000, $styleCell)->addText('Получает ли стипендию', $italicStyle);

$table->addCell(2000, $styleCell)->addText('№ телефона', $italicStyle);

foreach ($people as $user)

{

if ($user['place'] > 0)

{

$table->addRow();

$table->addCell(200, $styleCell)->addText($user['place'], $fontStyle);

$table->addCell(2000, $styleCell)->addText($user['fio'], $fontStyle);

$stmt = $db->dbStream->prepare("SELECT * FROM `speakermeta` WHERE `speaker_id` =? ");

$stmt->bindValue(1, $user['ID_SPEAKER'], PDO::PARAM_INT);

try{$stmt->execute();}catch (PDOException $error) {trigger_error("Ошибка при работе с базой данных: {$error}");}

$meta = $stmt->fetchAll(PDO::FETCH_ASSOC);

$tArr = array();

foreach ($meta as $m => $me)

{

$tArr[$me['meta_key']] = $me['meta_value'];

}

switch ($user['type']) {

case 'chuvsu':

$table->addCell(3000, $styleCell)->addText($tArr['name_group'], $fontStyle);

$table->addCell(1000, $styleCell)->addText(($tArr['b_k'] == 1)? "Бюджет":"Контракт", $fontStyle);

$table->addCell(2000, $styleCell)->addText(($tArr['stip'] == 1)? "да":"нет", $fontStyle);

$table->addCell(2000, $styleCell)->addText($tArr['phone'], $fontStyle);

break;

case '_chuvsu':

$table->addCell(3000, $styleCell)->addText($tArr['name_group'], $fontStyle);

$table->addCell(1000, $styleCell)->addText("", $fontStyle);

$table->addCell(2000, $styleCell)->addText("", $fontStyle);

$table->addCell(2000, $styleCell)->addText($tArr['phone'], $fontStyle);

break;

case 'school':

$table->addCell(3000, $styleCell)->addText($tArr['class'], $fontStyle);

$table->addCell(1000, $styleCell)->addText("", $fontStyle);

$table->addCell(2000, $styleCell)->addText("", $fontStyle);

$table->addCell(2000, $styleCell)->addText("", $fontStyle);

break;

}

}

}

$section->addText('2) Рекомендовать к публикации в сборнике трудов конференции следующий доклад:', null, 'textStyle');

 

$table = $section->addTable('myOwnTableStyle');

$table->addRow();

$table->addCell(2500, $styleCell)->addText('Ф.И.О. докладчика', $italicStyle);

$table->addCell(2000, $styleCell)->addText('Группа', $italicStyle);

$table->addCell(3000, $styleCell)->addText('Название доклада', $italicStyle);

$table->addCell(2500, $styleCell)->addText('Ф.И.О. и должность научного руководителя', $italicStyle);

/*

*

*/

$stmt = $db->dbStream->prepare("SELECT * FROM `reports` WHERE `id_section` =? AND `is_recommend_STK` = 1");

$stmt->bindValue(1, $sectionID, PDO::PARAM_INT);

try{$stmt->execute();}catch (PDOException $error) {trigger_error("Ошибка при работе с базой данных: {$error}");}

$reports = $stmt->fetchAll(PDO::FETCH_ASSOC);

 

foreach ($reports as $report)

{

$table->addRow();

$stmt = $db->dbStream->prepare("SELECT * FROM `speakers` WHERE `id_report` =?");

$stmt->bindValue(1, $report['ID'], PDO::PARAM_INT);

try{$stmt->execute();}catch (PDOException $error) {trigger_error("Ошибка при работе с базой данных: {$error}");}

$users = $stmt->fetchAll(PDO::FETCH_ASSOC);

if ($stmt->rowCount()!= 0)

{

$userStrName = "";

$userStrGroup = "";

foreach ($users as $key => $user)

{

$stmt = $db->dbStream->prepare("SELECT * FROM `speakermeta` WHERE `speaker_id` =? ");

$stmt->bindValue(1, $user['ID'], PDO::PARAM_INT);

try{$stmt->execute();}catch (PDOException $error) {trigger_error("Ошибка при работе с базой данных: {$error}");}

$meta = $stmt->fetchAll(PDO::FETCH_ASSOC);

$tArr = array();

foreach ($meta as $m => $me)

{

$tArr[$me['meta_key']] = $me['meta_value'];

}

$userStrGroup.= (strlen($tArr[$listUserTypes[$user['type']]]) > 0)? (isset($users[$key + 1]))? $tArr[$listUserTypes[$user['type']]].', ': $tArr[$listUserTypes[$user['type']]]: '';

$userStrName.= (isset($users[$key + 1]))? $user['fio'].', ': $user['fio'];

}

$table->addCell(3000, $styleCell)->addText($userStrName, $fontStyle);

$table->addCell(1500, $styleCell)->addText($userStrGroup, $fontStyle);

}

else

{

$table->addCell(2000, $styleCell)->addText("", $fontStyle);

$table->addCell(2000, $styleCell)->addText("", $fontStyle);

}

$table->addCell(2000, $styleCell)->addText($report['name_report'], $fontStyle);

$stmt = $db->dbStream->prepare("SELECT * FROM `managers` INNER JOIN `positions` ON `positions`.`ID`=`managers`.`id_position` WHERE `id_report` =? ");

$stmt->bindValue(1, $report['ID'], PDO::PARAM_INT);

try{$stmt->execute();}catch (PDOException $error) {trigger_error("Ошибка при работе с базой данных: {$error}");}

$managers = $stmt->fetchAll(PDO::FETCH_ASSOC);

if ($stmt->rowCount()!= 0)

{

$str = "";

foreach ($managers as $m => $mng)

{

$str.= (isset($managers[$m + 1]))? $mng['fio']." ".mb_strtolower($mng['name']).', ': $mng['fio']." ".mb_strtolower($mng['name']).'';

}

$table->addCell(3000, $styleCell)->addText($str, $fontStyle);

}

else

{

$table->addCell(3000, $styleCell)->addText("", $fontStyle);

}

}

 

 

/*

*

*/

$section->addTextBreak(1);

$styleTable1 = array('borderSize'=>1, 'borderColor'=>'FFFFFF', 'cellMargin'=>80);

$styleFirstRow1 = array('borderBottomSize'=>1, 'borderBottomColor'=>'FFFFFF', 'bgColor'=>'FFFFFF');

 

$PHPWord->addTableStyle('myOwnTab1', $styleTable1, $styleFirstRow1);

$table = $section->addTable('myOwnTab1');

 

for($i = 1; $i <= count($comisData); $i++) {

$table->addRow();

if($comisData[$i-1]['id_status'] == 1)

{

$table->addCell(6000)->addText('Председатель секции');

 

} elseif($comisData[$i-1]['id_status'] == 2)

{

$table->addCell(6000)->addText('Секретарь секции');

} else

{

$table->addCell(6000)->addText('Другие члены жюри');

}

$table->addCell(4000)->addText($comisData[$i-1]['fio']);

}

$table->addRow();

$table->addCell(6000)->addText('Научный руководитель СНО факультета');

// Save File

$objWriter = PHPWord_IOFactory::createWriter($PHPWord, 'Word2007');

$uid = md5(uniqid(rand(), true));

$objWriter->save($uid.'.docx');

 

Интеграция базы данных с VKAPI (взамет аутлука)

РазработкаJSON взаменXML документа. RESTAPI?

 

Список использованной литературы

Тексты платформы


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: