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

Автор работы: Пользователь скрыл имя, 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

Вложенные файлы: 1 файл

Диплом - Коршунов.doc

— 474.50 Кб (Скачать файл)

        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

                                    frmMain.cmdNQuestion(i - 1).BackColor = BackColorWrongAnsw

                                Else

                                    frmMain.cmdNQuestion(i - 1).BackColor = BackColorStandard

                            End If

                        Else

                            If frmMain.cmdNQuestion(i - 1).FontItalic = True Then

                                    frmMain.cmdNQuestion(i - 1).BackColor = BackColorAnsweredQ

                                Else

                                    frmMain.cmdNQuestion(i - 1).BackColor = BackColorStandard

                            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).Visible = False

        frmMain.cmdNQuestion(i).FontItalic = False

    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(i) - 1), 1) = Right(GenQListAnswer(i), 1) Then

            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(GenQListQuestion(i) - 1)

                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

 

 



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