Проектирование и разработка системы электронного анкетирования

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

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

Выдержка из работы

Диплом

Тема проекта:

«Проектирование и разработка системы электронного анкетирования»

1. Информация о предприятии

НГУЭУ представляет собой крупное учебное, научное и научно-методическое образование, объединяющее все уровни подготовки и переподготовки специалистов: довузовской, вузовской и послевузовской.

Общее количество обучающихся в НГУЭУ -- более 13,5 тысяч студентов и аспирантов. Около 5 тысяч человек обучаются по очной форме в институтах Экономики, учета и статистики, Менеджмента и коммерции, Международных отношений и права и Прикладной информатики по 30 специальностям и направлениям высшего профессионального образования.

Примерно 7 тысяч студентов получают высшее образование по заочной форме обучения.

В филиалах НГУЭУ в Якутске и Улан-Удэ обучаются более полутора тысяч студентов.

Среднее профессиональное образование в Бизнес-колледже НГУЭУ получают более 1300 человек по 6 специальностям. Послевузовское образование в аспирантуре и докторантуре получают более 200 человек. В НГУЭУ развернута подготовка. Ежегодно по программам дополнительного образования для различных категорий слушателей обучаются до 4 тысяч человек.

Среди профессорско-преподавательского состава более 60% -- преподаватели с учеными степенями и званиями. Ученую степень доктора наук или звание профессора имеют более 10% преподавателей.

В 4-х учебных корпусах находятся:

более 760 компьютеров современной конфигурации;

18 компьютерных классов;

Большинство компьютеров имеют выход в интернет, являются членами домена nsaem. ru, и на них имеется доступ по локальной сети.

2. Менеджмент качества

Принципы менеджмента качества

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

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

а) Ориентация на потребителя

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

б) Лидерство руководителя

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

в) Вовлечение работников

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

г) Процессный подход

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

д) Системный подход к менеджменту

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

е) Постоянное улучшение

Постоянное улучшение деятельности организации в целом следует рассматривать как ее неиз­ менную цель.

ж) Принятие решений, основанное на фактах

Эффективные решения основываются на анализе данных и информации.

и) Взаимовыгодные отношения с поставщиками

Организация и ее поставщики взаимозависимы, и отношения взаимной выгоды повышают способность обеих сторон создавать ценности.

Эти восемь принципов менеджмента качества образуют основу для стандартов на системы менеджмента качества, входящих в семейство ИСО 9000.

2. 1 Обоснование необходимости систем менеджмента качества

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

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

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

2. 2 Требования к системам менеджмента качества и требования к продукции

Семейство стандартов ИСО 9000 проводит различие между требованиями к системам менеджмента качества и требованиями к продукции.

Требования к системам менеджмента качества установлены в ГОСТ Р ИСО 9001. Они являются общими и применимыми к организациям в любых секторах промышленности или экономики независимо от категории продукции. ГОСТ Р ИСО 9001 не устанавливает требований к продукции.

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

2. 3 Подход к системам менеджмента качества

Подход к разработке и внедрению системы менеджмента качества состоит из нескольких ступеней, включающих:

а) установление потребностей и ожиданий потребителей и других заинтересованных сторон;

б) разработку политики и целей организации в области качества;

в) установление процессов и ответственности, необходимых для достижения целей в области качества;

г) установление и определение необходимых ресурсов и обеспечение ими для достижения целей в области качества;

д) разработку методов для измерения результативности и эффективности каждого процесса; -

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

ж) определение средств, необходимых для предупреждения несоответствий и устранения их причин;

и) разработку и применение процесса для постоянного улучшения системы менеджмента качества.

Такой подход также применяется для поддержания в рабочем состоянии и улучшения имеющейся системы менеджмента качества.

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

2. 4 Процессный подход

Любая деятельность или комплекс деятельности, в которой используются ресурсы для преобразования входов в выходы, может рассматриваться как процесс.

