Разработка автоматизированной системы тестирования знаний по дисциплине "Русский язык"

Функциональная модель системы. Проектирование схемы базы данных. Проектирование архитектуры системы. Принцип технологии клиент-сервер. Построение схемы ресурсов. Выбор программных средств. Разработка базы данных с использованием Microsoft SQL Server.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 30.03.2015
Размер файла 1,1 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

В качестве параметра метод принимает строку-запрос, в качестве возвращаемого значения имеет тип «DataTable» ? таблицу данных.

public static DataTable GetSQLData(string query)

{

DataSet ds = new DataSet();

SqlConnection myConnection = new SqlConnection(Config.ConnectionString);

try

{

myConnection.Open();

}

catch (Exception e1)

{

MessageBox.Show(e1.ToString());

}

SqlCommand comm = new SqlCommand(query);

comm.CommandType = System.Data.CommandType.Text;

comm.Connection = myConnection;

SqlDataAdapter dataAdapter = new SqlDataAdapter(comm);

try

{

ds = new DataSet();

dataAdapter.Fill(ds);

}

catch

{

MessageBox.Show("Error");

}

try

{

myConnection.Close();

}

catch (Exception e3)

{

MessageBox.Show(e3.ToString());

}

return ds.Tables[0];

}

Для передачи запроса SQL серверу без возврата результата (запросы на вставку, изменение и удаление) был реализован метод «SetSQLData», представленный ниже. В качестве параметра метод принимает строку-запрос и не имеет возвращаемого типа значения.

public static void SetSQLData(string query)

{

SqlConnection myConnection = new SqlConnection(Config.ConnectionString);

try

{

myConnection.Open();

}

catch (Exception e1)

{

MessageBox.Show(e1.ToString());

}

SqlCommand comm = new SqlCommand(query);

comm.CommandType = System.Data.CommandType.Text;

comm.Connection = myConnection;

comm.ExecuteNonQuery();

try

{

myConnection.Close();

}

catch (Exception e3)

{

MessageBox.Show(e3.ToString());

return;

}

}

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

class Config

{

public static string ConnectionString = GetParam("ConnectionStringSql");

public string Connection

{

get

{

return ConnectionString;

}

set

{

ConnectionString = value;

}

}

public static string GetPathTo(string ParamName)

{

return Application.StartupPath +

ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).AppSettings.Settings[ParamName].Value;

}

}

}

Переменная «Connection» этого класса является строкой для соединения с сервером. При запуске она инициализируется из файла настроек при помощи метода «GetParam», представленного ниже.

public static string GetParam(string ParamName)

{

return ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).AppSettings.Settings[ParamName].Value;

}

«App.config» - XML-файл, содержаний переменные и их явно или неявно указываемые значения. Текст сформированного xml-документа пользовательских настроек приведен ниже.

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

<connectionStrings>

<clear />

<add name="Тестирование знаний"

connectionString="Valid Connection String;" />

</connectionStrings>

<appSettings>

<add key="ConnectionStringSql" value="server=localhost; Trusted_Connection=yes; database=Тест; Connection timeout=10"/>

</appSettings>

</configuration>

Обработчики различных событий элемента создаются на вкладке «Events». К примеру, событие «OnClick» - «нажатие на кнопку». После двойного клика на необходимое событие откроется код формы с объявленным обработчиком, в который необходимо добавить код для обработки возникающего события.

Добавим в обработчик события «OnClick» следующий код для вызова другой формы приложения:

private void button1_Click(object sender, EventArgs e)

{

NewTest obj = new NewTest();

obj.ShowDialog();

}

Подобным образом мы будем вызывать все формы приложения. Для считывания выборки в таблицу нашей формы добавим в ее код метод «Load_Tables».

private void Load_Tables(string query)

{

listView1.Items.Clear();

DataTable dt = Connection.GetSQLData(query);

foreach (DataRow row in dt.Rows)

{

DateTime d = new DateTime();

ListViewItem item = new ListViewItem(row[0].ToString());

for (int i = 1; i < dt.Columns.Count; i++)

{

item.SubItems.Add(row[i].ToString());

}

listView1.Items.Add(item);

}

}

Строка «query» в данном методе это запрос на выборку к базе данных. Теперь можно приступать к проектированию и реализации других форм приложения.

Добавить форму в текущий проект можно из контекстного окна «Solution Explorer», или через меню «Project»-«Add Windows Form». В появившемся окне вводим имя создаваемой формы и жмем «Add».

