№
|
Наименование
элементов затрат
|
Сумма (руб.)
|
1
|
Материальные
расходы
|
16866
|
2
|
Затраты на
оплату труда
|
13200
|
3
|
Единый
социальный налог
|
3432
|
4
|
Амортизация
|
1686.6
|
5
|
Прочие расходы
|
10555.38
|
Всего 45739.98. Таким образом совокупность всех затрат на
разработку и внедрение данной программы не превышает реальной экономической
выгоды от неё. Тем самым она является экономически выгодной.
6. Техника
безопасности
6.1
Требования по охране труда в соответствии с инструкцией №32-04-Б
6.1.1
Требования безопасности перед началом работы
Перед началом работы необходимо:
· осмотреть и привести в порядок рабочее
место;
· отрегулировать освещенность на рабочем
месте, убедиться в достаточности освещенности, отсутствии отражений на экране,
отсутствии встречного светового потока;
· проверить правильность подключения
оборудования в электросеть;
· убедиться в наличии защитного заземления и
подключения экранного проводника к корпусу процессора;
· убедиться в отсутствии дискет в дисководах
процессора персонального компьютера;
· проверить правильность установки стола,
стула, подставки для ног, положения оборудования, угла наклона экрана,
положения клавиатуры и, при необходимости, произвести регулировку рабочего
стола и кресла, а также расположение элементов компьютера в соответствии с
требованиями эргономики и в целях исключения неудобных поз и длительных
напряжений тела.
При включении компьютера необходимо соблюдать следующую
последовательность включения оборудования:
· включить блок питания;
· включить периферийные устройства (принтер,
монитор, сканер и дт.);
· включить системный блок (процессор).
Запрещается приступать к работе при:
· отключенном заземляющем проводнике
защитного фильтра;
· обнаружении неисправности оборудования;
· отсутствии защитного заземления устройств
ПЭВМ.
6.1.2
Требования безопасности во время работы
Во время работы необходимо:
· в течение всего рабочего дня содержать в
порядке и чистоте рабочее место;
· держать открытыми все вентиляционные
отверстия устройств;
· при необходимости прекращения работы на
некоторое время корректно закрыть все активные задачи;
· во время перерыва в работе на компьютере
отключить питание, если пользователь находится в непосредственной близости
(менее 2 метров), в противном случае питание можно не отключать;
· при работе с текстовой информацией
выбирать наиболее физиологический режим представления черных символов на белом
фоне;
· соблюдать установленные режимом рабочего
времени регламентированные перерывы в работе; технические перерывы необходимо проводить
каждые 45 минут, длительность перерыва должна составлять не менее 5 − 15
минут в зависимости от напряженности рабочего графика;
· соблюдать правила эксплуатации
вычислительной техники в соответствии с инструкциями по эксплуатации;
· соблюдать расстояние от глаз до экрана в
пределах 60-80см;
· при обнаружении технических
неисправностей, которые могут привести к поражению электрическим током, работу
немедленно прекратить, отключить ПЭВМ от электрической сети и вызвать
обслуживающий технический персонал. До устранения неисправности работу не
возобновлять.
Во время работы запрещается:
· касаться одновременно экрана монитора и
клавиатуры;
· прикасаться к задней панели системного
блока (процессора) при включенном питании;
· загромождать верхние панели устройств
бумагами и посторонними предметами;
· переключать разъемы интерфейсных кабелей
периферийных устройств при включенном питании;
· допускать захламленность рабочего места
бумагой в целях недопущения накапливания органической пыли;
· производить отключение питания во время
выполнения активной задачи;
· производить частые переключения питания;
допускать попадания влаги на поверхность системного блока (процессора),
монитора, рабочую поверхность клавиатуры, дисководов, принтеров и др.
устройств; включать сильно охлажденное (принесенное с улицы в зимнее время)
оборудование;
· вскрытие и ремонт оборудования производить
самостоятельно;
· превышать величину количества
обрабатываемых символов свыше 30 000. за 4 часа работы.
6.1.3
Требования безопасности после окончания работы
По окончании работ необходимо соблюдать следующую
последовательность выключения вычислительной техники:
· произвести закрытие всех активных задач;
· убедиться, что в дисководах нет дискет;
· выключить питание системного блока
(процессора);
· выключить питание всех периферийных
устройств;
· отключить блок питания;
· осмотреть и привести в порядок рабочее
место.
6.2 Вредные
факторы
В процессе работы с использованием ПЭВМ на работающих
оказывают действие следующие опасные и вредные производственные физические,
химические и психофизиологические факторы. Работнику необходимо быть
ознакомленным с данными факторами.
6.2.1
Физические
· повышенные уровни электромагнитного
излучения;
· повышенные уровни рентгеновского
излучения,
· повышенные уровни ультрафиолетового
излучения,
· повышенный уровень инфракрасного
излучения,
· повышенный уровень статического
электричества,
· повышенные уровни запыленности воздуха
рабочей зоны,
· повышенное содержание положительных
аэроионов в воздухе рабочей зоны,
· пониженное содержание отрицательных
аэроионов в воздухе рабочей зоны,
· пониженная или повышенная влажность
воздуха рабочей зоны,
· пониженная или повышенная подвижность
воздуха рабочей зоны,
· повышенный уровень прямой блесткости,
· повышенный уровень ослепленности,
· неравномерность распределения яркости в
поле зрения,
· повышенная яркость светового изображения,
· повышенный уровень пульсации светового
потока,
· повышенное значение напряжения в
электрической цепи, замыкание которой может произойти через тело человека.
6.2.2
Химические
Повышенное содержание в воздухе рабочей зоны двуокиси
углерода, озона, аммиака, фенола, формальдегида и полихлорированных бифенилов.
6.2.3
Психофизиологические
· напряжение зрения,
· напряжение внимания, интеллектуальные
нагрузки,
· эмоциональные нагрузки,
· длительные статические нагрузки,
· монотонность труда,
· большой объем информации, обрабатываемой в
единицу времени,
· нерациональная организация рабочего места;
биологические:
· повышенное содержание в воздухе рабочей
зоны микроорганизмов.
Чем же вредны эти воздействия? Например, сильный шум вызывает
трудности с распознанием цветовых сигналов, снижает быстроту восприятия цвета,
остроту зрения, зрительную адаптацию, нарушает восприятие визуальной
информации, уменьшает на 5 - 12 % производительность труда. Длительное
воздействие шума с уровнем звукового давления 90 дБ снижает производительность
труда на 30 - 60 %. Для устранения негативного влияния перечисленных факторов
необходимо соблюдать как требования по условиям труда, так и требования по
безопасности в аварийных ситуациях.
6.3
Требования по условиям труда
В помещениях, где осуществляются работы с использованием
ПЭВМ, должны обеспечиваться оптимальные параметра микроклимата в соответствии с
действующими санитарно-эпидемиологическими и гигиеническими нормативами.
В помещениях, оборудованных ПЭВМ, должна осуществляться
ежедневная влажная уборка и систематическое проветривание после каждого часа
работы на ПЭВМ. Рабочие столы следует размещать таким образом, чтобы видеодисплейные
терминалы были ориентированы боковой стороной к световым проемам, чтобы
естественный свет падал преимущественно слева.
Искусственное освещение должно осуществляться системой общего
равномерного освещения, а в случаях преимущественной работы с документами
необходимо применять систему комбинированного освещения, т.е. к общему
освещению дополнительно устанавливаются светильники местного освещения,
предназначенные для освещения зоны расположения документов. Освещение не должно
создавать бликов на поверхности экрана.
Для обеспечения нормируемых значений освещенности в
помещениях, где установлены ПЭВМ, необходимо проводить (не реже 2-х раз в год)
чистку стекол оконных рам и светильников и своевременную замену перегоревших
ламп.
При размещении рабочих мест с ПЭВМ расстояние между рабочими
столами с видеомониторами (в направлении тыла поверхности одного видеомонитора
и экрана другого видеомонитора) должно быть не менее 2м, а расстояние между
боковыми поверхностями видеомониторов − не менее 1,2м.
Рабочие места с ПЭВМ при выполнении творческой работы,
требующей значительного умственного напряжения или высокой концентрации
внимания, должны быть изолированы друг от друга перегородками высотой 1,5 −
2м.
Экран видеомонитора должен находиться от глаз пользователя на
расстоянии 600 − 700мм, но не ближе 500мм с учетом размеров
алфавитно-цифровых знаков и символов.
Рабочий стол должен обеспечивать оптимальное размещение на
рабочей поверхности используемого оборудования с учетом его количества,
конструктивных особенностей и характера выполняемой работы.
Рабочий стул (кресло) должен обеспечивать поддержание
рациональной рабочей позы при работе на ПЭВМ, позволять изменять позу с целью
снижения статического напряжения мышц шейно-плечевой области и спины для
предупреждения развития утомления.
Лица, работающие с ПЭВМ более 50% рабочего времени
(профессионально связанные с эксплуатацией ПЭВМ), должны проходить обязательный
периодический мед. осмотр согласно приказа Минздравмедпрома от 14.03.96г. №90.
Женщины со времени установления беременности должны переводиться на работы, не
связанные с использованием ПЭВМ или для них должно ограничиваться время работы
с ПЭВМ (не более 3-х часов за рабочую смену) при условии соблюдения
установленных гигиенических требований. Немаловажное значение имеет правильная
окраска помещений, особо лишенных естественного освещения и зрительной связи с
внешней средой. Правильный выбор цвета компенсирует этот недостаток. Яркая
окраска оживляет помещение и улучшает психологическое состояние человека.
Необходимо учитывать, что цвет является сильным психологическим стимулятором:
1)
красный
цвет увеличивает мускульное напряжение;
2)
оранжевый
- стимулирует деятельность;
3)
желтый
- стимулирует зрение и нервную систему;
4)
зеленый
- успокаивает;
5)
голубой
- ослабляет мускульное напряжение;
6)
фиолетовый
- создает состояние спокойствия.
Наиболее предпочтительный - это зеленый цвет помещения, так
как он успокаивающе действует на устающие в процессе работы органы зрения.
6.4
Требования безопасности в аварийных ситуациях в случае обнаружения аварийной
ситуации
· во всех случаях обнаружения обрыва
проводов питания, неисправности заземления и других повреждений
электрооборудования, появления запаха гари немедленно отключить питание и
сообщить об аварийной ситуации руководителю и дежурному электромонтеру;
· при обнаружении человека, попавшего под
напряжение, немедленно освободить его от действия тока путем отключения
электропитания и до прибытия врача оказать потерпевшему медицинскую помощь;
· при любых случаях сбоя в работе
технического оборудования программного обеспечения немедленно вызвать работника
отдела программного обеспечения завода;
· в случае появления рези в глазах, резком
ухудшении видимости - невозможности сфокусировать взгляд или навести его на
резкость, появлении боли в пальцах и кистях рук, усилении сердцебиения
немедленно покинуть рабочее место, сообщить о происшедшем руководителю и
обратиться к врачу;
· при возгорании оборудования отключить
питание и принять меры к тушению очага пожара имеющимися средствами
пожаротушения, вызвать пожарную команду по телефону 01 и сообщить о происшедшем
своему непосредственному руководителю;
· при возникновении пожара в помещении, где
установлены ПЭВМ, немедленно прекратить работы, обесточить ПЭВМ, окриком
оповестить окружающих, сообщить в пожарную часть по тел.01, сообщить своему
непосредственному руководителю о случившемся и приступить к тушению пожара
имеющимися средствами пожаротушения. В дальнейшем выполнять все указания
руководителя по ликвидации аварийной ситуации.
Принимая во внимания все вышеперечисленные требования
возможно полностью избежать осложнений и травм при работе с данным программным
комплексом.
Заключение
Темой данного дипломного проекта являлось создание базы
данных для контроля знаний для студентов Сергиево-Посадского
киновидеотехнического колледжа. Перед началом разработки были просмотрены уже
имеющиеся программы для тестирования и проведения опросов, был проведен их
тщательный анализ с целью выявления общих идей и методов построения форм,
разработки интерфейса, проведения тестирования и вывода результатов. На основе
уже готовых программных продуктов и полученный при их анализе ценный багаж
знаний был разработан алгоритм базы данных для контроля знаний, которая
представлена в данном дипломной проекте.
При разработке я постарался учесть как психологическую
сторону тестирования (при разработке интерфейса), так и технические аспекты
(при выборе программ и создании алгоритмов работы). Интерфейс базы данных
визуально интуитивен, поэтому даже не потребовалось писать инструкции для
пользователей (в дальнейшем это предусмотрено). С технической точки зрения
также были учтены все особенности компьютерного оснащения и возможности
локальной сети киновидеотехнического колледжа. Основным же показателем
востребованности выполненной работы является то, что эта база данных уже была
успешно использована во время проведения аттестации учебного заведения. С
помощью нее было протестировано порядка шестисот студентов, были получены их
результаты. Никаких сбоев в работе замечено не было.
Список
используемых источников
1. Delphi/
Под общ. ред. А.Д. Хомоненко. − СПб.: БХВ-Петербург, 2006. − 1216
с.
2. Delphi
7: Учебный курс/ Бобровский С.И. - СПб: "Питер", 2005. − 736 с.
. Введение
в SQL для баз данных в архитектуре клиент/сервер/ Туманов В.Е., Гайфуллин Б.Н.,
Сгибнев В.Я. − М.: Интерфейс Пресс, 2000. − 188 стр.
. Введение
в системы баз данных (7-е издание) / Крис Дейт − М.: Вильямс, 2001. −
1072 с.
. Основные
концепции баз данных/ Фред Роланд − М.: Вильямс, 2002. − 256 с.
. Рекомендации
по подготовке и оформлению курсовых и дипломных работ. - 2 изд., переработанное
и дополненное. / В.С. Голодаева. − М.: Издательско-торговая корпорация
"Дашков и Кє", 2003. − 44 с.
. Ингенкамп
К. Педагогическая диагностика. - М.: Педагогика, 1991. - 240 c.;
. Талызина
Н.Ф. Методика составления обучающих программ. - М., 1980. - 46 с.
. Шестоперов
С.Б., Капелюш Г.С. Технико-экономическое обоснование дипломных проектов по
созданию программных средств ВТ и информатики. Учебное пособие, М: МИП, 1993.
. Калмыков
Ю.В., Уроженке В.В. Структурный или объектно-ориентированный подход в
программировании // М.: МИФИ, 2003.
. В.В.
Фаронов Delphi 5 Руководство программиста. // М.: "Нолидж", 2001.
. Беспалько
В.П. Педагогика и прогрессивные технологии обучения. - М.: 1995.
. Камер
Дуглас Э. Компьютерные сети и Internet. Разработка приложений для Internet:
Пер. с англ. - М.: Изд. дом "Вильяме", 2002.
14. Основы SQL
Полякова Л.Н.
<http://www.intuit.ru/shop/search.xhtml?sea_author=%CF%EE%EB%FF%EA%EE%E2%E0+%CB.%CD.>
. Издательство:
Интернет-университет информационных технологий - ИНТУИТ. ру "
<http://www.intuit.ru/shop/search.xhtml?sea_manufacturer=34941>, БИНОМ.
Лаборатория знаний "
<http://www.intuit.ru/shop/search.xhtml?sea_manufacturer=36050> Серия:
Основы информационных технологий "
<http://www.intuit.ru/shop/books/series/it-basics/> Год выпуска: 2007
Объем: 224 стр.
. Основы
проектирования приложений баз данных
<http://www.intuit.ru/shop/books/departments/database/sqlserver2000/product.xhtml?id=2460100>
Баженова И. Ю.
. Издательство:
Интернет-университет информационных технологий - ИНТУИТ. ру "
<http://www.intuit.ru/shop/search.xhtml?sea_manufacturer=34941> Серия:
Основы информационных технологий "
<http://www.intuit.ru/shop/books/series/it-basics/> Год выпуска: 2006 Объем:
320 стр.
. Базы
данных в Delphi 7. Самоучитель. Понамарев В. А.
. Википедия
- свободная энциклопедия, создаваемая совместными усилиями добровольцев
[Электронный реурс] − М., 2007. − www.ru. wikipedia.org
<http://www.ru.wikipedia.org>
. MSDN -
http://msdn. microsoft.com/ <http://msdn.microsoft.com/>
. Система
тестирования knost http://www.scorp.ru/knost/kn_download. php?
PHPSESSID=73f9bfa7aade1835d9c1738be3a73673
<http://www.scorp.ru/knost/kn_download.php?PHPSESSID=73f9bfa7aade1835d9c1738be3a73673>
. <http://www.delphirus.com.ru>
. <http://www.mysql.com/>
. Интернет-Университет
Информационных Технологий <http://www.INTUIT.ru>
. <http://www.alphaskins.com/>
. <http://www.interbase.ru/>
. ГОСТ
12.1.005-88. Общие санитарно-гигиенические требования к воздуху рабочей зоны.
. ГОСТ
12.2.032-78 ССТБ. Рабочее место при выполнении работ сидя.
. ИНСТРУКЦИЯ
№ 32-04-Б по охране труда при работе на персональных электронно-вычислительных
машинах (ПЭВМ) и видеодисплейных терминалах (ВДТ).
. Межотраслевым
правилам по охране труда (правилам безопасности) при эксплуатации
электроустановок ПОТ Р М-016-2001 РД 153-34.0-03.150-00
. Методические
указания по выполнению раздела "Охрана труда" в дипломных проектах
(спец.0102, 2201, 2202). Часть 1. - М.: МИП, 1998.
. Рекомендации
по организации выполнения и защиты выпускной квалификационной работы в
Сергиево-Посадском киновидеотехническом колледже. − 2007. − 5 с.
. СанПиН
2.2.2/2.4.1340-03 "Гигиенические требования к персональным
электронно-вычислительным машинам и организации работы"
. ТОИ Р
01-00-01-96 "Типовая инструкция по охране труда для операторов и
пользователей персональных электронно-вычислительных машин (ПЭВМ) и работников,
занятых эксплуатацией ПЭВМ и видеодисплейных терминалов (ВДТ)"
Приложения
Приложение А
Модуль администратора
unit unit_authentication;
interface
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms,
Dialogs, unit_dm, StdCtrls, ExtCtrls, DBCtrls, Grids, DBGrids,
unit_main_manager,
Buttons, sBitBtn, sLabel, sEdit, sGroupBox;
type
Tauthentication = class(TForm)
Bok: TsBitBtn;
sGroupBox1: TsGroupBox;
Euser: TsEdit;
Epas: TsEdit;
sLabel1: TsLabel;
sLabel2: TsLabel;
procedure BokClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action:
TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
authentication: Tauthentication;
implementation
uses
unit_start;
{$R *.dfm}
procedure Tauthentication.BokClick(Sender: TObject);
// клик на кнопке принять
begin
if dm.log_in(euser.Text, epas.Text) then
begin
hide;
main_manager.Show;
end
else
begin
euser.Clear;
epas.Clear;
ShowMessage('Неправильный пароль или имя пользователя');
end;
end;
procedure Tauthentication.FormClose(Sender: TObject; var
Action: TCloseAction);
begin
Form_Start.Close;
end;
procedure Tauthentication.FormShow(Sender: TObject);
begin
dm.ConnectSPKVTK();
dm.LoadSkinoutBD();
end;
end.
unit unit_edit_test;
interface
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms,
Dialogs, StdCtrls, Mask, DBCtrls, unit_dm, ExtCtrls, jpeg,
Buttons, ComCtrls,
Grids, DBGrids, JRCheckBox, JRDBCheckBoxMySQL, DB, DBTables,
Menus, ActnPopup,
ActnList, XPStyleActnCtrls, ActnMan, sEdit, sBitBtn, sDBRichEdit,
sRichEdit,
sSplitter, sRadioButton, sCheckBox, sPanel, sScrollBox,
sGroupBox;
type
TEdit_test = class(TForm)
ReLoadAll: TsBitBtn;
BoxAnswer: TsScrollBox;
MenuAnswer: TPopupMenu;
delete: TMenuItem;
MainAnswer: TsGroupBox;
QuestionText: TsDBRichEdit;
BoxQuestionrNavigator: TsGroupBox;
QCreate: TsBitBtn;
ACreate: TsBitBtn;
dbQGoToN: TsBitBtn;
dbQPost: TsBitBtn;
dbAReLoad: TsBitBtn;
dbQCancel: TsBitBtn;
N_Question: TsEdit;
dbQPrior: TsBitBtn;
dbQLasst: TsBitBtn;
dbQNext: TsBitBtn;
dbQFirst: TsBitBtn;
QDelete: TsBitBtn;
BoxMainIllustration: TsGroupBox;
BoxIllustration: TsGroupBox;
DBIllustrationText: TsDBRichEdit;
BoxNavigationIllustration: TsGroupBox;
mix_answer: TJRDBCheckBoxMySQL;
only_one: TJRDBCheckBoxMySQL;
mix_question: TJRDBCheckBoxMySQL;
BoxIllustrationStreatch: TsGroupBox;
propstr: TJRDBCheckBoxMySQL;
Questionillustration: TImage;
sSplitter1: TsSplitter;
DeleteQIllustration: TsBitBtn;
CreateQIllustration: TsBitBtn;
SaveQIllustration: TsBitBtn;
dbILast: TsBitBtn;
dbINext: TsBitBtn;
dbIPrior: TsBitBtn;
dbIFirst: TsBitBtn;
dbIGoToN: TsBitBtn;
N_Illustration: TEdit;
procedure deleteClick(Sender: TObject);
procedure dbQCancelClick(Sender: TObject);
procedure DeleteQIllustrationClick(Sender: TObject);
procedure dbIGoToNClick(Sender: TObject);
procedure dbILastClick(Sender: TObject);
procedure dbINextClick(Sender: TObject);
procedure dbIPriorClick(Sender: TObject);
procedure dbIFirstClick(Sender: TObject);
procedure QuestionillustrationClick(Sender: TObject);
procedure SaveQIllustrationClick(Sender: TObject);
procedure CreateQIllustrationClick(Sender: TObject);
procedure dbQPostClick(Sender: TObject);
procedure dbQGoToNClick(Sender: TObject);
procedure dbQLasstClick(Sender: TObject);
procedure dbQNextClick(Sender: TObject);
procedure dbQPriorClick(Sender: TObject);
procedure dbQFirstClick(Sender: TObject);
procedure dbAReLoadClick(Sender: TObject);
procedure ReLoadAllClick(Sender: TObject);
procedure ACreateClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure QCreateClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action:
TCloseAction);
procedure QDeleteClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure InsertAnswer();//Вставка нового ответа
procedure CreateList();//Создание переменных для
хранения информации о динамечиске созданных элементвх
procedure DestroyObject();//Уничтожение
созданных объектов
procedure LoadQuestion();//Получение списка вопросов
по предметов
procedure LoadAnswer();//Получение списка ответов по
вопросу
procedure CreateQuestion();//Создание
нового вопроса
procedure CreateAnswer();//Создание нового ответа
procedure FreeListAnswer();//Уничтожение
переменных для хранения информации о динамечиске созданных элементвх
procedure OpenIllustrationQuestion();//Открытие
картинки для вопроса
function OpenIllustrationAnswer(): string;//Открытие
иллюстрации для ответа
procedure ClickIllustrationAnswer(Sender: TObject);//Клик на
картинке ответа
procedure ClickRadioAnswer(Sender: TObject);//Клик на
зависемом переключателе
procedure ClikCheckAnswer(Sender: TObject);//Клик на
независемом переключателе
procedure ClikCheckPropStr(Sender: TObject);//Клик на
переключателе пропстр
procedure ClikTextAnswer(Sender: TObject);//Клик на
тексте ответа
procedure MouseDownAnswerText(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure SaveAnswer();//Сохранение ответов
procedure Loadillustration();//Загрузка
картинок вопроса из бд
procedure Createillustration();//Создание
картинки вопроса
procedure ReLoadIllustration();//
Отображение картинки
procedure SaveillustrationQuestion();//Сохранение
картинок
end;
var
Edit_test: TEdit_test;
AnswerTop: integer;
PanelList: TList;
TextList: TList;
SplitList: TList;
ImageList: TList;
CheckList: TLIst;
CheckStretchList: TLIst;
RadioList: TList;
RadioIndex: array[0..1000] of integer;
CheckIndex: array[0..1000] of integer;
CheckStretchIndex: array[0..1000] of integer;
TextIndex: array[0..1000] of integer;
IllustrationIndex: array[0..1000] of integer;
SenderRich: TObject;
implementation
{$R *.dfm}
uses
procedure TEdit_test.ACreateClick(Sender: TObject);
begin
dm.Last_Selected.id_question := dm.Query_Question.FieldByName('id_question').AsInteger;
CreateAnswer();
dm.Load_Answer;
LoadAnswer();
end;
procedure TEdit_test.QCreateClick(Sender: TObject);
begin
CreateQuestion();
dbQLasst.Click;
ACreate.Click;
LoadQuestion();
end;
procedure TEdit_test.QDeleteClick(Sender: TObject);
begin
dm.Query_Question.Delete;
dm.Load_Answer;
LoadAnswer();
end;
procedure TEdit_test.QuestionillustrationClick(Sender:
TObject);
begin
OpenIllustrationQuestion();
end;
procedure TEdit_test.dbINextClick(Sender: TObject);
begin
dm.Query_Illustration.Next;
ReLoadIllustration();
end;
procedure TEdit_test.dbIPriorClick(Sender: TObject);
begin
dm.Query_Illustration.Prior;
ReLoadIllustration();
end;
procedure TEdit_test.ClickIllustrationAnswer;
//обработчик клика на картинке ответа
var
FileName: String;
begin
FileName := OpenIllustrationAnswer();
if not (FileName <> '') then
exit;
TImage(Sender).Picture.LoadFromFile(FileName);
end;
procedure TEdit_test.ClickRadioAnswer(Sender: TObject);
//клик на зависемом переключателе ответа
var
ID: integer;
ID_ND: integer;
index: integer;
Checked: Char;
begin
ID_ND := RadioIndex[TsRadioButton(Sender).Tag];
index := 0;
while index < 100 do
begin
try
ID := RadioIndex[TsRadioButton(RadioList.Items[index]).Tag];
Checked := '0';
if ID = ID_ND then
begin
TsRadioButton(RadioList.Items[index]).Checked :=
True;
With dm.Query_Answer do
begin
Active := false;
SQL.Clear;
SQL.Add('UPDATE Answer ') ;
SQL.Add('SET correct = 1');
SQL.Add('WHERE id_answer =' +
IntToStr(ID));
Active := true;
end;
end
else
begin
TsRadioButton(RadioList.Items[index]).Checked :=
False;
With dm.Query_Answer do
begin
Active := false;
SQL.Clear;
SQL.Add('UPDATE Answer ') ;
SQL.Add('SET correct = 0');
SQL.Add('WHERE id_answer =' +
IntToStr(ID));
Active := true;
end;
end;
except
;
end;
inc(index);
end;
end;
procedure TEdit_test.ClikCheckAnswer(Sender: TObject);
//клик на независемом переключателе ответа
var
ID: integer;
ID_ND: integer;
index: integer;
Checked: Char;
begin
ID_ND := CheckIndex[TsCheckBox(Sender).Tag];
index := 0;
while index < 100 do
begin
try
ID := CheckIndex[TsCheckBox(CheckList.Items[index]).Tag];
if ID = ID_ND then
begin
if TsCheckBox(CheckList.Items[index]).Checked =
True then
Checked := '1'
else
Checked := '0';
With dm.Query_Answer do
begin
Active := false;
SQL.Clear;
SQL.Add('UPDATE Answer ') ;
SQL.Add('SET correct = ' + Checked);
SQL.Add('WHERE id_answer =' +
IntToStr(ID));
Active := true;
end;
end;
except
;
end;
inc(index);
end;
end;
procedure TEdit_test.ClikCheckPropStr(Sender: TObject);
//Клик на PropStr ответа
var
ID: integer;
ID_ND: integer;
index: integer;
Checked: Char;
begin
ID_ND := CheckStretchIndex[TsCheckBox(Sender).Tag];
index := 0;
while index < 100 do
begin
try
ID := CheckStretchIndex[TsCheckBox(CheckList.Items[index]).Tag];
if ID = ID_ND then
begin
if TsCheckBox(CheckStretchList.Items[index]).Checked
= True then
Checked := '1'
else
Checked := '0';
With dm.Query_Answer do
begin
Active := false;
SQL.Clear;
SQL.Add('UPDATE Answer ') ;
SQL.Add('SET propstr = ' + Checked);
SQL.Add('WHERE id_answer =' +
IntToStr(ID));
Active := true;
end;
end;
except
;
end;
inc(index);
end;
end;
procedure TEdit_test.ClikTextAnswer(Sender: TObject);
//клик на поле ткста ответа
begin
SenderRich := Sender;
end;
procedure TEdit_test.CreateAnswer;
//создание нового ответа
begin
try
dm.Create_Answer_New(dm.Last_Selected.id_question);
except
;
end;
end;
procedure TEdit_test.Createillustration;
begin
dm.Last_Selected.id_question := dm.Query_Question.FieldByName('id_question').AsInteger;
dm.Create_Illustration_New(dm.Last_Selected.id_question);
dm.Load_Illustration();
end;
procedure TEdit_test.CreateList;
begin
// Создание контейнеров Tlist для нумерации компонентов
TextList := TList.Create;
PanelList := TList.Create;
SplitList := TList.Create;
ImageList := TList.Create;
CheckList := TLIst.Create;
CheckStretchList := TLIst.Create;
RadioList := TList.Create;
end;
procedure TEdit_test.CreateQuestion;
begin
try
dm.Create_Question_New(dm.Last_Selected.id_theme);
dm.Load_Question();
except
;
end;
end;
procedure TEdit_test.CreateQIllustrationClick(Sender:
TObject);
begin
Createillustration();
dm.Query_Illustration.Last;
ReLoadIllustration();
OpenIllustrationQuestion();
end;
procedure TEdit_test.DeleteQIllustrationClick(Sender:
TObject);
begin
dm.Query_Illustration.Delete;
ReLoadIllustration();
end;
procedure TEdit_test.DestroyObject;
begin
FreeListAnswer();
end;
procedure TEdit_test.dbQCancelClick(Sender: TObject);
begin
try
dm.Query_Question.Cancel;
except
;
end;
SaveAnswer();
LoadQuestion();
end;
procedure TEdit_test.dbQFirstClick(Sender: TObject);
//переход на первый вопрос
begin
dm.Query_Question.First;
LoadQuestion();
LoadAnswer
end;
procedure TEdit_test.FormClose(Sender: TObject; var Action:
TCloseAction);
begin
main_manager.Show;
end;
procedure TEdit_test.FormCreate(Sender: TObject);
begin
CreateList();
AnswerTop := 15;
end;
procedure TEdit_test.FormDestroy(Sender: TObject);
begin
DestroyObject();
end;
procedure TEdit_test.FormShow(Sender: TObject);
begin
dm.Load_Question();
dm.Query_Question.First;
LoadQuestion();
dm.Query_Illustration.First;
ReLoadIllustration();
MainAnswer.Width := Round(edit_test.Width * 0.4);
BoxMainIllustration.Height := Round(edit_test.Height * 0.3);
end;
procedure TEdit_test.FreeListAnswer;
var
index: integer;
begin
// Уничтожаем текст
index := 0;
try
while true do
begin
TRichEdit(TextList.Items[index]).Free;
inc(index);
end;
except
;
end;
// Уничтожаем картинки
index := 0;
try
while true do
begin
TImage(ImageList.Items[index]).Free;
inc(index);
end;
except
;
end;
// Уничтожаем сплиты
index := 0;
try
while true do
begin
TSplitter(SplitList.Items[index]).Free;
inc(index);
end;
except
;
end;
// Уничтожаем радиобт
index := 0;
try
while true do
begin
TRadioButton(RadioList.Items[index]).Free;
inc(index);
end;
except
;
end;
// Уничтожаем чекеты
index := 0;
try
while true do
begin
TCheckBox(CheckList.Items[index]).Free;
inc(index);
end;
except
;
end;
// Уничтожаем чекеты stretch / proportional
index := 0;
try
while true do
begin
TCheckBox(CheckStretchList.Items[index]).Free;
inc(index);
end;
except
;
end;
// Уничтожаем панели ответов
index := 0;
try
while true do
begin
TPanel(PanelList.Items[index]).Free;
inc(index);
end;
except
;
end;
// чистим листы ..
try
TextList.Clear;
PanelList.Clear;
SplitList.Clear;
ImageList.Clear;
CheckList.Clear;
CheckStretchList.Clear;
RadioList.Clear;
TextList.Free;
SplitList.Free;
ImageList.Free;
CheckList.Free;
CheckStretchList.Free;
RadioList.Free;
except
;
end;
end;
procedure TEdit_test.dbQGoToNClick(Sender: TObject);
//переход на первый вопрос
begin
dm.Query_Question.RecNo := StrToInt(N_Question.Text);
LoadQuestion();
end;
procedure TEdit_test.InsertAnswer;
// вырисовка...
var
AnswerText: TRichEdit;
AnswerPanel: TsPanel;
AnswerCheck: TsCheckBox;
AnswerCheckStretch: TsCheckBox;
AnswerRadio: TsRadioButton;
AnswerImage: TImage;
AnswerSplitTop,
AnswerSplitBottom,
AnswerSplitRight,
AnswerSplitLeft: TsSplitter;
AnswerSplitBottomPole,
AnswerSplitLeftPole: TsSplitter;
PictureStream: TStream;
begin
//Создаю панель ответа
AnswerPanel := TsPanel.Create(BoxAnswer);
AnswerPanel.Top := AnswerTop;
AnswerPanel.Height := Round((BoxAnswer.Height * 40)/100);
AnswerPanel.Width := BoxAnswer.Width - 25;
AnswerPanel.Left := 5;
AnswerPanel.BorderStyle := bsSingle;
AnswerPanel.BorderWidth := 5;
AnswerPanel.Color := clSilver;
AnswerPanel.Tag := PanelList.Add(AnswerPanel);
BoxAnswer.InsertControl(AnswerPanel);
begin
AnswerImage := TImage.Create(AnswerPanel);
AnswerImage.Align := alBottom;
AnswerImage.Height := Round(AnswerPanel.Height / 2 - 6);
AnswerImage.Picture.Assign(dm.Query_Answer.FieldByName('illustration'));
if dm.Query_Answer.FieldByName('propstr').AsInteger
= 1 then
begin
AnswerImage.Proportional := true;
AnswerImage.Stretch := true;
end
else
begin
AnswerImage.Proportional := false;
AnswerImage.Stretch := true;
end;
AnswerImage.OnClick := ClickIllustrationAnswer;
AnswerImage.Tag := ImageList.Add(AnswerImage);
IllustrationIndex[AnswerImage.Tag] :=
dm.Query_Answer.FieldByName('id_answer').AsInteger;
AnswerPanel.InsertControl(AnswerImage);
end;
//Создаю нижний сплит поля
AnswerSplitBottomPole := TsSplitter.Create(AnswerPanel);
AnswerSplitBottomPole.Height := 5;
AnswerSplitBottomPole.Width := 5;
AnswerSplitBottomPole.Align := alBottom;
AnswerSplitBottomPole.Tag :=
SplitList.Add(AnswerSplitBottomPole);
AnswerPanel.InsertControl(AnswerSplitBottomPole);
if only_one.Checked then
begin
//Создаю зависемый переключатель
AnswerRadio := TsRAdioButton.Create(AnswerPanel);
AnswerRadio.Width := 13 ;
AnswerRadio.Align := alLeft ;
AnswerRadio.Tag := RadioList.Add(AnswerRadio);
if dm.Query_Answer.FieldByName('correct').AsInteger
= 1 then
begin
AnswerRadio.Checked := true;
end
else
begin
AnswerRadio.Checked := false;
end;
AnswerRadio.OnClick := ClickRadioAnswer;
RadioIndex[AnswerRadio.Tag] := dm.Query_Answer.FieldByName('id_answer').AsInteger;
AnswerPanel.InsertControl(AnswerRadio);
end
else
begin
//Создаю независемый переключатель
AnswerCheck := TsCheckBox.Create(AnswerPanel);
AnswerCheck.Width := 13 ;
AnswerCheck.Align := alLeft ;
if dm.Query_Answer.FieldByName('correct').AsInteger
= 1 then
begin
AnswerCheck.Checked := true;
end
else
begin
AnswerCheck.Checked := false;
end;
AnswerCheck.OnClick := ClikCheckAnswer;
AnswerCheck.Tag := CheckList.Add(AnswerCheck);
CheckIndex[AnswerCheck.Tag] := dm.Query_Answer.FieldByName('id_answer').AsInteger;
AnswerPanel.InsertControl(AnswerCheck);
end;
//Создаю левый сплит
AnswerSplitLeft := TsSplitter.Create(AnswerPanel);
AnswerSplitLeft.Height := 5;
AnswerSplitLeft.Width := 5;
AnswerSplitLeft.Align := alLeft;
AnswerSplitLeft.Visible := false;
AnswerSplitLeft.Tag := SplitList.Add(AnswerSplitLeft);
AnswerPanel.InsertControl(AnswerSplitLeft);
//создаю переключатель stretch / proportional
AnswerCheckStretch := TsCheckBox.Create(AnswerPanel);
AnswerCheckStretch.Width := 13 ;
AnswerCheckStretch.Align := alBottom ;
if dm.Query_Answer.FieldByName('propstr').AsInteger
= 1 then
begin
AnswerCheckStretch.Checked := true;
end
else
begin
AnswerCheckStretch.Checked := false;
end;
AnswerCheckStretch.OnClick := ClikCheckPropStr;
AnswerCheckStretch.Tag :=
CheckStretchList.Add(AnswerCheckStretch);
CheckStretchIndex[AnswerCheckStretch.Tag] :=
dm.Query_Answer.FieldByName('id_answer').AsInteger;
AnswerPanel.InsertControl(AnswerCheckStretch);
//Создаю поле ответа
AnswerText := TRichEdit.Create(AnswerPanel);
AnswerText.Align := alClient;
AnswerText.BorderStyle := bsSingle;
AnswerText.BorderWidth := 5;
AnswerText.ScrollBars := ssVertical;
AnswerText.PopupMenu := MenuAnswer;
AnswerText.OnClick := ClikTextAnswer;
AnswerText.OnMouseDown := MouseDownAnswerText;
AnswerText.Tag := TextList.Add(AnswerText);
TextIndex[AnswerText.Tag] := dm.Query_Answer.FieldByName('id_answer').AsInteger;
AnswerPanel.InsertControl(AnswerText);
AnswerText.Text := dm.Query_Answer.FieldByName('answer').AsString;
AnswerTop := AnswerTop + Answerpanel.Height + 10;
end;
procedure TEdit_test.dbQLasstClick(Sender: TObject);
//переход на последний вопрос
begin
dm.Query_Question.Last;
LoadQuestion();
end;
procedure TEdit_test.LoadAnswer;
//прорисовываем ответы на форме
begin
FreeListAnswer();
CreateList();
AnswerTop := 10;
dm.Query_Answer.First;
while not dm.Query_Answer.Eof do
begin
InsertAnswer();
dm.Query_Answer.Next;
end;
end;
procedure TEdit_test.Loadillustration;
begin
dm.Last_Selected.id_question := dm.Query_Question.FieldByName('id_question').AsInteger;
dm.Load_Illustration;
dm.Query_Illustration.First;
ReLoadIllustration();
end;
procedure TEdit_test.LoadQuestion;
//загрузка данных вопроса
begin
try
Questionillustration.Stretch := propstr.Checked;
except
;
end;
dm.Load_Answer();
dm.Query_Answer.First;
LoadAnswer();
loadIllustration();
end;
procedure TEdit_test.MouseDownAnswerText(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
//Нажатие клавиши мыши в поле ответа
begin
SenderRich := Sender;
end;
procedure TEdit_test.dbAReLoadClick(Sender: TObject);
begin
dm.Load_Question();
dm.Load_Answer();
LoadQuestion();
LoadAnswer();
end;
procedure TEdit_test.dbIFirstClick(Sender: TObject);
begin
dm.Query_Illustration.First;
ReLoadIllustration();
end;
procedure TEdit_test.dbIGoToNClick(Sender: TObject);
begin
dm.Query_Illustration.RecNo := StrToInt(N_illustration.Text);
ReLoadIllustration();
end;
procedure TEdit_test.dbILastClick(Sender: TObject);
begin
dm.Query_Illustration.Last;();
end;
procedure TEdit_test.ReLoadAllClick(Sender: TObject);
begin
dm.Load_Question();
LoadQuestion();
LoadAnswer()
end;
procedure TEdit_test.ReLoadIllustration;
begin
QuestionIllustration.Picture := nil;
QuestionIllustration.Picture.Assign(dm.Query_Illustration.FieldByName('illustration'));
QuestionIllustration.Stretch := true;
QuestionIllustration.Proportional := propstr.Checked;
end;
procedure TEdit_test.dbQNextClick(Sender: TObject);
//переход на следующий вопрос
begin
dm.Query_Question.Next;
LoadQuestion();
end;
function TEdit_test.OpenIllustrationAnswer;
//открытие иллюстрации на ответ
begin
openillustrationAnswer := '';
if not dm.OPD.Execute then
exit;
OpenIllustrationAnswer := dm.OPD.FileName;
end;
procedure TEdit_test.OpenIllustrationQuestion();
begin
if not dm.OPD.Execute then
begin
exit;
end;
try
QuestionIllustration.Picture.LoadFromFile(dm.opd.FileName);
except
;
end;
end;
procedure TEdit_test.dbQPostClick(Sender: TObject);
begin
try
dm.Query_Question.Post;
except
;
end;
SaveAnswer();
LoadQuestion();
end;
procedure TEdit_test.dbQPriorClick(Sender: TObject);
//переход на предидущий вопрос
begin
dm.Query_Question.Prior;
LoadQuestion();
end;
procedure TEdit_test.deleteClick(Sender: TObject);
var
ID: integer;
begin
try
ID := TextIndex[TsRichEdit(SenderRich).Tag];
With dm.Query_Delete do
begin
Active := false;
SQL.Clear;
SQL.Add('DELETE FROM answer ') ;
SQL.Add('WHERE id_answer =' +
IntToStr(ID));
Active := true;
end;
except
LoadQuestion();
end;
end;
procedure TEdit_test.SaveAnswer;
var
index: integer;
ID: integer;
Checked: string;
bs: TBlobStream;
begin
// Сохраняем текст
index := 0;
while index < 100 do
begin
try
ID := TextIndex[TsRichEdit(TextList.Items[index]).Tag];
bs := nil;
With dm.Query_Answer do
begin
Active := false;
SQL.Clear;
SQL.Add('SELECT * FROM answer ') ;
SQL.Add('WHERE id_answer =' +
IntToStr(ID));
Active := true;
First;
TsRichEdit(TextList.Items[index]).PlainText := false;
Edit;
dm.Query_Answer.FieldByName('answer').Assign(TsRichEdit(TextList.Items[index]).Lines);
Post;
end;
except
;
end;
inc(index);
end;
// Сохраняем картинки
index := 0;
while index < 100 do
begin
try
ID := IllustrationIndex[TImage(ImageList.Items[index]).Tag];
bs := nil;
With dm.Query_Answer do
begin
Active := false;
SQL.Clear;
SQL.Add('SELECT * FROM answer ') ;
SQL.Add('WHERE ' + 'id_answer =
' + IntToStr(ID));
Active := true;
First;
Edit;
FieldByName('illustration').Assign(TImage(ImageList.Items[index]).Picture);
Post;
end;
except
;
end;
inc(index);
end;
//Сохраняем радиобт
index := 0;
while index < 100 do
begin
try
ID := RadioIndex[TsRadioButton(RadioList.Items[index]).Tag];
if TRadioButton(RadioList.Items[index]).Checked then
begin
end
else
begin
Checked := '0';
end;
With dm.Query_Answer do
begin
Active := false;
SQL.Clear;
SQL.Add('UPDATE Answer ') ;
SQL.Add('SET correct = ' + Checked);
SQL.Add('WHERE id_answer =' +
IntToStr(ID));
Active := true;
end;
except
;
end;
inc(index);
end;
// Сохраняем чекеты
index := 0;
while index < 100 do
begin
try
ID := CheckIndex[TsCheckBox(CheckList.Items[index]).Tag];
if TCheckBox(CheckList.Items[index]).Checked then
begin
Checked := '1';
end
else
begin
Checked := '0';
end;
With dm.Query_Answer do
begin
Active := false;
SQL.Clear;
SQL.Add('UPDATE Answer ') ;
SQL.Add('SET correct = ' + Checked);
SQL.Add('WHERE id_answer =' +
IntToStr(ID));
Active := true;
end;
except
;
end;
inc(index);
end;
// Сохраняем чекеты stretch / proportional
index := 0;
while index < 100 do
begin
try
ID :=
CheckStretchIndex[TsCheckBox(CheckStretchList.Items[index]).Tag];
if TCheckBox(CheckStretchList.Items[index]).Checked then
begin
Checked := '1';
end
else
begin
Checked := '0';
end;
With dm.Query_Answer do
begin
Active := false;
SQL.Clear;
SQL.Add('UPDATE Answer ') ;
SQL.Add('SET propstr = ' + Checked);
SQL.Add('WHERE id_answer =' +
IntToStr(ID));
Active := true;
end;
except
;
end;
inc(index);
end;
end;
procedure TEdit_test.SaveillustrationQuestion;
begin
try
dm.Query_Illustration.Post;
except;
;
end;
dm.Query_Illustration.Edit;
dm.Query_Illustration.FieldByName('illustration').Assign(Questionillustration.Picture);
dm.Query_Illustration.Post;
end;
procedure TEdit_test.SaveQIllustrationClick(Sender:
TObject);
begin
SaveillustrationQuestion();
end;
end.
unit unit_main_manager;
interface
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms,
Dialogs, Tabs, StdCtrls, DBCtrls, ComCtrls, unit_dm, ExtCtrls,
Grids, DBGrids,
Mask, Buttons, sPanel, sDBNavigator, sDBEdit, sLabel,
sDBRichEdit, sGroupBox,
sBitBtn, sPageControl, sDBComboBox, FileCtrl, sCheckBox,
sRadioButton,
acProgressBar, sTrackBar, sButton, sGauge, DB, sComboBox,
sUpDown, sBevel,
sSpeedButton, sEdit, DBTables,
ImgList, Provider, DBClient, JRCheckBox, JRDBCheckBoxMySQL;
type
Tmain_manager = class(TForm)
PageAdministration: TsPageControl;
opros: TsTabSheet;
tuser: TsTabSheet;
subject: TsGroupBox;
Grid_Subject: TDBGrid;
DBInfo_Subject: TsDBRichEdit;
Create_Subject: TsBitBtn;
Navigator_Subject: TsDBNavigator;
theme: TsGroupBox;
Grid_Theme: TDBGrid;
DBInfo_Theme: TsDBRichEdit;
Navigator_Theme: TsDBNavigator;
Create_Theme: TsBitBtn;
sGroupBox1: TsGroupBox;
sLabel1: TsLabel;
sLabel2: TsLabel;
DBEsubject: TsDBEdit;
DBEtheme: TsDBEdit;
BtnQuestion: TsBitBtn;
StydentGrid: TDBGrid;
StydentNavigator: TsDBNavigator;
sGroupBox2: TsGroupBox;
sLabel3: TsLabel;
sLabel4: TsLabel;
sLabel5: TsLabel;
sLabel6: TsLabel;
sLabel7: TsLabel;
sLabel8: TsLabel;
ulogin: TsDBEdit;
upassword: TsDBEdit;
usname: TsDBEdit;
uname: TsDBEdit;
upatronymic: TsDBEdit;
uaccessbox: TsDBComboBox;
UReLoad: TsBitBtn;
panelstydent: TsTabSheet;
DBGrid2: TDBGrid;
sDBNavigator1: TsDBNavigator;
sGroupBox3: TsGroupBox;
sLabel11: TsLabel;
sLabel12: TsLabel;
sLabel13: TsLabel;
stsname: TsDBEdit;
stname: TsDBEdit;
stgroup: TsDBEdit;
stReload: TsBitBtn;
stCreate: TsBitBtn;
stDelete: TsBitBtn;
stSave: TsBitBtn;
stCancel: TsBitBtn;
uCreate: TsBitBtn;
uDelete: TsBitBtn;
uSave: TsBitBtn;
uCancel: TsBitBtn;
Skin: TsTabSheet;
Progr2: TsGauge;
BtnOpen: TsBitBtn;
LoadOutBD: TsBitBtn;
sDBNavigator2: TsDBNavigator;
DBGrid3: TDBGrid;
LoadInBD: TsBitBtn;
BtnDelete: TsButton;
sRadioGroup1: TsRadioGroup;
Progr3: TsTrackBar;
Progr1: TsProgressBar;
sPanel1: TsPanel;
sRadioButton1: TsRadioButton;
sRadioButton2: TsRadioButton;
sCheckBox1: TsCheckBox;
sDBRichEdit1: TsDBRichEdit;
ApplyOutBD: TsBitBtn;
BtnSetSkin: TsBitBtn;
sLabel9: TsLabel;
sEdit1: TsEdit;
sButton1: TsButton;
sSpeedButton1: TsSpeedButton;
sBevel1: TsBevel;
sUpDown1: TsUpDown;
sComboBox1: TsComboBox;
BtnCancel: TsBitBtn;
BtnBetta: TsBitBtn;
Mark: TsTabSheet;
Btn_Subject: TsBitBtn;
Btn_Subject_Theme: TsBitBtn;
Btn_Subject_Theme_group: TsBitBtn;
BtnAll: TsBitBtn;
BoxAccessSubject: TJRDBCheckBoxMySQL;
BoxAccessTheme: TJRDBCheckBoxMySQL;
procedure Grid_SubjectKeyPress(Sender: TObject; var Key:
Char);
procedure Grid_SubjectColExit(Sender: TObject);
procedure Grid_SubjectCellClick(Column: TColumn);
procedure Grid_SubjectDrawColumnCell(Sender: TObject; const
Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
procedure uCancelClick(Sender: TObject);
procedure uSaveClick(Sender: TObject);
procedure uDeleteClick(Sender: TObject);
procedure uCreateClick(Sender: TObject);
procedure stCancelClick(Sender: TObject);
procedure stSaveClick(Sender: TObject);
procedure stDeleteClick(Sender: TObject);
procedure stCreateClick(Sender: TObject);
procedure stReloadClick(Sender: TObject);
procedure UReLoadClick(Sender: TObject);
procedure BtnQuestionClick(Sender: TObject);
procedure Create_ThemeClick(Sender: TObject);
procedure Navigator_SubjectClick(Sender: TObject;
Button: TNavigateBtn);
procedure Grid_SubjectMouseUp(Sender: TObject; Button:
TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormClose(Sender: TObject; var Action:
TCloseAction);
procedure Create_SubjectClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure BtnOpenClick(Sender: TObject);
procedure LoadInBDClick(Sender: TObject);
procedure BtnDeleteClick(Sender: TObject);
procedure ApplyOutBDClick(Sender: TObject);
procedure LoadOutBDClick(Sender: TObject);
procedure BtnSetSkinClick(Sender: TObject);
procedure SkinShow(Sender: TObject);
procedure Progr3Change(Sender: TObject);
procedure BtnCancelClick(Sender: TObject);
procedure BtnBettaClick(Sender: TObject);
procedure Btn_SubjectClick(Sender: TObject);
procedure Btn_Subject_ThemeClick(Sender: TObject);
procedure Btn_Subject_Theme_groupClick(Sender: TObject);
procedure BtnAllClick(Sender: TObject);
procedure Grid_ThemeKeyPress(Sender: TObject; var Key:
Char);
procedure Grid_ThemeCellClick(Column: TColumn);
procedure Grid_ThemeColExit(Sender: TObject);
procedure Grid_ThemeDrawColumnCell(Sender: TObject; const
Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
private
{ Private declarations }
public
{ Public declarations }
procedure LoadSkin(FileName: String);//Загрузка в
БД
function SaveSkin(Path: String): String;//Сохранение
скина на диск
procedure ApplySkin(FileName: String);//Применяет
скин
end;
var
main_manager: Tmain_manager;
implementation
unit_edit_test, unit_betta, unit_marks_subject_theme,
unit_marks_subject, unit_marks_subject_theme_group, unit_marks,
unit_mark_option;
{$R *.dfm}
procedure Tmain_manager.ApplyOutBDClick(Sender: TObject);
var
Path: String;
begin
Path := ExtractFilePath(ParamStr(0)) + 'temp\';
ApplySkin(SaveSkin(Path));
end;
procedure Tmain_manager.ApplySkin(FileName: String);
var
Fname: String;
I: Integer;
Name: String;
Path: String;
begin
if FileExists( FileName ) then
begin
Path := ExtractFilePath(FileName);
Name := ExtractFileName(FileName);
Delete( Name, LastDelimiter( '.', Name ),
Length( Name ) );
end
else
Name := '';
dm.SkinManager.SkinDirectory := Path;
dm.SkinManager.SkinName := Name;
dm.SkinManager.Active := true;
end;
procedure Tmain_manager.BtnAllClick(Sender: TObject);
begin
Form_mark_option.Show;
Form_mark_option.Form_index := 0;
Hide;
end;
procedure Tmain_manager.BtnBettaClick(Sender: TObject);
begin
FrmBetta.Show;
end;
procedure Tmain_manager.BtnCancelClick(Sender: TObject);
begin
dm.SetAllSkinPriority('null');
dm.SkinManager.Active := false;
end;
procedure Tmain_manager.BtnDeleteClick(Sender: TObject);
begin
dm.Query_Skin.Delete;
end;
procedure Tmain_manager.BtnOpenClick(Sender: TObject);
begin
if not dm.OD.Execute then exit;
ApplySkin(dm.OD.FileName);
end;
procedure Tmain_manager.BtnQuestionClick(Sender: TObject);
begin
dm.Last_Selected.id_subject := dm.Query_Subject.FieldByName('id_subject').AsInteger;
dm.Last_Selected.id_theme := dm.Query_Theme.FieldByName('id_theme').AsInteger;
main_manager.Hide;
edit_test.Show;
end;
procedure Tmain_manager.BtnSetSkinClick(Sender: TObject);
var
id_skin: integer;
begin
ApplyOutBD.OnClick(Sender);
id_skin := dm.Query_Skin.FieldByName('id_skin').AsInteger;
dm.SetAllSkinPriority('0');
dm.SetSkinPriority('100', id_skin);
dm.Load_Query_Skin;
end;
procedure Tmain_manager.Button1Click(Sender: TObject);
begin
;
//Создание нового предмета
procedure Tmain_manager.Create_SubjectClick(Sender:
TObject);
var
Subject_New: String;
begin
Subject_New := InputBox('Создание нового предмета',
'Введите название создаваемого
предмета',
'<<< Новый предмет
>>>');
if Subject_New <> '<<< Новый предмет
>>>' then
begin
try
dm.Create_Subject_New(subject_New);
except
;
end;
dm.Query_Subject_Set;
dm.Query_Theme_Set;
end;
end;
//Создание новой темы
procedure Tmain_manager.Create_ThemeClick(Sender:
TObject);
var
Theme_New: String;
id_subject: integer;
begin
id_subject := dm.Query_Subject.FieldByName('id_subject').AsInteger;
dm.Last_Selected.id_subject := id_subject;
Theme_New := InputBox('Создание новой темы',
'Введите название создаваемой темы',
'<<< Новая тема
>>>');
begin
try
dm.Create_Theme_New(id_subject, theme_New);
except
;
end;
dm.Last_Selected.id_theme := dm.Query_Theme.FieldByName('id_theme').AsInteger;
dm.Query_Subject_Set;
dm.Query_Subject.Locate('id_subject',
dm.Last_Selected.id_subject, []);
dm.Query_Theme_Set;
end;
end;
procedure Tmain_manager.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Application.Terminate;
end;
procedure Tmain_manager.FormShow(Sender: TObject);
begin
dm.Query_Subject_Set();
dm.Query_Theme_Set();
dm.Load_User;
dm.Load_Student;
end;
procedure Tmain_manager.Grid_SubjectCellClick(Column:
TColumn);
begin
if Column.FieldName = 'access' then
begin
Column.Field.DataSet.Edit;
if Column.Field.DataSet.FieldByName('access').AsInteger
= 1 then
Column.Field.DataSet.FieldByName('access').AsInteger
:= 0
else
Column.Field.DataSet.FieldByName('access').AsInteger
:= 1;
Column.Field.DataSet.Post;
end;
end;
procedure Tmain_manager.Grid_SubjectColExit(Sender:
TObject);
begin
If Grid_Subject.SelectedField.FieldName = BoxAccessSubject.DataField then
BoxAccessSubject.Visible := false;
end;
procedure Tmain_manager.Grid_SubjectDrawColumnCell(Sender:
TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
Var
Style: Integer;
ImageIndex: Integer;
begin
if Column.FieldName = 'access' then
begin
if Column.Field.DataSet.FieldByName('access').AsInteger
= 1 then
ImageIndex := 0
else
ImageIndex := 1;
end;
dm.ImageList.Draw(TDBGrid(Sender).Canvas,Rect.Left,Rect.Top,
ImageIndex, true );
if (gdFocused in State) and (Column.FieldName
= BoxAccessSubject.DataField)
then
begin
BoxAccessSubject.Left:= Rect.Left + Grid_Subject.Left + 1;
BoxAccessSubject.Top:= Rect.Top + Grid_Subject.top + 1;
BoxAccessSubject.Width := Rect.Right - Rect.Left;
BoxAccessSubject.Height := Rect.Bottom - Rect.Top;
BoxAccessSubject.Visible:=true;
end;
end;
procedure Tmain_manager.Grid_SubjectKeyPress(Sender:
TObject; var Key: Char);
begin
if (key <> chr(9)) then
begin
if (Grid_Subject.SelectedField.FieldName =
BoxAccessSubject.DataField) then
begin
BoxAccessSubject.SetFocus;
SendMessage(BoxAccessSubject.Handle, WM_Char, word(Key), 0);
end;
end;
end;
procedure Tmain_manager.Grid_SubjectMouseUp(Sender:
TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
dm.Query_Theme_Set();
end;
procedure Tmain_manager.Grid_ThemeCellClick(Column:
TColumn);
begin
if Column.FieldName = 'access' then
begin
Column.Field.DataSet.Edit;
if Column.Field.DataSet.FieldByName('access').AsInteger
= 1 then
Column.Field.DataSet.FieldByName('access').AsInteger
:= 0
else
Column.Field.DataSet.FieldByName('access').AsInteger
:= 1;
Column.Field.DataSet.Post;
end;
end;
procedure Tmain_manager.Grid_ThemeColExit(Sender:
TObject);
begin
If Grid_Theme.SelectedField.FieldName = BoxAccessTheme.DataField then
BoxAccessTheme.Visible := false;
end;
procedure Tmain_manager.Grid_ThemeDrawColumnCell(Sender:
TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
Var
Style: Integer;
ImageIndex: Integer;
begin
if Column.FieldName = 'access' then
begin
if Column.Field.DataSet.FieldByName('access').AsInteger
= 1 then
ImageIndex := 0
else
ImageIndex := 1;
end;
dm.ImageList.Draw(TDBGrid(Sender).Canvas,Rect.Left,Rect.Top,
ImageIndex, true );
if (gdFocused in State) and (Column.FieldName
= BoxAccessTheme.DataField)
then
begin
BoxAccessTheme.Left:= Rect.Left + Grid_Theme.Left + 1;
BoxAccessTheme.Top:= Rect.Top + Grid_Theme.top + 1;
BoxAccessTheme.Width := Rect.Right - Rect.Left;
BoxAccessTheme.Height := Rect.Bottom - Rect.Top;
BoxAccessTheme.Visible:=true;
end;
end;
procedure Tmain_manager.Grid_ThemeKeyPress(Sender:
TObject; var Key: Char);
begin
if (key <> chr(9)) then
begin
if (Grid_Subject.SelectedField.FieldName = BoxAccessTheme.DataField) then
begin
BoxAccessTheme.SetFocus;
SendMessage(BoxAccessTheme.Handle, WM_Char, word(Key), 0);
end;
end;
end;
procedure Tmain_manager.LoadInBDClick(Sender: TObject);
var
Fname: String;
I: Integer;
name: String;
PAth: String;
begin
LoadSkin(dm.OD.FileName);
end;
procedure Tmain_manager.LoadOutBDClick(Sender: TObject);
var
Path: String;
beginnot SelectDirectory('Выберете папку','C:\, D:\', Path) then
Exit;:= Path + '\';(Path);
end;
procedure Tmain_manager.LoadSkin(FileName: String);
var
name: String;
begin
if FileExists( FileName ) then
begin
Name := ExtractFileName(FileName);
Delete( Name, LastDelimiter( '.', Name ),
Length( Name ) );
end
else
Name := 'name';
dm.Load_Query_Skin();
dm.Query_Skin.Insert;
dm.Query_Skin.Post;
dm.Query_Skin.Edit;
(dm.Query_Skin.FieldByName('skin') as TBlobField).LoadFromFile(FileName);
dm.Query_Skin.FieldByName('name').AsString := name;
dm.Query_Skin.Post;
end;
procedure Tmain_manager.Navigator_SubjectClick(Sender:
TObject;
Button: TNavigateBtn);
begin
dm.Query_Theme_Set();
end;
procedure Tmain_manager.Progr3Change(Sender: TObject);
begin
Progr1.Position := Progr3.Position;
Progr2.Progress := Progr3.Position;
end;
function Tmain_manager.SaveSkin(Path: String): String;
var
FileName: String;
begin
FileName := Path + dm.Query_Skin.FieldByName('name').AsString +
'.asz';
(dm.Query_Skin.FieldByName('skin') as TBlobField).SaveToFile(FileName);
SaveSkin := FileName;
end;
procedure Tmain_manager.Btn_SubjectClick(Sender: TObject);
begin
Form_mark_option.Show;
Form_mark_option.Form_index := 1;
main_manager.Hide;
end;
procedure Tmain_manager.Btn_Subject_ThemeClick(Sender:
TObject);
begin
Form_mark_option.Show;
Form_mark_option.Form_index := 2;
main_manager.Hide;
end;
procedure Tmain_manager.Btn_Subject_Theme_groupClick(Sender:
TObject);
begin
Form_mark_option.Show;
Form_mark_option.Form_index := 3;
main_manager.Hide;
end;
procedure Tmain_manager.SkinShow(Sender: TObject);
begin
dm.Load_Query_Skin;
end;
procedure Tmain_manager.stCancelClick(Sender: TObject);
begin
try
dm.Query_Student.Cancel;
except
;
end;
end;
procedure Tmain_manager.stCreateClick(Sender: TObject);
begin
try
dm.Query_Student.Insert;
except
;
end;
end;
procedure Tmain_manager.stDeleteClick(Sender: TObject);
begin
try
dm.Query_Student.Delete;
except
;
end;
end;
procedure Tmain_manager.stReloadClick(Sender: TObject);
begin
try
dm.Load_Student;
except
;
end;
end;
procedure Tmain_manager.stSaveClick(Sender: TObject);
begin
try
dm.Query_Student.Post;
except
;
end;
end;
procedure Tmain_manager.uCancelClick(Sender: TObject);
begin
try
dm.Query_User.Cancel;
except
;
end;
end;
procedure Tmain_manager.uCreateClick(Sender: TObject);
begin
try
dm.Query_User.Insert;
except
;
end;
end;
procedure Tmain_manager.uDeleteClick(Sender: TObject);
begin
try
dm.Query_User.Delete;
except
;
end;
end;
procedure Tmain_manager.UReLoadClick(Sender: TObject);
begin
try
dm.Load_User;
except
;
end;
end;
procedure Tmain_manager.uSaveClick(Sender: TObject);
begin
try
dm.Query_User.Post;
except
;
end;
end;
end.
unit unit_marks;
interface
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms,
Dialogs, Grids, DBGrids, Menus;
type
TForm_Marks = class(TForm)
MainMenu1: TMainMenu;
columns: TMenuItem;
select: TMenuItem;
Grid_Mark: TDBGrid;
Report: TMenuItem;
View: TMenuItem;
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action:
TCloseAction);
procedure ViewClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure ColumnsSet();
end;
var
Form_Marks: TForm_Marks;
implementation
unit_dm, unit_mark_option, unit_main_manager;
{$R *.dfm}
procedure TForm_Marks.ColumnsSet;
begin
Grid_Mark.Columns[0].Visible := Form_mark_option.N_group.Checked;
Grid_Mark.Columns[1].Visible :=
Form_mark_option.SName.Checked;
Grid_Mark.Columns[2].Visible :=
Form_mark_option.Name.Checked;
Grid_Mark.Columns[3].Visible :=
Form_mark_option.Subject.Checked;
Grid_Mark.Columns[4].Visible :=
Form_mark_option.Theme.Checked;
Grid_Mark.Columns[5].Visible :=
Form_mark_option.date_begin.Checked;
Grid_Mark.Columns[6].Visible :=
Form_mark_option.time_begin.Checked;
Grid_Mark.Columns[7].Visible :=
Form_mark_option.time_end.Checked;
Grid_Mark.Columns[8].Visible :=
Form_mark_option.mark.Checked;
Grid_Mark.Columns[9].Visible :=
Form_mark_option.mark_5.Checked;
Grid_Mark.Columns[10].Visible :=
Form_mark_option.mark_100.Checked;
Grid_Mark.Columns[0].Width := 50;
Grid_Mark.Columns[1].Width := 104;
Grid_Mark.Columns[2].Width := 108;
Grid_Mark.Columns[3].Width := 64;
Grid_Mark.Columns[4].Width := 141;
Grid_Mark.Columns[5].Width := 90;
Grid_Mark.Columns[6].Width := 85;
Grid_Mark.Columns[7].Width := 107;
Grid_Mark.Columns[8].Width := 36;
Grid_Mark.Columns[9].Width := 71;
Grid_Mark.Columns[10].Width := 79;
end;
procedure TForm_Marks.FormClose(Sender: TObject; var Action:
TCloseAction);
begin
main_manager.Show;
end;
procedure TForm_Marks.FormShow(Sender: TObject);
begin
dm.Load_Marks_Al();
ColumnsSet;
end;
procedure TForm_Marks.ViewClick(Sender: TObject);
dm.RvProject.Execute;
dm.RvProject.Close;
end;
end.
unit unit_marks_subject;
interface
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms,
Dialogs, ExtCtrls, sPanel, sTabControl, Grids, DBGrids, StdCtrls,
Buttons,
sBitBtn, sMemo, Menus;
type
TForm_Marks_Subject = class(TForm)
TabSubject: TsTabControl;
Grid_Mark: TDBGrid;
MainMenu1: TMainMenu;
columns: TMenuItem;
select: TMenuItem;
procedure FormShow(Sender: TObject);
procedure TabSubjectMouseUp(Sender: TObject; Button:
TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormClose(Sender: TObject; var Action:
TCloseAction);
private
{ Private declarations }
procedure CreateTabSubject();//Создаёт
вкладки для каждого предмета
public
{ Public declarations }
procedure ColumnsSet();
end;
var
Form_Marks_Subject: TForm_Marks_Subject;
id_subject: array[0..500] of Integer;
implementation
uses
unit_dm, unit_main_manager, unit_mark_option;
{$R *.dfm}
procedure TForm_Marks_Subject.ColumnsSet;
begin
Grid_Mark.Columns[0].Visible := Form_mark_option.N_group.Checked;
Grid_Mark.Columns[1].Visible :=
Form_mark_option.SName.Checked;
Grid_Mark.Columns[2].Visible :=
Form_mark_option.Name.Checked;
Grid_Mark.Columns[3].Visible :=
Form_mark_option.Subject.Checked;
Grid_Mark.Columns[4].Visible :=
Form_mark_option.Theme.Checked;
Grid_Mark.Columns[5].Visible :=
Form_mark_option.date_begin.Checked;
Grid_Mark.Columns[6].Visible :=
Form_mark_option.time_begin.Checked;
Grid_Mark.Columns[7].Visible :=
Form_mark_option.time_end.Checked;
Grid_Mark.Columns[8].Visible :=
Form_mark_option.mark.Checked;
Grid_Mark.Columns[9].Visible :=
Form_mark_option.mark_5.Checked;
Grid_Mark.Columns[0].Width := 50;
Grid_Mark.Columns[1].Width := 104;
Grid_Mark.Columns[2].Width := 108;
Grid_Mark.Columns[3].Width := 64;
Grid_Mark.Columns[4].Width := 141;
Grid_Mark.Columns[5].Width := 90;
Grid_Mark.Columns[6].Width := 85;
Grid_Mark.Columns[7].Width := 107;
Grid_Mark.Columns[8].Width := 36;
Grid_Mark.Columns[9].Width := 71;
end;
procedure TForm_Marks_Subject.CreateTabSubject;
var
TabIndex: integer;
begin
TabSubject.Tabs.Clear;
dm.Query_Subject.First;
TabIndex := 0;
while not dm.Query_Subject.Eof do
begin
TabSubject.Tabs.Add(dm.Query_Subject.FieldByName('subject').AsString);
id_subject[TabIndex] := dm.Query_Subject.FieldByName('id_subject').AsInteger;
Inc(TabIndex);
dm.Query_Subject.Next;
end;
end;
procedure TForm_Marks_Subject.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
main_manager.Show;
end;
procedure TForm_Marks_Subject.FormShow(Sender: TObject);
begin
CreateTabSubject();
dm.Load_Mark_Subject(id_subject[TabSubject.TabIndex]);
TabSubject.TabIndex := 0;
ColumnsSet;
end;
procedure TForm_Marks_Subject.TabSubjectMouseUp(Sender:
TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
dm.Load_Mark_Subject(id_subject[TabSubject.TabIndex]);
end;
end.
unit unit_marks_subject_theme;
interface
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms,
Dialogs, ExtCtrls, sPanel, sTabControl, Grids, DBGrids, StdCtrls,
Buttons,
sBitBtn, sMemo, Menus;
type
TForm_Marks_Subject_Theme = class(TForm)
TabSubject: TsTabControl;
MainMenu1: TMainMenu;
columns: TMenuItem;
select: TMenuItem;
TabTheme: TsTabControl;
Grid_Mark: TDBGrid;
procedure FormShow(Sender: TObject);
procedure TabSubjectMouseUp(Sender: TObject; Button:
TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure TabThemeMouseUp(Sender: TObject; Button:
TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormClose(Sender: TObject; var Action:
TCloseAction);
private
{ Private declarations }
procedure CreateTabSubject();//Создаёт
вкладки для каждого предмета
procedure CreateTabTheme(id_subject: integer);//Создаёт
вкладки для тем
public
{ Public declarations }
procedure ColumnsSet();
end;
var
Form_Marks_Subject_Theme: TForm_Marks_Subject_Theme;
id_subject: array[0..500] of Integer;
id_theme: array[0..500] of Integer;
implementation
uses
unit_dm, unit_main_manager, unit_mark_option;
{$R *.dfm}
procedure TForm_Marks_Subject_Theme.ColumnsSet;
begin
Grid_Mark.Columns[0].Visible := Form_mark_option.N_group.Checked;
Grid_Mark.Columns[1].Visible :=
Form_mark_option.SName.Checked;
Grid_Mark.Columns[2].Visible :=
Form_mark_option.Name.Checked;
Grid_Mark.Columns[3].Visible :=
Form_mark_option.Subject.Checked;
Grid_Mark.Columns[4].Visible :=
Form_mark_option.Theme.Checked;
Grid_Mark.Columns[5].Visible :=
Form_mark_option.date_begin.Checked;
Grid_Mark.Columns[6].Visible :=
Form_mark_option.time_begin.Checked;
Grid_Mark.Columns[7].Visible :=
Form_mark_option.time_end.Checked;
Grid_Mark.Columns[8].Visible :=
Form_mark_option.mark.Checked;
Grid_Mark.Columns[0].Width := 50;
Grid_Mark.Columns[1].Width := 104;
Grid_Mark.Columns[2].Width := 108;
Grid_Mark.Columns[3].Width := 64;
Grid_Mark.Columns[4].Width := 141;
Grid_Mark.Columns[5].Width := 90;
Grid_Mark.Columns[6].Width := 85;
Grid_Mark.Columns[7].Width := 107;
Grid_Mark.Columns[8].Width := 36;
end;
procedure TForm_Marks_Subject_Theme.CreateTabSubject;
var
TabIndex: integer;
begin
dm.Query_Subject_Set;
TabSubject.Tabs.Clear;
dm.Query_Subject.First;
TabIndex := 0;
while not dm.Query_Subject.Eof do
begin
TabSubject.Tabs.Add(dm.Query_Subject.FieldByName('subject').AsString);
id_subject[TabIndex] := dm.Query_Subject.FieldByName('id_subject').AsInteger;
Inc(TabIndex);
dm.Query_Subject.Next;
end;
end;
procedure TForm_Marks_Subject_Theme.CreateTabTheme(id_subject:
integer);
var
TabIndex: integer;
begin
id_theme[0] := -1;
dm.Query_Subject.Locate('id_subject',
id_subject, []);
dm.Query_Theme_Set;
TabTheme.Tabs.Clear;
dm.Query_Theme.First;
TabIndex := 0;
while not dm.Query_Theme.Eof do
begin
TabTheme.Tabs.Add(dm.Query_Theme.FieldByName('theme').AsString);
id_theme[TabIndex] := dm.Query_Theme.FieldByName('id_theme').AsInteger;
Inc(TabIndex);
dm.Query_Theme.Next;
end;
TabTheme.TabIndex := 0;
dm.Load_Mark_Theme(id_theme[TabTheme.TabIndex]);
end;
procedure TForm_Marks_Subject_Theme.FormClose(Sender:
TObject;
var Action: TCloseAction);
begin
main_manager.Show;
end;
procedure TForm_Marks_Subject_Theme.FormShow(Sender:
TObject);
begin
CreateTabSubject();
CreateTabTheme(id_subject[TabSubject.TabIndex]);
TabSubject.TabIndex := 0;
dm.Load_Mark_Theme(id_theme[TabTheme.TabIndex]);
TabTheme.TabIndex := 0;
ColumnsSet;
end;
procedure TForm_Marks_Subject_Theme.TabSubjectMouseUp(Sender:
TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
CreateTabTheme(id_subject[TabSubject.TabIndex]);
end;
procedure TForm_Marks_Subject_Theme.TabThemeMouseUp(Sender:
TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
dm.Load_Mark_Theme(id_theme[TabTheme.TabIndex]);
end;
end.
unit unit_marks_subject_theme_group;
interface
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms,
Dialogs, ExtCtrls, sPanel, sTabControl, Grids, DBGrids, StdCtrls,
Buttons,
sBitBtn, sMemo, Menus;
type
TForm_Marks_Subject_Theme_group = class(TForm)
TabSubject: TsTabControl;
MainMenu1: TMainMenu;
columns: TMenuItem;
select: TMenuItem;
TabTheme: TsTabControl;
TabGroup: TsTabControl;
Grid_Mark: TDBGrid;
procedure FormShow(Sender: TObject);
procedure TabSubjectMouseUp(Sender: TObject; Button:
TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure TabThemeMouseUp(Sender: TObject; Button:
TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure TabGroupMouseUp(Sender: TObject; Button:
TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormClose(Sender: TObject; var Action:
TCloseAction);
private
{ Private declarations }
procedure CreateTabSubject();//Создаёт
вкладки для каждого предмета
procedure CreateTabTheme(id_subject: integer);//Создаёт
вкладки для тем
procedure CreateTabGroup(id_theme: integer);//Создаёт
вкладки груп
public
{ Public declarations }
procedure ColumnsSet();
end;
var
Form_Marks_Subject_Theme_group: TForm_Marks_Subject_Theme_group;
id_subject: array[0..500] of Integer;
id_theme: array[0..500] of Integer;
id_group: array[0..500] of Integer;
implementation
uses
unit_dm, unit_main_manager, unit_mark_option;
{$R *.dfm}
procedure TForm_Marks_Subject_Theme_group.ColumnsSet;
begin
Grid_Mark.Columns[0].Visible := Form_mark_option.N_group.Checked;
Grid_Mark.Columns[1].Visible :=
Form_mark_option.SName.Checked;
Grid_Mark.Columns[2].Visible :=
Form_mark_option.Name.Checked;
Grid_Mark.Columns[3].Visible :=
Form_mark_option.Subject.Checked;
Grid_Mark.Columns[4].Visible :=
Form_mark_option.Theme.Checked;
Grid_Mark.Columns[5].Visible :=
Form_mark_option.date_begin.Checked;
Grid_Mark.Columns[6].Visible :=
Form_mark_option.time_begin.Checked;
Grid_Mark.Columns[7].Visible :=
Form_mark_option.time_end.Checked;
Grid_Mark.Columns[8].Visible :=
Form_mark_option.mark.Checked;
Grid_Mark.Columns[0].Width := 50;
Grid_Mark.Columns[1].Width := 104;
Grid_Mark.Columns[2].Width := 108;
Grid_Mark.Columns[3].Width := 64;
Grid_Mark.Columns[4].Width := 141;
Grid_Mark.Columns[5].Width := 90;
Grid_Mark.Columns[6].Width := 85;
Grid_Mark.Columns[7].Width := 107;
Grid_Mark.Columns[8].Width := 36;
end;
procedure TForm_Marks_Subject_Theme_group.CreateTabGroup(id_theme:
integer);
begin
dm.Load_Group();
TabGroup.Tabs.Clear;
dm.Query_Group.First;
while not dm.Query_Group.Eof do
begin
TabGroup.Tabs.Add(dm.Query_Group.FieldByName('n_group').AsString);
dm.Query_Group.Next;
end;
TabGroup.TabIndex := 0;
dm.Load_Mark_Group(id_theme, TabGroup.Tabs[0]);
end;
procedure TForm_Marks_Subject_Theme_group.CreateTabSubject;
var
TabIndex: integer;
begin
dm.Query_Subject_Set;
TabSubject.Tabs.Clear;
dm.Query_Subject.First;
TabIndex := 0;
while not dm.Query_Subject.Eof do
begin
TabSubject.Tabs.Add(dm.Query_Subject.FieldByName('subject').AsString);
id_subject[TabIndex] := dm.Query_Subject.FieldByName('id_subject').AsInteger;
Inc(TabIndex);
dm.Query_Subject.Next;
end;
TabSubject.TabIndex := 0;
end;
procedure TForm_Marks_Subject_Theme_group.CreateTabTheme(id_subject:
integer);
var
TabIndex: integer;
begin
id_theme[0] := -1;
dm.Query_Subject.Locate('id_subject',
id_subject, []);
dm.Query_Theme_Set;
TabTheme.Tabs.Clear;
dm.Query_Theme.First;
TabIndex := 0;
while not dm.Query_Theme.Eof do
begin
TabTheme.Tabs.Add(dm.Query_Theme.FieldByName('theme').AsString);
id_theme[TabIndex] := dm.Query_Theme.FieldByName('id_theme').AsInteger;
Inc(TabIndex);
dm.Query_Theme.Next;
end;
TabTheme.TabIndex := 0;
CreateTabGroup(id_theme[TabTheme.TabIndex]);
end;
procedure TForm_Marks_Subject_Theme_group.FormClose(Sender:
TObject;
var Action: TCloseAction);
begin
main_manager.Show;
end;
procedure TForm_Marks_Subject_Theme_group.FormShow(Sender:
TObject);
begin
CreateTabSubject();
CreateTabTheme(id_subject[TabSubject.TabIndex]);
TabSubject.TabIndex := 0;
dm.Load_Mark_Theme(id_theme[TabTheme.TabIndex]);
TabTheme.TabIndex := 0;
ColumnsSet;
end;
procedure TForm_Marks_Subject_Theme_group.TabGroupMouseUp(Sender:
TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
dm.Load_Mark_Group(id_theme[TabTheme.TabIndex],
TabGroup.Tabs[TabGroup.TabIndex]);
end;
procedure TForm_Marks_Subject_Theme_group.TabSubjectMouseUp(Sender:
TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
CreateTabTheme(id_subject[TabSubject.TabIndex]);
end;
procedure TForm_Marks_Subject_Theme_group.TabThemeMouseUp(Sender:
TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
CreateTabGroup(id_theme[TabTheme.TabIndex]);
end;
unit unit_mark_option;
interface
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms,
Dialogs, ComCtrls, sPageControl, StdCtrls, sCheckBox, Buttons,
sBitBtn,
sAlphaListBox;
type
TForm_mark_option = class(TForm)
Page_SELECT: TsPageControl;
TabField: TsTabSheet;
TabOrder: TsTabSheet;
BtnNext: TsBitBtn;
N_group: TsCheckBox;
SName: TsCheckBox;
Name: TsCheckBox;
Subject: TsCheckBox;
Theme: TsCheckBox;
date_begin: TsCheckBox;
time_begin: TsCheckBox;
time_end: TsCheckBox;
mark: TsCheckBox;
mark_5: TsCheckBox;
mark_100: TsCheckBox;
ListOut: TsListBox;
ListIn: TsListBox;
BtnSelect: TsBitBtn;
BtnSelectAll: TsBitBtn;
BtnCancelAll: TsBitBtn;
BtnCancel: TsBitBtn;
BtnCanc: TsBitBtn;
procedure BtnNextClick(Sender: TObject);
procedure BtnSelectClick(Sender: TObject);
procedure BtnCancelClick(Sender: TObject);
procedure BtnSelectAllClick(Sender: TObject);
procedure BtnCancelAllClick(Sender: TObject);
procedure BtnCancClick(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
procedure SetOrderStr();//Заполнение параметров
сортировки
public
{ Public declarations }
Form_index: integer; //указатель выбранной формы
end;
var
Form_mark_option: TForm_mark_option;
implementation
unit_marks, unit_main_manager, unit_dm, unit_marks_subject,
unit_marks_subject_theme_group, unit_marks_subject_theme;
{$R *.dfm}
procedure TForm_mark_option.BtnCancClick(Sender: TObject);
begin
Hide;
Main_Manager.Show;
end;
procedure TForm_mark_option.BtnCancelAllClick(Sender:
TObject);
begin
ListOut.Items.Clear;
ListOut.Items.Add('№ группы');
ListOut.Items.Add('Фамилия');
ListOut.Items.Add('Имя');
ListOut.Items.Add('Предмет');
ListOut.Items.Add('Тема');
ListOut.Items.Add('Дата');
ListOut.Items.Add('Время начала');
ListOut.Items.Add('Время окончания');
ListOut.Items.Add('Оценка 2-5');
ListOut.Items.Add('Оценка 2-5');
ListOut.Items.Add('Оценка 0-100');
ListIn.Items.Clear;
end;
procedure TForm_mark_option.BtnCancelClick(Sender:
TObject);
begin
if ListIn.ItemIndex = -1 then
exit;
ListOut.Items.Add(ListIn.Items[ListIn.ItemIndex]);
ListIn.Items.Delete(ListIn.ItemIndex);
ListIn.ItemIndex := 0;
end;
procedure TForm_mark_option.BtnSelectAllClick(Sender:
TObject);
begin
ListIn.Items.Clear;
ListIn.Items.Add('№ группы');
ListIn.Items.Add('Фамилия');
ListIn.Items.Add('Имя');
ListIn.Items.Add('Предмет');
ListIn.Items.Add('Тема');
ListIn.Items.Add('Дата');
ListIn.Items.Add('Время начала');
ListIn.Items.Add('Время окончания');
ListIn.Items.Add('Оценка 2-5');
ListIn.Items.Add('Оценка 2-5');
ListIn.Items.Add('Оценка 0-100');
ListOut.Items.Clear;
end;
procedure TForm_mark_option.BtnSelectClick(Sender:
TObject);
begin
if ListOut.ItemIndex = -1 then
exit;
ListIn.Items.Add(ListOut.Items[listOut.ItemIndex]);
ListOut.Items.Delete(listOut.ItemIndex);
ListOut.ItemIndex := 0;
end;
procedure TForm_mark_option.FormShow(Sender: TObject);
begin
Page_Select.TabIndex := 0;
end;
procedure TForm_mark_option.SetOrderStr;
var
ItemIndex: integer;
begin
if ListIn.Items.Count <> 0 then
begin
ListIn.ItemIndex := 0;
dm.order_str := '';
if ListIn.Items[ListIn.ItemIndex] = '№ группы' then
dm.order_str := dm.order_str + 'n_group';
if ListIn.Items[ListIn.ItemIndex] = 'Фамилия' then
dm.order_str := dm.order_str + 'sname';
if ListIn.Items[ListIn.ItemIndex] = 'Имя' then
dm.order_str := dm.order_str + 'name';
if ListIn.Items[ListIn.ItemIndex] = 'Предмет' then
dm.order_str := dm.order_str + 'subject';
if ListIn.Items[ListIn.ItemIndex] = 'Тема' then
dm.order_str := dm.order_str + 'theme';
if ListIn.Items[ListIn.ItemIndex] = 'Дата' then
dm.order_str := dm.order_str + 'date_begin';
if ListIn.Items[ListIn.ItemIndex] = 'Время
начала' then
dm.order_str := dm.order_str + 'time_begin';
if ListIn.Items[ListIn.ItemIndex] = 'Время
окончания' then
dm.order_str := dm.order_str + 'time_end';
if ListIn.Items[ListIn.ItemIndex] = 'Оценка 2-5' then
dm.order_str := dm.order_str + 'mark';
if ListIn.Items[ListIn.ItemIndex] = 'Оценка 0-5' then
dm.order_str := dm.order_str + 'mark_5';
if ListIn.Items[ListIn.ItemIndex] = 'Оценка
0-100' then
dm.order_str := dm.order_str + 'mark_100';
ListIn.ItemIndex := ListIn.ItemIndex + 1;
ItemIndex := ListIn.ItemIndex;
while ItemIndex <= ListIn.Items.Count - 1 do
begin
dm.order_str := dm.order_str + ' ,' ;
if ListIn.Items[ListIn.ItemIndex] = '№ группы' then
dm.order_str := dm.order_str + 'n_group';
if ListIn.Items[ListIn.ItemIndex] = 'Фамилия' then
dm.order_str := dm.order_str + 'sname';
if ListIn.Items[ListIn.ItemIndex] = 'Имя' then
dm.order_str := dm.order_str + 'name';
if ListIn.Items[ListIn.ItemIndex] = 'Предмет' then
dm.order_str := dm.order_str + 'subject';
if ListIn.Items[ListIn.ItemIndex] = 'Тема' then
dm.order_str := dm.order_str + 'theme';
if ListIn.Items[ListIn.ItemIndex] = 'Дата' then
dm.order_str := dm.order_str + 'date_begin';
if ListIn.Items[ListIn.ItemIndex] = 'Время
начала' then
dm.order_str := dm.order_str + 'time_begin';
if ListIn.Items[ListIn.ItemIndex] = 'Время
окончания' then
dm.order_str := dm.order_str + 'time_end';
if ListIn.Items[ListIn.ItemIndex] = 'Оценка 2-5' then
dm.order_str := dm.order_str + 'mark';
if ListIn.Items[ListIn.ItemIndex] = 'Оценка 0-5' then
dm.order_str := dm.order_str + 'mark_5';
if ListIn.Items[ListIn.ItemIndex] = 'Оценка
0-100' then
dm.order_str := dm.order_str + 'mark_100';
Inc ( ItemIndex );
ListIn.ItemIndex := ListIn.ItemIndex + 1;
end;
end;
end;
procedure TForm_mark_option.BtnNextClick(Sender: TObject);
begin
if Page_Select.TabIndex = (Page_Select.PageCount - 1) then
begin
SetOrderStr;
case Form_index of
0: Form_Marks.Show;
1: Form_Marks_Subject.Show;
2: Form_Marks_Subject_Theme.Show;
3: Form_marks_subject_theme_group.Show;
end;
Hide;
end
else
Page_Select.TabIndex := Page_Select.TabIndex + 1;
end;
end.
unit unit_mark_select;
interface
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms,
Dialogs, StdCtrls, ComCtrls;
type
Tform_mark_select = class(TForm)
PageSelect: TPageControl;
TabMark: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
TabSheet4: TTabSheet;
RB_2_5: TRadioButton;
RB_0_5: TRadioButton;
RB_0_100: TRadioButton;
private
{ Private declarations }
public
{ Public declarations }
end;
var
form_mark_select: Tform_mark_select;
implementation
{$R *.dfm}
end.
unit unit_dm;
interface
SysUtils, Classes, ZConnection, DB, ZAbstractRODataset,
ZAbstractDataset,
ZDataset, Dialogs, ZAbstractTable, XPMan, ExtDlgs, ActnList,
Menus, ActnPopup,
XPStyleActnCtrls, ActnMan, ComCtrls, ZSqlMonitor, sSkinProvider,
sSkinManager,
ImgList, Controls, RpRenderText, RpRenderRTF, RpRenderHTML,
RpRender,
RpRenderPDF, RpCon, RpConDS, RpRave, RpDefine, RpBase, RpSystem,
ExtCtrls;
type
TUser = record //Данные о пользователе
id: integer;
user: string;
pas: string;
access: string;
name: string;
sname: string;
patronymic: string;
end;
TFSetting = record//Настройки соединения
Host: String[100];
Port: String[100];
Database: String[100];
User: String[100];
Password: String[100];
end;
TSelection = record//Последние выбранные элементы
id_subject: integer;
id_theme: integer;
id_question: integer;
end;
Tdm = class(TDataModule)
ZConnection_spkvtk: TZConnection;
Query_login: TZQuery;
Query_data_test: TZQuery;
Table_Subject_test: TZTable;
Source_Subject: TDataSource;
Query_Subject: TZQuery;
Query_Create: TZQuery;
XP: TXPManifest;
Query_Answer: TZQuery;
Query_Question: TZQuery;
Source_Answer: TDataSource;
Source_Question: TDataSource;
OPD: TOpenPictureDialog;
Query_Illustration: TZQuery;
Source_Illustration: TDataSource;
Query_Delete: TZQuery;
Monitor: TZSQLMonitor;
Query_Theme: TZQuery;
Source_Theme: TDataSource;
Query_User: TZQuery;
Source_User: TDataSource;
SkinManager: TsSkinManager;
Query_Student: TZQuery;
Source_Student: TDataSource;
Query_Skin: TZQuery;
Source_Skin: TDataSource;
OD: TOpenDialog;
Query_Betta: TZQuery;
Source_Betta: TDataSource;
Query_Mark: TZQuery;
Source_Mark: TDataSource;
Query_Group: TZQuery;
RvSystem: TRvSystem;
RvProject: TRvProject;
RvConnectionMark: TRvDataSetConnection;
RvPDF: TRvRenderPDF;
RvHTML: TRvRenderHTML;
RvRTF: TRvRenderRTF;
RvText: TRvRenderText;
ImageList: TImageList;
procedure DataModuleCreate(Sender: TObject);//Создание
модуля
procedure ReadSetting(FName: String; Var
Host,
Port,
Database,
User,
Password: String);//Чтение
настроек из файла для доступа к БД
procedure ConnectSPKVTK();//Подключение
к базе данных СПКВТК
private
{ Private declarations }
public
{ Public declarations }
StrUser: TUser ;//Данные о пользователе
Last_Selected: TSelection;//Последние выбранные элементы
order_str: string;
function log_in(nik: String;
password: String): Boolean ;// Проверка
логина и пароля
function Query_Subject_Set(): Boolean;//Получение
списка предметов
function Query_Theme_Set(): Boolean;//Получение
списка тем по предмету
function Create_Subject_New(Subject_Name: String):
Boolean;//Создание нового предмета
function Create_Theme_New(id_subject: integer;
Theme_Name: String): Boolean;//Создание нового
function Create_Question_New(id_theme: integer): Boolean;//Создание
вопроса
function Create_Answer_New(id_question: integer):
Boolean;//Создание ответа
function Load_Answer(): Boolean;//Получение
списка ответов по предмету
function Load_Question(): Boolean;//Получение
списка вопросов
function Create_Illustration_New(id_question: integer):
Boolean;//Создание иллюстрации к вопросу
function Load_Illustration(): Boolean;//Загрузка
картинок к вопросу
function Load_User(): Boolean;//Загрузка
списка пользователей
function Load_Student(): Boolean;//Загрузка
списка пользователей
procedure Load_Query_Skin(); //Загрузка
таблицы скиеов
procedure SetAllSkinPriority(priority: string);//Задать
приоритет всем скинам
procedure SetSkinPriority(priority: string;
id_skin: integer);//Задать приоритет одному скину
function SaveSkin(Path: String): String;//Сохранение
скина на диск
procedure ApplySkin(FileName: String);//Применяет
скин
procedure LoadSkinOutBD();//Загрузка
скина ииз бд
procedure Load_Betta();//Загрузка заметок Бетта
procedure Load_Mark_Subject(id_subject: integer); //Загрузка
оценок по предмету
procedure Load_Mark_Theme(id_theme: integer); //Загрузка
оценок по теие
procedure Load_Mark_Group(id_theme: integer; n_group: String);//Загрузка
оценок по теие
procedure Load_Marks_Al();//Загрузка
всех оценок
procedure Load_Group();//Загруска списка груп
end;
var
dm: Tdm;
implementation
unit_edit_test, unit_start, unit_authentication;
{$R *.dfm}
procedure Tdm.ApplySkin(FileName: String);
var
Fname: String;
I: Integer;
Name: String;
Path: String;
begin
Fname := dm.OD.FileName;
if FileExists( FileName ) then
begin
Path := ExtractFilePath(FileName);
Name := ExtractFileName(FileName);
Delete( Name, LastDelimiter( '.', Name ),
Length( Name ) );
end
else
Name := '';
dm.SkinManager.SkinDirectory := Path;
dm.SkinManager.SkinName := Name;
dm.SkinManager.Active := true;
end;
// Подключение к базе данных СПКВТК
var
Host: String;
Port: String;
Database: String;
User: String;
Password: String;
begin
try
ReadSetting(ExtractFilePath(ParamStr(0))+'mysql.stg', Host,
Port, Database, User, Password);
ZConnection_spkvtk.HostName := Host;
ZConnection_spkvtk.Port := StrToInt(Port);
ZConnection_spkvtk.Database := Database;
ZConnection_spkvtk.User := User;
ZConnection_spkvtk.Password := Password;
Zconnection_spkvtk.Connected := true;
except
ShowMessage('Ошибка подключения к ' + Host + ':' + Port);
authentication.Close;
end;
end;
function Tdm.Create_Answer_New(id_question: integer):
Boolean;
//Создание нового ответа
begin
Create_Answer_New := true;
try
With Query_Create do
begin
Active := false;
SQL.Clear;
SQL.Add('INSERT INTO answer(id_question, propstr,
correct) VALUE(' + IntToStr(id_question) + ', true, false)') ;
Active := true;
Last_Selected.id_question := FieldByName('id_answer').AsInteger;
end;
except
;
end;
end;
function Tdm.Create_Illustration_New(id_question:
integer): Boolean;
//Создание иллюстрации для вопроса
begin
Create_Illustration_New := true;
try
With Query_Create do
begin
Active := false;
SQL.Clear;
SQL.Add('INSERT INTO q_illustration(id_question) VALUE(' +
IntToStr(id_question) + ')') ;
Active := true;
end;
except
;
end;
end;
function Tdm.Create_Question_New(id_theme: integer):
Boolean;
//Создание нового вопроса
begin
Create_Question_New := true;
try
With Query_Create do
begin
Active := false;
SQL.Clear;
SQL.Add('INSERT INTO question(id_theme, only_one,
mix_answer) VALUE(' + IntToStr(id_theme) + ', true, true)') ;
Active := true;
Last_Selected.id_question := FieldByName('id_question').AsInteger;
end;
except
;
end;
end;
function Tdm.Create_Subject_New(Subject_Name: String):
Boolean;
//Создание нового предмета
begin
Create_Subject_New := true;
try
With Query_Create do
begin
Active := false;
SQL.Clear;
SQL.Add('INSERT INTO subject(subject) VALUE("' +
Subject_Name + '")') ;
Active := true;
end;
except
;
end;
end;
function Tdm.Create_Theme_New(id_subject: integer;
Theme_Name: String): Boolean;
//Создание нового
begin
Create_Theme_New := true;
try
With Query_Create do
begin
Active := false;
SQL.Clear;
SQL.Add('INSERT INTO theme(id_subject, theme) VALUE(' +
IntToStr(id_subject) + ', "' + Theme_Name + '")') ;
Active := true;
Last_Selected.id_theme := FieldByName('id_theme').AsInteger;
end;
except
;
end;
end;
procedure Tdm.DataModuleCreate(Sender: TObject);
//Создание модуля
begin
;
end;
procedure Tdm.LoadSkinOutBD;
var
path: string;
begin
With Query_Skin do
begin
Active := false;
SQL.Clear;
SQL.Add('SELECT * ') ;
SQL.Add('FROM skin') ;
SQL.Add('WHERE priority in (Select max(priority) FROM
skin)' );
Active := true;
Path := ExtractFilePath(ParamStr(0)) + 'temp\';
if Eof then exit;
ApplySkin(SaveSkin(Path));
end;
except
;
end;
end;
function Tdm.Load_Answer: Boolean;
//Загрузка ответа на вопрос
begin
Load_Answer := true;
try
With Query_Answer do
begin
Active := false;
SQL.Clear;
SQL.Add('SELECT * ') ;
SQL.Add('FROM Answer') ;
SQL.Add('WHERE id_question=' +
IntToStr(Query_Question.FieldByName('id_question').AsInteger));
Active := true;
end;
except
;
Load_Answer := false;
end;
end;
procedure Tdm.Load_Betta;
begin
try
With Query_Betta do
begin
Active := false;
SQL.Clear;
SQL.Add('SELECT *') ;
SQL.Add('FROM betta') ;
Active := true;
end;
except
;
end;
end;
procedure Tdm.Load_Group;
begin
try
With Query_Group do
begin
Active := false ;
SQL.Clear;
SQL.Add('SELECT DISTINCT n_group');
SQL.Add('FROM student');
Active := true;
end;
except
;
end;
end;
function Tdm.Load_Illustration: Boolean;
// загрузка иллюстраций к вопросу
begin
Load_Illustration := true;
try
With Query_illustration do
begin
Active := false;
SQL.Clear;
SQL.Add('SELECT * ') ;
SQL.Add('FROM q_illustration ') ;
SQL.Add('WHERE id_question=' +
IntToStr(Query_Question.FieldByName('id_question').AsInteger));
Active := true;
end;
except
;
Load_illustration := false;
end;
end;
procedure Tdm.Load_Mark_Subject(id_subject: integer);
begin
//try
With Query_Mark do
begin
Active := false;
SQL.Clear;
SQL.Add('SELECT n_group, sname, name, subject, theme,
mark, date_begin, time_begin, time_end, mark_5, mark_100 ');
SQL.Add('FROM test te, student st, subject su, theme th') ;
SQL.Add('WHERE te.id_subject = su.id_subject AND');
SQL.Add( 'te.id_theme = th.id_theme AND');
SQL.Add( 'te.id_student = st.id_student AND');
SQL.Add( 'su.id_subject = ' +
IntToStr(id_subject));
if dm.order_str <> '' then
SQL.Add( 'ORDER BY ' +
dm.order_str);
Active := true;
end;
end;
procedure Tdm.Load_Mark_Theme(id_theme: integer);
begin
With Query_Mark do
begin
Active := false;
SQL.Clear;
SQL.Add('SELECT n_group, sname, name, subject, theme,
mark, date_begin, time_begin, time_end, mark_5, mark_100 ');
SQL.Add('FROM test te, student st, subject su, theme th') ;
SQL.Add('WHERE te.id_subject = su.id_subject AND');
SQL.Add( 'te.id_theme = th.id_theme AND');
SQL.Add( 'te.id_student = st.id_student AND');
SQL.Add( 'th.id_theme = ' +
IntToStr(id_theme));
if dm.order_str <> '' then
SQL.Add( 'ORDER BY ' +
dm.order_str);
Active := true;
end;
end;
procedure Tdm.Load_Marks_Al;
begin
//try
With Query_Mark do
begin
Active := false;
SQL.Clear;
SQL.Add('SELECT n_group, sname, name, subject, theme,
mark, date_begin, time_begin, time_end, mark_5, mark_100 ');
SQL.Add('FROM test te, student st, subject su, theme th') ;
SQL.Add('WHERE te.id_subject = su.id_subject AND');
SQL.Add( 'te.id_theme = th.id_theme AND');
SQL.Add( 'te.id_student = st.id_student AND');
SQL.Add( 'te.id_subject = su.id_subject');
if dm.order_str <> '' then
SQL.Add( 'ORDER BY ' +
dm.order_str);
Active := true;
end;
end;
procedure Tdm.Load_Mark_Group(id_theme: Integer; n_group: String);
begin
With Query_Mark do
begin
Active := false;
SQL.Clear;
SQL.Add('SELECT n_group, sname, name, subject, theme,
mark, date_begin, time_begin, time_end, mark_5, mark_100 ');
SQL.Add('FROM test te, student st, subject su, theme th') ;
SQL.Add('WHERE te.id_subject = su.id_subject AND');
SQL.Add( 'te.id_theme = th.id_theme AND');
SQL.Add( 'te.id_student = st.id_student AND');
SQL.Add( 'th.id_theme = ' +
IntToStr(id_theme) + ' AND ');
SQL.Add( 'st.n_group = ' + n_group);
if dm.order_str <> '' then
SQL.Add( 'ORDER BY ' +
dm.order_str);
Active := true;
end;
end;
procedure Tdm.Load_Query_Skin;
begin
try
With Query_Skin do
begin
Active := false ;
SQL.Clear;
SQL.Add('SELECT *');
SQL.Add('FROM skin');
Active := true;
end;
except
;
end;
end;
function Tdm.Load_Question: Boolean;
//чтение вопросов по предмету
begin
Load_Question := true;
try
With Query_Question do
begin
Active := false;
SQL.Clear;
SQL.Add('SELECT * ') ;
SQL.Add('FROM Question') ;
SQL.Add('WHERE id_theme=' +
IntToStr(Last_Selected.id_theme));
Active := true;
end;
except
Load_Question := false;
end;
end;
function Tdm.Load_Student: Boolean;
//Загрузка списка пользователей
begin
Load_Student := true;
try
With Query_Student do
begin
Active := false;
SQL.Clear;
SQL.Add('SELECT * ') ;
SQL.Add('FROM student') ;
Active := true;
end;
except
Load_Student := false;
end;
end;
function Tdm.Load_User: Boolean;
//Загрузка списка пользователей
begin
Load_User := true;
try
With Query_User do
begin
Active := false;
SQL.Clear;
SQL.Add('SELECT * ') ;
SQL.Add('FROM user') ;
Active := true;
end;
except
Load_User := false;
end;
end;
procedure Tdm.ReadSetting(FName: String; var Host,
Port, Database, User, Password: String);
//Чтение настроек из файла
var
FSetting: File of TFSetting;
Setting: TFSetting;
begin
AssignFile(FSetting, FName);
Reset(FSetting);
Read(FSetting, Setting);
Host := Setting.Host;
port := Setting.Port;
user := Setting.User;
password := Setting.Password;
database := Setting.Database;
CloseFile(FSetting);
function Tdm.SaveSkin(Path: String): String;
var
FileName: String;
begin
FileName := Path + dm.Query_Skin.FieldByName('name').AsString +
'.asz';
(dm.Query_Skin.FieldByName('skin') as TBlobField).SaveToFile(FileName);
SaveSkin := FileName;
end;
procedure Tdm.SetAllSkinPriority(priority: String);
begin
try
With Query_Skin do
begin
Active := false;
SQL.Clear;
SQL.Add('UPDATE skin set priority =' + priority)
;
Active := true;
end;
except
;
end;
end;
procedure Tdm.SetSkinPriority(priority: String;
id_skin: integer);
begin
try
With Query_Skin do
begin
Active := false;
SQL.Clear;
SQL.Add('UPDATE skin set priority = ' + priority)
;
SQL.Add('WHERE id_skin = ' + IntToStr(id_skin));
Active := true;
end;
except
;
end;
function Tdm.log_in(nik: String;
password: String): boolean;
//Проверка имени пользователя и
пароля
begin
try
With Query_login do
begin
Active := false ;
SQL.Clear;
SQL.Add('select * from user where ');
SQL.Add('user = "' + nik + '" and ');
SQL.Add('password = "' + password +
'"');
Active := true;
StrUser.id := FieldByName('id_user').AsInteger;
if not Query_login.IsEmpty then
begin
StrUser.user := FieldByName('user').AsString;
StrUser.pas := FieldByName('password').AsString;
StrUser.access := FieldByName('access').AsString;
StrUser.name := FieldByName('name').AsString;
StrUser.sname := FieldByName('sname').AsString;
StrUser.patronymic := FieldByName('patronymic').AsString;
log_in := true;
end
else
log_in := false;
end;
except
;
end;
end;
function Tdm.Query_Subject_Set: boolean;
//Получение списка предметов
begin
Query_Subject_Set := true;
try
With Query_Subject do
begin
Active := false;
SQL.Clear;
SQL.Add('SELECT * FROM Subject ') ;
Active := true;
end;
except
ShowMessage('Ошибка получения списка предметов');
Query_Subject_Set := false;
end;
end;
function Tdm.Query_Theme_Set: Boolean;
//Получение списка тем по даному предмету
var
id_subject: Integer;
begin
Query_Theme_Set := true;
try
id_subject := Query_Subject.FieldByName('id_subject').AsInteger;
With Query_Theme do
begin
Active := false;
SQL.Clear;
SQL.Add('SELECT * FROM theme WHERE id_subject = ' +
IntToStr(id_subject));
Active := true;
end;
except
ShowMessage('Ошибка получения списка тем по данному предмету');
Query_Theme_Set := false;
end;
end;
end.
Приложение Б
Модуль тестирования
unit unit_dm;
interface
SysUtils, Classes, ZConnection, DB, ZAbstractRODataset,
ZAbstractDataset,
ZDataset, Dialogs, ZAbstractTable, XPMan, ExtDlgs, ActnList,
Menus, ActnPopup,
XPStyleActnCtrls, ActnMan, ComCtrls, ZSqlMonitor, sSkinProvider,
sSkinManager,
ImgList, Controls, RpRenderText, RpRenderRTF, RpRenderHTML,
RpRender,
RpRenderPDF, RpCon, RpConDS, RpRave, RpDefine, RpBase, RpSystem,
ExtCtrls;
type
TUser = record //Данные о пользователе
id: integer;
user: string;
pas: string;
access: string;
name: string;
sname: string;
patronymic: string;
end;
TFSetting = record//Настройки соединения
Host: String[100];
Port: String[100];
Database: String[100];
User: String[100];
Password: String[100];
end;
TSelection = record//Последние выбранные элементы
id_subject: integer;
id_theme: integer;
id_question: integer;
end;
Tdm = class(TDataModule)
ZConnection_spkvtk: TZConnection;
Query_login: TZQuery;
Query_data_test: TZQuery;
Table_Subject_test: TZTable;
Source_Subject: TDataSource;
Query_Subject: TZQuery;
Query_Create: TZQuery;
XP: TXPManifest;
Query_Answer: TZQuery;
Query_Question: TZQuery;
Source_Answer: TDataSource;
Source_Question: TDataSource;
OPD: TOpenPictureDialog;
Query_Illustration: TZQuery;
Source_Illustration: TDataSource;
Query_Delete: TZQuery;
Monitor: TZSQLMonitor;
Query_Theme: TZQuery;
Source_Theme: TDataSource;
Query_User: TZQuery;
Source_User: TDataSource;
SkinManager: TsSkinManager;
Query_Student: TZQuery;
Source_Student: TDataSource;
Query_Skin: TZQuery;
Source_Skin: TDataSource;
OD: TOpenDialog;
Query_Betta: TZQuery;
Source_Betta: TDataSource;
Query_Mark: TZQuery;
Source_Mark: TDataSource;
Query_Group: TZQuery;
RvSystem: TRvSystem;
RvProject: TRvProject;
RvConnectionMark: TRvDataSetConnection;
RvPDF: TRvRenderPDF;
RvHTML: TRvRenderHTML;
RvRTF: TRvRenderRTF;
RvText: TRvRenderText;
ImageList: TImageList;
procedure DataModuleCreate(Sender: TObject);//Создание
модуля
procedure ReadSetting(FName: String; Var
Host,
Port,
Database,
User,
Password: String);//Чтение
настроек из файла для доступа к БД
procedure ConnectSPKVTK();//Подключение
к базе данных СПКВТК
private
{ Private declarations }
public
{ Public declarations }
StrUser: TUser ;//Данные о пользователе
Last_Selected: TSelection;//Последние выбранные элементы
order_str: string;
function log_in(nik: String;
password: String): Boolean ;// Проверка
логина и пароля
function Query_Subject_Set(): Boolean;//Получение
списка предметов
function Query_Theme_Set(): Boolean;//Получение
списка тем по предмету
function Create_Subject_New(Subject_Name: String):
Boolean;//Создание нового предмета
function Create_Theme_New(id_subject: integer;
Theme_Name: String): Boolean;//Создание нового
function Create_Question_New(id_theme: integer): Boolean;//Создание
вопроса
function Create_Answer_New(id_question: integer):
Boolean;//Создание ответа
function Load_Answer(): Boolean;//Получение
списка ответов по предмету
function Load_Question(): Boolean;//Получение
списка вопросов
function Create_Illustration_New(id_question: integer):
Boolean;//Создание иллюстрации к вопросу
function Load_Illustration(): Boolean;//Загрузка
картинок к вопросу
function Load_User(): Boolean;//Загрузка
списка пользователей
function Load_Student(): Boolean;//Загрузка
списка пользователей
procedure Load_Query_Skin(); //Загрузка
таблицы скиеов
procedure SetAllSkinPriority(priority: string);//Задать
приоритет всем скинам
procedure SetSkinPriority(priority: string;
id_skin: integer);//Задать приоритет одному скину
function SaveSkin(Path: String): String;//Сохранение
скина на диск
procedure ApplySkin(FileName: String);//Применяет
скин
procedure LoadSkinOutBD();//Загрузка
скина ииз бд
procedure Load_Betta();//Загрузка заметок Бетта
procedure Load_Mark_Subject(id_subject: integer); //Загрузка
оценок по предмету
procedure Load_Mark_Theme(id_theme: integer); //Загрузка
оценок по теие
procedure Load_Mark_Group(id_theme: integer; n_group: String);//Загрузка
оценок по теие
procedure Load_Marks_Al();//Загрузка
всех оценок
procedure Load_Group();//Загруска списка груп
end;
var
dm: Tdm;
implementation
unit_edit_test, unit_start, unit_authentication;
{$R *.dfm}
procedure Tdm.ApplySkin(FileName: String);
var
Fname: String;
I: Integer;
Name: String;
Path: String;
begin
Fname := dm.OD.FileName;
if FileExists( FileName ) then
begin
Path := ExtractFilePath(FileName);
Name := ExtractFileName(FileName);
Delete( Name, LastDelimiter( '.', Name ),
Length( Name ) );
end
else
Name := '';
dm.SkinManager.SkinDirectory := Path;
dm.SkinManager.SkinName := Name;
dm.SkinManager.Active := true;
end;
procedure Tdm.ConnectSPKVTK;
// Подключение к базе данных СПКВТК
var
Host: String;
Port: String;
Database: String;
User: String;
Password: String;
begin
try
ReadSetting(ExtractFilePath(ParamStr(0))+'mysql.stg', Host,
Port, Database, User, Password);
ZConnection_spkvtk.HostName := Host;
ZConnection_spkvtk.Port := StrToInt(Port);
ZConnection_spkvtk.Database := Database;
ZConnection_spkvtk.User := User;
ZConnection_spkvtk.Password := Password;
Zconnection_spkvtk.Connected := true;
except
ShowMessage('Ошибка подключения к ' + Host + ':' + Port);
authentication.Close;
end;
end;
function Tdm.Create_Answer_New(id_question: integer):
Boolean;
//Создание нового ответа
begin
Create_Answer_New := true;
try
With Query_Create do
begin
Active := false;
SQL.Clear;
SQL.Add('INSERT INTO answer(id_question, propstr,
correct) VALUE(' + IntToStr(id_question) + ', true, false)') ;
Active := true;
Last_Selected.id_question := FieldByName('id_answer').AsInteger;
end;
except
;
end;
end;
function Tdm.Create_Illustration_New(id_question:
integer): Boolean;
//Создание иллюстрации для вопроса
begin
Create_Illustration_New := true;
try
With Query_Create do
begin
Active := false;
SQL.Clear;
SQL.Add('INSERT INTO q_illustration(id_question) VALUE(' +
IntToStr(id_question) + ')') ;
Active := true;
end;
except
;
end;
end;
function Tdm.Create_Question_New(id_theme: integer):
Boolean;
//Создание нового вопроса
begin
Create_Question_New := true;
try
With Query_Create do
begin
Active := false;
SQL.Clear;
SQL.Add('INSERT INTO question(id_theme, only_one,
mix_answer) VALUE(' + IntToStr(id_theme) + ', true, true)') ;
Active := true;
Last_Selected.id_question := FieldByName('id_question').AsInteger;
end;
except
;
end;
end;
function Tdm.Create_Subject_New(Subject_Name: String):
Boolean;
//Создание нового предмета
begin
Create_Subject_New := true;
try
With Query_Create do
begin
Active := false;
SQL.Clear;
SQL.Add('INSERT INTO subject(subject) VALUE("' +
Subject_Name + '")') ;
Active := true;
end;
except
;
end;
end;
function Tdm.Create_Theme_New(id_subject: integer;
Theme_Name: String): Boolean;
//Создание нового
begin
Create_Theme_New := true;
try
With Query_Create do
begin
Active := false;
SQL.Clear;
SQL.Add('INSERT INTO theme(id_subject, theme) VALUE(' +
IntToStr(id_subject) + ', "' + Theme_Name + '")') ;
Active := true;
Last_Selected.id_theme := FieldByName('id_theme').AsInteger;
end;
except
;
end;
procedure Tdm.DataModuleCreate(Sender: TObject);
//Создание модуля
begin
;
end;
procedure Tdm.LoadSkinOutBD;
var
path: string;
begin
With Query_Skin do
begin
Active := false;
SQL.Clear;
SQL.Add('SELECT * ') ;
SQL.Add('FROM skin') ;
SQL.Add('WHERE priority in (Select max(priority) FROM
skin)' );
Active := true;
Path := ExtractFilePath(ParamStr(0)) + 'temp\';
if Eof then exit;
ApplySkin(SaveSkin(Path));
end;
except
;
end;
end;
function Tdm.Load_Answer: Boolean;
//Загрузка ответа на вопрос
begin
Load_Answer := true;
try
With Query_Answer do
begin
Active := false;
SQL.Clear;
SQL.Add('SELECT * ') ;
SQL.Add('FROM Answer') ;
SQL.Add('WHERE id_question=' +
IntToStr(Query_Question.FieldByName('id_question').AsInteger));
Active := true;
end;
except
Load_Answer := false;
end;
end;
procedure Tdm.Load_Betta;
begin
try
With Query_Betta do
begin
Active := false;
SQL.Clear;
SQL.Add('SELECT *') ;
SQL.Add('FROM betta') ;
Active := true;
end;
except
;
end;
end;
procedure Tdm.Load_Group;
begin
try
With Query_Group do
begin
Active := false ;
SQL.Clear;
SQL.Add('SELECT DISTINCT n_group');
SQL.Add('FROM student');
Active := true;
end;
except
;
end;
end;
function Tdm.Load_Illustration: Boolean;
// загрузка иллюстраций к вопросу
begin
Load_Illustration := true;
try
With Query_illustration do
begin
Active := false;
SQL.Clear;
SQL.Add('SELECT * ') ;
SQL.Add('FROM q_illustration ') ;
SQL.Add('WHERE id_question=' +
IntToStr(Query_Question.FieldByName('id_question').AsInteger));
Active := true;
end;
except
Load_illustration := false;
end;
end;
procedure Tdm.Load_Mark_Subject(id_subject: integer);
begin
With Query_Mark do
begin
Active := false;
SQL.Clear;
SQL.Add('SELECT n_group, sname, name, subject, theme,
mark, date_begin, time_begin, time_end, mark_5, mark_100 ');
SQL.Add('FROM test te, student st, subject su, theme th') ;
SQL.Add('WHERE te.id_subject = su.id_subject AND');
SQL.Add( 'te.id_theme = th.id_theme AND');
SQL.Add( 'te.id_student = st.id_student AND');
SQL.Add( 'su.id_subject = ' +
IntToStr(id_subject));
if dm.order_str <> '' then
SQL.Add( 'ORDER BY ' +
dm.order_str);
Active := true;
end;
end;
procedure Tdm.Load_Mark_Theme(id_theme: integer);
begin
With Query_Mark do
begin
Active := false;
SQL.Clear;
SQL.Add('SELECT n_group, sname, name, subject, theme,
mark, date_begin, time_begin, time_end, mark_5, mark_100 ');
SQL.Add('FROM test te, student st, subject su, theme th') ;
SQL.Add('WHERE te.id_subject = su.id_subject AND');
SQL.Add( 'te.id_theme = th.id_theme AND');
SQL.Add( 'te.id_student = st.id_student AND');
SQL.Add( 'th.id_theme = ' +
IntToStr(id_theme));
if dm.order_str <> '' then
SQL.Add( 'ORDER BY ' +
dm.order_str);
Active := true;
end;
end;
procedure Tdm.Load_Marks_Al;
begin
With Query_Mark do
begin
Active := false;
SQL.Clear;
SQL.Add('SELECT n_group, sname, name, subject, theme,
mark, date_begin, time_begin, time_end, mark_5, mark_100 ');
SQL.Add('FROM test te, student st, subject su, theme th') ;
SQL.Add('WHERE te.id_subject = su.id_subject AND');
SQL.Add( 'te.id_theme = th.id_theme AND');
SQL.Add( 'te.id_student = st.id_student AND');
SQL.Add( 'te.id_subject = su.id_subject');
if dm.order_str <> '' then
SQL.Add( 'ORDER BY ' +
dm.order_str);
Active := true;
end;
end;
procedure Tdm.Load_Mark_Group(id_theme: Integer; n_group: String);
begin
With Query_Mark do
begin
Active := false;
SQL.Clear;
SQL.Add('SELECT n_group, sname, name, subject, theme,
mark, date_begin, time_begin, time_end, mark_5, mark_100 ');
SQL.Add('FROM test te, student st, subject su, theme th') ;
SQL.Add('WHERE te.id_subject = su.id_subject AND');
SQL.Add( 'te.id_theme = th.id_theme AND');
SQL.Add( 'te.id_student = st.id_student AND');
SQL.Add( 'th.id_theme = ' +
IntToStr(id_theme) + ' AND ');
SQL.Add( 'st.n_group = ' + n_group);
if dm.order_str <> '' then
SQL.Add( 'ORDER BY ' +
dm.order_str);
Active := true;
end;
end;
procedure Tdm.Load_Query_Skin;
begin
try
With Query_Skin do
begin
Active := false ;
SQL.Clear;
SQL.Add('SELECT *');
SQL.Add('FROM skin');
Active := true;
end;
except
;
end;
end;
function Tdm.Load_Question: Boolean;
//чтение вопросов по предмету
begin
Load_Question := true;
try
With Query_Question do
begin
Active := false;
SQL.Clear;
SQL.Add('SELECT * ') ;
SQL.Add('FROM Question') ;
SQL.Add('WHERE id_theme=' +
IntToStr(Last_Selected.id_theme));
Active := true;
end;
except
Load_Question := false;
end;
end;
function Tdm.Load_Student: Boolean;
//Загрузка списка пользователей
begin
Load_Student := true;
try
With Query_Student do
begin
Active := false;
SQL.Clear;
SQL.Add('SELECT * ') ;
SQL.Add('FROM student') ;
Active := true;
end;
except
Load_Student := false;
end;
end;
function Tdm.Load_User: Boolean;
//Загрузка списка пользователей
begin
Load_User := true;
try
With Query_User do
begin
Active := false;
SQL.Clear;
SQL.Add('SELECT * ') ;
SQL.Add('FROM user') ;
Active := true;
end;
except
Load_User := false;
end;
end;
procedure Tdm.ReadSetting(FName: String; var Host,
Port, Database, User, Password: String);
//Чтение настроек из файла
var
FSetting: File of TFSetting;
Setting: TFSetting;
begin
AssignFile(FSetting, FName);
Reset(FSetting);
Read(FSetting, Setting);
Host := Setting.Host;
port := Setting.Port;
user := Setting.User;
password := Setting.Password;
database := Setting.Database;
CloseFile(FSetting);
end;
function Tdm.SaveSkin(Path: String): String;
var
FileName: String;
begin
FileName := Path + dm.Query_Skin.FieldByName('name').AsString +
'.asz';
(dm.Query_Skin.FieldByName('skin') as TBlobField).SaveToFile(FileName);
SaveSkin := FileName;
end;
procedure Tdm.SetAllSkinPriority(priority: String);
begin
try
With Query_Skin do
begin
Active := false;
SQL.Clear;
SQL.Add('UPDATE skin set priority =' + priority)
;
Active := true;
end;
except
;
end;
end;
procedure Tdm.SetSkinPriority(priority: String;
id_skin: integer);
begin
try
With Query_Skin do
begin
Active := false;
SQL.Clear;
SQL.Add('UPDATE skin set priority = ' + priority)
;
SQL.Add('WHERE id_skin = ' + IntToStr(id_skin));
Active := true;
end;
except
;
end;
function Tdm.log_in(nik: String;
password: String): boolean;
//Проверка имени пользователя и
пароля
begin
try
With Query_login do
begin
Active := false ;
SQL.Clear;
SQL.Add('select * from user where ');
SQL.Add('user = "' + nik + '" and ');
SQL.Add('password = "' + password +
'"');
Active := true;
StrUser.id := FieldByName('id_user').AsInteger;
if not Query_login.IsEmpty then
begin
StrUser.user := FieldByName('user').AsString;
StrUser.pas := FieldByName('password').AsString;
StrUser.access := FieldByName('access').AsString;
StrUser.name := FieldByName('name').AsString;
StrUser.sname := FieldByName('sname').AsString;
StrUser.patronymic := FieldByName('patronymic').AsString;
log_in := true;
end
else
log_in := false;
end;
except
;
end;
end;
function Tdm.Query_Subject_Set: boolean;
//Получение списка предметов
begin
Query_Subject_Set := true;
try
With Query_Subject do
begin
Active := false;
SQL.Clear;
SQL.Add('SELECT * FROM Subject ') ;
Active := true;
end;
except
ShowMessage('Ошибка получения списка предметов');
Query_Subject_Set := false;
end;
end;
function Tdm.Query_Theme_Set: Boolean;
//Получение списка тем по даному предмету
var
id_subject: Integer;
begin
Query_Theme_Set := true;
try
id_subject := Query_Subject.FieldByName('id_subject').AsInteger;
With Query_Theme do
begin
Active := false;
SQL.Clear;
SQL.Add('SELECT * FROM theme WHERE id_subject = ' +
IntToStr(id_subject));
Active := true;
end;
except
ShowMessage('Ошибка получения списка тем по данному предмету');
Query_Theme_Set := false;
end;
end;
end.
unit unit_inquirer;
interface
Dialogs, StdCtrls, Mask, DBCtrls, unit_dm, ExtCtrls, jpeg,
Buttons, ComCtrls,
Grids, DBGrids, JRCheckBox, JRDBCheckBoxMySQL, DB, DBTables,
Menus, ActnPopup,
ActnList, XPStyleActnCtrls, ActnMan, sEdit, sBitBtn, sDBRichEdit,
sRichEdit,
sSplitter, sRadioButton, sCheckBox, sPanel, sScrollBox,
sGroupBox, ToolWin,
sToolBar;
type
TForm_Inquirer = class(TForm)
MenuAnswer: TPopupMenu;
delete: TMenuItem;
PanelAnswer: TsPanel;
mix_answer: TJRDBCheckBoxMySQL;
only_one: TJRDBCheckBoxMySQL;
propstr: TJRDBCheckBoxMySQL;
mix_question: TJRDBCheckBoxMySQL;
QuestionText: TsDBRichEdit;
sToolBar1: TsToolBar;
BoxIllustration: TsGroupBox;
Questionillustration: TImage;
DBIllustrationText: TsDBRichEdit;
BoxIllustrationBtn: TsGroupBox;
dbILast: TsBitBtn;
dbINext: TsBitBtn;
dbIPrior: TsBitBtn;
dbIFirst: TsBitBtn;
dbIGoToN: TsBitBtn;
N_Illustration: TEdit;
sSplitter1: TsSplitter;
BoxAnswerBtn: TsGroupBox;
dbQLasst: TsBitBtn;
dbQNext: TsBitBtn;
dbQPrior: TsBitBtn;
dbQFirst: TsBitBtn;
dbQGoToN: TsBitBtn;
N_Question: TsEdit;
PaneMainlAnswer: TsPanel;
BoxAnswer: TsScrollBox;
BtnRendering: TsBitBtn;
procedure deleteClick(Sender: TObject);
procedure dbQCancelClick(Sender: TObject);
procedure dbIGoToNClick(Sender: TObject);
procedure dbILastClick(Sender: TObject);
procedure dbINextClick(Sender: TObject);
procedure dbIPriorClick(Sender: TObject);
procedure dbIFirstClick(Sender: TObject);
procedure dbQPostClick(Sender: TObject);
procedure dbQGoToNClick(Sender: TObject);
procedure dbQLasstClick(Sender: TObject);
procedure dbQNextClick(Sender: TObject);
procedure dbQPriorClick(Sender: TObject);
procedure dbQFirstClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action:
TCloseAction);
procedure BtnRenderingClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure InsertAnswer();
procedure CreateList();
procedure DestroyObject();
procedure LoadQuestion();
procedure LoadAnswer();
procedure FreeListAnswer();
procedure ClickIllustrationAnswer(Sender: TObject);
procedure ClickRadioAnswer(Sender: TObject);
procedure ClikCheckAnswer(Sender: TObject);
procedure ClikTextAnswer(Sender: TObject);
procedure MouseDownAnswerText(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure SaveAnswer();
procedure Loadillustration();
procedure Createillustration();
procedure ReLoadIllustration();
procedure SaveillustrationQuestion();
procedure ClikCheckPropStr(Sender: TObject);
procedure SetSQuestion();
procedure Rendering();
procedure QFirst();
procedure QPrior();
procedure QNext();
procedure QLast();
procedure QRecNo();//Переход к вопросу номер ...
procedure QSFirst();
procedure QSPrior();
procedure QSNext();
procedure QSLast();
procedure QSRecNo();
procedure AFirst();
procedure ANext();
procedure ASFirst();
procedure ASNext();
end;
var
Form_Inquirer: TForm_Inquirer;
AnswerTop: integer;
PanelList: TList;
TextList: TList;
SplitList: TList;
ImageList: TList;
CheckList: TLIst;
CheckStretchList: TLIst;
RadioList: TList;
RadioIndex: array[0..1000] of integer;
CheckIndex: array[0..1000] of integer;
CheckStretchIndex: array[0..1000] of integer;
TextIndex: array[0..1000] of integer;
IllustrationIndex: array[0..1000] of integer;
SenderRich: TObject;
IndexQuestion: integer;//Номер вопроса
IndexAnswer: integer;//Номер ответа на вопрос
implementation
{$R *.dfm}
uses
unit_private, unit_result;
procedure TForm_Inquirer.dbINextClick(Sender: TObject);
begin
dm.Query_Illustration.Next;
ReLoadIllustration();
end;
procedure TForm_Inquirer.dbIPriorClick(Sender: TObject);
begin
dm.Query_Illustration.Prior;
ReLoadIllustration();
end;
procedure TForm_Inquirer.AFirst;
begin
IndexAnswer := 1;
dm.Query_Answer.RecNo :=
dm.Navigator.NavigatorQuestion[IndexQuestion].No_answer[IndexAnswer];
end;
procedure TForm_Inquirer.ANext;
begin
Inc(IndexAnswer);
dm.Query_Answer.RecNo :=
dm.Navigator.NavigatorQuestion[IndexQuestion].No_answer[IndexAnswer];
end;
procedure TForm_Inquirer.ASFirst;
begin
dm.Query_S_Answer.RecNo :=
dm.Navigator.NavigatorQuestion[IndexQuestion].No_answer[IndexAnswer];
end;
procedure TForm_Inquirer.ASNext;
begin
dm.Query_S_Answer.RecNo :=
dm.Navigator.NavigatorQuestion[IndexQuestion].No_answer[IndexAnswer];
end;
procedure TForm_Inquirer.ClickIllustrationAnswer;
//обработчик клика на картинке ответа
begin
;
end;
procedure TForm_Inquirer.ClickRadioAnswer(Sender:
TObject);
//клик на зависемом переключателе ответа
var
ID: integer;
ID_ND: integer;
index: integer;
Checked: Char;
begin
ID_ND := RadioIndex[TsRadioButton(Sender).Tag];
index := 0;
while index < 100 do
begin
try
ID := RadioIndex[TsRadioButton(RadioList.Items[index]).Tag];
Checked := '0';
if ID = ID_ND then
begin
TsRadioButton(RadioList.Items[index]).Checked :=
True;
With dm.Query_S_Answer do
begin
Active := false;
SQL.Clear;
SQL.Add('UPDATE s_answer ') ;
SQL.Add('SET correct = 1');
SQL.Add('WHERE id_s_answer =' +
IntToStr(ID));
Active := true;
end;
end
else
begin
TsRadioButton(RadioList.Items[index]).Checked :=
False;
With dm.Query_S_Answer do
begin
Active := false;
SQL.Clear;
SQL.Add('UPDATE s_answer ') ;
SQL.Add('SET correct = 0');
SQL.Add('WHERE id_s_answer =' +
IntToStr(ID));
Active := true;
end;
end;
except
;
end;
Inc(index);
end;
end;
procedure TForm_Inquirer.ClikCheckAnswer(Sender: TObject);
//клик на независемом переключателе ответа
var
ID: integer;
ID_ND: integer;
index: integer;
Checked: Char;
begin
ID_ND := CheckIndex[TsCheckBox(Sender).Tag];
index := 0;
while index < 100 do
begin
try
ID := CheckIndex[TsCheckBox(CheckList.Items[index]).Tag];
if ID = ID_ND then
begin
if TsCheckBox(CheckList.Items[index]).Checked =
True then
Checked := '1'
else
Checked := '0';
With dm.Query_S_Answer do
begin
Active := false;
SQL.Clear;
SQL.Add('UPDATE s_answer ') ;
SQL.Add('SET correct = ' + Checked);
SQL.Add('WHERE id_s_answer =' +
IntToStr(ID));
Active := true;
end;
end;
except
;
end;
inc(index);
end;
end;
procedure TForm_Inquirer.ClikCheckPropStr(Sender:
TObject);
begin
;
end;
procedure TForm_Inquirer.ClikTextAnswer(Sender: TObject);
//клик на поле ткста ответа
begin
SenderRich := Sender;
end;
procedure TForm_Inquirer.Createillustration;
begin
;
procedure TForm_Inquirer.CreateList;
begin
// Создание контейнеров Tlist для нумерации компонентов
TextList := TList.Create;
PanelList := TList.Create;
SplitList := TList.Create;
ImageList := TList.Create;
CheckList := TLIst.Create;
CheckStretchList := TLIst.Create;
RadioList := TList.Create;
end;
procedure TForm_Inquirer.DestroyObject;
begin
FreeListAnswer();
end;
procedure TForm_Inquirer.dbQCancelClick(Sender: TObject);
begin
try
dm.Query_Question.Cancel;
except
;
end;
SaveAnswer();
LoadQuestion();
end;
procedure TForm_Inquirer.dbQFirstClick(Sender: TObject);
//переход на первый вопрос
begin
QFirst;
QSFirst;
LoadQuestion();
LoadAnswer;
LoadIllustration();
ReLoadIllustration();
end;
procedure TForm_Inquirer.FormClose(Sender: TObject; var
Action: TCloseAction);
begin
form_private.Show;
form_inquirer.Hide;
end;
procedure TForm_Inquirer.FormCreate(Sender: TObject);
begin
CreateList();
AnswerTop := 15;
end;
procedure TForm_Inquirer.FormDestroy(Sender: TObject);
begin
DestroyObject();
end;
procedure TForm_Inquirer.FormShow(Sender: TObject);
begin
dm.Load_Question();
QFirst();
dm.Last_Selected.id_question := dm.Query_Question.FieldByName('id_question').AsInteger;
dm.Load_S_Question;
QSFirst;
dm.Last_Selected.id_answer := dm.Query_Answer.FieldByName('id_answer').AsInteger;
dm.Load_S_Answer;
ASFirst;
LoadQuestion();
LoadAnswer();
AFirst();
dm.Load_Illustration;
dm.Query_Illustration.First;
ReLoadIllustration();
PanelAnswer.Width := Round(Form_Inquirer.Width * 0.4);
DBIllustrationText.Width := Round(BoxIllustration.Width / 2);
end;
procedure TForm_Inquirer.FreeListAnswer;
var
index: integer;
begin
// Уничтожаем текст
index := 0;
try
while true do
begin
TRichEdit(TextList.Items[index]).Free;
inc(index);
end;
except
;
end;
// Уничтожаем картинки
index := 0;
try
while true do
begin
TImage(ImageList.Items[index]).Free;
inc(index);
end;
except
;
end;
// Уничтожаем сплиты
index := 0;
try
while true do
begin
TSplitter(SplitList.Items[index]).Free;
inc(index);
end;
except
;
// Уничтожаем радиобт
index := 0;
try
while true do
begin
TRadioButton(RadioList.Items[index]).Free;
inc(index);
end;
except
;
end;
// Уничтожаем чекеты
index := 0;
try
while true do
begin
TCheckBox(CheckList.Items[index]).Free;
inc(index);
end;
except
;
end;
// Уничтожаем чекеты stretch / proportional
index := 0;
try
while true do
begin
TCheckBox(CheckStretchList.Items[index]).Free;
inc(index);
end;
except
;
end;
// Уничтожаем панели ответов
index := 0;
try
while true do
begin
TPanel(PanelList.Items[index]).Free;
inc(index);
end;
except
;
end;
// чистим листы ..
try
TextList.Clear;
PanelList.Clear;
SplitList.Clear;
ImageList.Clear;
CheckList.Clear;
CheckStretchList.Clear;
RadioList.Clear;
TextList.Free;
PanelList.Free;
SplitList.Free;
ImageList.Free;
CheckList.Free;
CheckStretchList.Free;
RadioList.Free;
except
;
end;
end;
procedure TForm_Inquirer.dbQGoToNClick(Sender: TObject);
//переход на первый вопрос
begin
dm.Query_Question.RecNo := StrToInt(N_Question.Text);
dm.Query_S_Question.RecNo := StrToInt(N_Question.Text);
LoadQuestion();
LoadAnswer;
LoadIllustration();
ReLoadIllustration();
end;
procedure TForm_Inquirer.InsertAnswer;
// вырисовка...
var
AnswerText: TRichEdit;
AnswerPanel: TsPanel;
AnswerCheck: TsCheckBox;
AnswerCheckStretch: TsCheckBox;
AnswerRadio: TsRadioButton;
AnswerImage: TImage;
AnswerSplitTop,
AnswerSplitBottom,
AnswerSplitRight,
AnswerSplitLeft: TsSplitter;
AnswerSplitBottomPole,
AnswerSplitLeftPole: TsSplitter;
PictureStream: TStream;
begin
//Создаю панель ответа
AnswerPanel := TsPanel.Create(BoxAnswer);
AnswerPanel.Top := AnswerTop;
AnswerPanel.Height := Round((BoxAnswer.Height * 40)/100);
AnswerPanel.Width := BoxAnswer.Width - 25;
AnswerPanel.Left := 5;
AnswerPanel.BorderStyle := bsSingle;
AnswerPanel.BorderWidth := 5;
AnswerPanel.Color := clSilver;
AnswerPanel.Tag := PanelList.Add(AnswerPanel);
BoxAnswer.InsertControl(AnswerPanel);
//Создаю поле под картинку
if dm.Query_Answer.FieldByName('illustration').AsVariant
<> '' then
begin
AnswerImage := TImage.Create(AnswerPanel);
AnswerImage.Align := alBottom;
AnswerImage.Height := Round(AnswerPanel.Height / 2 - 6);
AnswerImage.Picture.Assign(dm.Query_Answer.FieldByName('illustration'));
if dm.Query_Answer.FieldByName('propstr').AsInteger
= 1 then
begin
AnswerImage.Proportional := true;
AnswerImage.Stretch := true;
end
else
begin
AnswerImage.Proportional := false;
AnswerImage.Stretch := true;
end;
AnswerImage.OnClick := ClickIllustrationAnswer;
AnswerImage.Tag := ImageList.Add(AnswerImage);
IllustrationIndex[AnswerImage.Tag] :=
dm.Query_Answer.FieldByName('id_answer').AsInteger;
AnswerPanel.InsertControl(AnswerImage);
end;
//Создаю нижний сплит поля
AnswerSplitBottomPole := TsSplitter.Create(AnswerPanel);
AnswerSplitBottomPole.Height := 5;
AnswerSplitBottomPole.Width := 5;
AnswerSplitBottomPole.Align := alBottom;
AnswerSplitBottomPole.Tag := SplitList.Add(AnswerSplitBottomPole);
AnswerPanel.InsertControl(AnswerSplitBottomPole);
if only_one.Checked then
begin
//Создаю зависемый переключатель
AnswerRadio := TsRAdioButton.Create(AnswerPanel);
AnswerRadio.Width := 13 ;
AnswerRadio.Align := alLeft ;
AnswerRadio.Tag := RadioList.Add(AnswerRadio);
if dm.Query_S_Answer.FieldByName('correct').AsInteger
= 1 then
begin
AnswerRadio.Checked := true;
end
else
begin
AnswerRadio.Checked := false;
end;
AnswerRadio.OnClick := ClickRadioAnswer;
RadioIndex[AnswerRadio.Tag] := dm.Query_S_Answer.FieldByName('id_s_answer').AsInteger;
AnswerPanel.InsertControl(AnswerRadio);
end
else
begin
//Создаю независемый переключатель
AnswerCheck := TsCheckBox.Create(AnswerPanel);
AnswerCheck.Width := 13 ;
AnswerCheck.Align := alLeft ;
if dm.Query_S_Answer.FieldByName('correct').AsInteger
= 1 then
begin
AnswerCheck.Checked := true;
end
else
begin
AnswerCheck.Checked := false;
end;
AnswerCheck.OnClick := ClikCheckAnswer;
AnswerCheck.Tag := CheckList.Add(AnswerCheck);
CheckIndex[AnswerCheck.Tag] := dm.Query_S_Answer.FieldByName('id_s_answer').AsInteger;
AnswerPanel.InsertControl(AnswerCheck);
end;
//Создаю левый сплит
AnswerSplitLeft := TsSplitter.Create(AnswerPanel);
AnswerSplitLeft.Height := 5;
AnswerSplitLeft.Width := 5;
AnswerSplitLeft.Align := alLeft;
AnswerSplitLeft.Visible := false;
AnswerSplitLeft.Tag := SplitList.Add(AnswerSplitLeft);
AnswerPanel.InsertControl(AnswerSplitLeft);
//Создаю поле ответа
AnswerText := TRichEdit.Create(AnswerPanel);
AnswerText.Align := alClient;
AnswerText.BorderStyle := bsSingle;
AnswerText.BorderWidth := 5;
AnswerText.PopupMenu := MenuAnswer;
AnswerText.OnClick := ClikTextAnswer;
AnswerText.OnMouseDown := MouseDownAnswerText;
AnswerText.Tag := TextList.Add(AnswerText);
TextIndex[AnswerText.Tag] := dm.Query_Answer.FieldByName('id_answer').AsInteger;
AnswerPanel.InsertControl(AnswerText);
AnswerText.PlainText := false;
AnswerText.ReadOnly := true;
AnswerText.Lines.Assign(dm.Query_Answer.FieldByName('answer'));
AnswerTop := AnswerTop + Answerpanel.Height + 10;
end;
procedure TForm_Inquirer.dbQLasstClick(Sender: TObject);
//переход на последний вопрос
begin
QLast;
QSLast;
LoadQuestion();
LoadAnswer;
LoadIllustration();
ReLoadIllustration();
end;
procedure TForm_Inquirer.LoadAnswer;
//прорисовываем ответы на форме
var
IndexA: integer;
begin
try
dm.Load_Answer();
dm.Load_S_Answer();
FreeListAnswer();
CreateList();
AnswerTop := 10;
AFirst();
ASFirst();
for IndexA := 1 to dm.Navigator.NavigatorQuestion[IndexQuestion].IndexAmax
do
begin
InsertAnswer();
ANext();
ASNext();
end;
except
;
end;
end;
procedure TForm_Inquirer.Loadillustration;
begin
try
dm.Last_Selected.id_question := dm.Query_Question.FieldByName('id_question').AsInteger;
dm.Load_Illustration;
dm.Query_Illustration.First;
except
;
end;
end;
procedure TForm_Inquirer.LoadQuestion;
//загрузка данных вопроса
begin
dm.Last_Selected.id_s_question := dm.Query_S_Question.FieldByName('id_s_question').AsInteger;
dm.Load_Answer();
dm.Load_S_Answer();
QuestionIllustration.Picture := nil;
end;
procedure TForm_Inquirer.MouseDownAnswerText(Sender:
TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
//Нажатие клавиши мыши в поле ответа
begin
SenderRich := Sender;
end;
procedure TForm_Inquirer.QFirst;
begin
IndexQuestion := 1;
dm.Query_Question.RecNo :=
dm.Navigator.NavigatorQuestion[IndexQuestion].No_question;
end;
procedure TForm_Inquirer.QLast;
begin
IndexQuestion := dm.Navigator.IndexQmax;
dm.Query_Question.RecNo :=
dm.Navigator.NavigatorQuestion[IndexQuestion].No_question;
end;
procedure TForm_Inquirer.QNext;
begin
if IndexQuestion <> dm.Navigator.IndexQmax then
Inc(IndexQuestion);
dm.Query_Question.RecNo := dm.Navigator.NavigatorQuestion[IndexQuestion].No_question;
end;
procedure TForm_Inquirer.QPrior;
begin
if IndexQuestion <> 1 then
Dec(IndexQuestion);
dm.Query_Question.RecNo :=
dm.Navigator.NavigatorQuestion[IndexQuestion].No_question;
end;
procedure TForm_Inquirer.QRecNo;
begin
IndexQuestion := StrToInt(N_Question.Text);
dm.Query_Question.RecNo :=
dm.Navigator.NavigatorQuestion[IndexQuestion].No_question;
end;
procedure TForm_Inquirer.QSFirst;
begin
dm.Query_S_Question.RecNo :=
dm.Navigator.NavigatorQuestion[IndexQuestion].No_question;
end;
procedure TForm_Inquirer.QSLast;
begin
dm.Query_S_Question.RecNo :=
dm.Navigator.NavigatorQuestion[IndexQuestion].No_question;
end;
procedure TForm_Inquirer.QSNext;
begin
dm.Query_S_Question.RecNo :=
dm.Navigator.NavigatorQuestion[IndexQuestion].No_question;
end;
procedure TForm_Inquirer.QSPrior;
begin
dm.Query_S_Question.RecNo :=
dm.Navigator.NavigatorQuestion[IndexQuestion].No_question;
end;
procedure TForm_Inquirer.QSRecNo;
begin
dm.Query_S_Question.RecNo :=
dm.Navigator.NavigatorQuestion[IndexQuestion].No_question;
end;
procedure TForm_Inquirer.dbIFirstClick(Sender: TObject);
begin
dm.Query_Illustration.First;
ReLoadIllustration();
end;
procedure TForm_Inquirer.dbIGoToNClick(Sender: TObject);
begin
dm.Query_Illustration.RecNo := StrToInt(N_illustration.Text);
ReLoadIllustration();
end;
procedure TForm_Inquirer.dbILastClick(Sender: TObject);
begin
dm.Query_Illustration.Last;
ReLoadIllustration();
end;
procedure TForm_Inquirer.ReLoadIllustration;
begin
QuestionIllustration.Picture := nil;
QuestionIllustration.Picture.Assign(dm.Query_Illustration.FieldByName('illustration'));
QuestionIllustration.Stretch := true;
QuestionIllustration.Proportional := propstr.Checked;
end;
procedure TForm_Inquirer.Rendering;
begin
;
procedure TForm_Inquirer.SaveAnswer;
begin
;
end;
procedure TForm_Inquirer.SaveillustrationQuestion;
begin
;
procedure TForm_Inquirer.BtnRenderingClick(Sender:
TObject);
begin
dm.Rendering();
dm.SetMark();
form_result.Show;
form_result.Result();
form_inquirer.Hide;
end;
procedure TForm_Inquirer.SetSQuestion;
begin
dm.Query_Question.First;
dm.Last_Selected.id_question := dm.Query_Question.FieldByName('id_question').AsInteger;
while not dm.Query_Question.Eof do
begin
dm.Create_S_Question();
dm.Query_Question.Next;
dm.Last_Selected.id_question := dm.Query_Question.FieldByName('id_question').AsInteger;
end;
end;
procedure TForm_Inquirer.dbQNextClick(Sender: TObject);
//переход на следующий вопрос
QNext;
QSNext;
LoadQuestion();
LoadAnswer();
LoadIllustration();
ReLoadIllustration();
end;
procedure TForm_Inquirer.dbQPostClick(Sender: TObject);
begin
try
dm.Query_Question.Post;
except
;
end;
SaveAnswer();
LoadQuestion();
end;
procedure TForm_Inquirer.dbQPriorClick(Sender: TObject);
//переход на предидущий вопрос
begin
QPrior;
QSPrior;
LoadQuestion();
LoadAnswer;
LoadIllustration();
ReLoadIllustration();
end;
procedure TForm_Inquirer.deleteClick(Sender: TObject);
var
ID: integer;
begin
try
ID := TextIndex[TsRichEdit(SenderRich).Tag];
With dm.Query_Delete do
begin
Active := false;
SQL.Clear;
SQL.Add('DELETE FROM answer ') ;
SQL.Add('WHERE id_answer =' +
IntToStr(ID));
Active := true;
end;
except
LoadQuestion();
end;
end;
end.
unit unit_private;
interface
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms,
Dialogs, StdCtrls, Buttons, sBitBtn, ComCtrls, sRichEdit, sLabel,
sComboBox,
sGroupBox, sPageControl, DB;
type
Tform_private = class(TForm)
PrivatePage: TsPageControl;
test: TsTabSheet;
sGroupBox1: TsGroupBox;
BoxSubject: TsComboBox;
BoxTheme: TsComboBox;
sLabel1: TsLabel;
sLabel2: TsLabel;
RichSubject: TsRichEdit;
RichTheme: TsRichEdit;
testing: TsBitBtn;
procedure testingClick(Sender: TObject);
procedure BoxThemeChange(Sender: TObject);
procedure BoxSubjectChange(Sender: TObject);
procedure FormClose(Sender: TObject; var Action:
TCloseAction);
procedure FormShow(Sender: TObject);
procedure LoadSubjectBox();
procedure LoadThemeBox();
private
{ Private declarations }
public
{ Public declarations }
end;
var
form_private: Tform_private;
ID_Subject: array[0..1000] of integer;
ID_Theme: array[0..1000] of integer;
implementation
uses
unit_dm, unit_authentication, unit_inquirer;
{$R *.dfm}
procedure Tform_private.BoxSubjectChange(Sender: TObject);
begin
LoadThemeBox();
dm.Query_Subject_Box.Locate('subject',
BoxSubject.Text, [loPartialKey]);
RichSubject.Lines.Clear;
RichSubject.Lines.Assign(dm.Query_Subject_Box.FieldByName('info'));
dm.Last_Selected.id_subject := ID_Subject[BoxSubject.ItemIndex];
BoxTheme.Text := 'Выбирите тему';
end;
procedure Tform_private.BoxThemeChange(Sender: TObject);
begin
dm.Query_Theme_Box.Locate('theme', BoxTheme.Text,
[loPartialKey]);
RichTheme.Lines.Clear;
RichTheme.Lines.Assign(dm.Query_Theme_Box.FieldByName('info'));
dm.Last_Selected.id_theme := ID_Theme[BoxTheme.ItemIndex];
end;
procedure Tform_private.FormClose(Sender: TObject; var Action:
TCloseAction);
begin
form_private.Hide;
form_authentication.Show;
end;
procedure Tform_private.FormShow(Sender: TObject);
begin
LoadSubjectBox();
BoxSubject.Text := 'Выбирите предмет';
BoxTheme.Text := 'Выбирите тему';
end;
procedure Tform_private.LoadSubjectBox;
var
index: integer;
begin
try
dm.Load_Subject_Box();
BoxSubject.Items.Clear;
dm.Query_Subject_Box.First;
index := 0;
while not dm.Query_Subject_Box.Eof do
begin
BoxSubject.Items.Add(dm.Query_Subject_Box.FieldByName('subject').AsString);
ID_Subject[index] := dm.Query_Subject_Box.FieldByName('id_subject').AsInteger;
dm.Query_Subject_Box.Next;
inc(index);
end;
dm.Query_Subject_Box.First;
BoxSubject.Text := dm.Query_Subject_Box.FieldByName('subject').AsString;
RichSubject.Lines.Assign(dm.Query_Subject_Box.FieldByName('info'));
dm.Last_Selected.id_subject :=
ID_Subject[BoxSubject.ItemIndex];
except
;
end;
end;
procedure Tform_private.LoadThemeBox;
var
index: integer;
begin
try
dm.Load_Theme_Box(BoxSubject.Text);
BoxTheme.Items.Clear;
dm.Query_Theme_Box.First;
index := 0;
while not dm.Query_Theme_Box.Eof do
begin
BoxTheme.Items.Add(dm.Query_Theme_Box.FieldByName('theme').AsString);
ID_Theme[index] := dm.Query_Theme_Box.FieldByName('id_theme').AsInteger;
dm.Query_Theme_Box.Next;
inc(index);
end;
dm.Query_Theme_Box.First;
BoxTheme.Text := dm.Query_Theme_Box.FieldByName('theme').AsString;
RichTheme.Lines.Assign(dm.Query_Theme_Box.FieldByName('info'));
dm.Last_Selected.id_theme := ID_Theme[BoxTheme.ItemIndex];
except
;
end;
end;
procedure Tform_private.testingClick(Sender: TObject);
begin
if BoxSubject.Text = 'Выбирите предмет' then
begin
ShowMessage('Для продолжения необходимо выбрать предмет !');
exit;
end;
if BoxTheme.Text = 'Выбирите тему' then
begin
ShowMessage('Для продолжения необходимо выбрать тему !');
exit;
end;
try
dm.Last_Selected.id_subject := ID_Subject[BoxSubject.ItemIndex];
dm.Last_Selected.id_theme := ID_Theme[BoxTheme.ItemIndex];
dm.Create_Navigator();
dm.Create_Test_New();
except
ShowMessage('Неудалось загрузить вопросы. Тема пуста или не существует');
end;
dm.Load_Question();
if dm.Query_Question.IsEmpty then
begin
ShowMessage('Неудалось загрузить вопросы. Тема пуста или не существует');
exit ;
end;
form_private.Hide;
form_inquirer.Show;
form_inquirer.dbQFirst.OnClick(Sender);
form_inquirer.dbIFirst.OnClick(Sender);
end;
end.
unit unit_result;
interface
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms,
Dialogs, StdCtrls, Buttons, sBitBtn, sMemo, sLabel, sEdit,
sGroupBox, unit_dm;
type
Tform_result = class(TForm)
Box_Result: TsGroupBox;
Edit_Name: TsEdit;
sLabel1: TsLabel;
Edit_SName: TsEdit;
sLabel2: TsLabel;
Edit_Group: TsEdit;
sLabel3: TsLabel;
Edit_Subject: TsEdit;
sLabel4: TsLabel;
Edit_Theme: TsEdit;
sLabel5: TsLabel;
Edit_Mark_100: TsEdit;
sLabel6: TsLabel;
Edit_Mark_50: TsEdit;
sLabel7: TsLabel;
Edit_Mark_5: TsEdit;
sLabel8: TsLabel;
Box_Note: TsGroupBox;
sLabel9: TsLabel;
MMessage: TsMemo;
Btn_Result: TsBitBtn;
procedure Btn_ResultClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure Result();
procedure SendBettaMesage();//
Сохранение пожнланий студента
end;
var
form_result: Tform_result;
implementation
{$R *.dfm}
uses
unit_authentication;
procedure Tform_result.Btn_ResultClick(Sender: TObject);
var
FullProgPath: PChar;
begin
SendBettaMesage();
Hide;
FullProgPath := PChar(Application.ExeName);
WinExec(FullProgPath, SW_SHOW); // Or better use the
CreateProcess function
Application.Terminate; // or: Close;
end;
procedure Tform_result.Result;
begin
dm.LoadResult(dm.Last_Selected.id_test);
Edit_SName.Text := dm.Query_Result.FieldByName('sname').AsString;
Edit_Name.Text := dm.Query_Result.FieldByName('name').AsString;
Edit_Group.Text := IntToStr(dm.Query_Result.FieldByName('n_group').AsInteger);
Edit_Subject.Text := dm.Query_Result.FieldByName('subject').AsString;
Edit_Theme.Text := dm.Query_Result.FieldByName('theme').AsString;
Edit_Mark_100.Text := IntToStr(dm.Query_Result.FieldByName('mark_100').AsInteger);
Edit_Mark_50.Text := IntToStr(dm.Query_Result.FieldByName('mark_5').AsInteger);
Edit_Mark_5.Text := IntToStr(dm.Query_Result.FieldByName('mark').AsInteger);
end;
procedure Tform_result.SendBettaMesage;
begin
MMessage.Lines.Insert(0, '--------------------------------------');
MMessage.Lines.Add('--------------------------------------');
MMessage.Lines.Add(Edit_SName.Text);
MMessage.Lines.Add(Edit_Name.Text);
MMessage.Lines.Add(Edit_Group.Text);
MMessage.Lines.Add(Edit_Subject.Text);
MMessage.Lines.Add(Edit_Theme.Text);
MMessage.Lines.Add(Edit_Mark_100.Text);
MMessage.Lines.Add(Edit_Mark_50.Text);
MMessage.Lines.Add(Edit_Mark_5.Text);
MMessage.Lines.Add('--------------------------------------');
dm.Load_Betta();
dm.Query_Betta.Insert;
dm.Query_Betta.FieldByName('message').Assign(MMessage.Lines);
dm.Query_Betta.Post;
MMessage.Lines.Add('--------------------------------------');
end;
end.
unit unit_dm;
interface
SysUtils, Classes, ZConnection, DB, ZAbstractRODataset,
ZAbstractDataset, ZDataset, Dialogs, sSkinManager, ExtDlgs,
ZSqlMonitor,
ImgList, Controls, XPMan;
type
TStudent = record
id: integer;
ngr: string;
name: string;
sname: string;
mark: integer;
mark_5: real;
mark_100: real;
end;
TFSetting = record
Host: String[100];
Port: String[100];
Database: String[100];
User: String[100];
Password: String[100];
end;
TSelection = record
id_student: integer;
id_subject: integer;
id_theme: integer;
id_question: integer;
id_answer: integer;
id_test: integer;
id_s_question: integer;
id_s_answer: integer;
end;
TNavigatorQuestion = record
No_question: integer;
IndexAmax: integer;
No_answer: array[1..500] of integer;
end;
TNavigator = record
IndexQmax: integer;
NavigatorQuestion: array[0..500] of TNavigatorQuestion;
end;
Tdm = class(TDataModule)
ZConnection_spkvtk: TZConnection;
Query_login: TZQuery;
Query_Group: TZQuery;
Query_SName: TZQuery;
Query_Name: TZQuery;
SkinManager: TsSkinManager;
Query_Subject_Box: TZQuery;
Query_Theme_Box: TZQuery;
Query_Question: TZQuery;
Query_Answer: TZQuery;
Source_Question: TDataSource;
Source_Answer: TDataSource;
Query_Illustration: TZQuery;
Source_Illustration: TDataSource;
Query_Delete: TZQuery;
Query_Create: TZQuery;
Source_Subject: TDataSource;
Query_Subject: TZQuery;
Query_Theme: TZQuery;
Source_Theme: TDataSource;
OPD: TOpenPictureDialog;
Query_Select: TZQuery;
Query_S_Question: TZQuery;
Query_S_Answer: TZQuery;
Source_S_Question: TDataSource;
Source_S_Answer: TDataSource;
Query_Result: TZQuery;
SQLMonitor: TZSQLMonitor;
IList: TImageList;
Query_Betta: TZQuery;
Query_Skin: TZQuery;
Source_Skin: TDataSource;
OD: TOpenDialog;
XPManifest1: TXPManifest;
procedure ReadSetting(FName: String; Var
Host,
Port,
Database,
User,
Password: String);
procedure ConnectOpros();
procedure Load_Group();//Загруска списка груп
procedure Load_SName(SelectGroup: String);
procedure Load_Name(SelectSName: String);
procedure Load_Subject_Box();
procedure Load_Theme_Box(SelectSubject: String);
function Load_Answer: Boolean;
function Load_Illustration: Boolean;
function Load_Question: Boolean;
function Query_Subject_Set: boolean;
function Query_Theme_Set: Boolean;
procedure Create_Test_New();
procedure Create_S_Question();
procedure Create_S_Answer();
procedure Load_S_Question();
procedure Load_S_Answer();
procedure Create_Navigator();//Заполнения
навигационного массива
procedure Rendering();//подсчёт балов
procedure SetMark();//Занесение результатов тестирования
в базу данных
procedure LoadResult(id_test: integer);//Получение
результатов опроса студента
procedure Load_Betta();//Загрузка таблици пожеланий
студентов
function SaveSkin(Path: String): String;//Сохранение
скина на диск
procedure ApplySkin(FileName: String);//Применяет
скин
procedure LoadSkinOutBD();//Загрузка
скина ииз бд
private
{ Private declarations }
Student: TStudent;
public
{ Public declarations }
Last_Selected: TSelection;
Navigator: TNavigator;
procedure Subject_Select(SelectSubject: String);
procedure Theme_Select(ThemeSelect: String);
function log_in(ngr: String;
sname: String;
nam: String): boolean ;
end;
var
dm: Tdm;
implementation
unit_start, unit_authentication;
{$R *.dfm}
{ Tdm }
procedure Tdm.ApplySkin(FileName: String);
var
Fname: String;
I: Integer;
Name: String;
Path: String;
begin
Fname := dm.OD.FileName;
if FileExists( FileName ) then
begin
Path := ExtractFilePath(FileName);
Name := ExtractFileName(FileName);
Delete( Name, LastDelimiter( '.', Name ),
Length( Name ) );
end
else
Name := '';
dm.SkinManager.SkinDirectory := Path;
dm.SkinManager.SkinName := Name;
dm.SkinManager.Active := true;
end;
procedure Tdm.ConnectOpros;
var
Host: String;
Port: String;
Database: String;
User: String;
Password: String;
begin
try
ReadSetting(ExtractFilePath(ParamStr(0))+'mysql.stg', Host,
Port, Database, User, Password);
ZConnection_spkvtk.HostName := Host;
ZConnection_spkvtk.Port := StrToInt(Port);
ZConnection_spkvtk.Database := Database;
ZConnection_spkvtk.User := User;
ZConnection_spkvtk.Password := Password;
except
ShowMessage('Ошибка файла конфигурации');
form_authentication.Close;
end;
try
Zconnection_spkvtk.Connected := true;
except
ShowMessage('Ошибка подключения к базе данных');
form_authentication.Close;
end;
end;
procedure Tdm.Load_Betta();
begin
try
With Query_Betta do
begin
Active := false ;
SQL.Clear;
SQL.Add('SELECT * FROM betta');
Active := true;
end;
except
;
end;
end;
procedure Tdm.Create_Navigator;
//Заполнения навигационного массива
var
IndexQuestion: integer;
IndexAnswer: integer;
Index: integer;
IndexRndQuestion: array[1..500] of integer;
I: integer;
RndQuestion: boolean;
begin
dm.Load_Question();
Navigator.IndexQmax := dm.Query_Question.RecordCount;
dm.Query_Question.First;
for Index := 1 to Navigator.IndexQmax
do
begin
Repeat
RndQuestion := true;
Randomize();
IndexRndQuestion[Index] := Round( Random() *
(Navigator.IndexQmax - 1) + 1);
I := 1;
While ( I < Index ) do
begin
if IndexRndQuestion[Index] =
IndexRndQuestion[I] then
RndQuestion := false;
Inc(I);
end;
Until ( RndQuestion = true );
end;
for IndexQuestion := 1 to Navigator.IndexQmax
do
begin
Navigator.NavigatorQuestion[IndexRndQuestion[IndexQuestion]].No_question
:= dm.Query_Question.RecNo;
dm.Load_Answer();
Navigator.NavigatorQuestion[IndexRndQuestion[IndexQuestion]].IndexAmax :=
dm.Query_Answer.RecordCount;
dm.Query_Answer.First;
for IndexAnswer := 1 to Navigator.NavigatorQuestion[IndexRndQuestion[IndexQuestion]].IndexAmax
do
begin
Navigator.NavigatorQuestion[IndexRndQuestion[IndexQuestion]].No_answer[IndexAnswer]
:= dm.Query_Answer.RecNo;
dm.Query_Answer.Next;
end;
dm.Query_Question.Next;
end;
end;
procedure Tdm.Create_S_Answer;
begin
try
With Query_Create do
begin
Active := false;
SQL.Clear;
SQL.Add('INSERT INTO s_answer(id_s_question, id_answer)');
SQL.Add('VALUE(' +
IntToStr(last_Selected.id_s_question) + ', ' +
IntToStr(last_Selected.id_answer) + ')');
Active := true;
end;
except
;
end;
end;
procedure Tdm.Create_S_Question;
begin
try
With Query_Create do
begin
Active := false ;
SQL.Clear;
SQL.Add('INSERT INTO s_question(id_test, id_question)');
SQL.Add('VALUE(' + IntToStr(Last_Selected.id_test) + ', ' +
IntToStr(Last_Selected.id_question) + ')');
Active := true;
end;
except
;
end;
try
With Query_Create do
begin
Active := false ;
SQL.Clear;
SQL.Add('SELECT MAX(id_s_question) AS max');
SQL.Add('FROM s_question');
Active := true;
Last_Selected.id_s_question := FieldByName('max').AsInteger;
end;
except
;
end;
end;
procedure Tdm.Create_Test_New;
var
IndexQuestion: integer;
IndexAnswer: integer;
begin
try
With Query_Create do
begin
Active := false ;
SQL.Clear;
SQL.Add('INSERT INTO test(id_student, id_subject,
id_theme, date_begin, time_begin)');
SQL.Add('VALUE(' + IntToStr(Last_Selected.id_student)
+ ', ' +
IntToStr(Last_Selected.id_subject) + ', ' +
IntToStr(Last_Selected.id_theme) + ', ' +
'CURDATE(),
' +
'TIME(NOW()) )');
Active := true;
end;
except
;
end;
try
With Query_Create do
begin
Active := false ;
SQL.Clear;
SQL.Add('SELECT MAX(id_test) AS max');
SQL.Add('FROM test');
Active := true;
Last_Selected.id_test := FieldByName('max').AsInteger;
end;
except
;
end;
dm.Load_Question();
dm.Query_Question.First;
for IndexQuestion := 1 to Navigator.IndexQmax
do
begin
dm.Load_Answer();
dm.Query_Answer.First;
dm.Last_Selected.id_question :=
dm.Query_Question.FieldByName('id_question').AsInteger;
dm.Create_S_Question();
for IndexAnswer := 1 to Navigator.NavigatorQuestion[IndexQuestion].IndexAmax
do
begin
dm.Last_Selected.id_answer :=
dm.Query_Answer.FieldByName('id_answer').AsInteger;
dm.Create_S_Answer();
dm.Query_Answer.Next;
end;
dm.Query_Question.Next;
end;
end;
procedure Tdm.DataModuleCreate(Sender: TObject);
begin
dm.ConnectOpros();
dm.LoadSkinoutBD();
Sleep(2000);
Form_authentication.Show;
Form_Start.Hide;
end;
procedure Tdm.Load_Group;
begin
try
With Query_Group do
begin
Active := false ;
SQL.Clear;
SQL.Add('SELECT DISTINCT n_group');
SQL.Add('FROM student');
Active := true;
end;
except
;
end;
end;
procedure Tdm.Load_Name(SelectSName: String);
begin
try
With Query_Name do
begin
Active := false ;
SQL.Clear;
SQL.Add('SELECT id_student, name');
SQL.Add('FROM student');
SQL.Add('WHERE sname=''' + SelectSName+ '''');
Active := true;
end;
except
;
end;
end;
procedure Tdm.Load_SName(SelectGroup: String);
begin
try
With Query_SName do
begin
Active := false ;
SQL.Clear;
SQL.Add('SELECT id_student, sname');
SQL.Add('FROM student');
SQL.Add('WHERE n_group= ' + SelectGroup);
Active := true;
end;
except
;
end;
end;
procedure Tdm.Load_Subject_Box;
begin
try
With Query_Subject_Box do
begin
Active := false ;
SQL.Clear;
SQL.Add('SELECT subject, id_subject, info');
SQL.Add('FROM subject');
SQL.Add('WHERE subject.access = 1');
Active := true;
end;
except
;
end;
end;
procedure Tdm.Load_S_Answer;
begin
try
With Query_S_Answer do
begin
Active := false;
SQL.Clear;
SQL.Add('SELECT * ') ;
SQL.Add('FROM s_answer') ;
SQL.Add('WHERE id_s_question = ' +
IntToStr(Last_Selected.id_s_question));
Active := true;
end;
except
;
end;
end;
procedure Tdm.Load_S_Question;
begin
try
With Query_S_Question do
begin
Active := false;
SQL.Clear;
SQL.Add('SELECT * ') ;
SQL.Add('FROM s_question') ;
SQL.Add('WHERE id_test = ' +
IntToStr(Last_Selected.id_test));
Active := true;
end;
;
end;
end;
procedure Tdm.Load_Theme_Box(SelectSubject: String);
begin
try
With Query_Theme_Box do
begin
Active := false ;
SQL.Clear;
SQL.Add('SELECT theme.theme, theme.id_theme, info');
SQL.Add('FROM theme');
SQL.Add('WHERE theme.id_subject IN(');
SQL.Add('SELECT subject.id_subject ' );
SQL.Add('FROM subject ');
SQL.Add('WHERE (subject.subject = ''' +
SelectSubject +''' ) and (theme.access = 1))');
Active := true;
end;
except
;
end;
end;
function Tdm.log_in(ngr, sname, nam: String):
boolean;
begin
log_in := true;
try
With Query_login do
begin
Active := false ;
SQL.Clear;
SQL.Add('select * from student where ');
SQL.Add('student.n_group=' + ngr + ' and ');
SQL.Add('student.sname="' + sname + '" and ');
SQL.Add('student.name="' + nam + '"');
Active := true;
if Query_login.IsEmpty then log_in := false;
Student.id := FieldByName('id_student').AsInteger;
Last_Selected.id_student := Student.id;
end;
except
log_in := false;
end;
end;
procedure Tdm.ReadSetting(FName: String; var Host,
Port, Database, User, Password: String);
var
FSetting: File of TFSetting;
Setting: TFSetting;
begin
AssignFile(FSetting, FName);
Reset(FSetting);
Read(FSetting, Setting);
Host := Setting.Host;
port := Setting.Port;
user := Setting.User;
password := Setting.Password;
database := Setting.Database;
CloseFile(FSetting);
end;
procedure Tdm.Rendering;
var
IndexQuestion: integer;
IndexAnswer: integer;
markanswer: real;
markquestion: real;
ncorrect: integer;
correct: integer;
begin
dm.Load_Question();
dm.Load_S_Question();
dm.Query_Question.First;
dm.Query_S_Question.First;
dm.Last_Selected.id_s_question :=
dm.Query_S_Question.FieldByName('id_s_question').AsInteger;
markanswer := 0;
markquestion := 0;
for IndexQuestion := 1 to dm.Query_Question.RecordCount
do
begin
dm.Last_Selected.id_question := dm.Query_Question.FieldByName('id_question').AsInteger;
dm.Load_Answer();
dm.Last_Selected.id_s_question :=
dm.Query_S_Question.FieldByName('id_s_question').AsInteger;
dm.Load_S_Answer();
dm.Query_Answer.First;
dm.Query_S_Answer.First;
if dm.Query_Question.FieldByName('only_one').AsInteger
= 1 then //Если один ответ
begin
markanswer := 100;
for IndexAnswer := 1 to dm.Query_Answer.RecordCount
do
begin
if dm.Query_Answer.FieldByName('correct').AsInteger
<> dm.Query_S_Answer.FieldByName('correct').AsInteger then
markanswer := 0;
dm.Query_Answer.Next;
dm.Query_S_Answer.Next;
end;
markquestion := markquestion + markanswer;
dm.Query_Question.Next;
dm.Query_S_Question.Next;
end
else //если ответов много
begin
correct := 0;
ncorrect := 0;
for IndexAnswer := 1 to dm.Query_Answer.RecordCount
do
begin
if dm.Query_Answer.FieldByName('correct').AsInteger
<> dm.Query_S_Answer.FieldByName('correct').AsInteger then
ncorrect := ncorrect + 1;
if dm.Query_Answer.FieldByName('correct').AsInteger
= 1 then
correct := correct + 1;
dm.Query_Answer.Next;
dm.Query_S_Answer.Next;
end;
if correct - ncorrect > 0 then
begin
markanswer := (100 * (correct -
ncorrect)) / correct;
end
else
markanswer := 0;
markquestion := markquestion + markanswer;
dm.Query_Question.Next;
dm.Query_S_Question.Next;
end;
end;
Student.mark_100 := markquestion / dm.Query_Question.RecordCount;
Student.mark_5 := (5 * Student.mark_100) / 100;
if (Student.mark_100 <= 31) and (Student.mark_100
>= 0) then
Student.mark := 2;
if (Student.mark_100 <= 55) and (Student.mark_100
>= 32) then
Student.mark := 3;
if (Student.mark_100 <= 74) and (Student.mark_100
>= 56) then
Student.mark := 4;
if (Student.mark_100 <= 100) and (Student.mark_100
>= 75) then
Student.mark := 5;
end;
function Tdm.SaveSkin(Path: String): String;
var
FileName: String;
begin
try
FileName := Path + dm.Query_Skin.FieldByName('name').AsString +
'.asz';
(dm.Query_Skin.FieldByName('skin') as TBlobField).SaveToFile(FileName);
SaveSkin := FileName;
except
;
end;
end;
procedure Tdm.SetMark;
begin
try
With Query_Create do
begin
Active := false ;
SQL.Clear;
SQL.Add('UPDATE test SET date_end = CURDATE(), time_end =
TIME(NOW()), mark = ' + IntToStr(Student.mark) + ' , mark_5 = ' +
IntToStr(Round(Student.mark_5)) + ' , mark_100 = ' +
IntToStr(Round(Student.mark_100)) + ' WHERE id_test = ' +
IntToStr(Last_Selected.id_test));
Active := true;
end;
except
;
end;
end;
procedure Tdm.Subject_Select(SelectSubject: String);
begin
;
end;
procedure Tdm.Theme_Select(ThemeSelect: String);
begin
;
end;
procedure Tdm.LoadResult(id_test: integer);
begin
try
With Query_Result do
begin
Active := false;
SQL.Clear;
SQL.Add('SELECT * ') ;
SQL.Add('FROM student, subject, theme, test ') ;
SQL.Add('WHERE test.id_test = ' + IntToStr(id_test)
);
SQL.Add(' AND test.id_student = student.id_student');
SQL.Add(' AND test.id_subject = subject.id_subject');
SQL.Add(' AND test.id_theme = theme.id_theme');
Active := true;
end;
except
ShowMessage('Ошибка получения информации об тестировании');
end;
end;
procedure Tdm.LoadSkinOutBD;
var
path: string;
begin
With Query_Skin do
begin
Active := false;
SQL.Clear;
SQL.Add('SELECT * ') ;
SQL.Add('FROM skin') ;
SQL.Add('WHERE priority in (Select max(priority) FROM
skin)' );
Active := true;
if Eof then Exit;
Path := ExtractFilePath(ParamStr(0)) + 'temp\';
ApplySkin(SaveSkin(Path));
end;
except
//ShowMessage('Ошибка получения списка вопросов')
end;
end;
function Tdm.Load_Answer: Boolean;
//Загрузка ответа на вопрос
begin
Load_Answer := true;
try
With Query_Answer do
begin
Active := false;
SQL.Clear;
SQL.Add('SELECT * ') ;
SQL.Add('FROM Answer') ;
SQL.Add('WHERE id_question=' +
IntToStr(Query_Question.FieldByName('id_question').AsInteger));
Active := true;
end;
except
//ShowMessage('Ошибка получения списка вопросов');
Load_Answer := false;
end;
end;
function Tdm.Load_Illustration: Boolean;
// загрузка иллюстраций к вопросу
begin
Load_Illustration := true;
try
With Query_illustration do
begin
Active := false;
SQL.Clear;
SQL.Add('SELECT * ') ;
SQL.Add('FROM q_illustration ') ;
SQL.Add('WHERE id_question=' +
IntToStr(Query_Question.FieldByName('id_question').AsInteger));
Active := true;
end;
except
//ShowMessage('Ошибка получения списка иллюстраций');
Load_illustration := false;
end;
end;
function Tdm.Load_Question: Boolean;
//чтение вопросов по предмету
begin
Load_Question := true;
try
With Query_Question do
begin
Active := false;
SQL.Clear;
SQL.Add('SELECT * ') ;
SQL.Add('FROM Question') ;
SQL.Add('WHERE id_theme=' +
IntToStr(Last_Selected.id_theme));
Active := true;
end;
except
//ShowMessage('Ошибка получения списка вопросов');
Load_Question := false;
end;
end;
function Tdm.Query_Subject_Set: boolean;
//Получение списка предметов
begin
Query_Subject_Set := true;
try
With Query_Subject do
begin
Active := false;
SQL.Clear;
SQL.Add('SELECT * FROM Subject ') ;
Active := true;
end;
except
ShowMessage('Ошибка получения списка предметов');
Query_Subject_Set := false;
end;
end;
function Tdm.Query_Theme_Set: Boolean;
//Получение списка тем по даному предмету
var
id_subject: Integer;
begin
Query_Theme_Set := true;
try
id_subject := Query_Subject.FieldByName('id_subject').AsInteger;
With Query_Theme do
begin
Active := false;
SQL.Clear;
SQL.Add('SELECT * FROM theme WHERE id_subject = ' +
IntToStr(id_subject));
Active := true;
end;
except
ShowMessage('Ошибка получения списка тем по данному предмету');
Query_Theme_Set := false;
end;
end;
end.
Приложение В
SQL запросы для создания базы данных тестирования
drop database spkvtk ;
create database spkvtk CHARACTER SET
"utf8";
use spkvtk ;
create table subject(
id_subject int auto_increment,
subject varchar(255)
not null,
access boolean default false,
info longblob,
primary key(id_subject)
);
create table theme(
id_theme int auto_increment,
id_subject int not null,
theme varchar(255)
not null,
maximum tinyint default 5,
mix_question boolean default true,
access boolean default false,
info longblob,
primary key(id_theme),
foreign key(id_subject) references subject(id_subject) on delete
cascade
);
create table question(
id_question int auto_increment,
id_theme int not null,
question longblob,
only_one boolean default true,
mix_answer boolean default true,
primary key(id_question),
foreign key(id_theme) references theme(id_theme) on delete
cascade
);
create table q_illustration(
id_q_illustration int auto_increment,
id_question int,
illustration longblob,
propstr boolean default true,
description longblob,
primary key(id_q_illustration),
foreign key(id_question) references question(id_question) on delete
cascade
);
create table answer(
id_answer int auto_increment,
id_question int not null,
answer longblob,
illustration longblob,
propstr boolean default
true,
correct boolean default false,
primary key(id_answer),
foreign key(id_question) references question(id_question) on delete
cascade
create table student(
id_student int auto_increment,
name varchar(255) not null,
sname varchar(255) not null,
n_group smallint not null,
primary key(id_student)
);
create table test(
id_test int auto_increment,
id_student int not null,
id_subject int not null,
id_theme int not null,
date_begin date not null,
date_end date,
time_begin time not null,
time_end time,
mark int,
mark_5 decimal(6, 2),
mark_100 decimal(6, 2),
primary key(id_test),
foreign key(id_subject) references subject(id_subject) on delete
cascade,
foreign key(id_theme) references theme(id_theme) on delete
cascade
);
create table s_question(
id_s_question int auto_increment,
id_question int not null,
id_test int not null,
primary key(id_s_question),
foreign key(id_test) references test(id_test)
on delete cascade,
foreign key(id_question) references question(id_question) on delete
cascade
);
create table s_answer(
id_s_answer int auto_increment,
id_s_question int not null,
id_answer int not null,
correct boolean default false,
primary key(id_s_answer),
foreign key(id_s_question) references
s_question(id_s_question) on delete cascade,
foreign key(id_answer) references
answer(id_answer) on delete cascade
);
create table user(
id_user int auto_increment,
user varchar(255) not null,
password varchar(255)
not null,
access varchar(255)
not null,
name varchar(255),
sname varchar(255),
patronymic varchar(255),
primary key(id_user)
);
create table betta(
id_betta int auto_increment,
message longblob,
primary key(id_betta)
);
create table skin(
id_skin int auto_increment,
name varchar(255),
skin longblob,
info longblob,
priority int,
primary key(id_skin)
);