Адаптивная система тестирования

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

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

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

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

3. Если студент пытается получить доступ к редактору теста и вводит логин и пароль (разумеется, не зная его наверняка), то выскакивает окно, которое сообщает о том, что у вас недостаточно прав.

Заключение

Основной целью написания данного курсового проекта было разработать подсистему адаптивного тестирования. Были поставлены определенные задачи, в результате решения которых мы получили подсистему "Тестирование". Данная подсистема позволяет проверять знания по разным дисциплинам (в зависимости от наполнения базы данных) в соответствии с понятием об адаптивном тестировании и его отличие от традиционной формы тестирования. В ходе описания предметной области было рассказано о системе адаптивного тестирования, в которой вопросы разделены по уровням сложности и выдача следующего вопроса зависит от ответа на предыдущий вопрос. По результатам проведения тестирования можно объективно оценивать уровень знаний студентов, ведь количество набранных балов при помощи коэффициента трудности учитывает всю специфику данного тестирования.

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

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

Приложение А

Диаграмма вариантов использования

Размещено на http://www.allbest.ru/

Приложение Б

Листинг программы

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Data.SqlClient;

namespace Tester

{

public partial class Form1 : Form

{

public string name, surname, fath, group;

public int UserScore, lev;

public int[] QuestDone = new int[50];

string conStr = "Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\Test.mdf;Integrated Security=True;User Instance=True";

SqlDataAdapter myAdapQ;

SqlDataAdapter myAdapV;

DataTable QuestTable;

DataTable VarTable;

DataRow[] ques;

string wrightAn;

int type;

string discip;

string answer1;

int questCount = 0;

public Form1()

{

InitializeComponent();

}

private void выходToolStripMenuItem_Click(object sender, EventArgs e)

{

Close();

}

private void данныеОСоздателеToolStripMenuItem_Click(object sender, EventArgs e)

{

About ab = new About();

ab.Show();

}

private void руководствоToolStripMenuItem_Click(object sender, EventArgs e)

{

HelpTester HTS = new HelpTester();

HTS.Show();

}

private void руководствоПреподавателяToolStripMenuItem_Click(object sender, EventArgs e)

{

HelpTeacher HTC = new HelpTeacher();

HTC.Show();

}

private void редакторТестовToolStripMenuItem_Click(object sender, EventArgs e)

{

Login log = new Login();

log.Show();

}

private void tabPage1_Click(object sender, EventArgs e)

{

}

private void button1_Click(object sender, EventArgs e)

{

name = textBox1.Text;

textBox19.Text = textBox1.Text;

surname = textBox2.Text;

textBox18.Text = textBox2.Text;

fath = textBox3.Text;

textBox17.Text = textBox3.Text;

group = textBox10.Text;

textBox16.Text = textBox10.Text;

discip = textBox11.Text;

textBox15.Text = textBox11.Text;

lev = int.Parse(textBox12.Text);

textBox14.Text = textBox12.Text;

UserScore = 0;

string sql = string.Format("Select * From Question Where Discipline='{0}'",discip);

myAdapQ = new SqlDataAdapter(sql, conStr);

DataSet myDSQ = new DataSet("Question");

myAdapQ.Fill(myDSQ, "Question");

QuestTable = myDSQ.Tables["Question"];

myAdapV = new SqlDataAdapter("Select * From Variants", conStr);

DataSet myDSV = new DataSet("Variants");

myAdapV.Fill(myDSV, "Variants");

VarTable = myDSV.Tables["Variants"];

//Начинаем Тест

BeginTest(discip, lev);

}

public void BeginTest(string disc, int Tlev)

{

bool find = false;

string filter = string.Format("Discipline='{0}'", disc);

ques = QuestTable.Select(filter);

if(ques.Length==0)

{

MessageBox.Show("Вопросы по даной тематике отсутствуют.", "Внимание.", MessageBoxButtons.OK, MessageBoxIcon.Warning);

}

else

{

if (questCount == 0)

{

for (int j = 0; j < ques.Length; j++)

{

DataRow q = ques[j];

int lv = int.Parse(q["Level"].ToString());

if (lv == Tlev)

{

questCount++;

}

}

}

//Перебираются все вопросы по даной дисциплине

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

{

//Подсчет количества вопросов даного уровня сложности

DataRow oneQ = ques[i];

int ID = int.Parse(oneQ["QID"].ToString());

int mlevel = int.Parse(oneQ["Level"].ToString());

//Если на вопрос еще не отвечали и он нужного уровня сложности, то он задается

if(!Search(ID)&&mlevel==Tlev)

{

type = int.Parse(oneQ["Type"].ToString());

string q = oneQ["QText"].ToString();

wrightAn = oneQ["Answer"].ToString();

filter = string.Format("QID= '{0}'", ID);

DataRow[] vari = VarTable.Select(filter);

Add(ID);

tabControl1.SelectedIndex = 1;

find = true;

switch(type)

{

case 1:

tabControl2.SelectedIndex = 0;

textBox13.Text = q;

radioButton1.Text =vari[0]["VText"].ToString();

radioButton2.Text =vari[1]["VText"].ToString();

if(vari.Length==3)

{

radioButton3.Text =vari[2]["VText"].ToString();

}

break;

case 2:

tabControl2.SelectedIndex = 1;

QuestTextBox2.Text = q;

break;

case 3:

tabControl2.SelectedIndex = 2;

Quest3.Text = q;

textBox31.Text = vari[0]["VText"].ToString();

textBox32.Text = vari[1]["VText"].ToString();

textBox33.Text = vari[2]["VText"].ToString();

textBox34.Text = vari[3]["VText"].ToString();

textBox35.Text = vari[4]["VText"].ToString();

textBox36.Text = vari[5]["VText"].ToString();

break;

case 4:

tabControl2.SelectedIndex = 3;

Quest4.Text = q;

textBox41.Text = vari[0]["VText"].ToString();

textBox42.Text = vari[1]["VText"].ToString();

textBox43.Text = vari[2]["VText"].ToString();

textBox44.Text = vari[3]["VText"].ToString();

textBox45.Text = vari[4]["VText"].ToString();

break;

default:

break;

}

}

if(find)

{

break;

}

else

{

tabControl1.SelectedIndex = 2;

ScoreTextBox.Text = UserScore.ToString();

}

}

}

}

//Функция, которая проверять не был ли задан этот вопрос уже

public bool Search(int id)

{

bool flag = false;

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

{

if (QuestDone[i] == id)

flag = true;

}

return flag;

}

//Функция, которая дабавляет id вопроса, который уже был задан

public void Add(int id)

{

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

{

if(QuestDone[i]==0)

{

QuestDone[i] = id;

break;

}

}

}

private void NextButton_Click(object sender, EventArgs e)

{

switch (type)

{

case 1:

if (wrightAn == answer1)

{

UserScore += lev+1;

questCount--;

if(questCount==0)

{

lev++;

}

}

else

{

if(lev!=0)

{

questCount--;

if (questCount == 0)

{

lev--;

}

}

}

break;

case 2:

if(wrightAn == AnswerTextBox2.Text)

{

UserScore += lev+1;

questCount--;

if (questCount == 0)

{

lev++;

}

}

else

if (lev != 0)

{

questCount--;

if (questCount == 0)

{

lev--;

}

}

break;

case 3:

string an1, an2, an3;

an1 = wrightAn.Substring(0, wrightAn.IndexOf(','));

an2 = wrightAn.Substring(wrightAn.IndexOf(',')+1, wrightAn.LastIndexOf(',') - wrightAn.IndexOf(',')-1);

an3 = wrightAn.Substring(wrightAn.LastIndexOf(',')+1, wrightAn.Length - wrightAn.LastIndexOf(',')-1);

if ((an1.Equals(AnsTB1.Text)&&an2.Equals(AnsTB2.Text)&&an3.Equals(AnsTB3.Text))||(an1.Equals(AnsTB2.Text)&&an2.Equals(AnsTB3.Text)&&an3.Equals(AnsTB1.Text))||(an1.Equals(AnsTB3.Text)&&an2.Equals(AnsTB1.Text)&&an3.Equals(AnsTB2.Text)))

{

UserScore += lev + 1;

questCount--;

if (questCount == 0)

{

lev++;

}

}

else

{

if (lev != 0)

{

questCount--;

if (questCount == 0)

{

lev--;

}

}

}

break;

case 4:

if (wrightAn == Ans4.Text)

{

UserScore += lev + 1;

questCount--;

if (questCount == 0)

{

lev++;

}

}

else

{

if (lev != 0)

{

questCount--;

if (questCount == 0)

{

lev--;

}

}

}

break;

default:

break;

}

BeginTest(discip, lev);

}

private void EndButton_Click(object sender, EventArgs e)

{

switch (type)

{

case 1:

if (wrightAn == answer1)

{

UserScore += lev + 1;

questCount--;

if(questCount==0)

{

lev++;

}

}

else

{

if (lev != 0)

{

questCount--;

if (questCount == 0)

{

lev--;

}

}

}

break;

case 2:

if (wrightAn == AnswerTextBox2.Text)

{

UserScore += lev + 1;

questCount--;

if (questCount == 0)

{

lev++;

}

}

else

if (lev != 0)

{

questCount--;

if (questCount == 0)

{

lev--;

}

}

break;

case 3:

string an1, an2, an3;

an1 = wrightAn.Substring(0, wrightAn.IndexOf(','));

an2 = wrightAn.Substring(wrightAn.IndexOf(',') + 1, wrightAn.LastIndexOf(',') - wrightAn.IndexOf(',') - 1);

an3 = wrightAn.Substring(wrightAn.LastIndexOf(',') + 1, wrightAn.Length - wrightAn.LastIndexOf(',')-1);

if((an1.Equals(AnsTB1.Text) && an2.Equals(AnsTB2.Text) && an3.Equals(AnsTB3.Text)) || (an1.Equals(AnsTB2.Text) && an2.Equals(AnsTB3.Text) && an3.Equals(AnsTB1.Text)) || (an1.Equals(AnsTB3.Text) && an2.Equals(AnsTB1.Text) && an3.Equals(AnsTB2.Text)))

{

UserScore += lev + 1;

questCount--;

if (questCount == 0)

{

lev++;

}

}

else

{

if (lev != 0)

{

questCount--;

if (questCount == 0)

{

lev--;

}

}

}

break;

case 4:

if (wrightAn == Ans4.Text)

{

UserScore += lev + 1;

questCount--;

if (questCount == 0)

{

lev++;

}

}

else

{

if (lev != 0)

{

questCount--;

if (questCount == 0)

{

lev--;

}

}

}

break;

default:

break;

}

tabControl1.SelectedIndex = 2;

ScoreTextBox.Text = UserScore.ToString();

}

private void новыйТестToolStripMenuItem_Click(object sender, EventArgs e)

{

textBox1.Text = "";

textBox2.Text = "";

textBox3.Text = "";

textBox10.Text = "";

textBox11.Text = "";

textBox12.Text = "";

tabControl1.SelectedIndex = 0;

}

private void radioButton1_Click(object sender, EventArgs e)

{

answer1 = (sender as RadioButton).Text;

}

private void Form1_Load(object sender, EventArgs e)

{

}

}

}