Начнем с формы авторизации преподавателя и регистрации студента для тестирования («OpenForm»). Используя элементы «GroupBox», «Label», «RadioButton», «TextBox» и «Button» придадим ей следующий вид.

Задачи для этих элементов на данной форме будут следующими:

1. GroupBox - группировка схожих полей для ввода или выбора информации;

2. TextBox - поле для ручного ввода информации, которая после будет использоваться в запросах;

3. Label - подсказка пользователю о значении того или иного поля а также данных, которые необходимо ввести;

4. Button - подтверждение действия пользователем, считываемое системой.

В случае выбора того или иного элемента «RadioButton» («Ученик» или «Преподаватель»), будут разблокированы поля для ввода данных студента или преподавателя соответственно. По нажатию на кнопку «Начать работу» осуществляется авторизация.

Следующая форма приложения - форма добавления и изменения данных теста.

Данные из полей «Наименование», «Количество вопросов» и «Преподаватель» считываются и, при помощи запроса на вставку в методе «SetSQLData» класса «Connection» отправляются SQL-серверу.

В случае успеха или неудачи пользователю будет выведено соответствующее сообщение.

При загрузке формы наши выпадающий список «Преподаватель» (элемент «ComboBox») должен быть проинициализирован и заполнен некоторым набором значений, которые сможет выбирать пользователь. Для этого добавим в код формы метод «LoadComboboxes», код которого приведен ниже.

private void LoadComboboxes()

{

string query;

try

{

query = "Select Преподаватель from Преподаватели";

DataTable dt = Connection.GetSQLData(query);

comboBox1.DataSource = dt;

comboBox1.DisplayMember = "Преподаватель";

}

catch

{

MessageBox.Show("Ошибка загрузки справочника <Преподаватели>");

}

}

Следующая форма приложения - отчет «Результаты тестирования». Добавляем форму, как было описано ранее, размещаем на форме элемент «ListView» и придаем форме следующий вид.

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

private void Load_Tables(string query)

{

listView1.Items.Clear();

DataTable dt = Connection.GetSQLData(query);

foreach (DataRow row in dt.Rows)

{

DateTime d = new DateTime();

ListViewItem item = new ListViewItem(row[0].ToString());

for (int i = 1; i < dt.Columns.Count; i++)

{

if (i == dt.Columns.Count - 1)

{

d = Convert.ToDateTime(row[i]);

item.SubItems.Add(d.ToShortDateString());

}

else

{

item.SubItems.Add(row[i].ToString());

}

}

listView1.Items.Add(item);

}

}

Следующая форма - форма тестирования знаний. Элемент «DateTimePicker» размещен на форме для возможности точного слежения за временем начала и окончания сдачи теста. Данный элемент скрыт от пользователя и не отображается.

Для работы изменения вопросов и ответов теста добавим еще одну форму и придадим ей следующий вид.

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

3.5 Руководство пользователя

3.5.1 Режим «Ученик»

Для запуска приложения необходимо дважды кликнуть на файл «Тест.exe».

После запуска откроется форма для авторизации и регистрации учащегося.

Необходимо выбрать режим «Ученик» и заполнить предложенные для ввода данных поля («Ученик» и «Класс»), после чего нажать кнопку «Начать работу».

После этого откроется главная форма приложения.

Для начала тестирования необходимо выбрать тест в таблице и нажать кнопку «Начать тестирование».

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

После завершения тестирования система выдаст пользователю сообщение о результате тестирования и внесет запись в базу данных.

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

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

3.5.2 Режим «Преподаватель»

Для запуска приложения необходимо дважды кликнуть на файл «Тест.exe».

После запуска откроется форма для авторизации преподавателя и регистрации учащегося.

Необходимо выбрать режим «Преподаватель» и заполнить предложенные для ввода данных поля («Логин» и «Пароль»), после чего нажать кнопку «Начать работу».

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

После этого откроется главная форма приложения.

Для добавления теста необходимо нажать кнопку «Добавить тест».

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

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

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

После нажатия кнопки откроется форма для изменения вопросов и вариантов ответа выбранного теста.

Для добавления вопроса нужно заполнить предложенные поля и нажать кнопку «Принять изменения».

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

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

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

ЗАКЛЮЧЕНИЕ

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

В результате выполнения дипломной работы была разработана автоматизированная система тестирования знаний по дисциплине «Русский язык», включающая в себя следующие модули:

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

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

Работа системы основывается на данных, хранящихся в таблицах реляционной СУБД Microsoft SQL Server 2008, которая используется в качестве сервера базы данных программной системы.