Чтобы результативно функционировать, организации должны определять и управлять многочисленными взаимосвязанными и взаимодействующими процессами. Часто выход одного процесса образует непосредственно вход следующего. Систематическая идентификация и менеджмент применяемых организацией процессов и прежде всего обеспечения их взаимодействия могут считаться «процессным подходом».

Назначение настоящего стандарта -- побуждать принятие процессного подхода к менеджменту организации.

На рисунке 1 приведена основанная на процессном подходе система менеджмента качества, описанная в семействе стандартов ИСО 9000. Он показывает, что заинтересованные стороны играют существенную роль в предоставлении организации входных данных. Наблюдение за удовлетворенностью заинтересованных сторон требует оценки информации, касающейся восприятия заинтересованными сторонами степени выполнения их потребностей и ожиданий. Модель, приведенная на рисунке 1, не показывает процессы на детальном уровне.

Рисунок 1. Модель системы менеджмента качества, основанной на процессном подходе

Примечание -- Формулировки, данные в круглых скобках, не применимы к ГОСТ Р ИСО 9001.

2. 5 Политика и цели в области качества

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

Описание базы данных

1. Реляционная модель базы данных

1. Пользователи (Идентификатор пользователя, Имя_пользователя, Пароль, Дата_активности, Полное_имя, Права)

2. Тесты (Идентификатор_теста, Идентификатор_группы, Идентификатор_предмета, Идентификатор_преподавателя, Заголовок_теста, Комментарий_к_тесту)

Внешние ключи: Идентификатор_группы ссылается на Группы, Идентификатор_предмета ссылается на Предметы, Идентификатор_преподавателя ссылается на Преподователи

3. Вопросы (Идентификатор_вопроса, Идентификатор_теста, Текст_вопроса, Доступность_комментария)

Внешние ключи: Идентификатор_теста ссылается на Тесты

4. Ответы (Идентификатор_ответа, Идентификатор_вопроса, Идентификатор_типа_Ответа, Текст_ответа)

Внешние ключи: Идентификатор_вопроса ссылается на Вопросы

5. Результаты (Идентификатор_результата, Идентификатор_ответа, Идентификатор_сессии, Решение)

Внешние ключи: Идентификатор_ответа ссылается на Ответы, Идентификатор_сессии ссылается на Сессии

6. Сессии (Идентификатор_сессии, Дата_сессии)

7. Базовые_ответы (Идентификатор_базового_ответа, Базовый_ответ)

8. Наборы_базовых_ответов (Идентификатор_набора_базовых_ответов, Базовые_ответы)

Внешние ключи: Идентификатор_базового_ответа ссылается на Базовые_ответы

9. Преподаватели (Идентификатор_преподавателя, Имя_преподавателя, Фамилия_преподавателя, Отчество_преподавателя)

10. Предметы (Идентификатор_предмета, Название_предмета)

11. Группы (Идентификатор_группы, Номер_группы)

Реляционная модель базы данных

Рисунок 3. Реляционная модель БД в SQL Server 2005.

Создание ограничений на значения в столбцах

В SQL Server существует несколько способов задать ограничения на значения, существующие в столбцах таблицы:

DEFAULT (Значение по умолчанию)

CHECK (Ограничение проверки)

RULE (Правило)

Пользовательский тип данных

Реализация ограничений в базе данных «Tests»:

ограничение повторяющихся значений в поле «Login» таблицы «Users»

значение по умолчанию «False» в поле «CommentAvaible» таблицы «Questions» проверка при внесении изменений в таблицу «Users»

7. Объекты базы данных

Поставленные задачи решаются с помощью следующих объектов SQL Server 2005

7.1. Хранимые процедуры

7.1.1. Процедура аутентификации, возвращающая данные о пользователе при правильно переданном логине и пароле.

Листинг программного кода:

CREATE PROCEDURE [dbo]. Autentification]

@Login VARCHAR (30),

@Password VARCHAR (20),

@UserID INT OUTPUT,

@Rules INT OUTPUT,

@ActivityDate DATETIME OUTPUT

AS

DECLARE @Autentification INT

SELECT @Autentification = COUNT (Rules)

FROM Users

