Автор работы: Пользователь скрыл имя, 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
frmMain.Label1(i - 1).Visible = False
frmMain.Option1(i - 1).Value = False
frmMain.Option1(i - 1).FontBold = False
Next i
For i = 1 To AllQuestionForTest ' Показываем кнопки с номерами вопросов
frmMain.cmdNQuestion(i - 1).FontStrikethru = False
If ShowAnswersMode = True Then
If Not (GenQListAnswer(i - 1) = Answer(GenQListQuestion(i - 1) - 1)) Then
frmMain.cmdNQuestion(i - 1).FontStrikethru = True
End If
End If
If i = CurrentQ Then
frmMain.cmdNQuestion(i - 1).FontBold = True
frmMain.cmdNQuestion(i - 1).BackColor = BackColorCurrentQ
Else
frmMain.cmdNQuestion(i - 1).FontBold = False
If ShowAnswersMode = True Then
If frmMain.cmdNQuestion(i - 1).FontStrikethru = True Then
End If
Else
If frmMain.cmdNQuestion(i - 1).FontItalic = True Then
End If
End If
End If
Next i
End Sub
' Конец показа вопроса (прорисовки элементов
' ==============================
' ------------------------------
''Конец тестирования
' ------------------------------
Sub TestEnd() 'Конец тестирования
' MsgBox ("TestEnd")
GetResult ' сделано
' CalculateCheckSum ' будет вызываться при сохранении результата в файл
TestInProgress = False ' Тестирование считаем завершившимся
' MsgBox ("SaveResultInFile")
SaveResultInFile
' MsgBox ("ShowResultonScreen")
ShowResultOnScreen
If PrintFullProtocol = 1 Then SaveProtocolInFile ' Если требуется сохраняем весь протокол в файл
frmMain.btnClearAnswer.Visible = False
If ShowWrongAnswers = 1 Then
beginShowWrongAnswers
Else
PrepareForEndTest ' сделано
End If
End Sub
Sub PrepareForEndTest() 'Подготовка к окончанию тестирования
Dim i As Integer
Rem MsgBox ("PrepareForShowQuestion")
frmMain.btnBeginTest.Visible = True
frmMain.mnuStartTest.Visible = True
frmMain.btnEndTest.Visible = False
frmMain.btnNext.Visible = False
frmMain.btnPrevious.Visible = False
frmMain.frameQuestion.Visible = False
frmMain.lblQuestion.Visible = False
frmMain.lblQuestions.Visible = False
For i = 0 To 3 - 1
frmMain.txtName(i).Locked = False
frmMain.txtName(i).Text = ""
Next i
For i = 0 To AllQuestionForTest - 1 ' Скрываем кнопки с номерами вопросов
frmMain.cmdNQuestion(i).
frmMain.cmdNQuestion(i).
Next i
End Sub
' ------------------------------
' расчет результатов теста
' ------------------------------
Sub GetResult() ' Расчет результата
Dim i, j As Integer
Dim o, p, q As Double
For i = 0 To Group - 1 ' обнуляем временные
Result(i) = 0
Next i
ResultFull = 0
For i = 0 To AllQuestionForTest - 1
If Right(Answer(GenQListQuestion(
ResultFull = ResultFull + 1
For j = 0 To Group - 2 ' Проверяем в какую группу входит задаваемый вопрос
If (GenQListQuestion(i) >= Options(j, 3)) And (GenQListQuestion(i) < Options(j + 1, 3)) Then
Result(j) = Result(j) + 1
End If
Next j
If GenQListQuestion(i) >= Options(Group - 1, 3) Then
Result(Group - 1) = Result(Group - 1) + 1
End If
End If
Next i
' определяем итоговую оценку
p = ResultFull
q = AllQuestionForTest
o = p / q
If o < MarkDiv(0) Then Mark = 2
If (o >= MarkDiv(0)) And (o < MarkDiv(1)) Then Mark = 3
If (o >= MarkDiv(1)) And (o < MarkDiv(2)) Then Mark = 4
If o >= MarkDiv(2) Then Mark = 5
End Sub
' Конец расчета результата
' ==============================
Sub ShowResultOnScreen() ' Показать результат на экране
End Sub
Function CalculateCheckSum(Mark As Integer, RightAnswers As Integer, LastName As String) As String ' Вычислить контрольную сумму
Dim i, k, l As Integer
Dim a, b, c As String
Randomize
k = Int(14 * Rnd()) + 1
l = Int(14 * Rnd()) + 1
a = "" & Mark & RightAnswers & LastName
b = Hex(k) & Hex(l)
k = k * 16 + l
For i = 1 To Len(a)
b = b & Hex(Asc(Mid(a, i, 1)) Xor k)
Next i
CalculateCheckSum = b
End Function
' Проверка контрольной суммы
Function CheckCheckSum(Mark As Integer, RightAnswers As Integer, LastName As String, CheckSum) As String
Dim i, k, l, deschislo As Integer
Dim a, b, c, Simvol As String
k = 0
For i = 1 To 2
Simvol = Mid(CheckSum, i, 1)
If UCase(Simvol) = "A" Then
deschislo = 10
ElseIf UCase(Simvol) = "B" Then
deschislo = 11
ElseIf UCase(Simvol) = "C" Then
deschislo = 12
ElseIf UCase(Simvol) = "D" Then
deschislo = 13
ElseIf UCase(Simvol) = "E" Then
deschislo = 14
ElseIf UCase(Simvol) = "F" Then
deschislo = 15
Else
deschislo = Val(Simvol)
End If
'накапливаем в нашей функции результат
k = k * 16 + deschislo
Next i
a = "" & Mark & RightAnswers & LastName
b = Left(CheckSum, 2)
For i = 1 To Len(a)
b = b & Hex(Asc(Mid(a, i, 1)) Xor k)
Next i
If b = CheckSum Then
CheckCheckSum = True
Else
CheckCheckSum = False
End If
End Function
Sub SaveResultInFile()
Rem MsgBox ("Вау, Ваш результат: " & Mark & ", все под контролем [" & CalculateCheckSum & "]")
Dim F As Long
Dim MyText As String
Dim fullFileName, fullFileName_Header As String
Dim i, j As Integer
fullFileName = App.Path & "\" & FolderResult & "\" & _
Year(Date) & "_" & Month(Date) & " _" & Day(Date) & "_" & _
Hour(Time()) & "_" & Minute(Time()) & _
"_" & _
Trim(frmMain.txtName(0)) & _
"_" & Left(Trim(frmMain.txtName(1)), 1) & _
Left(Trim(frmMain.txtName(2)), 1) & _
ExtFileR
fullFileName_Header = App.Path & "\" & FolderQuestions & "\" & flHeaderResult
Rem MsgBox (fullFileName & " " & fullFileName_Header)
FileCopy fullFileName_Header, fullFileName ' Копируем шапку в новый файл результатов
F = FreeFile
Open fullFileName For Append As #F
Print #F,
Print #F, " ------------------------------
Print #F, frmMain.txtName(0) & " " & frmMain.txtName(1) & " " & frmMain.txtName(2)
Print #F, Date
Print #F, " ------------------------------
If TypeOfStandardProtocol > 1 Then
Print #F, "Результаты по разделам:"
If TypeOfStandardProtocol = 3 Then
Print #F, "Число вопросов / Правильно отвечено Название раздела"
For i = 0 To Group - 1
If Not Options(i, 2) = 0 Then
Print #F, Options(i, 2) & " / " & Result(i) & " " & NameSections(i)
End If
Next i
Else
Print #F, "Число вопросов / Правильно отвечено Номер раздела"
For i = 0 To Group - 1
If Not Options(i, 2) = 0 Then
Print #F, Options(i, 2) & " / " & Result(i) & " " & (i + 1) & "."
End If
Next i
End If
Print #F, " ------------------------------
End If
Print #F, " Всего вопросов было: " & AllQuestionForTest & ", правильных ответов: " & ResultFull
Print #F,
MyText = " Итоговая оценка: "
If Mark = 2 Then MyText = MyText & "неуд (" & Mark & ")"
If Mark = 3 Then MyText = MyText & "удовл (" & Mark & ")"
If Mark = 4 Then MyText = MyText & "хор (" & Mark & ")"
If Mark = 5 Then MyText = MyText & "отл (" & Mark & ")"
Print #F, MyText
Print #F, CalculateCheckSum(Mark, ResultFull, Trim(frmMain.txtName(0)))
Close #F
MsgBox ("Правильных ответов: " & ResultFull & " из " & AllQuestionForTest & ". Оценка: " & Mark)
MsgBox ("Файл протокола: " & fullFileName)
Rem Shell fullFileName
End Sub
Sub SaveProtocolInFile()
' MsgBox ("Файл полного протокола: " & fullFileName)
Dim F As Long
Dim MyText As String
Dim fullFileName, fullFileName_Header As String
Dim i, j As Integer
fullFileName = App.Path & "\" & FolderResult & "\" & _
Year(Date) & "_" & Month(Date) & " _" & Day(Date) & "_" & _
Hour(Time()) & "_" & Minute(Time()) & _
"_" & _
Trim(frmMain.txtName(0)) & _
"_" & Left(Trim(frmMain.txtName(1)), 1) & _
Left(Trim(frmMain.txtName(2)), 1) & _
"_подробный протокол" & ExtFileR
F = FreeFile
Open fullFileName For Append As #F
Print #F,
Print #F, " Подробный протокол"
Print #F, " ------------------------------
Print #F, frmMain.txtName(0) & " " & frmMain.txtName(1) & " " & frmMain.txtName(2)
Print #F, Date
Print #F, " ------------------------------
Print #F, "Результаты по разделам:"
Print #F, "Число вопросов / Правильно отвечено Название раздела"
For i = 0 To Group - 1
If Not Options(i, 2) = 0 Then
Print #F, Options(i, 2) & " / " & Result(i) & " " & NameSections(i)
End If
Next i
Print #F, " ------------------------------
Print #F, " Всего вопросов было: " & AllQuestionForTest & ", правильных ответов: " & ResultFull
Print #F,
MyText = " Итоговая оценка: "
If Mark = 2 Then MyText = MyText & "неуд (" & Mark & ")"
If Mark = 3 Then MyText = MyText & "удовл (" & Mark & ")"
If Mark = 4 Then MyText = MyText & "хор (" & Mark & ")"
If Mark = 5 Then MyText = MyText & "отл (" & Mark & ")"
Print #F, MyText
Print #F, CalculateCheckSum(Mark, ResultFull, Trim(frmMain.txtName(0)))
MyText = CalculateCheckSum(Mark, ResultFull, Trim(frmMain.txtName(0)))
' MsgBox (CheckCheckSum(Mark, ResultFull, Trim(frmMain.txtName(0)), MyText))
' Начинаем выгрузку вопросов и ответов
For i = 0 To AllQuestionForTest - 1 ' цикл по всем вопросам
Print #F, " ------------------------------
Print #F, "Вопрос N:" & (i + 1)
For j = 0 To AnswerInQuestion(
Print #F, Question(GenQListQuestion(i) - 1, j)
Next j
Print #F, "Правильный ответ: " & Answer(GenQListQuestion(i) - 1)
Print #F, "Дан ответ: " & GenQListAnswer(i)
Next i
Close #F
MsgBox ("Файл полного протокола: " & fullFileName)
End Sub
' ------------------------------
' просмотр ответов после теста
' ------------------------------
Sub beginShowWrongAnswers()
Rem MsgBox ("beginShowWrongAnswers")
frmMain.btnEndShow.Visible = True
frmMain.btnEndTest.Visible = False
ShowAnswersMode = True
ShowQuestion
End Sub
Sub endShowWrongAnswers()
Rem MsgBox ("endShowWrongAnswers")
ShowAnswersMode = False
frmMain.btnEndShow.Visible = False
frmMain.btnEndTest.Visible = True
PrepareForEndTest ' сделано
End Sub
' конец просмотра ответов
' ==============================
' ------------------------------
' показываем информацию из файла помощи
Sub showFileHelpUser()
Dim F As Long
Dim MyText, TextMessage As String
F = FreeFile
Open FileHelpUser For Input As #F
TextMessage = ""
Do Until EOF(F)
Line Input #F, MyText
TextMessage = TextMessage & MyText & vbCrLf
Loop
Close #F
MsgBox (TextMessage)
End Sub