список использованных источников

1. Аванесов, В.С. Теория и практика педагогических измерений [эл. рес.]: Трудность теста и тестовых заданий / В.С. Аванесов. - Режим доступа: http://testolog.narod.ru, свободный.

2. Гвоздева В.А. Основы построения автоматизированных информационных систем: учеб. - М.: ИНФРА-М; ФОРУМ, 2008. - 320 с.

3. Гагарина Л.Г. Разработка и эксплуатация АИС: учеб. - ИНФРА-М, 2011. - 384 с.

4. Разработка Windows-приложений на Microsoft Visual Basic .NET и Microsoft Visual C# .NET. Учебный курс MCAD MCSD: официальное пособие Microsoft. - Москва: Русская редакция, 2011. - 478 с.

5. Разработка Windows-приложений на основе Visual C# : учеб. - Москва: Electronic pub, 2009. - 424 с.

6. Дэвид Сеппа ? Microsoft ADO.NET: учеб. - Москва: Русская редакция, 2013. - 640с.

7. Доступ к данным из приложений (Microsoft ADO.NET, Microsoft SQL Server): Тематический сборник материалов MSDN Library и MSDN Magazine - Москва: Русская редакция, 2013. - 400 с.

8. Мартин, М. Принципы, паттерны и методики гибкой разработки на языке C#: учеб. - Москва: Символ-Плюс, 2011. - 768 с.

9. Фленов, М. Библия C#: учеб. - БХВ-Петербург, 2011. - 560 с.

ПРИЛОЖЕНИЕ ЛИСТИНГ КОДА

Форма MainForm.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Windows.Forms;

namespace Тест

{

public partial class MainForm : Form

{

public MainForm()

{

InitializeComponent();

}

public static string test_id, tematics, quest_count;

private void Load_Tables(string query)

{

listView1.Items.Clear();

DataTable dt = Connection.GetSqlData(query);

foreach (DataRow row in dt.Rows)

{

ListViewItem item = new ListViewItem(row[0].ToString());

for (int i = 1; i < dt.Columns.Count; i++)

{

item.SubItems.Add(row[i].ToString());

}

listView1.Items.Add(item);

}

}

private void MainForm_Load(object sender, EventArgs e)

{

OpenForm obj = new OpenForm();

obj.ShowDialog();

this.Text = "Система тестирования знаний по дисциплине <Русский язык>";

string sql = "SELECT Тесты.КодПреподавателя, Тесты.КодТеста, Тесты.Тематика, Тесты.Вопросов, Преподаватели.Преподаватель FROM Тесты INNER JOIN Преподаватели ON Тесты.КодПреподавателя = Преподаватели.КодПреподавателя";

Load_Tables(sql);

if (OpenForm.teacher == "")

{

button1.Enabled = false;

button2.Enabled = false;

button3.Enabled = false;

}

else

{

button1.Enabled = true;

button2.Enabled = true;

button3.Enabled = true;

}

}

private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)

{

if(e.IsSelected)

{

test_id = listView1.Items[e.ItemIndex].SubItems[1].Text;

tematics = listView1.Items[e.ItemIndex].SubItems[2].Text;

quest_count = listView1.Items[e.ItemIndex].SubItems[3].Text;

}

}

private void button7_Click(object sender, EventArgs e)

{

TestForm obj = new TestForm();

obj.ShowDialog();

}

private void button5_Click(object sender, EventArgs e)

{

ResultForm obj = new ResultForm();

obj.ShowDialog();

}

private void button1_Click(object sender, EventArgs e)

{

NewTest obj = new NewTest();

obj.ShowDialog();

}

private void button2_Click(object sender, EventArgs e)

{

NewTest obj = new NewTest();

NewTest.Edit = true;

obj.ShowDialog();

}

private void button3_Click(object sender, EventArgs e)

{

EditQuestions obj = new EditQuestions();

obj.ShowDialog();

}

}

}

Форма ResultForm.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace Тест

