Автор работы: Пользователь скрыл имя, 15 Декабря 2013 в 20:45, дипломная работа
Разработка и внедрение автоматизированной системы для тестирования позволила упростить процедуру, сократить время студентов и преподавателей, избежать ошибок в подсчете результатов.
Во время выполнения данной работы требовалось решить следующие задачи:
разработать техническое задание (ТЗ) на автоматизированную систему (АС);
разработать и реализовать АС;
провести внедрение АС.
Введение 3
Глава 1.Описание предметной области и содержательная постановка задачи 4
1.1. Описание предметной области 4
1.2. Содержательная постановка задачи 8
Глава 2. Технческое задание 9
2.1 Описание технических требований 9
2.2. Описание требований к интерфейсу 9
2.3. Дополнительные требования 10
Глава 3. Практическая разработка автоматизированной системы 11
3.1. Этапы разработки 11
3.2. Функциональная модель 13
3.3. Обоснование выбора в качестве среды программирования MS Visual Basic 6.0 15
Глава 4. Описание автоматизированной системы 17
4.1. Состав автоматизированной системы 17
4.2. Описание функциональных возможностей 17
4.3. Ограничения 18
Заключение 20
Список используемой литературы 21
Приложения. 22
Приложение 1. Техническое задание. 22
Приложение 2. Экранные формы 28
Приложение 3. Листинги модулей. 31
Input #F, MyText, BackColorStandard '
Input #F, MyText, BackColorAnsweredQ
Input #F, MyText, BackColorCurrentQ
Input #F, MyText, BackColorWrongAnsw
' frmDebug.Text1(1).Text = frmDebug.Text1(1) & MyText & prmWidht & vbCrLf
' frmDebug.Text1(1).Text = frmDebug.Text1(1) & MyText & prmHeight & vbCrLf
' frmDebug.Text1(1).Text = frmDebug.Text1(1) & MyText & prmFontSize & vbCrLf
' frmDebug.Text1(1).Text = frmDebug.Text1(1) & MyText & FolderResult & vbCrLf
' frmDebug.Text1(1).Text = frmDebug.Text1(1) & MyText & FolderQuestions & vbCrLf
Close #F
'-----------------------------
Rem Начинаем чтение параметров
' ------------------------------
fullFileName = App.Path & "\" & FolderQuestions & "\" & OptionsFile
' frmDebug.Text1(2).Text = fullFileName
AllQuestionForTest = 0
AllQuestionInTest = 0
Open fullFileName For Input As #F ' открываем файл для чтения параметров теста
Line Input #F, MyText
frmMain.Caption = "MTest2: " & MyText ' установили шапку теста
Input #F, Group
k = 0 ' число вопросов перед секцией
For i = 0 To Group - 1
Input #F, Options(i, 0), Options(i, 1), Options(i, 2)
Options(i, 3) = k
k = k + Options(i, 1)
AllQuestionInTest = AllQuestionInTest + Options(i, 1)
AllQuestionForTest = AllQuestionForTest + Options(i, 2)
Next i
Close #F
Rem 2
' frmDebug.Text1(3).Text = "Параметры теста: " & Group & " " & AllQuestionInTest & " " & AllQuestionForTest
fullFileName = App.Path & "\" & FolderQuestions & "\" & FileSN
Open fullFileName For Input As #F ' открываем файл для чтения названий секций
For i = 0 To Group - 1
Line Input #F, NameSections(i)
Rem MsgBox (NameSections(i))
Next i
Close #F ' закончили чтение названий секций
'-----------------------------
Rem Начинаем чтение вопросов
'-----------------------------
For i = 0 To 2999
For j = 0 To 10
Question(i, j) = ""
Next j
AnswerInQuestion(i) = 0
Next i
MaxAnswerInQuestionThisTest = 1 ' определение сколько максимум вариантов ответа возможно
m = 0
For i = 0 To Group - 1 ' Цикл по всем группам
fullFileName = App.Path & "\" & FolderQuestions & "\" & FileQ & (i + 1) & ExtFileQ
Rem MsgBox (fullFileName)
Open fullFileName For Input As #F ' открываем файл для чтения вопросов и вариантов ответа
For j = 0 To Options(i, 1) - 1 ' Цикл по всем вопросам в группе
Line Input #F, MyText
MyText = Trim(MyText)
Question(m, 0) = MyText
For k = 1 To MaxAnswerInQuestion
If EOF(1) Then
Rem showQuestions(i, j, k)
Exit For
End If
Line Input #F, MyText
MyText = Trim(MyText)
Rem MsgBox ("Группа =" & i & " Вопрос =" & j & "Номер ответа =" & k & "[" & m & "] Вариант ответа =" & MyText)
If MyText = "" Then
Rem showQuestions(i, j, k)
Exit For
Else
Question(m, k) = MyText
AnswerInQuestion(m) = k
If MaxAnswerInQuestionThisTest < k Then MaxAnswerInQuestionThisTest = k
End If
Next
m = m + 1
Rem MsgBox ("Конец вариантов ответа")
Next
Rem MsgBox ("Конец секции")
Close #F
Next i
Rem Загрузка вопросов закончена
'=============================
'-----------------------------
Rem Начинаем чтение ответов
'-----------------------------
m = 0
For i = 0 To Group - 1 ' Цикл по всем группам
fullFileName = App.Path & "\" & FolderQuestions & "\" & FileA & (i + 1) & ExtFileA
Rem MsgBox (fullFileName)
Open fullFileName For Input As #F ' открываем файл для чтения вопросов и вариантов ответа
For j = 0 To Options(i, 1) - 1 ' Цикл по всем вопросам в группе
Line Input #F, MyText
MyText = Trim(MyText)
Answer(m) = Right(MyText, 1)
' frmDebug.Text1(5).Text = frmDebug.Text1(5).Text & Answer(m)
m = m + 1
Next
Rem MsgBox ("Конец секции ответов")
Close #F
Next i
Rem Загрузка ответов закончена
'=============================
Rem Проверка параметров не выполняется!
Rem Скрываем все ненужное
frmMain.frameQuestion.Visible = False
frmMain.lblQuestion.Visible = False ' Текст вопроса
frmMain.lblQuestions.Visible = False ' "Вопросы:"
frmMain.btnEndTest.Visible = False
frmMain.btnNext.Visible = False
frmMain.btnPrevious.Visible = False
frmMain.btnClearAnswer.Visible = False
For i = 0 To 3 - 1
frmMain.txtName(i).Text = ""
Next i
frmMain.btnBeginTest.Visible = True
frmMain.Height = prmHeight * 9810 / 600 ' Устанавливаем высоту окна
frmMain.Width = prmWidht * 12120 / 800 ' Ширину
frmMain.lblQuestion.FontSize = prmFontSize ' Устанавливаем размер шрифта для вопросов
frmMain.lblQuestion.Caption = ""
j = frmMain.frameQuestion.Height
j = j * 9810 / 600
k = frmMain.lblQuestion.Top + frmMain.lblQuestion.Height ' в у.е
k = (j - k) / (MaxAnswerInQuestionThisTest * 1.2) ' вычисляем желательную высоту варианта ответа
frmMain.Option1(0).Height = k
For i = 0 To MaxAnswerInQuestionThisTest - 1 ' Выстраиваем варианты ответа и номера клавиш
frmMain.Option1(i).FontSize = prmFontSize
frmMain.Option1(i).Visible = False
frmMain.Option1(i).TabStop = False
frmMain.Option1(i).TabIndex = 0
frmMain.Option1(i).Width = frmMain.Option1(0).Width
frmMain.Option1(i).Height = frmMain.Option1(0).Height
frmMain.Option1(i).Top = i * frmMain.Option1(0).Height * 1.2 + frmMain.Option1(0).Top
' подпись цифр ответа
frmMain.Label1(i).FontSize = prmFontSize
frmMain.Label1(i).Caption = (i + 1) Mod 10
frmMain.Label1(i).Top = frmMain.Option1(i).Top + frmMain.Option1(i).Height / 2 - frmMain.Label1(i).Height / 2
frmMain.Label1(i).Visible = False
Next i
For i = 0 To MaxQuestionsInTest - 1 ' Выстраиваем в порядок кнопки с номерами вопросов
frmMain.cmdNQuestion(i).
frmMain.cmdNQuestion(i).Width = frmMain.cmdNQuestion(0).Width
frmMain.cmdNQuestion(i).Height = frmMain.cmdNQuestion(0).Height
frmMain.cmdNQuestion(i).Left = frmMain.cmdNQuestion(0).Left + (i Mod 20) * frmMain.cmdNQuestion(0).Width
frmMain.cmdNQuestion(i).Top = frmMain.cmdNQuestion(0).Top + (i \ 20) * frmMain.cmdNQuestion(0).Height
frmMain.cmdNQuestion(i).
frmMain.cmdNQuestion(i).
' frmMain.cmdNQuestion(i).Style = 1 ' Устанавливаем графический вид кнопки
frmMain.cmdNQuestion(i).
Next i
Rem Устанвливаем другие переменные
TestInProgress = False
ShowAnswersMode = False
End Sub
Sub SetPositionForAnswer()
End Sub
Rem ==============================
Rem Окончена загрузка данных из файлов и подготовка к работе
Rem ==============================
Sub TestBegin() ' Начало тестирования
Rem MsgBox ("Начало тестирования")
If TestInProgress Then
MsgBox ("У Вас уже идет тестирование, завершите его.")
Exit Sub
Else
If CheckFIO = False Then
MsgBox ("ФИО заполнено не полностью!")
Exit Sub
Else
TestInProgress = True ' Тестирование считаем начавшимся
GenerateQList
PrepareForShowQuestion
ShowQuestion
End If
End If
End Sub
Function CheckFIO() As Boolean ' Проверка заполнены ли поля ФИО
Dim i As Integer
CheckFIO = True
For i = 0 To 3 - 1
If frmMain.txtName(i) = "" Then
CheckFIO = False
Exit For
End If
Next i
End Function
'-----------------------------
' Генерирование случайных вопросов
'-----------------------------
Sub GenerateQList() ' Генерирование случайных вопросов
Rem MsgBox ("GenerateQList")
Rem Dim RandomGenerator As New Random
Dim i, j As Integer
Dim n, m, X, Y As Integer
Randomize
n = 0
' frmDebug.Text1(4).Text = ""
For i = 1 To Group
For j = 1 To Options(i - 1, 1) ' Подготовка массива для получения случайных вопросов
tmpK(j) = j
Next j
For j = 1 To Options(i - 1, 2) ' Готовим необходимое число вопросов
m = Options(i - 1, 1) - j + 1
X = CInt(Int((m * Rnd()) + 1))
GenQListQuestion(n) = Options(i - 1, 3) + tmpK(X)
GenQListAnswer(n) = " "
Rem frmDebug.Text1(4).Text = frmDebug.Text1(4).Text & M & "_" & X & "_" & tmpK(X) & " "
Y = tmpK(X)
tmpK(X) = tmpK(Options(i - 1, 1) - j + 1)
tmpK(Options(i - 1, 1) - j + 1) = Y
' frmDebug.Text1(4).Text = frmDebug.Text1(4).Text & GenQListQuestion(n) & GenQListAnswer(n)
n = n + 1
Next j
Next i
End Sub
' конец генерации случайных вопросов
'=============================
Sub PrepareForShowQuestion() 'Подготовка к показу вопросов
Dim i As Integer
Rem MsgBox ("PrepareForShowQuestion")
frmMain.btnBeginTest.Visible = False
frmMain.mnuStartTest.Visible = False
frmMain.btnEndTest.Visible = True
frmMain.btnClearAnswer.Visible = True
frmMain.frameQuestion.Visible = True
frmMain.lblQuestion.Visible = True
frmMain.lblQuestions.Visible = True
For i = 0 To 3 - 1
frmMain.txtName(i).Locked = True
Next i
For i = 0 To AllQuestionForTest - 1 ' Показываем кнопки с номерами вопросов
frmMain.cmdNQuestion(i).
frmMain.cmdNQuestion(i).
Next i
CurrentQ = 1
End Sub
' ------------------------------
'
Показ вопроса (Прорисовка
' ------------------------------
Sub ShowQuestion() ' Показ вопроса
Dim i, s, k, l As Integer
Dim a, b, c As String
If frmMain.txtName(0).Enabled = True Then
frmMain.txtName(0).SetFocus
End If
If CurrentQ <= 1 Then ' проверяем надо ли показывать кнопку Предыдущий
CurrentQ = 1
frmMain.btnPrevious.Visible = False
Else
frmMain.btnPrevious.Visible = True
End If
If CurrentQ >= AllQuestionForTest Then ' проверяем надо ли показывать кнопку Следующий
CurrentQ = AllQuestionForTest
frmMain.btnNext.Visible = False
Else
frmMain.btnNext.Visible = True
End If
Rem MsgBox ("ShowQuestion :" & CurrentQ)
frmMain.frameQuestion.Caption = CurrentQ & " вопрос из " & AllQuestionForTest
a = Question(GenQListQuestion(
If ShowNumberQuestion = 1 Then ' проверяем надо ли показывать номера вопросов в секции
frmMain.lblQuestion.Caption = a
Else
s = 0
k = 0
l = Len(a)
For i = 1 To l
c = Mid(a, i, 1)
If c = "." And s = 0 Then s = i
If c = " " And k = 0 Then k = i
Next i
b = Left(a, s) & " "
b = b & Right(a, l - k)
frmMain.lblQuestion.Caption = b
End If
' Показываем вопросы
For i = 1 To AnswerInQuestion(
frmMain.Option1(i - 1).Caption = Question(GenQListQuestion(
frmMain.Option1(i - 1).Visible = True
frmMain.Label1(i - 1).Visible = True
frmMain.Option1(i - 1).FontItalic = False
frmMain.Option1(i - 1).BackColor = BackColorStandard
If Left(frmMain.Option1(i - 1).Caption, 1) = GenQListAnswer(CurrentQ - 1) Then 'проверяем был ли дан раньше ответ
frmMain.Option1(i - 1).Value = True
frmMain.Option1(i - 1).FontBold = True ' и выделяем жирным
Else
frmMain.Option1(i - 1).Value = False
frmMain.Option1(i - 1).FontBold = False
End If
If ShowAnswersMode = True Then ' проверяем включен ли режим показа ответов
frmMain.Option1(i - 1).Enabled = False 'делаем невозможным правку
' Если это правильный ответ, то выделяем курсивом
If Left(frmMain.Option1(i - 1).Caption, 1) = Answer(GenQListQuestion(
frmMain.Option1(i - 1).FontItalic = True
frmMain.Option1(i - 1).BackColor = BackColorWrongAnsw
End If
Else
frmMain.Option1(i - 1).Enabled = True
End If
Next i
For i = AnswerInQuestion(
frmMain.Option1(i - 1).Caption = ""
frmMain.Option1(i - 1).Visible = False