WHERE Login = @Login

AND Password = @Password

IF @Autentification = '1'

BEGIN

UPDATE Users

SET ActivityDate = GETDATE ()

WHERE Login = @Login

AND Password = @Password

SELECT @UserID = UserID,

@Rules = Rules,

@ActivityDate = ActivityDate

FROM Users

WHERE Login = @Login

AND Password = @Password

END

ELSE

SET @UserID = -1

SET @Rules = -1

SET @ActivityDate = -1

RETURN

Вызов процедуры:

Получить данные пользователя с логином «User» и паролем «Password».

EXEC dbo. Autentification «User», «Password»

7.1.2. Процедура, создающая в таблице «Sessions» запись с текущей датой и временем, и выдающая в качестве параметра идентификатор записи.

Листинг программного кода:

CREATE PROCEDURE [dbo]. MakeSessionDate]

@ID INT OUTPUT

AS

INSERT INTO Sessions (SessionDate)

VALUES (GETDATE ())

SELECT @ID = @@IDENTITY

Вызов процедуры:

Создать запись в таблице «Sessions» и выдать идентификатор записи.

exec MakeSessionDate

Формы для работы с системой электронного анкетирования

1. Форма «Аутентификация»

Рисунок 4. Форма «Аутентификация»

Форма «Аутентификация» отображается при загрузке модуля администрирования и служит для обмена с пользователем информацией при попытке доступа к ресурсам редактирования тестов и просмотра их результатов.

2. Форма «Администрирование»

Рисунок 5. Форма «Администрирование»

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

3. Форма «Выбор теста»

Рисунок 6. Форма «Выбор теста»

Форма «Выбор теста» отображается после загрузки клиентского модуля программы, и служит для выбора необходимого тестирования.

4. Форма «Опрос»

Рисунок 7. Форма «Опрос»

Форма «Опрос» служит интерфейсом прохождения тестирования. Пользователь может выбирать один или несколько вариантов ответов, перемещаться в различных направлениях по списку вопросов, а так же оставлять комментарии.

Приложение 1

Пример опроса для студентов

1. Преподаватель умеет общаться с аудиторией?

Да

Нет

Затрудняюсь ответить

2. Преподаватель ясно и доступно излагает учебный материал?

Да

Нет

Затрудняюсь ответить

3. Преподаватель использует при проведении своих учебных занятий современные технические средства?

Да

Нет

Затрудняюсь ответить

4. Преподаватель приводит на учебных занятиях примеры практического применения знаний по изучаемой дисциплине?

Да

Нет

Затрудняюсь ответить

5. Преподаватель доброжелателен к студентам?

Да

Нет

Затрудняюсь ответить

6. Преподаватель объективен при оценке знаний студентов?

Да

Нет

Затрудняюсь ответить

Приложение 2

Листинг программного кода

Файл MainCode. cs

using System;

using System. Configuration;

using System. Data;

using System. Data. SqlClient;

using System. Data. Common;

using System. Windows. Forms;

namespace TestsNameSpace

{

class MainCode

{

public static void Main ()

{

TestWindow MainWindow = new TestWindow ();

// Загрузка элементов comboBox1

MainWindow. DrawTestMenu (false);

Application. Run (MainWindow);

}

}

}

Файл Tests. cs

using System;

using System. Configuration;

using System. Collections. Generic;

namespace TestsNameSpace

{

//

// Работа с данными о тестах

//

class Tests

{

static List< Test> TestsList = new List< Test>();

// Возврат количества тестов в списке

static public int Length

{

get

{

return TestsList. Count;

}

}

// Данные о тесте

public struct Test

{

public Test (int ID, string Title, string Comment)

{

this. ID = ID;

this. Title = Title;

this. Comment = Comment;

}

public int ID;

public string Title;

public string Comment;

}

// Воврат данных о тесте по индексу, или null

public static Test? Get (int index)

{

return (ok (index)? TestsList[index]: (Test?)null);

}

// Добавляем в массив данные о тестах

public static void Put (Test NewTest)

{

TestsList. Add (NewTest);

}

// Проверка на корректность индекса запрашиваемого элемента

private static bool ok (int index)

{

if (index >= 0 & index < TestsList. Count) return true;

return false;

}

}

}