{

public partial class ResultForm : Form

{

public ResultForm()

{

InitializeComponent();

}

private void Load_Tables(string query)

{

listView1.Items.Clear();

DataTable dt = Connection.GetSqlData(query);

foreach (DataRow row in dt.Rows)

{

ListViewItem item = new ListViewItem(row[0].ToString());

for (int i = 1; i < dt.Columns.Count; i++)

{

item.SubItems.Add(row[i].ToString());

}

listView1.Items.Add(item);

}

}

private void ResultForm_Load(object sender, EventArgs e)

{

string sql = "SELECT Тесты.КодТеста, Регистрации.КодРегистрации, Тестирование.КодТестирования, Тесты.Тематика, Регистрации.Студент, Регистрации.Группа, Тесты.Вопросов, Тестирование.ВерныхОтветов, Тестирование.ОценкаСистемы, Тестирование.Начато, Тестирование.Окончено FROM Тесты INNER JOIN Тестирование ON Тесты.КодТеста = Тестирование.КодТеста INNER JOIN Регистрации ON Тестирование.КодРегистрации = Регистрации.КодРегистрации INNER JOIN Преподаватели ON Тесты.КодПреподавателя = Преподаватели.КодПреподавателя";

Load_Tables(sql);

}

}

}

Форма TestForm.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace Тест

{

public partial class TestForm : Form

{

public TestForm()

{

InitializeComponent();

}

public static string[] quest = new string[Int32.Parse(MainForm.quest_count)];

public static int cursor = 0;

public static int right_answers = 0;

public static string right_answer;

public static string user_answer;

public static DateTime start;

public static int progress = 1;

private void checkBox1_CheckedChanged(object sender, EventArgs e)

{

if(checkBox1.Checked)

{

user_answer = checkBox1.Text;

}

}

private void checkBox2_CheckedChanged(object sender, EventArgs e)

{

if (checkBox2.Checked)

{

user_answer = checkBox2.Text;

}

}

private void checkBox3_CheckedChanged(object sender, EventArgs e)

{

if (checkBox3.Checked)

{

user_answer = checkBox3.Text;

}

}

private void checkBox4_CheckedChanged(object sender, EventArgs e)

{

if (checkBox4.Checked)

{

user_answer = checkBox4.Text;

}

}

public void VipeCheckbox()

{

checkBox1.Checked = false;

checkBox2.Checked = false;

checkBox3.Checked = false;

checkBox4.Checked = false;

}

public void CheckAnswer()

{

if(right_answer == user_answer)

{

right_answers= right_answers+1;

}

cursor++;

progressBar1.Value++;

StartTest(cursor);

}

public void StartTest(int cursor)

{

this.Text = "Тестирование по теме '"+MainForm.tematics+"'. Вопрос №"+(cursor+1)+"";

if (cursor < Int32.Parse(MainForm.quest_count))

{

string sql;

string[] answers = new string[4];

int quest_id = 0; int id = 0;

label1.Text = quest[cursor];

sql = "Select КодВопроса from Вопросы Where Вопрос='" + quest[cursor] + "' and КодТеста=" + Int32.Parse(MainForm.test_id) + "";

DataTable dt = Connection.GetSqlData(sql);

foreach (DataRow row in dt.Rows)

{

quest_id = Convert.ToInt32(row["КодВопроса"]);

}

sql = "Select Ответ from Ответы Where КодВопроса=" + quest_id + "";

DataTable dc = Connection.GetSqlData(sql);

foreach (DataRow row in dc.Rows)

{

answers[id] = row["Ответ"].ToString();

id++;

}

checkBox1.Text = answers[0];

checkBox2.Text = answers[1];

checkBox3.Text = answers[2];

checkBox4.Text = answers[3];

sql = "Select Ответ from Ответы Where КодВопроса=" + quest_id + " and Правильный='Да'";

DataTable ans = Connection.GetSqlData(sql);

foreach(DataRow row in ans.Rows)

{

right_answer = row["Ответ"].ToString();

}

}

else

{

double res = Convert.ToDouble(right_answers) / Convert.ToDouble(MainForm.quest_count) * 100;

int reg_id = 0;

string sql = "Select КодРегистрации as id from Регистрации";

DataTable dt = Connection.GetSqlData(sql);

foreach(DataRow row in dt.Rows)

{

reg_id = Convert.ToInt32(row["id"]);

}

sql = "Insert into Тестирование(КодРегистрации, КодТеста, Начато, Окончено, ВерныхОтветов, ОценкаСистемы) Values("+reg_id+", "+Int32.Parse(MainForm.test_id)+", '"+start.ToString()+"', '"+dateTimePicker1.Value.ToString()+"', "+right_answers+", '"+res.ToString()+"')";

Connection.SetSqlData(sql);

MessageBox.Show("Правильных ответов: "+right_answers.ToString()+", вопросов в тесте: "+MainForm.quest_count+"\n\n\tВаш результат: " + res.ToString() + "%.");

this.Close();

}

}

private void TestForm_Load(object sender, EventArgs e)

{

progressBar1.Minimum = 0;

progressBar1.Maximum = Int32.Parse(MainForm.quest_count);

string sql = "Select Вопрос from Вопросы Where КодТеста="+Int32.Parse(MainForm.test_id)+"";

DataTable dt = Connection.GetSqlData(sql);

int i = 0;

foreach(DataRow row in dt.Rows)

{

quest[i] = row["Вопрос"].ToString();

i++;

}

sql = "Insert into Регистрации(Студент, Группа, Дата) Values('" + OpenForm.name + "', '" + OpenForm.group + "', '" + dateTimePicker1.Value.ToString() + "')";

start = dateTimePicker1.Value;

Connection.SetSqlData(sql);

StartTest(cursor);

}

private void button1_Click(object sender, EventArgs e)

{

VipeCheckbox();

CheckAnswer();

}

}

}

