Система за провеждане на Електронни Тестове 0.7
Система за провеждане на електронни тестове разработена на ASP
Визитна картичка на програмата
Автор: |
PhotonSoft Ltd. |
Лиценз: |
Open Source |
ОС: |
Windows 2000/XP/2003/Vista  |
Големина: |
102 KB |
Обновен на: |
25.10.2009 от danieldenev |
5190 показвания, 114 сваляния
Потребителите, изтеглили тази програма свалят още:
Публикуваната тук програма изисква уеб услугата на Microsoft IIS да е инсталирана допълнително на вашият Windows с идея да може да се конфигурира да излъчва .asp страници. Системата е web-базирана и не използва база от данни. Отчитането на резултатите става индивидуално "на мигът" за конкретният обучаем. Програмката се отличава с изключителна простота и освен за използване при проверката на познанията, би могла да послужи и като тренировъчен проект за програмисти. Скриптът е включен направо в представянето и е на VB Предходни разработки на PhotonSoft Ltd. по темата "Електронни Тестове" може да видите ето Тестов Конструктор приложението е разработено на PHP/Apache и не ползва база данни за съхраняване на резултатите от проведените електронни тестове, но за сметка на това е много мощно и удобно пиложение работещо през интернет. Друга опростена система ползваща сравнително новата технология на Microsoft ASP.NET (C#) можете да намерите тук Instrukcii.doc
<%
' Взимам целочислена стойност като параметър и я конвертирам в подходящия символ
Function GetLetterFromAnswerNumber(iInput)
Dim strTemp
Select Case iInput
Case 0
strTemp = "A"
Case 1
strTemp = "B"
Case 2
strTemp = "C"
Case 3
strTemp = "D"
Case 4
strTemp = "E"
Case 5
strTemp = "F"
End Select
GetLetterFromAnswerNumber = strTemp
End Function
' За да опростя кода съм го разделил на части,
' функционална и коментарна част
' за да може да се разбере какво правя!
' Разделил съм го и щото искам да покажа кога е удобно да се ползва връзка към DB и кога hard-код и защо.
Function GetAnswerFromAnswerString(iQuestionNumber, strAnswers)
Dim strTemp
Dim iOffset
' Използвам InStrRev защото искам да ми бъде върната като резултат последната въведена стойност
' в случай че се върнат назад и си променят решението.
' Намирам къде се намира номера на въпроса който искам да използвам
iOffset = InStrRev(strAnswers, "|" & iQuestionNumber & "|", -1, 1)
' Извличаме нашия отговор от откритото отместване и
' преминаваме в дясно по дължината на индикатора за прогрес на теста to arrive at the
' за да достигнем по този начин до подходящия символ
strTemp = Mid(strAnswers, iOffset + Len("|" & iQuestionNumber & "|"), 1)
' Няма как да е по друг начин, но за да съм сигурен
' , че съм го конвертирал се убеждавам че е с голяма буква
GetAnswerFromAnswerString = UCase(CStr(strTemp))
End Function
%>
<%
' Кодът съм го направил да работи както със стойности от DB така и с твърд код.
'Първоначално го почнах да използва връзка с DB и примерната ми DB, обаче по-малко товари
' при твърдо кодиране (работи по-бързо). Все пак използването на DB ми дава по-добро
' инкапсулиране на данните и по лесно обновяване на по-късен етап.
'Иъобразявайки се с евентуалните нужди на клиентите съм дал и двете възможности.
' Ако искаш да ползваш DB тук булевата стойност трябва да я настрош на "Истина".
' hard-кода ползваш ако булевата стойност настроиш на "Лъжа"
Const USE_DB_FOR_INFO = False
' Тези две неща се правят само ако искаш да използваш DB,
' дко ли не, стойностите им са без значение
Dim DB_CONN_STRING
DB_CONN_STRING = "DBQ=" & Server.MapPath("quiz.mdb") & ";"
DB_CONN_STRING = DB_CONN_STRING & "Driver={Microsoft Access Driver (*.mdb)};"
DB_CONN_STRING = DB_CONN_STRING & "DriverId=25;FIL=MS Access;"
' Позволява ти да подкараш много тестове с много въпроси и то от една база данни DB като ги различаваш по тяхното 'QUIZ_ID!
Const QUIZ_ID = 1
' Сега за другите ни променливи ...
Dim cnnQuiz, rsQuiz 'DB обекти ако ги използваме за информация
Dim I 'стандартната ми променлива (некоректно наречена рекурсивна)
Dim iNumberOfQuestions 'броя на въпросите в теста
Dim iQuestionNumber 'въпроса на който сме в момента
Dim strQuestionText 'текста на въпроса който да бъде зададен
Dim aAnswers 'масив с възможните отговори на въпроса
'когато използваме твърдо кодиране, използвам го още за определяне на верните отговори при
'при завършването на теста
Dim strAnswers 'съхранява номерата на въпросите и съответните им отговори
'разделени са с прави чертички "|"
Dim iScore 'това въвеждам за да знам колко добре се справя решаващия теста
Dim bAbort 'добавено след като приключих записването за приключените сесии
Dim strResults 'това добавих по-късно за всеки сбъркан въпрос!
bAbort = False 'булевата променлива се установява в "Лъжа", тъй като изкам да отменям само в определени случаи
' Ако това е първото стартиране на теста се инициализира всичко
' o/w връща нужните стойности. Проверявам ги като търся по идентификатор ID на въпрос
'от стринга на заявкта.
If Request.QueryString("qid") = "" Then
' Връща набор от информация за теста
If USE_DB_FOR_INFO Then
' Кодът се използва при връзка с база данни DB!
' Създава връзката с базата данни и се свързва с нея
Set cnnQuiz = Server.CreateObject("ADODB.Connection")
cnnQuiz.Open DB_CONN_STRING
' Създава набор записи и заявка към базата данни относно информация за теста
Set rsQuiz = Server.CreateObject("ADODB.Recordset")
rsQuiz.Open "SELECT * FROM quizzes WHERE quiz_id=" & QUIZ_ID & ";", cnnQuiz
' Настройвам променливите на сесията
Session("QuizName") = CStr(rsQuiz.Fields("quiz_name").Value)
Session("NumberOfQuestions") = CInt(rsQuiz.Fields("number_of_questions").Value)
Session("PercentageToPass") = CInt(rsQuiz.Fields("percentage_to_pass").Value)
' Затварям и премахвам обектите в базата данни
rsQuiz.Close
Set rsQuiz = Nothing
cnnQuiz.Close
Set cnnQuiz = Nothing
Else
' ако няма да се използва DB, тук съм дал твърдо кодиране
' НАЧАЛО
Session("QuizName") = "ASP Тест"
Session("NumberOfQuestions") = 10
Session("PercentageToPass") = 70
' КРАЙ
End If
' Уставовявам индикатора за въпроса в 1 и инициализирам стринга на отговора
iQuestionNumber = 1
Session("AnswerString") = "|"
Else
'Проверявам за да съм сигурен, че сесията още продължава!
If Session("AnswerString") = "" Then
Response.Write "Съжалявам, но Ви отне твърде много време. Можете да започнете отначало като "
Response.Write "щракнете <A HREF=""" & Request.ServerVariables("URL") & """>тук</A>."
'Обикновено използвам response.end, тук обаче немога защото съм вътре
'шаблона на сайта. Нуждая се от скрипта, за да завърша, така че тук съм декларирал и установил
'един флаг
'Response.End
bAbort = True
End If
' Взимам броя на въпросите които обработвам
iQuestionNumber = CInt(Request.QueryString("qid"))
' Регистрирам избраните отговори на последният въпрос
Session("AnswerString") = Session("AnswerString") & iQuestionNumber & "|" & _
GetLetterFromAnswerNumber(CInt(Request.QueryString("sa"))) & "|"
' Инкрементирам идентификатора на въпроса
iQuestionNumber = iQuestionNumber + 1
End If
' Ако времето на сесията е изтекло, тогава пропускам целия този код.
' респективно, ако сесията не е изтекла, целия този код си работи!
If Not bAbort Then
' Използвам локална променлива за да не ми се налага всеки път да искам достъп до набора
' Това не е задължително да се прави, на прави достъпа по-лесен
' а и работи по-бързо ... не знам колко точно, но със сигурност не вреди
iNumberOfQuestions = Session("NumberOfQuestions")
' Проверявам дали тстът е завършил. Ако е така показвам резултатите, o/w
' задавам следващия въпрос
If iQuestionNumber > iNumberOfQuestions Then
' Обработват се резултатите и се показва нещо като отчет на постижението
' Долното е направено по същата причина само че за iNumberOfQuestions както в няколкото реда по-горе
strAnswers = Session("AnswerString")
' Обработват се верните отговори и се сравняват с въведените
If USE_DB_FOR_INFO Then
' Следния код е в сила ако работим с DB!
' Създавам връзка към базата данни и я използвам
Set cnnQuiz = Server.CreateObject("ADODB.Connection")
cnnQuiz.Open DB_CONN_STRING
' Създавам набор записи и заявка към DB за да получа информация за теста
Set rsQuiz = Server.CreateObject("ADODB.Recordset")
' Specify 3, 1 (Static, Read Only)
rsQuiz.Open "SELECT * FROM questions WHERE quiz_id=" & QUIZ_ID & _
" ORDER BY question_number;", cnnQuiz, 3, 1
iScore = 0
I = 1
Do While Not rsQuiz.EOF
If UCase(CStr(rsQuiz.Fields("correct_answer").Value)) = _
GetAnswerFromAnswerString(I, strAnswers) Then
iScore = iScore + 1
' Това се използва за да се получи изход
' за коректния статус за всеки въпрос
' Полезно е и за откриване на грешки в кода
'Response.Write "Right" & "<BR>" & vbCrLf
Else
'Response.Write "Wrong" & "<BR>" & vbCrLf
strResults = strResults & I & ", "
End If
I = I + 1
rsQuiz.MoveNext
Loop
' Прекратявам разполагането на обектите в базата данни
rsQuiz.Close
Set rsQuiz = Nothing
cnnQuiz.Close
Set cnnQuiz = Nothing
Else
' Ако няма да се ползва база данни по-долу е даден кодът в отговорни стоиности
' НАЧАЛО НА КОДА
aAnswers = Array("A", "A", "A", "E", "D", "A", "E", "E", "A", "A")
' КРАЙ НА КОДА
iScore = 0
For I = 1 to iNumberOfQuestions
If UCase(CStr(aAnswers(I - 1))) = _
GetAnswerFromAnswerString(I, strAnswers) Then
iScore = iScore + 1
' Последното използвам за да получа изход
' за верността на всеки един въпрос
' Полезно е и за откриване на грешки в кода
'Response.Write "Вярно" & "<BR>" & vbCrLf
Else
'Response.Write "Грешно" & "<BR>" & vbCrLf
strResults = strResults & I & ", "
End If
Next 'I
End If
' Крайния резултат го превръщам в проценти, като го закръглям до цяло число
iScore = Round((iScore / iNumberOfQuestions) * 100)
%>
<FONT SIZE="+2"><B><%= Session("QuizName") %></B></FONT><BR>
<BR>
<%
If iScore >= Session("PercentageToPass") Then
Response.Write "Поздравления! Преминахте теста с резултат от "
Response.Write iScore & "%.<BR>" & vbCrLf
Else
Response.Write "Съжалявам! Необходимо е да постигнете резултат от "
Response.Write Session("PercentageToPass") & "% или по-висок процент, за да преминете теста. "
Response.Write "За съжаление вашият резултат беше само " & iScore & "%. "
Response.Write "Теста може да повторите отново, като щракнете <A HREF="""
Response.Write Request.ServerVariables("URL") & """>тук</A>.<BR>" & vbCrLf
End If
Response.Write "<BR>" & vbCrLf
If Len(strResults) <> 0 Then
Response.Write "Допуснахте грешки на следните въпроси: " & Left(strResults, Len(strResults) - 2)
Response.Write "<BR>" & vbCrLf
End If
'Response.Write iScore & "%"
' Ако е необходимо, това е мястото където могат да се запишат резултатите.
' в най прост вид това се прави като се запише стринга strAnswers във файл,
' може да се форматират "отчетни карти" или резултатите да се запишат в отделна база данни
' отделна база данни.
Else
' Обработва се информацията от теста
If USE_DB_FOR_INFO Then
' При използване на база данни е в сила следния код
' Създавам и откривам връзка към база данни
Set cnnQuiz = Server.CreateObject("ADODB.Connection")
cnnQuiz.Open DB_CONN_STRING
' Създавам набор записи и заявка към базата данни за да получа информация за теста
Set rsQuiz = Server.CreateObject("ADODB.Recordset")
rsQuiz.Open "SELECT * FROM questions WHERE quiz_id=" _
& QUIZ_ID & " AND question_number=" & iQuestionNumber & ";", cnnQuiz
' Поставям информацията за въпроса
strQuestionText = CStr(rsQuiz.Fields("question_text").Value)
' Взимам масив от отговори
aAnswers = Array( _
CStr(rsQuiz.Fields("answer_a").Value & ""), _
CStr(rsQuiz.Fields("answer_b").Value & ""), _
CStr(rsQuiz.Fields("answer_c").Value & ""), _
CStr(rsQuiz.Fields("answer_d").Value & ""), _
CStr(rsQuiz.Fields("answer_e").Value & ""), _
CStr(rsQuiz.Fields("answer_f").Value & ""))
' Зле написано, но все пак работи
For I = LBound(aAnswers) To UBound(aAnswers)
If aAnswers(I) = "" Then
ReDim Preserve aAnswers(I - 1)
Exit For
End If
Next ' I
' Прекратявам поместването на обекти в базата данни
rsQuiz.Close
Set rsQuiz = Nothing
cnnQuiz.Close
Set cnnQuiz = Nothing
Else
' Ако няма да се използва база данни стойностите са в кода
' НАЧАЛО НА КОДА
Select Case iQuestionNumber
Case 1
strQuestionText = "Какво означава на английски съкращението ASP?"
aAnswers = Array( _
"Active Server Pages", _
"Additional Sensory Perception", _
"Accidental Script Problem", _
"Altruistically Solving Problems", _
"Additional Sleeping Preferred", _
"Всички посочени по-горе")
Case 2
strQuestionText = "На коя команда е еквивалентен записа <%= %>?"
aAnswers = Array( _
"Response.Write", _
"Request.Write", _
"Referer.Write", _
"Redirect.Write", _
"Reasonably.Write", _
"Всяка една от посочените")
Case 3
strQuestionText = "Какво прави "Option Explicit"?"
aAnswers = Array( _
"Изисква деклариране на дадена променлива", _
"Кара компютъра да дава съобщения за грешки", _
"Преобразува PG в NC-17")
Case 4
strQuestionText = "Кой от следните записи не е валиден във "
strQuestionText = strQuestionText & "VBScript?"
aAnswers = Array( _
"Do...Loop", _
"While...Wend", _
"For...Next", _
"For Each...Next", _
"Цикъла се повтаря 10 пъти")
Case 5
strQuestionText = "Кой от езиците не използваме за да вграждаме скриптове в ASP?"
aAnswers = Array( _
"VBScript", _
"JavaScript (JScript)", _
"PerlScript", _
"SuperScript")
Case 6
strQuestionText = "Къде се изпълнява ASP кода?"
aAnswers = Array( _
"На сървъра", _
"В клиентския браузър", _
"На всяка машина която го изиска", _
"По последни сведения само в София")
Case 7
strQuestionText = "Кой набор от съкращения не е свързан с ASP?"
aAnswers = Array( _
"CDO, CDONTS", _
"ADO, RDS, DAO, ODBC", _
"IIS, PWS, MMC", _
"ADSI, XML", _
"BÖC, OU812, GNR, BTO")
Case 8
strQuestionText = "Кое от следните неможе да получим в отговор "
strQuestionText = strQuestionText & "на набора заявки?"
aAnswers = Array( _
"Кукита", _
"Формуляр за попълване", _
"QueryString", _
"Сървърни променливи", _
"Съхраненият код", _
"Клиентски сертификат")
Case 9
strQuestionText = "Какъв ще бъде резултатът от работата на този скрипт?<BR><BR><%<BR>"
strQuestionText = strQuestionText & "Dim aTempArray<BR>Dim I<BR>"
strQuestionText = strQuestionText & "aTempArray = Array(1, 2, 3)<BR>"
strQuestionText = strQuestionText & "For I = LBound(aTempArray) To "
strQuestionText = strQuestionText & "Ubound(aTempArray)<BR>"
strQuestionText = strQuestionText & " "
strQuestionText = strQuestionText & "Response.Write I & " "<BR>"
strQuestionText = strQuestionText & "Next 'I<BR>%><BR>"
aAnswers = Array( _
"0 1 2", _
"1 2 3", _
"0<BR>1<BR>2<BR>", _
"1<BR>2<BR>3<BR>")
Case 10
strQuestionText = "Кой е URL- ла на PHOTON.NET?"
aAnswers = Array("http://pritybg.com/photon")
End Select
' КРАЙ НА КОДА
End If
' това което имаме е наборът променливи ...
' показващ подходящия въпрос и отговори
%>
<FONT SIZE="+2"><B><%= Session("QuizName") %></B></FONT><BR>
<BR>
Прогрес Индикатор:
<%
Const BAR_LENGTH = 160
If iQuestionNumber = 1 Then
' Тъй като нулевата дължина се игнорира от браузърите
' трябва да премахна изображението напълно
Response.Write "<IMG SRC=""spacer_red.gif"" HEIGHT=""10"" WIDTH="""
Response.Write BAR_LENGTH
Response.Write """><BR>"
Else
Response.Write "<IMG SRC=""spacer_blue.gif"" HEIGHT=""10"" WIDTH="""
Response.Write (BAR_LENGTH / iNumberOfQuestions) * (iQuestionNumber - 1)
Response.Write """>"
Response.Write "<IMG SRC=""spacer_red.gif"" HEIGHT=""10"" WIDTH="""
Response.Write (BAR_LENGTH / iNumberOfQuestions) * (iNumberOfQuestions - (iQuestionNumber - 1))
Response.Write """><BR>"
End If
%>
Въпрос <%= iQuestionNumber %> от <%= iNumberOfQuestions %><BR>
<BR>
<STRONG><%= iQuestionNumber %>.</STRONG> <%= strQuestionText %><BR>
<BR>
<STRONG>Отговори:</STRONG>
<OL TYPE="A">
<%
For I = LBound(aAnswers) to UBound(aAnswers)
Response.Write "<LI><A HREF=""" & Request.ServerVariables("URL")
Response.Write "?qid=" & iQuestionNumber & "&sa=" & I & """>"
Response.Write aAnswers(I) & "</A></LI>" & vbCrLf
Next 'I
%>
</OL>
<%
End If
End If 'bAbort
%> |
За въпроси: Даниел И. Денев
![Символ на мъдростта](./upl/attachments/owl.4958.jpg) Символ на мъдростта PhotonSoft Ltd. (president and owner) Bulgaria, 5000 Veliko Tarnovo 58V Nikola Gabrovski blv. cell 00359 884 027191 cell 00359 889 369651 tel 00359 619 23355 daniel.i.denev@gmail.com daniel_i_denev@abv.bg http://strongmind.webs.com (private blog)
Ограничения: IIS, ASP. Да не се включва в платени пакети! Да се извести разработчика за промени направени в кода.
Изисквания: IIS, ASP, XML
Мнения на потребители
Няма мнения
|
Платени препратки Рекламни чантиЕкстрапак произвежда рекламни чанти и опаковки от хартия и (био)полимери
Bags.BG Компютри за геймъри
Домашни компютърни системи за игри Конфигурации по желание от Перси ООД www.persy.com bgERPУправлявайте фирмата си с безплатен, уеб базиран софтуер www.bgerp.com вашето каре - тук
|