Файл Questions. cs

using System;

using System. Configuration;

using System. Collections. Generic;

using System. Data;

using System. Data. SqlClient;

using System. Data. Common;

using System. Windows. Forms;

namespace TestsNameSpace

{

class Questions

{

static List< Question> QuestionsList = new List< Question>();

public static void Clear ()

{

QuestionsList. Clear ();

}

public struct Question

{

public int ID;

public string Text;

public List< Answer> Answers;

}

public struct Answer

{

public Answer (int ID, string Text)

{

this. ID = ID;

this. Text = Text;

this. Checked = false;

}

public int ID;

public bool Checked;

public string Text;

}

public static int AnswersLength (int CurrentQuestionNumber)

{

Question CurrentQuestion = QuestionsList[CurrentQuestionNumber — 1];

return CurrentQuestion. Answers. Count;

}

static public int Length

{

get

{

return QuestionsList. Count;

}

}

// Возвращаем все данные о тесте по индексу

public static Question? Get (int index)

{

return (ok (index-1)? QuestionsList[index-1]: (Question?)null);

}

//

public static void Put (Question NewQuestion)

{

QuestionsList. Add (NewQuestion);

}

public static void PutAnswers (int QuestionID, Answer NewAnswer)

{

for (int i = 0; i < Questions. Length; i++)

{

try

{

Question CurrentQuestion = QuestionsList[i];

if (QuestionID == CurrentQuestion. ID)

{

CurrentQuestion. Answers. Add (NewAnswer);

break;

}

}

catch

{

MessageBox. Show («Загрузка вариантов ответов не завершена»,

«Ошибка»);

}

}

}

public static void PutCheckedAnswers (int QuestionNum,

int AnswerID, bool Decision)

{

List< Answer> answers = QuestionsList[QuestionNum]. Answers;

for (int i = 0; i < answers. Count; i++)

{

Answer temp = answers[i];

if (temp. ID == AnswerID)

{

temp. Checked = Decision;

answers[i] = temp;

}

}

}

// Проверка на корректность индекса запрашиваемого элемента

private static bool ok (int index)

{

return (index >= 0 & index < QuestionsList. Count);

}

}

}

Файл TestWindow. cs

using System;

using System. Text;

using System. Windows. Forms;

using System. Collections. Generic;

namespace TestsNameSpace