Форма OpenForm.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace Тест

{

public partial class OpenForm : Form

{

public OpenForm()

{

InitializeComponent();

}

public static string name, group, teacher;

private void radioButton1_CheckedChanged(object sender, EventArgs e)

{

if(radioButton1.Checked == true)

{

groupBox2.Enabled = false;

groupBox3.Enabled = true;

}

else

{

groupBox3.Enabled = false;

groupBox2.Enabled = true;

}

}

private void button1_Click(object sender, EventArgs e)

{

if (radioButton2.Checked == true)

{

string sql = "Select Преподаватель from Преподаватели Where Логин='" + textBox1.Text + "' and Пароль='" + textBox1.Text + "'";

DataTable dt = Connection.GetSqlData(sql);

if(dt.Rows.Count > 0)

{

foreach(DataRow row in dt.Rows)

{

teacher = row["Преподаватель"].ToString();

}

MessageBox.Show("Вы успешно вошли в систему, <" + teacher + ">");

}

}

if (radioButton1.Checked == true)

{

name = textBox4.Text;

group = textBox3.Text;

}

this.Close();

}

private void OpenForm_Load(object sender, EventArgs e)

{

this.Text = "Система тестирования знаний";

}

private void OpenForm_FormClosing(object sender, FormClosingEventArgs e)

{

if(radioButton1.Checked == true)

{

name = textBox4.Text;

group = textBox3.Text;

}

}

}

}

Форма NewTestForm.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace Тест

{

public partial class NewTest : Form

{

public static bool Edit = false;

public NewTest()

{

InitializeComponent();

}

private void NewTest_Load(object sender, EventArgs e)

{

string sql = "Select Преподаватель from Преподаватели";

DataTable dt = Connection.GetSqlData(sql);

comboBox1.DataSource = dt;

comboBox1.DisplayMember = "Преподаватель";

if(Edit == true)

{

button1.Text = "Изменить";

textBox1.Text = MainForm.tematics;

textBox2.Text = MainForm.quest_count;

this.Text = "Изменение теста";

}

else

{

button1.Text = "Добавить";

this.Text = "Добавление теста";

}

}

private void button1_Click(object sender, EventArgs e)

{

int teacher_id = 0;

string sql = "Select КодПреподавателя from Преподаватели Where Преподаватель='"+comboBox1.Text+"'";

DataTable dt = Connection.GetSqlData(sql);

foreach(DataRow row in dt.Rows)

{

teacher_id = Convert.ToInt32(row["КодПреподавателя"]);

}

if(Edit == true)

{

sql = "Update Тесты set Тематика='"+textBox1.Text+"', КодПреподавателя="+teacher_id+", Вопросов="+Int32.Parse(textBox2.Text)+" Where КодТеста="+Int32.Parse(MainForm.test_id)+"";

Connection.SetSqlData(sql);

MessageBox.Show("Данные теста №" + MainForm.test_id + " успешно изменены");

}

else

{

sql = "Insert into Тесты(КодПреподавателя, Тематика, Вопросов) Values("+teacher_id+", '"+textBox1.Text+"', "+Int32.Parse(textBox2.Text)+")";

Connection.SetSqlData(sql);

}

}

private void NewTest_FormClosing(object sender, FormClosingEventArgs e)

{

Edit = false;

}

}

}

Форма EditQuestions.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace Тест