Форма Данные о создателе

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

namespace Tester

{

public partial class About : Form

{

public About()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

Close();

}

private void About_Load(object sender, EventArgs e)

{

}

}

}

Форма Авторизация

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

namespace Tester

{

public partial class Login : Form

{

public Login()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

string log, pas;

log = textBox1.Text;

pas = textBox2.Text;

if(log.Equals("admin") && pas.Equals("Teacher"))

{

Editor MyEditor = new Editor();

MyEditor.Show();

Close();

}

else

{

MessageBox.Show("У вас недостаточно прав.", "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error);

}

}

private void Login_Load(object sender, EventArgs e)

{

}

}

}

Форма Руководство для преподавателя

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

namespace Tester

{

public partial class HelpTeacher : Form

{

public HelpTeacher()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

Close();

}

private void HelpTeacher_Load(object sender, EventArgs e)

{

string path = Environment.CurrentDirectory.ToString();

webBrowser1.Navigate(path + "\\Help\\Page1.htm");

}

}

}

Форма Руководство для тестируемого

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

namespace Tester

{

public partial class HelpTester : Form

{

public HelpTester()

{

InitializeComponent();

}

private void HelpTester_Load(object sender, EventArgs e)

{

string path = Environment.CurrentDirectory.ToString();

webBrowser1.Navigate(path + "\\Help\\Page2.htm");

}

private void button1_Click(object sender, EventArgs e)

{

Close();

}

}

}

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


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

  • Формирование требований к системе. Описание входной и выходной информации. Концептуальное и логическое проектирование структуры и пользовательского интерфейса. Выбор средств реализации подсистемы. Реализация функциональности программного средства.

    курсовая работа [1,3 M], добавлен 28.08.2012

  • Характеристика входной и выходной информации. Построение модели информационной системы. Спецификация варианта использования "Выдача информации по конкретному номеру" для системы "Отель". Диаграммы деятельности и состояния. Построение диаграммы классов.

    курсовая работа [895,7 K], добавлен 30.07.2009

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

    курсовая работа [1,4 M], добавлен 07.03.2013

  • Проектирование информационной системы. Построение диаграммы потоков данных. Описание порядка построения DFD-диаграммы. Создание базы данных с помощью SQL сервера. Описание основных бизнес-правил и их физической реализации. Заполнение таблиц данными.

    курсовая работа [1,5 M], добавлен 13.12.2011

  • Формирование требований к программному средству, описание пользователей. Анализ предметной области, сущностная эффективность. Проектирование и реализация программного средства, описание пользования и системное тестирование созданного приложения.

    курсовая работа [145,4 K], добавлен 28.08.2012

  • Методика проектирование информационной системы, общее описание предметной области, примеры разработок проектов-аналогов. Требования к данной системе. Построение моделей IDEF0, создание диаграммы IDEF3, потока данных DFD, вариантов использования.

    курсовая работа [680,7 K], добавлен 21.06.2010

  • Требования к подсистеме создания Scorm-пакетов. Построение диаграммы потоков данных. Проектирование программного средства. Выбор средств реализации подсистемы. Организация взаимодействия приложения с базой данных. Реализация пользовательского интерфейса.

    курсовая работа [634,2 K], добавлен 16.08.2012

  • Проектирование модели информационной системы "Гостиница" в стандарте IDEF0. Разработка диаграммы потоков данных (Data Flow Diagramming), предназначенной для описания документооборота и обработки информации. Создание диаграммы декомпозиции в нотации IDEF3.

    курсовая работа [3,8 M], добавлен 14.12.2012

  • Описание аппаратных и программных средств, операционной системы. Описание входной и выходной информации. Информационно-логическая модель данных. Схема взаимодействия входной и выходной информации. Расчет трудоемкости и стоимости обработки информации.

    курсовая работа [2,4 M], добавлен 05.07.2015

  • Анализ предметной области с использованием моделей методологии ARIS и разработка ER-диаграммы. Описание входной и выходной информации для проектирования реляционной базы данных. Разработка управляющих запросов и связей между ними с помощью языка SQL.

    курсовая работа [975,2 K], добавлен 30.01.2014

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