{

public partial class TestWindow: Form

{

int CurrentTestID;

int ActualQuestion = 1;

// Статус отсутствия вариантов ответов у текущего вопроса

bool isNoAnswers = false;

SQLExecutions MakeSQLExecution = new SQLExecutions ();

public TestWindow ()

{

InitializeMenuComponent ();

MakeSQLExecution. TestsExecute ();

}

//

// Запусктеста, номер содержится в int CurrentTestID

//

public void StartTest ()

{

// Проверка на корректный выбор пользователем теста

if (CurrentTestID ≠ 0)

{

MakeSQLExecution. QuestionsExecute (CurrentTestID);

// Проверка на наличие вопросов в тесте

if (Questions. Length > 0)

{

// Прорисовка интерфейса теста

InitializeTestComponent ();

// И загрузка первого вопроса

QuestionExecute (1);

}

else MessageBox. Show («Выбранный опрос пуст», «Ошибка»);

}

else MessageBox. Show («Выберите опрос для прохождения», «Ошибка»);

}

//

// Прорисовка вопроса по его номеру

//

private void QuestionExecute (int CurrentQuestionNumber)

{

ActualQuestion = CurrentQuestionNumber;

Questions. Question? CurrentQuestion =

Questions. Get (CurrentQuestionNumber);

if (CurrentQuestion ≠ null)

{

// Блокировка кнопок для «крайних» вопросов

if (CurrentQuestionNumber == 1)

this. button2. Enabled = false;

else this. button2. Enabled = true;

// Вывод номера текущего вопроса

this. label2. Text = «Текущий вопрос: «+

(CurrentQuestionNumber) + «/» + Questions. Length;

// Вывод текста вопроса

this. label3. Text = Convert. ToString (CurrentQuestion. Value. Text);

// Проверка на наличие вариантов ответов

if (Questions. AnswersLength (CurrentQuestionNumber) ≠ 0)

{

// Выбираем лист с вариантами ответов

List< Questions. Answer> CurrentAnswers =

CurrentQuestion. Value. Answers;

// И выводим их

for (int i = 0; i < CurrentAnswers. Count; i++)

{

RadioButton NewAnswer = new RadioButton ();

NewAnswer. Name = «NewAnswer»;

NewAnswer. Tag = CurrentAnswers[i]. ID;

NewAnswer. AutoSize = false;

NewAnswer. MaximumSize = new System. Drawing. Size (400, 30);

NewAnswer. BackColor = System. Drawing. Color. White;

NewAnswer. Width = 235;

NewAnswer. Height = 28;

NewAnswer. Left = 10;

NewAnswer. Top = (i * 30) + 63;

NewAnswer. Text = CurrentAnswers[i]. Text;

this. Controls. Add (NewAnswer);

}

}

else

{

isNoAnswers = true;

this. Controls. Add (NoAnswers);

}

}

else MessageBox. Show («Невозможно открыть тест №» +

CurrentQuestionNumber, «Ошибка»);

}

// Запись выбора пользователя

private void PutCheckedAnswers ()

{

System. Windows. Forms. Control[] RecordingArray =

this. Controls. Find («NewAnswer», false);

foreach (RadioButton i in RecordingArray)

{

// Поиск выделенного элемента среди массива кнопок

if (i. Checked)

{

Questions. PutCheckedAnswers ((ActualQuestion — 1),

Convert. ToInt32(i. Tag), true);

}

else Questions. PutCheckedAnswers ((ActualQuestion — 1),

Convert. ToInt32(i. Tag), false);

}

}

// Проверка, выбрал ли пользователь один из вариантов ответов

private bool CheckAnswersButtons ()

{

// Ищем различные кнопки

System. Windows. Forms. Control[] CheckingArray =

this. Controls. Find («NewAnswer», false);

foreach (RadioButton i in CheckingArray)

{

// Поиск выделенного элемента среди массива кнопок

if (i. Checked)

{

return true;

}

}

MessageBox. Show («Вы не выбрали ответ (ы)»);

return false;

}

// Удаление старых кнопок

private void RemoveAnswersButtons ()

{

System. Windows. Forms. Control[] RemovingArray =

this. Controls. Find («NewAnswer», false);

foreach (System. Windows. Forms. Control ii in RemovingArray)

{

this. Controls. Remove (ii);

}

}

public void DrawTestMenu (bool result)

{

InitializeMenuComponent ();

if (result)

{

if (MakeSQLExecution. ResultsEntry ())

{

StatusLabel («Результаты опроса записаны успешно»);

}

else

{

DialogResult ResultsEntryError = MessageBox. Show (

«Во время записи результатов опроса произошла ошибка.» +

" Повторить запись?", «Предупреждение»,

MessageBoxButtons. YesNo);

if (ResultsEntryError == DialogResult. Yes)

{

DrawTestMenu (true);

}

}

}

Questions. Clear ();

for (int i = 0; i < Tests. Length; i++)

{

Tests. Test? test = Tests. Get (i);

if (test ≠ null)

this. comboBox1. Items. AddRange (new object[] { test. Value. Title });

}

this. CurrentTestID = 0;

this. label5. Text = «Загружено тестов: «+ Tests. Length;

}

//

// Обработка кнопки «Начать тестирование»

//

private void button1_Click (object sender, EventArgs e)

{

StartTest ();

}

//

// Обработка кнопки «< <»

//

private void button2_Click (object sender, EventArgs e)

{

if (isNoAnswers == false)

{

// проверка выбора пользователем ответа

RemoveAnswersButtons ();

QuestionExecute (ActualQuestion — 1);

}

else

{

// удаление лейбла

this. Controls. Remove (NoAnswers);

isNoAnswers = false;

// Загрузка предыдущего вопроса

QuestionExecute (ActualQuestion — 1);

}

}

//

// Обработка кнопки «> >»

//

private void button3_Click (object sender, EventArgs e)

{

// Если у нас есть варианты ответов

if (isNoAnswers == false)

{

// проверка выбора пользователем ответа

if (CheckAnswersButtons ())

{

if ((ActualQuestion + 1) > Questions. Length)

{

DialogResult EndOfTesting = MessageBox. Show (

«Окончить анкетирование?», «Предупреждение»,

MessageBoxButtons. YesNo);

if (EndOfTesting == DialogResult. Yes)

{

PutCheckedAnswers ();

DrawTestMenu (true);

}

}

else

{

PutCheckedAnswers ();

RemoveAnswersButtons ();

QuestionExecute (ActualQuestion + 1);

}

}

}

else

{

// удаление лейбла

this. Controls. Remove (NoAnswers);

isNoAnswers = false;

// Загрузка следующего вопроса

QuestionExecute (ActualQuestion + 1);

}

}

//

// Обработка выбора теста в comboBox

//

private void comboBox1_SelectedIndexChanged (object sender, EventArgs e)

{

Tests. Test? test =

Tests. Get (comboBox1. SelectedIndex);

if (test ≠ null)

{

this. label1. Text = test. Value. Comment;

this. CurrentTestID = test. Value. ID;

}

}

//

// Обработка ссылки «Окончить тестирование»

//

private void linkLabel1_LinkClicked (object sender,

LinkLabelLinkClickedEventArgs e)

{

DrawTestMenu (false);

}

}

}