{

public partial class EditQuestions : Form

{

public EditQuestions()

{

InitializeComponent();

}

public static bool Edit = false;

public static int answer_id;

private void Load_Tables(string query)

{

listView1.Items.Clear();

DataTable dt = Connection.GetSqlData(query);

foreach (DataRow row in dt.Rows)

{

ListViewItem item = new ListViewItem(row[0].ToString());

for (int i = 1; i < dt.Columns.Count; i++)

{

item.SubItems.Add(row[i].ToString());

}

listView1.Items.Add(item);

}

}

private void EditQuestions_Load(object sender, EventArgs e)

{

this.Text = "Изменение вопросов теста №"+MainForm.test_id+"";

string sql = "Select КодТеста, КодВопроса, Вопрос from Вопросы Where КодТеста="+Int32.Parse(MainForm.test_id)+"";

Load_Tables(sql);

}

private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)

{

if (e.IsSelected)

{

int i = 0;

textBox1.Text = listView1.Items[e.ItemIndex].SubItems[2].Text;

int quest_id = Convert.ToInt32(listView1.Items[e.ItemIndex].SubItems[1].Text);

string sql = "Select Ответ from Ответы Where КодВопроса="+quest_id+"";

string[] quest = new string[4];

DataTable dt = Connection.GetSqlData(sql);

foreach(DataRow row in dt.Rows)

{

quest[i] = row["Ответ"].ToString();

i++;

}

textBox2.Text = quest[0];

textBox3.Text = quest[1];

textBox4.Text = quest[2];

textBox5.Text = quest[3];

Edit = true;

}

}

private void button1_Click(object sender, EventArgs e)

{

if(Edit == true)

{

int quest_id = 0;

string sql = "Update Вопросы set Вопрос='"+textBox1.Text+"' Where КодТеста="+Int32.Parse(MainForm.test_id)+"";

Connection.SetSqlData(sql);

sql = "Select КодВопроса from Вопросы Where Вопрос='"+textBox1.Text+"'";

DataTable dt = Connection.GetSqlData(sql);

foreach(DataRow row in dt.Rows)

{

quest_id = Convert.ToInt32(row["КодВопроса"]);

}

string[] answers = new string[4];

answers[0] = textBox2.Text;

answers[1] = textBox3.Text;

answers[2] = textBox4.Text;

answers[3] = textBox5.Text;

for (int i = 0; i < 4; i++)

{

if ((i + 1) == answer_id)

{

sql = "Update Ответы Set Ответ='" + answers[i] + "', Правильный='Да' Where КодВопроса="+quest_id+"";

Connection.SetSqlData(sql);

}

else

{

sql = "Update Ответы Set Ответ='" + answers[i] + "', Правильный='Нет' Where КодВопроса=" + quest_id + "";

Connection.SetSqlData(sql);

}

}

}

else

{

int quest_id = 0;

string sql = "Insert into Вопросы(КодТеста, Вопрос) Values("+Int32.Parse(MainForm.test_id)+", '"+textBox1.Text+"')";

Connection.SetSqlData(sql);

sql = "Select КодВопроса from Вопросы Where Вопрос='"+textBox1.Text+"'";

DataTable dt = Connection.GetSqlData(sql);

foreach(DataRow row in dt.Rows)

{

quest_id = Convert.ToInt32(row["КодВопроса"]);

}

string[] answers = new string[4];

answers[0] = textBox2.Text;

answers[1] = textBox3.Text;

answers[2] = textBox4.Text;

answers[3] = textBox5.Text;

for (int i = 0; i < 4;i++ )

{

if ((i + 1) == answer_id)

{

sql = "Insert into Ответы(КодВопроса, Ответ, Правильный) Values("+quest_id+", '"+answers[i]+"', 'Да')";

Connection.SetSqlData(sql);

}

else

{

sql = "Insert into Ответы(КодВопроса, Ответ, Правильный) Values(" + quest_id + ", '" + answers[i] + "', 'Нет')";

Connection.SetSqlData(sql);

}

}

}

}

private void checkBox2_CheckedChanged(object sender, EventArgs e)

{

if(checkBox2.Checked == true)

{

answer_id = 1;

}

}

private void checkBox3_CheckedChanged(object sender, EventArgs e)

{

if (checkBox2.Checked == true)

{

answer_id = 3;

}

}

private void checkBox1_CheckedChanged(object sender, EventArgs e)

{

if (checkBox2.Checked == true)

{

answer_id = 2;

}

}

private void checkBox4_CheckedChanged(object sender, EventArgs e)

{

if (checkBox2.Checked == true)

{

answer_id = 4;

}

}

}

}

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.