Разработка подсистемы генерации учебно-тренировочных заданий
Генерация учебно-тренировочных заданий УТЗ существенно расширяют возможности КУ и КОС, повышают их эффективность и ценность. Тем не менее, генерирующие КСО в настоящее время встречаются не часто. Глинная причина этого заключается в отсутствии развитого ангорского инструментария, обеспечивающего воплощение фупк-1Ий генерации либо вообще без программирования (т.е. полностью на основе технологий… Читать ещё >
Разработка подсистемы генерации учебно-тренировочных заданий (реферат, курсовая, диплом, контрольная)
Содержание Введение
1.Формирование требований к подсистеме
1.1 Описание пользователей
1.1.1 Сведения о пользователях
1.1.2 Ключевые потребности пользователей
1.2 Возможности продукта
1.2.1 Создание учебно-тренировочного задания
1.2.2 Генерация учебно-тренировочного задания
1.3 Требования на входные данные
1.4 Требования на выходные данные
1.5 Разработка диаграммы вариантов использования
2. Анализ предметной области
2.1 Типы учебно-тренировочных заданий
2.2 Генерация учебно-тренировочных заданий
2.3 Генерация учебно-тренировочных задач на основе текста учебного материала
3.Проектирование подсистемы учебно-тренировочных заданий
3.1 Проектирование архитектуры подсистемы
3.2 Проектирование интерфейса программного средства
3.3 Проектирование информационного обеспечения программного средства
4.Реализация подсистемы
4.1 Выбор средств реализации подсистемы
4.2 Реализация информационного обеспечения подсистемы
4.3 Реализация пользовательского интерфейса подсистемы
4.4 Организация взаимодействия подсистемы с базой данных
4.5Реализация функциональности подсистемы
4.6 Руководство пользователя и создание справочной системы
5.Тестирование подсистемы Заключение Список литературы Приложение, А Приложение В Введение Целью этого курсового проекта является разработка подсистемы генерации учебно-тренировочных заданий с помощью, которой можно было бы генерировать задачи разного типа и разной сложности. Без непосредственного участия в этом процессе преподавателя.
На данный момент решение проблемы по созданию подсистемы для генерации учебно-тренировочных заданий является очень актуальной. Эту подсистему можно использовать как в обычной форме образования, так и дистанционной.
Мировое образовательное пространство в настоящее время характеризуется интенсификацией процессов глобализации, информатизации и ростом конкуренции на рынке образовательных услуг, что стимулирует в свою очередь совершенствование компьютерных технологий обучения для соответствия мировым стандартам. Тенденция усложнения компьютерных технологий обучения, которая характерна для современного образования, связана с увеличением мощности и возможностей компьютеров и возрастающим использованием Интернета для предоставления образовательных услуг.
Развитие современных информационных технологий также определяет постоянное возрастание сложности программного обеспечения автоматизированных систем, в том числе и компьютерных обучающих систем (КОС). Современные крупные проекты в этой области характеризуют, как правило, следующие особенности :
1.Сложность описания (большое количество функций, процессов, элементов данных и сложные взаимосвязи между ними), требующая тщательного моделирования и анализа данных и процессов;
2.Наличие совокупности взаимодействующих информационных и программных компонентов (модулей) компьютерной обучающей системы, имеющих локальные задачи и цели функционирования (например, модуль генерации учебно-тренировочных заданий, модуль представления моделей обучаемых и протоколов их работы) и т. д.
В настоящее время не вызывает сомнения актуальность создания эффективной системы дистанционного образования в России.
Компьютерные учебные курсы в системе дистанционного образования имеют как дидактические, так и методические особенности. Диапазон технологических приемов обучения простирается от полностью автономных case-систем до систем интерактивного взаимодействия обучаемых и преподавателей в реальном времени по сети Интернет. При определении принципов построения систем дистанционного обучения (СДО) необходимо определить дидактические и методические принципы дистанционного обучения в привязке к элементам сферы образования.
Обучение:
— это последовательный процесс формирования знаний, умений и навыков, который опирается на соответствующие учебные курсы (УК) по дисциплинам, разбитые на учебно-тренировочные занятия (УТЗ), лекции, семинары, лабораторные работы;
— использует, в основном, планирование обучения для группы студентов;
— применяет промежуточный и завершающий контроль (экзамены);
И создание такой подсистемы (генерации учебно-тренировочных заданий) будете являться одним из важных компонентом в системе дистанционного образования.
1. Формирование требований к подсистеме
Основными требованиями к разрабатываемой подсистеме являются те свойства и характеристики, которые должны удовлетворять потребности пользователей и иных за итерированных лиц в данном продукте. К этим характеристикам относится адекватность данной подсистемы, недвусмысленность, полнота, непротиворечивость, упорядочность по важности и стабильности, проверяемость, модифицируемость и т. д.
Областью применения подсистемы генерации учебно-тренировочных задач является в первую очередь образовательные учреждения для подготовки студентов и проверки изученного материала.
1.1 Описание пользователей
1.1.1 Сведения о пользователях У системы два основных типа пользователя: студент и преподаватель. Студент осуществляет получение задания. Преподаватель добавляет новые задания и генерирует их для студента.
1.1.2 Ключевые потребности пользователей Преподаватель затрачивает большое количество времени для самостоятельного создания учебно-тренировочного задания. По этому необходима подсистема, которая самостоятельно сможет сгенерировать большое количество заданий.
1.2 Возможности продукта
1.2.1 Создание учебно-тренировочного задания По средством программы можно создать задание которое в последствии можно генерировать.
1.2.2 Генерация учебно-тренировочного задания Программа может сгенерировать бесконечное множество вариантов текста задания.
1.3Требования на входные данные Входными данными подсистемы будет являться первоначальный текст самого задания (её модель) который будет генерироваться по определенным правилам, которые реализованы в коде программы. При вводе модели пользователем необходимо будет классифицировать в веденные данные на три типа: не генерируемый текст, генерируемый текс и генерируемые числа.
Не генерируемый текст это тот текст, который подсистема будет хранить, не имея возможности для его изменения. Он будет являться постоянным не изменяемым, и составлять основу задания.
Вся остальная информация будет являться генерируемой самой подсистемой. Все что будет требоваться от пользователя по ней это ввести те варианты, на которые она будет изменяться (генерироваться) при дальнейшем использование модели.
1.4 Требования на выходные данные Выходными данными подсистемы генерации учебно-тренировочных заданий будет множество новых вариантов исходной модели задания.
1.5 Разработка диаграммы вариантов использования Наиболее удобной формой представления информации при анализе предметной области являются графические диаграммы различного рода. Она представлена в приложение В данного курсового проекта. С помощью этой диаграммы можно наглядно получить информацию о функционирование данной подсистемы.
2. Анализ предметной области
2.1 Типы учебно-тренировочных заданий Стратегия контроля в любом курсе реализуется посредством учебно-тренировочных заданий. В одном курсе могут использоваться сразу несколько типов заданий. Если же говорить о обучающей среде, обеспечивающей базу для нескольких курсов, то такая система должна поддерживать использование максимально большего числа типов заданий. Не лишней является возможность дополнения типов заданий в системе, уже содержащей курсы.
С технологической точки зрения, задания подразделяются на типы по способу ввода ответа.
1.Выбор варианта решения из множества. Наиболее часто используемый тип заданий. Чтобы увеличить полезность данного типа, в программном продукте должны поддерживаться следующие возможности: несколько правильных ответов, вес (стоимость) каждого ответа, вывод вариантов ответов в произвольном порядке.
2. Формирование ответа путем выбора компонентов из множества. Обучаемому должен быть предоставлен набор компонентов, совокупность части компонентов дает правильный результат. Такие задания требуют поддержки не только возможности нескольких правильных вариантов ответа, но и последовательности их выбора.
3. Ввод численного значения. При самой простой реализации данного типа заданий достаточно просто возможности сохранения численного эталона. Использование конструктора выражений при построении шаблона (эталона) и ответа обучаемого дает большую эффективность. Подобные системы позволяют, например, контролировать правильность запоминания формул.
4. Ввод ключевых слов. Данный тип характерен для дисциплин, изучающих речь, правила произношения и написания. Эталон должен сохраняться в символьном представлении. Желательна возможность использования нескольких эталонов и нескольких полей ввода ответов в одном задании.
5. Маркировка текста. С помощью курсора мыши обучаемый вносит изменения в предлагаемый ему текст. Применение данного типа предусматривает разработку шаблона задания, позволяющего снимать показания с курсора мыши.
6. Построение связей между элементами. Обучаемый устанавливает связи между предлагаемыми элементами. Логично предположить необходимость возможности помещения графических изображений в шаблон заданий данного типа.
7. Выбор ответа на основании продемонстрированного видео, аудио или анимированного объекта. Шаблон вопросов должен предусматривать помещение в задание вышеперечисленных форм представления материала.
8. Ввод произвольного текста. Данный тип задания не подлежит автоматическому контролю, а проверяется непосредственно преподавателем. Компьютерная среда должна обеспечивать отправку ответов обучаемых преподавателям, возможности ввода оценки в базу данных и маркированной цветом корректировки ответов обучаемых.
2.2 Генерация учебно-тренировочных заданий УТЗ существенно расширяют возможности КУ и КОС, повышают их эффективность и ценность. Тем не менее, генерирующие КСО в настоящее время встречаются не часто. Глинная причина этого заключается в отсутствии развитого ангорского инструментария, обеспечивающего воплощение фупк-1Ий генерации либо вообще без программирования (т.е. полностью на основе технологий визуальной разработки), либо вообще программирования в минимальном объеме. Немногие средства, позволяющие создавать генерирующие КСО, не обладают инвариантностью к ПО. Последнее означает, что их возможности ограничены генерацией типовых УТЗ, актуальных для определенных дисциплин или их разделов (например, механики, линейной алгебры, лексики какого-либо иностранного языка и т. д.). У В результате авторы, желающие обогатить КУ (КОС) функциями генерации, как правило, сталкиваются с необходимостью оригинальной реализации соответствующих механизмов, что требует участия в проекте квалифицированных программистов. Поскольку на сегодняшний день отсутствует инвариантная к ПО методология построения генерирующих КСО, даже для классных программистов данная задача не является тривиальной.
В настоящей главе мы постараемся показать, что создание генерирующего КУ или КОС не так трудно, как представляется на первый взгляд. Разумеется, любую проблему можно решать на разных уровнях. Если поставить перед собой задачу-максимум, заключающуюся в разработке высокоинтеллектуального КСО. базирующегося на всеобъемлющей модели представления ПО, то до практических результатов дело может дойти нескоро.
Поэтому внимание будет уделено методам генерации, позволяющим значительно повысить дидактический потенциал КУ (КОС), но не являющимся, с нашей точки зрения, слишком спорными в плане реализации.
Отметим, что материал главы ориентирован как на создатели KУ и КОС, так и на разработчиков авторских систем.
Генерация УТЗ осуществляется на основе их моделей. На уровне, инвариантном к ПО и виду осваиваемой деятельности, модель задачи Мt представляет собой кортеж:
Мt=(A, D, С, Ms, Msu, V, Vu, Mas, Ov, Oa)
где A-цель (что требуется от обучаемого, какую деятельность необходимо выполнить);
D — исходные данные;
С — ограничения, которые должны быть учтены при выполнении УТЗ;
Ms — модель ситуации (в зависимости от назначения и вида КС О этот компонент может соответствовать моделям изучаемого объекта, среды профессиональной деятельности и т. д.);
Msu — информационная модель, описывающая способ представления Ms, а также средства оперирования ею в рамках КСО;
V — результаты (ответы);
Vu — описание способа ввода результата;
Mas — эталонная модель деятельности;
Ov — функция оценивания результата;
Oa — функция оценивания деятельности.
Компоненты A, D и С соответствуют постановке задачи. B модели ситуации выделим три составляющих:
(Str (Ms), Val (Ms), Int (Ms))
Где Str (Ms) — структура Ms;
Val (Ms) — значения параметров Ms
Int (Ms) — интерпретация Ms.
Cтруктура Str (Ms) определяет форму выражений (математических зависимостей, правил и тд), входящим в Ms. Конкрет ные значения параметров фиксируются в Val (Ms). Подобная декомпозиция позволяет дифференцировать генерацию УТЗ путем варьирования значениями параметров при неизменной структуре модели ситуации и генерацию, предусматривающую трансформацию Str (M).
Интерпретация Int (Ms) характеризует смысл (т.е. предметное содержание) элементов Str (Ms) и значений из Val (Ms).
Функции оценивания Ov и Оа определяются следующим образом:
Ov.(Vs, V)>R, (1)
О,-(Ма. Mas)> R, (2)
где Vs — результат, введенный или выбранный обучаемым;
R — множество оценок;
Ма — модель деятельности, выполненной обучаемым в процессе решения УТЗ и связанной с оперированием Ms на основе реализации Msu.
Форма, в которой описываются функции (1) и (2), зависит от вида и характера УТЗ, способа ввода ее результата (Vu) и информационной модели Msu. Это может быть таблица, система правил, процедура и др. В разд. был приведен пример спецификации (2) в виде системы правил оценивания ответа, формируемого путем выбора его компонентов в перечне.
Функции Ov, Oa и механизмы, реализующие оценивание, являются фиксированными в рамках КСО. Возможности их генерации в данной книге не рассматриваются.
В негенерируемых УТЗ все члены Мt фиксированы. Модель генерируемой задачи включает постоянную и переменную части. Возможности генерации зависят от состава переменных компонентов, способов их представления и множеств значений.
Исходя из сказанного, разделим члены (1) с учетом (2) на две группы: потенциально генерируемые (Мtg) и фиксированные (Mlf):
Mtf=(D, Msu, Vu, Ov, Oa) (3)
Поясним, почему принципиально генерируемый компонент D фигурирует в (3). D содержит естественно-языковое описание Ms или ссылку на нее с учетом установленной интерпретации и значений параметров. Другими словами, он играет роль внешнего (пользовательского) представления указанной информации. Поскольку все генерируемые элементы, отражаемые в D, учитываются при генерации Ms, он отнесен ко второй группе.
Предложенная модель описывает УТЗ, применяемые в любых видах КСО. а не только в КУ и КОС. В моделях конкретных УТЗ могут использоваться не все компоненты, входящие в (3). Обязательными членами М; являются A, D, Str>{Ms) и Val (M). Интерпретация модели ситуации отсутствует в чисто математических задачах. Mas и Оа не специфицируются в УТЗ без контроля деятельности. В задачах, недекомпозируемых на этапы, не задаются Msu, Mas и Оа. В свою очередь, V, Vu и Оа не определяются в УТЗ, не требующих ввода ответа. Рассмотрим смысл потенциально генерируемых компонентов Mt.
Пример 1. Найти корни уравнения x2 — Зх + 2 = 0 способом, включающим вычисление дискриминанта.
Как известно, существует несколько путей решения квадратного уравнения. Во-первых, его левая часть может допускать разложение на множители. Во-вторых, корни могут быть определены на основе соотношений: x1+x2=-b/a, x1x2=c/a Третьим вариантом является формула, содержащая дискриминант. Поскольку в условии есть ограничение на способ решения, в КСО должны быть предусмотрены средства для проверки того, что именно его использовал обучаемый. Такой контроль реализуется при пошаговом выполнении, т. е. данная УТЗ относится к классу задач на поэтапное получение результата. Компоненты ее модели1 детализированы в табл.
Согласно предложенной классификации описываемая УT3 является комплексной. В ней контролируется как деятельность, так и вводимый ответ. Ее модель отражает табл. 1.
Str (Ms) | Val (Ms) | Int (Ms) | A | C | Mas | V | |
Описание схемы подстанции в нормальном и послеаварийном состояниях | Определить вышедшее из строя оборудование и тип неисправности | Правила регламентирующие действия в аварийной ситуации | |||||
(Таблица 1 Модель Учебно-тренировочного задания) Отметим, что модель деятельности в данном случае представляет собой не жесткую последовательность действий, а систему правил, позволяющих оценить корректность того или иного действия в текущей ситуации.
Строго говоря, понятие генерации напрямую применимо только к первым пяти членам Мtg. Эталонная модель деятельности и эталонный результат не генерируются (что подразумевает некоторую степень произвольности), а определяются (вычисляются, выводятся) на основе прочих сгенерированных и фиксированных составляющих .
Процедура генерации используется для порождения ошибочных и абсурдных ответов из соответствующих элементов, включаемых в V наряду с эталонным результатом или формируемых путем внесения в него искажений. Таким образом, в общем случае V содержит как выводимые (вычисляемые), так и генерируемые компоненты:
2.3 Генерация учебно-тренировочных задач на основе текста учебного материала Значительную долю учебного материала КУ и КОС составляет текст. Поэтому идея генерации УТЗ на его основе представляется весьма логичной. Схема, иллюстрирующая ее воплощение. В нее входят две процедуры. Первая применяется в процессе разработки КУ (КОС), вторая — при его эксплуатации. Очевидно, вторая процедура должна быть автоматической. «Идеальная» реализация рассматриваемой схемы имеет место, когда первая процедура также является автоматической, т. е. анализ текста и формирование моделей УТЗ для генерации производятся авторской системой без участия человека.
Методы анализа текстов на естественном языке и построения на их основе моделей представления ПО находятся в фокусе исследований в области прикладной лингвистики и искусственного интеллекта. К числу ключевых проблем, связанных с развитием этих методов, относятся:
*сложность моделирования семантики;
*наличие так называемых «не-факторов», присущих человеческим представлениям и отражаемых в текстах (неточности, неполноты, несогласованности и др.);
*неоднозначность соответствия между естественно-языковым и формализованным представлениями (одна и та же мысль может быть выражена по-разному; дополнительные трудности анализа вызывают синонимия и омонимия);
*необходимость учета контекста.
Особо отметим последнюю проблему. Человек понимает текст благодаря тому, что он обладает знаниями о ПО, к которой данный текст относится. Эти знания составляют контекст, позволяющий прояснить смысл положений, содержащихся в тексте, а также извлечь из него мысли, которые имелись в виду, но не были выражены явно.
(Рисунок 1 Создание учебно-тренировочного задания) Таким образом, исходный фрагмент текста, поступающий на вход анализатора, недостаточен для построения его адекватной семантической модели. Наряду с ним необходимо использовать базу знаний, отражающую как общие, так и специфичные для данной ПО представления. Создание такой базы знаний — непростая задача, на сегодняшний день в полной мере не решенная.
Исходя из сказанного, мы считаем нерациональным стремиться во что бы то ни стало добиться автоматической реализации процедуры 1 (см. рис. 1). Последующий материал настоя щей главы посвящен методам интерактивного формирования моделей УТЗ в процессе взаимодействия авторского инструментария и авторов КУ (КОС). Применительно к тексту учебного материала действия авторов направлены на выделение его фрагментов и их преобразование с целью явного выражения контекста, в результате чего задача перестает зависеть от него, а с интерпретация становится однозначной для обучаемых.
Распределение ролей между компьютерной системой и человеком в рамках интерактивной процедуры может быть разным. Чем выше степень автоматизации, тем эффективнее инструментарий и тем сложнее его реализация. Однако, даже если значительная часть этапов построения модели УТЗ выполняется автором, данная технология все равно обеспечивает существенные преимущества по сравнению с традиционной ручной подготовкой массива задач.
Выделим два основания классификации методов формирования моделей УТЗ на базе текста. Первым является объем фрагмента-источника. Этот объем может соответствовать одному предложению, нескольким логически связанным предложениям или более крупному фрагменту (перечислению, нескольким перечислениям, таблице, описанию). В качестве второго основания выступает глубина формализации модели задачи, отражающая то, насколько далеко она «ушла» от исходного лингвистического представления.
Названные факторы взаимосвязаны. Чем выше объем источника, тем глубже формализация и тем более искусственный характер приобретает Мt. Если источником ее построения служит предложение, то выделяются два уровня формализации: грамматический и логический.
На первом уровне модель УТЗ образуют единицы, имеющие преимущественно лингвистический характер. Они специфицируют: тип предложения; его грамматическую разметку; множество членов, к которым генерируются вопросы, и соответствующие вопросительные слова; семантические классы, включающие альтернативные значения членов, фигурирующих в вопросах.
На втором уровне предложение представляется его логической моделью — суждением. В этом случае в Mt отражаются логические характеристики, определяющие тип суждения, его элементы (субъект и предикат для категорических суждений, основание и следствие для условных суждений), качество, количество, модальность, истинностное значение и др.
Переход от предложения к суждению позволяет применять логический вывод для получения новых суждений, которые могут использоваться при генерации задач. Поскольку в тексте отсутствуют предложения, напрямую соответствующие выводимым суждениям, формируемые на их основе УТЗ относятся к классу задач не на запоминание, а на понимание.
Если в качестве источника модели УТЗ выступают не отдельное предложение или несколько взаимосвязанных предложений, а более объемная часть текста, то ядром Mt служит локальный фрагмент модели представления ПО. Локальность означает, что этот фрагмент является автономным, т. е. не зависящим от фрагментов, входящих в модели других задач. Такой подход существенно проще по сравнению с построением единой базы знаний, используемой для генерации, когда необходимо обеспечить согласование и интеграцию ее компонентов.
Важно, чтобы характер действий авторов в рамках интерактивной процедуры формирования моделей УТЗ не предъявлял особых требований к их квалификации в части владения методами формализации и программирования. Например, инструментарий, предлагающий авторам описать модель задачи на языке исчисления предикатов или составить программу генерации каких-либо ее элементов, принесет мало пользы, так как применить его смогут лишь немногие специалисты. Очевидно, что реализация интерактивной процедуры должна базироваться на технологиях визуальной разработки.
3. Проектирование подсистемы учебно-тренировочных заданий
3.1 Проектирование архитектуры подсистемы
Разрабатываемая подсистема будет входить, в какую ни будь большую систему, к примеру (система дистанционного образования).
В системе дистанционного образования подсистема генерации учебно-тренировочных заданий будет осуществлять такой блок как подготовка учащихся, к изучению какой либо темы (практической ее части) путем решения заданий. Преподаватель может по средствам данной подсистемы предложить большое количество учебных заданий студентам по теме, которую они изучают, разнообразив ее большим количеством вариации текста задания и его типа. В результате чего студенты получат навыки решения задач различного типа.
3.2 Проектирование интерфейса программного средства Спроектированный пользовательский интерфейс основывается на следующих принципах.
Структурный принцип. Пользовательский интерфейс осмысленный и удобный. Он базируется на четких, целостных моделях, очевидных и распознаваемых пользователем. При этом родственные понятия связаны, а независимые разделены.
Принцип простоты. В пользовательском интерфейсе максимально упрощено управление наиболее распространенными операциями. При этом общение с пользователем ведется на понятном для него языке.
Принцип видимости. Все функции и данные, необходимые для выполнения данной задачи видны, в результате чего пользователь не отвлекается на дополнительную и избыточную информацию Принцип обратной связи. Пользователю сообщается о всех действиях системы, ее реакциях, изменениях состояния или ситуации, об ошибках и исключениях, которые важны для них. Сообщения являются четкими, краткими, однозначными и написанными на языке, понятном пользователю.
Принцип толерантности. Интерфейс является гибким и толерантным. Ущерб, наносимый ошибками пользователя, снижен за счет предотвращения появления этих ошибок путем анализа различных форматов ввода.
(Рисунок 1. Окно для создания шаблона задания)
(Рисунок 2 Окно для генерации текста)
3.3 Проектирование информационного обеспечения программного средства Для функционирования проектируемой подсистемы была создана база данных состоящая из 4 таблиц с именами (ParamChislo, ParamText, ParamWord, Shablon).
Таблица с именем Shablon является одной из главных. В ней храниться информация о том, к какому заданию принадлежит тот или иной параметр его id и тип. Под параметром понимается значения данных вводимые при создание шаблона.
ParamChislo в этой таблице хранится интервалы для максимального и минимального изменения генерируемого числа и его шаг.
ParamText — здесь хранится значения, не генерируемого текста
ParamWord — хранится варианты слов для генерации.
Создаем таблицу с именем ParamChislo для этого открываем конструктор и добавляем туда столбцы.
4. Реализация подсистемы
4.1 Выбор средств реализации подсистемы Для реализации подсистемы была выбрана среда Microsoft Visual Studio .NET 2003 и язык программирования C#. Это, прежде всего, связано с тем, что языки «Си» достаточно широко распространены и пользуются большой актуальностью на сегодняшний день. А также переработка некоторых частей кода подсистемы под какой-либо другой язык не потребует больших временных затрат от программиста, а также этот процесс будет достаточно простым, в связи с тем, что его структура и специфика не слишком кардинально отличается от языков программирования, являющихся наиболее актуальными на сегодняшний день.
Таким образом, полученная подсистема будет являться достаточно гибкой и адаптируемой к любой информационной среде, в которой необходимо ее использовать. При этом для ее доработки не потребуются знания основ программирования в той среде, в которой она была разработана и знания основного алгоритма ее функционирования.
4.2 Реализация информационного обеспечения подсистемы На данном шаге осуществляется формирование физической модели информационного обеспечения, связанной с конкретным средством реализации (СУБД).
Для создания базы данных была использована программа Microsoft Office Access 2003. Выбором данной программы послужил тот факт, что она является наиболее простой и надежной на данный момент. Также учитывался то, что она широко распространена среди пользователей и в случае необходимости можно было посмотреть ее на компьютере и понять ее структуру и произвести изменения в случае ошибок связанных с базой данных. Но главная причина по которой был выбран Microsoft Office Access 2003 связан со спецификой задания в которой не требуется многопользовательский доступ к данным в БД .
База данных для данной подсистемы состоит из четырех таблиц. В первой таблицы находятся поля в которых в ведена информация о генерируемом задании, а именно не генерируемый текст и позиции расположения генерируемого текста и чисел, ну и, конечно же, id индивидуальный ключ который относится только к этому заданию по средствам которого программа может взять всю необходимою информацию для генерации задания из других таблиц. Во второй таблице хранится информация о принадлежности данных к генерируемому тексту или генерируемым числам. В остальных двух таблицах указаны соответственно те данные, на которые будет заменяться генерируемый текст или числа.
Для того, что создать БД необходимую для хранения информации подсистемы. Запустим программу Microsoft Office Access 2003. Выбираем вкладку фаил после чего появится контекстное меню где надо нажать создать новую базу данных. В водим имя БД в данном случае GeneratorDB. Потом с помощью конструктора создаем таблицу, в которой будет храниться не генерируемый. Создаем в данной таблице с именем consttext столбец в нем будет храниться не изменяемый текст и столбец с именем id в этом столбце будет храниться индивидуальный ключ данного значения (текста). Закрываем, конструктор и вводим имя таблицы (ParamText). Аналогичным образом создаются остальные таблицы (ParamChislo, ParamWord, Shablon)
4.3 Реализация пользовательского интерфейса подсистемы Для создания подсистемы была выбрана среда Microsoft Visual Studio .NET 2003 и язык программирования C#. Открываем указанную программу и создаем новый проект с названием GeneratorZadach. В данном проекте будет 4 формы. Основной из них будет являться форма номер 2 описание составление которой будет описана ниже.
На форме номер 2 будет выполняться операция по внесению в БД нового учебно-тренировочного задания. Для создания этой формы в программе не обходимо выбрать вкладку в меню add Form после этого появится новая форма. Назовем ее Form Editor. После этого добавим на форму необходимые нам элементы. TextBox 1 в этом элементе у нас будет хранится текст задания. Четыре кнопки (button 1.2.3.4) с именами добавить не изменяемый текст, добавить изменяемый текст, добавить изменяемое число, сохранить данный шаблон.
Для добавления элементов на форму необходимо перетащить их с панели на форму. Расположение этих элементов выбирается на усмотрение создателя программы.
При нажатии кнопки добавить не изменяемый текст откроется панель 1, на которой находятся элементы TextBox в который необходимо ввести текст задания и кнопка удалить с помощью нее можно будет удалить текст в случае его не правильного ввода.
Нажав на кнопку (добавить изменяющиеся слово) появится панель 2, на этой панели находятся элементы TextBox служащий для ввода в базу данных тех вариантов слов, которые можно будет генерировать. Кнопка (button) с именем добавить, добавляет введенное слово в базу данных. ListBox этот элемент предназначен для отображения слов введенных для генерации. Кнопка с именем (удалить вариант) служит для удаления не нужного варианта слова для генерации. Удалить параметр это кнопка, которой можно удалить слово, которое будет генерироваться.
Если мы нажмем добавить изменяемое число то появится панель номер 3, в которой будет вам предложено в вести число для генерации максимальное и минимальное его значение и интервал, на который будет оно изменяться. Также на этой панели имеется кнопка с именем (удалить параметр) после этого параметр будет удален.
На остальные формы таким же путем были добавлены необходимые элементы.
4.4 Организация взаимодействия подсистемы с базой данных Данная подсистема взаимодействует с БД. В ней хранится вся информация касающиеся учебно-тренировочного задания, а именно текст задания и варианты по генерации его.
Взаимодействие с базой данных осуществляется посредством следующих классов ADO.NET:
System.Data.DataSet — хранит таблицыв оперативной памяти.System.Data.OleDb.OleDbConnection — класс, предоставляющий доступ к основным параметрам подключения.
System.Data.OleDb.OleDbDataAdapter — класс, предоставляющий возможность удобного наполнения таблиц объекта типа DataSet значениями из базы данных.
System.Data.OleDb.OleDbCommand — класс, хранящий строку команды на языке SQL и предоставляющий базовые возможности выполнения этой команды.
4.5 Реализация функциональности программного средства Рассмотрим основные глобальные переменные, основные процедуры и функции. Реализация которых была проведена с помощью кода на языке C#. Листинг разработанной подсистемы приведён в приложении А.
Форма с именем Form1
private void button2_Click (object sender, System. EventArgs e) — обработчик событий который при нажатие на элемент загружает форму с именем FormEditor.
private void button1_Click (object sender, System. EventArgs e) — обработчик событий который при нажатие на элемент загружает форму с именем FormGen.
Форма с именем FormGen
param[] параметр — массив для хранения параметров.
private void listBox1_SelectedIndexChanged (object sender, System. EventArgs e) — обработчик событий отображающий список заданий хранящийся в базе.
private void Построение () — процедура,
private void button1_Click (object sender, System. EventArgs e) — обработчик событий который при нажатие на элемент button1 генерирует задание и сохраняет его в фаил.
Форма с именем FormEditor
param[] параметр — массив для хранения параметров.
private void СчитатьДанныеИзЭлементов () — процедура которая считывает данные из элементов.
private void Построение () — процедура,
private void button1_Click (object sender, System. EventArgs e) — обработчик событий который при нажатие на элемент button1 загружает панель для ввода не генерируемого текста.
private void button2_Click (object sender, System. EventArgs e) — обработчик событий который при нажатие на элемент button2 загружает панель для ввода генерируемого текста.
private void button3_Click (object sender, System. EventArgs e) — обработчик событий который при нажатие на элемент button3 загружает панель для ввода генерируемого числа.
private void button4_Click (object sender, System. EventArgs e) — обработчик событий который при нажатие на элемент button4 сохраняет текст введенного задания.
private void buttonDeleteParam_Click (object sender, System. EventArgs e) — обработчик событий который при нажатие на элемент button удаляет введенный текст.
4.6 Руководство пользователя Для того чтобы пользоваться данной подсистемой, необходимо открыть файл с именем (GeneratorZadach.exe). После чего появится окно, в котором будет предложены два варианта для продолжения работы с подсистемой. Создать новый шаблон задач или генерировать задание. (Рисунок 1)
(Рисунок 1 Стартовое окно) Если вам необходимо сгенерировать какое либо задание нужно нажать кнопку генерировать. Нажав на нее, перед вами появится окно со списком имеющихся учебно-тренировочных задач. (Рисунок 2)
(Рисунок 2 Окно для генерации текста) Выбрав необходимое вам задание, следует указать количество ее вариантов.
(Рисунок 3 Окно для генерации текста) Как только это будет выполнено, следует нажать кнопку (генерировать) и вам будет предложено сохранить эти данные в текстовом документе. Вы можете сами создать текстовый документ, введя в поле имя, название документа или заменив уже существующий. (Рисунок 4)
(Рисунок 4 Сохранение генерируемого задания) Если в окне генерации вам не подойдет не одно из существующих заданий, вы можете создать его самостоятельно, закрыв это окно и нажав кнопку создать новый шаблон задач.
После того как вы нажмете кнопку (создать новый шаблон задач) перед вами появится окно для создания учебно-тренировочного задания. (Рисунок 5)
(Рисунок 5 Окно для создания задания) На нем находятся элементы для его создания (кнопки). Для того чтобы приступить к созданию необходимо определить, что в задание будет постоянным (текст или числа), а что будет генерироваться (генерируемый текст и числа). После того как этот этап будет выполнен, можно приступать к созданию учебно-тренировочного задания.
Для того чтобы ввести не генерируемый текст задания необходимо нажать кнопку с именем (добавить не изменяемый текст) перед вами появится панель, на ней в поле для ввода текста нужно ввести ту информацию, которая необходима.
Если вам нужно ввести текст, который будет генерироваться нужно, нажать кнопку (добавить изменяемое слово) в появившейся панели вам необходимо ввести те варианты слов, на которые будут заменяться текс. Это выполняется так. Вводится какой-то вариант слова, на которое будет заменяться текст и нажимается кнопка добавить. После чего это слово добавиться в вариант замещения текста.
При создание изменяемого текста необходимо нажать кнопку (добавить изменяющиеся слово). В появившейся панели указываются такие параметры как минимальное и максимальное значение данного числа и шаг, на который оно будет изменяться. (Рисунок 6)
(Рисунок 6 Окно для создания задания) После того как вы закончите ввод данных необходимо нажать кнопку сохранить, в результате чего ваше задание будет сохранено в БД (Рисунок 7)
(Рисунок 7 Окно для создания задания)
5. Тестирование подсистемы Для того чтобы проанализировать работоспособность подсистемы необходимо провести тестирование исходных данных, выдаваемые подсистемой с заранее известными необходимыми результатами.
Произведем тестировании на следующих данных:
Задание № 1. По данным задачи 1.9 определить, по какому квалитету точности может быть выполнена токарная обработка валов, если номинальный размер от базового торца до уступа равен 28,52 и 185 мм.
Задание № 2. Заготовки из чугуна (E = 140 гПа Rmax=200) устанавливают на сферическую опору (E0 = 140 гПа, r=20 мм). Действующая по нормали на одну опору сила Q=2400…250Н. Допустимый износ опоры [u]=0,2 мм. Определить погрешность закрепления при наибольшем износе опор приспособления.
Два данных примера были введены в базу данных для генерации, после чего было сгенерированно несколько вариантов. Результаты тестирования показали, что программа работает исправно и правильно.
В ходе тестирования также была произведена проверка на ввод не корректных данных. Результаты по этому этапу соответствуют нормам корректности ввода данных.
Заключение
В ходе выполнение данного курсового проекта была создана подсистема генерации учебно-тренировочных заданий. Данная подсистема выполняет создание различных вариантов текста учебно-тренировочного задания различного вида и типа.
Благодаря данной подсистеме процесс создания учебно-тренировочных заданий преподавателем для студентов очень сильно упростился. Теперь для того чтобы проверить знания студента или подготовить его к определенной теме предмета, не надо тратить много времени на поиск и разработку заданий Необходимо всего лишь запустить данную подсистему и выбрать из списка то задание, которое необходимо. И еще одно важное положительное качество подсистемы то что можно сгенерировать сколь угодно много заданий одного типа, но разного по содержанию, для большого количества студентов.
Приложение, А Листинг подсистема информационная программа
static void Main ()
{
Application.Run (new Form1());
}
private void button2_Click (object sender, System. EventArgs e) //- обработчик событий который при нажатие на элемент загружает форму с именем FormEditor.
{
FormEditor fe=new FormEditor ();
fe.ShowDialog ();
fe.Dispose ();
}
private void Form1_Load (object sender, System. EventArgs e)
{
}
private void button1_Click (object sender, System. EventArgs e) //обработчик событий который при нажатие на элемент загружает форму с именем FormGen.
{
FormGen fe=new FormGen ();
fe.ShowDialog ();
fe.Dispose ();
}
}
}
———————————-;
struct param
{
public int тип; //0 — текст 1 — число 2 — слово
public string неизменяемыйТекст;
public string[] варианты;
public double min;
public double max;
public double шаг;
}
param[] параметр=new param[100]; // массив для хранения параметров
int числоПараметров=0;
private void FormEditor_Load (object sender, System. EventArgs e)
{
}
private void СчитатьДанныеИзЭлементов () // функция для считывания данных из элементов
{
for (int i=0;i<�числоПараметров;i++)
{
if (параметр[i]. тип==0)
this.параметр[i].неизменяемыйТекст=((this.panel1.Controls[i]as Panel).Controls[0] as TextBox).Text;
if (параметр[i]. тип==1)
{
this.параметр[i].min=Convert.ToDouble (((this.panel1.Controls[i] as Panel).Controls[0] as TextBox).Text);
this.параметр[i]. max=Convert.ToDouble (((this.panel1.Controls[i]as Panel).Controls[1] as TextBox).Text);
this.параметр[i]. шаг=Convert.ToDouble (((this.panel1.Controls[i]as Panel).Controls[2] as TextBox).Text);
}
if (параметр[i]. тип==2)
{
for (int k=0;k<100;k++)
this.параметр[i]. варианты[k]=null;
for (int k=0;k<((this.panel1.Controls[i] as Panel).Controls[1]as ListBox).Items.Count;k++)
this.параметр[i]. варианты[k]=((this.panel1.Controls[i] as Panel).Controls[1] as ListBox).Items[k]. ToString ();
}
}
}
private void Построение ()// функция для создания динамически панели с элементами наней
{
this.textBox1.Text="" ;
for (int i=0;i<�числоПараметров;i++)
{
if (параметр[i]. тип==0)
this.textBox1.Text+=параметр[i].неизменяемыйТекст+" «;
if (параметр[i]. тип==1)
this.textBox1.Text+=параметр[i].min.ToString ()+" «;
if (параметр[i]. тип==2)
{
if (параметр[i].варианты[0]≠null)
this.textBox1.Text+=параметр[i].варианты[0]+" «;
else
this.textBox1.Text+="НЕТ_ЗНАЧЕНИЯ «;
}
}
this.panel1.Controls.Clear ();
for (int i=0;i<�числоПараметров;i++)
{
if (параметр[i]. тип==0)
{
Panel p=new Panel ();
p.SetBounds (25,i*100,this.panel1.Width-50,90);
p.BorderStyle=System.Windows.Forms.BorderStyle.FixedSingle;
TextBox tb1=new TextBox ();
tb1.SetBounds (10,5,p.Width-20,50);
tb1.Multiline=true;
tb1.Text=параметр[i]. неизменяемыйТекст;
p.Controls.Add (tb1);
Button b=new Button ();
b.SetBounds (10,60,150,25);
b.Text="Удалить параметр" ;
b.Click += new System. EventHandler (this.buttonDeleteParam_Click);
p.Controls.Add (b);
this.panel1.Controls.Add (p);
}
if (параметр[i]. тип==1)
{
Panel p=new Panel ();
p.SetBounds (25,i*100,this.panel1.Width-50,90);
p.BorderStyle=System.Windows.Forms.BorderStyle.FixedSingle;
TextBox tb1=new TextBox ();
tb1.SetBounds (50,10,50,32);
tb1.Text=параметр[i]. min. ToString ();
p.Controls.Add (tb1);
TextBox tb2=new TextBox ();
tb2.SetBounds (150,10,50,32);
tb2.Text=параметр[i]. max. ToString ();
p.Controls.Add (tb2);
TextBox tb3=new TextBox ();
tb3.SetBounds (250,10,50,32);
tb3.Text=параметр[i]. шаг. ToString ();
p.Controls.Add (tb3);
Label l1=new Label ();
l1.SetBounds (5,10,40,32);
l1.Text=" Min:" ;
p.Controls.Add (l1);
Label l2=new Label ();
l2.SetBounds (105,10,40,32);
l2.Text=" Max:" ;
p.Controls.Add (l2);
Label l3=new Label ();
l3.SetBounds (205,10,40,32);
l3.Text=" Шаг:" ;
p.Controls.Add (l3);
Button b=new Button ();
b.SetBounds (10,60,150,25);
b.Text="Удалить параметр" ;
b.Click += new System. EventHandler (this.buttonDeleteParam_Click);
p.Controls.Add (b);
this.panel1.Controls.Add (p);
}
if (параметр[i]. тип==2)
{
Panel p=new Panel ();
p.SetBounds (25,i*100,this.panel1.Width-50,90);
p.BorderStyle=System.Windows.Forms.BorderStyle.FixedSingle;
TextBox tb1=new TextBox ();
tb1.SetBounds (100,10,100,32);
tb1.Text="" ;
p.Controls.Add (tb1);
ListBox lb=new ListBox ();
lb.SetBounds (320,10,100,75);
for (int k=0;k
if (this.параметр[i].варианты[k]≠null)
lb.Items.Add (this.параметр[i].варианты[k]);
p.Controls.Add (lb);
Label l1=new Label ();
l1.SetBounds (5,10,90,32);
l1.Text=" Вариант:" ;
p.Controls.Add (l1);
Button b=new Button ();
b.SetBounds (210,10,100,32);
b.Text="Добавить>>" ;
b.Click += new System. EventHandler (this.buttonAddVar_Click);
p.Controls.Add (b);
Button b2=new Button ();
b2.SetBounds (430,10,100,32);
b2.Text="Удалить вариант" ;
b2.Click += new System. EventHandler (this.buttonDelVar_Click);
p.Controls.Add (b2);
Button b1=new Button ();
b1.SetBounds (10,60,150,25);
b1.Text="Удалить параметр" ;
b1.Click += new System. EventHandler (this.buttonDeleteParam_Click);
p.Controls.Add (b1);
this.panel1.Controls.Add (p);
}
}
}
private void button1_Click (object sender, System. EventArgs e) //обработчик событий который при нажатие на элемент button1 загружает панель для ввода не генерируемого текста.
{
this.параметр[this.числоПараметров]. тип=0;
СчитатьДанныеИзЭлементов ();
this.числоПараметров++;
Построение ();
}
private void button2_Click (object sender, System. EventArgs e) //обработчик событий который при нажатие на элемент button1 загружает панель для ввода генерируемого текста.
{
this.параметр[this.числоПараметров]. тип=2;
this.параметр[this.числоПараметров].варианты=new string[100];
СчитатьДанныеИзЭлементов ();
this.числоПараметров++;
Построение ();
}
private void button3_Click (object sender, System. EventArgs e) //обработчик событий который при нажатие на элемент button1 загружает панель для ввода не генерируемых чисел.
{
this.параметр[this.числоПараметров]. тип=1;
СчитатьДанныеИзЭлементов ();
this.числоПараметров++;
Построение ();
}
private void buttonDeleteParam_Click (object sender, System. EventArgs e) //обработчик событий который при нажатие на элемент button удаляет введенный текст.
{
int x=Cursor.Position.X-this.Location.X-this.panel1.Location.X;
int y=Cursor.Position.Y-this.Location.Y-this.panel1.Location.Y-(this.panel1.Controls[0]as Panel).Bounds.Y;
//MessageBox.Show («x="+x.ToString ()+» y="+y.ToString ());
for (int i=0;i<�числоПараметров;i++)
if (x>43 & x<43+150 & y>i*100+93 & y
{
СчитатьДанныеИзЭлементов ();
for (int k=i;k<�числоПараметров;k++)
this.параметр[k]=this.параметр[k+1];
this.параметр[this.числоПараметров].тип=3;
this.числоПараметров—;
Построение ();
}
}
private void buttonAddVar_Click (object sender, System. EventArgs e)
{
int x=Cursor.Position.X-this.Location.X-this.panel1.Location.X;
int y=Cursor.Position.Y-this.Location.Y-this.panel1.Location.Y-(this.panel1.Controls[0] as Panel).Bounds.Y;
//MessageBox.Show («x="+x.ToString ()+» y="+y.ToString ());
for (int i=0;i<�числоПараметров;i++)
if (x>243 & x<243+100 & y>i*100+43 & y
{
if (((this.panel1.Controls[i] as Panel).Controls[0] as TextBox).Text≠"")
{
((this.panel1.Controls[i] as Panel).Controls[1] as ListBox).Items.Add (((this.panel1.Controls[i] as Panel).Controls[0] as TextBox).Text);
СчитатьДанныеИзЭлементов ();
Построение ();
}
}
}
private void buttonDelVar_Click (object sender, System. EventArgs e)
{
int x=Cursor.Position.X-this.Location.X-this.panel1.Location.X;
int y=Cursor.Position.Y-this.Location.Y-this.panel1.Location.Y-(this.panel1.Controls[0] as Panel).Bounds.Y;
//MessageBox.Show («x="+x.ToString ()+» y="+y.ToString ());
for (int i=0;i<�числоПараметров;i++)
if (x>462 & x<462+100 & y>i*100+43 & y
{
if (((this.panel1.Controls[i] as Panel).Controls[1] as ListBox).SelectedIndex>=0)
{
((this.panel1.Controls[i] as Panel).Controls[1] as ListBox).Items.RemoveAt (((this.panel1.Controls[i] as Panel).Controls[1] as ListBox).SelectedIndex);
СчитатьДанныеИзЭлементов ();
Построение ();
}
}
}
private void button4_Click (object sender, System. EventArgs e) //обработчик событий который при нажатие на элемент button4 сохраняет введенный шаблон задания в БД для последующей его генерации.
{
СчитатьДанныеИзЭлементов ();
System.Data.DataSet ds=new System.Data.DataSet ();
System.Data.OleDb.OleDbConnection aCon=new System.Data.OleDb.OleDbConnection («Provider=Microsoft.Jet.OLEDB.4.0;Data Source=GeneratorDB.mdb»);
System.Data.OleDb.OleDbCommand команда=new System.Data.OleDb.OleDbCommand (««, aCon);
System.Data.OleDb.OleDbDataAdapter adapter=new System.Data.OleDb.OleDbDataAdapter (команда);
try
{
aCon.Open ();
int шаблонID=0;
int ПараметрТекстID=0;
int ПараметрСловоID=0;
int ПараметрЧислоID=0;
ds.Tables.Clear ();
команда.CommandText="SELECT MAX (id_shablon) FROM Shablon" ;
adapter.SelectCommand=команда;
adapter.Fill (ds);
шаблонID=Convert.ToInt32(ds.Tables[0]. Rows[0][0])+1;
ds.Tables.Clear ();
команда.CommandText="SELECT MAX (id) FROM ParamText" ;
adapter.SelectCommand=команда;
adapter.Fill (ds);
ПараметрТекстID=Convert.ToInt32(ds.Tables[0]. Rows[0][0])+1;
ds.Tables.Clear ();
команда.CommandText="SELECT MAX (id) FROM ParamWord" ;
adapter.SelectCommand=команда;
adapter.Fill (ds);
ПараметрСловоID=Convert.ToInt32(ds.Tables[0]. Rows[0][0])+1;
ds.Tables.Clear ();
команда.CommandText="SELECT MAX (id) FROM ParamChislo" ;
adapter.SelectCommand=команда;
adapter.Fill (ds);
ПараметрЧислоID=Convert.ToInt32(ds.Tables[0]. Rows[0][0])+1
for (int i=0;i<�числоПараметров;i++)
{
if (параметр[i]. тип==0)
{
команда.CommandText="INSERT INTO ParamText (id, consttext) VALUES («+
ПараметрТекстID.ToString ()+" ," +
" '" +параметр[i]. неизменяемыйТекст+" '" +
")" ;
команда.ExecuteNonQuery ();
команда.CommandText="INSERT INTO Shablon (id_shablon, param_id, param_tip) VALUES («+
шаблонID.ToString ()+" ," +
ПараметрТекстID.ToString ()+" ," +
" 0″ +
")" ;
команда.ExecuteNonQuery ();
ПараметрТекстID++;
}
if (параметр[i]. тип==1)
{
команда.CommandText="INSERT INTO ParamChislo (id, minimum, maximum, shag) VALUES («+
ПараметрЧислоID.ToString ()+" ," +
" '" +параметр[i]. min. ToString ()+" '," +
" '" +параметр[i].max.ToString ()+" '," +
" '" +параметр[i].шаг.ToString ()+" '" +
")" ;
команда.ExecuteNonQuery ();
команда.CommandText="INSERT INTO Shablon (id_shablon, param_id, param_tip) VALUES («+
шаблонID.ToString ()+" ," +
ПараметрЧислоID.ToString ()+" ," +
" 1″ +
")" ;
команда.ExecuteNonQuery ();
ПараметрЧислоID++;
}
if (параметр[i]. тип==2)
{
for (int k=0;k
if (this.параметр[i].варианты[k]≠null)
{
команда.CommandText="INSERT INTO ParamWord (id, wordvariant) VALUES («+
ПараметрСловоID.ToString ()+" ," +
" '" +параметр[i]. варианты[k]+" '" +
")" ;
команда.ExecuteNonQuery ();
}
команда.CommandText="INSERT INTO Shablon (id_shablon, param_id, param_tip) VALUES («+
шаблонID.ToString ()+" ," +
ПараметрСловоID.ToString ()+" ," +
" 2″ +
")" ;
команда.ExecuteNonQuery ();
ПараметрСловоID++;
}
}
aCon.Close ();
MessageBox.Show («Сохранение успешно завершено!»);
}
catch (Exception err)
{
MessageBox.Show (err.Message);
}
}
private void textBox2_TextChanged (object sender, System. EventArgs e)
{
}
}
}
———————————;
struct param
{
public int тип; //0 — текст 1 — число 2 — слово
public string неизменяемыйТекст;
public string[] варианты;
public double min;
public double max;
public double шаг;
}
param[] параметр=new param[100];
int числоПараметров=0;
Random ran=new Random ();
private void listBox1_SelectedIndexChanged (object sender, System. EventArgs e)//.
{
string ключ=this.listBox1.SelectedItem.ToString ();
this.числоПараметров=0;
System.Data.DataSet ds1=new System.Data.DataSet ();
System.Data.DataSet ds=new System.Data.DataSet ();
System.Data.OleDb.OleDbConnection aCon=new System.Data.OleDb.OleDbConnection («Provider=Microsoft.Jet.OLEDB.4.0;Data Source=GeneratorDB.mdb»);
System.Data.OleDb.OleDbCommand команда=new System.Data.OleDb.OleDbCommand (««, aCon);
System.Data.OleDb.OleDbDataAdapter adapter=new System.Data.OleDb.OleDbDataAdapter (команда);
try
{
aCon.Open ();
ds1.Tables.Clear ();
команда.CommandText="SELECT param_id, param_tip FROM Shablon WHERE id_shablon="+ключ;
adapter.SelectCommand=команда;
adapter.Fill (ds1);
for (int i=0;i
{
if (ds1.Tables[0].Rows[i][1].ToString ()=="0″)
{
ds.Tables.Clear ();
команда.CommandText="SELECT consttext FROM ParamText WHERE id="+ds1.Tables[0]. Rows[i][0].ToString ();
adapter.SelectCommand=команда;
adapter.Fill (ds);
this.параметр[this.числоПараметров].неизменяемыйТекст=ds.Tables[0].Rows[0][0].ToString ();