Файл SQLSessions. cs

using System;

using System. Configuration;

using System. Collections. Generic;

using System. Data;

using System. Data. SqlClient;

using System. Data. Common;

using System. Windows. Forms;

namespace TestsNameSpace

{

class SQLExecutions

{

AppSettingsReader SettingsReader = new AppSettingsReader ();

Tests TestsDataArray = new Tests ();

// Извлечение данных о тестах и загрузка их в массив

public void TestsExecute ()

{

Tests. Test NewTest = new Tests. Test ();

SqlConnection conn = new SqlConnection (Convert. ToString (

SettingsReader. GetValue («ConnectionString», typeof (string))));

conn. Open ();

SqlCommand commands = conn. CreateCommand ();

// Извлечение данных о тестах

commands. CommandText = «SELECT TestID, TestTitle, TestComment «+

«FROM Tests»;

// Загрузка данных в массив

SqlDataReader datareader = commands. ExecuteReader ();

while (datareader. Read ())

{

NewTest. ID = datareader. GetInt32(0);

NewTest. Title = datareader. GetString (1);

try

{

NewTest. Comment = datareader. GetString (2);

}

catch

{

NewTest. Comment = «< Описание отсутствует> «;

}

Tests. Put (NewTest);

}

datareader. Close ();

}

public void QuestionsExecute (int CurrentTestID)

{

Questions. Question NewQuestion = new Questions. Question ();

SqlConnection conn = new SqlConnection (Convert. ToString (

SettingsReader. GetValue («ConnectionString», typeof (string))));

conn. Open ();

SqlCommand commands = conn. CreateCommand ();

// Извлечение данных о воспросах

commands. CommandText = «SELECT QuestionID, QuestionText «+

«FROM Questions «+

«WHERE TestID = «+ CurrentTestID;

SqlDataReader questionsreader = commands. ExecuteReader ();

// Загрузка данных в массив

while (questionsreader. Read ())

{

NewQuestion. ID = questionsreader. GetInt32(0);

NewQuestion. Text = questionsreader. GetString (1);

NewQuestion. Answers = new List< Questions. Answer>();

Questions. Put (NewQuestion);

}

questionsreader. Close ();

//

// Извлечение текстов вариантов ответов

//

commands. CommandText = «SELECT Answers. QuestionID, AnswerID, AnswerText «+

«FROM Answers, Questions «+

«WHERE Answers. QuestionID = Questions. QuestionID «+

«AND Questions. TestID = «+ CurrentTestID;

DbDataReader answersreader =

commands. ExecuteReader (CommandBehavior. CloseConnection);

// Загрузка данных в массив

Questions. Answer NewAnswer = new Questions. Answer ();

while (answersreader. Read ())

{

NewAnswer. ID = Convert. ToInt32(answersreader["AnswerID"]);

NewAnswer. Text = Convert. ToString (answersreader["AnswerText"]);

Questions. PutAnswers (

Convert. ToInt32(answersreader["QuestionID"]), NewAnswer);

}

answersreader. Close ();

}

public bool ResultsEntry ()

{

//Questions. Question NewQuestion = new Questions. Question ();

string connection = Convert. ToString (SettingsReader. GetValue («ConnectionString»,

typeof (string)));

SqlConnection conn = new SqlConnection (connection);

SqlCommand commands = conn. CreateCommand ();

try

{

commands. CommandText = «DECLARE @AnswerID INT, «+

«@SessionID INT, «+

«@Decision BIT «+

«BEGIN TRANSACTION «+

«SAVE TRANSACTION AddingResult «+

«EXEC MakeSessionDate @SessionID OUTPUT «;

for (int i = 1; i <= Questions. Length; i++)

{

Questions. Question? CurrentQuestion = Questions. Get (i);

if (CurrentQuestion ≠ null)

{

List< Questions. Answer> CurrentAnswersList = CurrentQuestion. Value. Answers;

for (int ii = 0; ii < Questions. AnswersLength (i); ii++)

{

Questions. Answer CurrentAnswer = CurrentAnswersList[ii];

commands. CommandText +=

«INSERT INTO Results (AnswerID, SessionID, Decision) «+

«VALUES («+ CurrentAnswer. ID + «, @SessionID, '» +

Convert. ToString (CurrentAnswer. Checked) + «') «;

}

}

}

commands. CommandText += «IF @@ERROR < > 0 ROLLBACK TRANSACTION AddingResult «+

«COMMIT TRANSACTION «+

«SELECT SessionDate «+

" FROM Sessions «+

" WHERE SessionID = @SessionID";

}

catch

{

MessageBox. Show («Формирование списка ответов не завершено», «Ошибка»);

}

try

{

conn. Open ();

SqlDataReader sessionreader = commands. ExecuteReader ();

while (sessionreader. Read ())

return true;

}

catch

{

return false;

}

return false;

}

}

}

Приложение 3

Сводная таблица ошибок

Таблица

Номер

Код ошибки

Модуль вызова

Текст

Причина

1

101

TestWindow. cs

Вы не выбрали ответ (ы)

Не выбран не один из вариантов ответов, или выбранное количество ответов меньше минимально необходимого

2

102

TestWindow. cs

Невозможно открыть тест № N

Запрос к базе данных возвратил отрицательный результат — следствие удаления теста

3

103

TestWindow. cs

Не выбран опрос для прохождения

В выпадающем меню не был выбран опрос

4

104

TestWindow. cs

Выбранный опрос пуст

Опрос создан, но вопросы и варианты ответов до сих пор не добавлены

5

201

SQLConnections. cs

Формирование списка ответов не завершено

Нарушена целостность базы данных тестирования; базаданных тестирования недоступна

6

301

Questions. cs

Загрузка вариантов ответов не завершена

При обращении к списку вопросов был использован некорректный индекс варианта ответа

Этапы разработки и внедрения

менеджмент качество электронный анкетирование

Таблица

№ этапа

Название этапа

Длительность

1

Постановка целей и задач

1 сутки

2

Проектирование

5 суток

3

Разработка

25 суток

4

Предварительное тестирование

10 суток

5

Внедрение

2 суток

6

Окончательное тестирование

5 суток

7

Обучение персонала

5 суток

ПоказатьСвернуть
Заполнить форму текущей работой