Tải bản đầy đủ (.pdf) (15 trang)

TÌM HIỂU VÀ XÂY DỰNG HỆ THỐNG FRAMEWORK HỖ TRỢ CÁC HÌNH THỨC TRẮC NGHIỆM -10 potx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (809.18 KB, 15 trang )









124
9.2 Kỹ thuật automation Microsoft Word
9.2.1 Giới thiệu
Automation là kỹ thuật cho phép tận dụng các tính năng của 1 ứng dụng có sẵn và
tích hợp vào trong chương trình của mình.
Hệ thống của chúng em đòi hỏi phải kết xuất các đề thi ra file để phục vụ cho yêu
cầu thi trên giấy, cũng như phải nhập được dữ liệu câu hỏi từ các định dạng file để
tận dụng ngân hàng đề thi đã có từ trước đến nay.
Theo nhận xét thì định dạ
ng file .doc và file .pdf là phổ biến nhất hiện nay cho việc
lưu trữ ngân hàng đề thi, tuy nhiên đã có nhiều chương trình hỗ trợ cho việc chuyển
qua lại giữa 2 định dạng file này. Thêm nữa, file .doc có thể dễ dàng được tạo ra vì
MS Word là trình soạn thảo văn bản rất thân thiện, phổ biến. Vì vậy, chúng em
quyết định sử dụng kỹ thuật automation để automate MS Word nhằm sử dụng trực
tiếp các tính năng có sẵn củ
a Word phục vụ cho yêu cầu nhập xuất/kết xuất ngân
hàng đề thi, câu hỏi của hệ thống.
9.2.2
Các đối tượng trong MS Word

Hình 9-1 Sơ đồ quan hệ của các đối tượng của MS Word









125
- Application chính là ứng dụng MS Word đang được gọi thực thi.
- Document là đại diện cho các văn bản Word đang quản lý. Khi mở hay tạo 1
văn bản mới chính là tạo nên 1 đối tượng document và thêm đối tượng này
vào tập hợp các document của application hiện hành. Văn bản đang được
trực tiếp xử lý là active document.
- Selection đại diện cho vùng văn bản đang được chọn. Khi không có gì được
chọn thì selection chính là vị trí con trỏ. Selection có th
ể bao gồm nhiều
vùng văn bản không liên tiếp nhau.
- Range đại diện cho 1 vùng văn bản liên tục được xác định bởi ký tự bắt đầu
và ký tự kết thúc vùng văn bản. 1 document có thể được chứa nhiều range.
Range có thể:
 Chỉ chứa duy nhất vị trí con trỏ (điểm chèn) hay 1 đoạn văn bản hay toàn
bộ document.
 Gồm cả các ký tự không in được như là khoảng trắng, khoảng tab, dấu
phân cách đoạn văn bản …
 Chỉ tồn tại khi đoạn code tạo ra nó đang được thực thi.
- Bookmark cũng đại diện cho 1 vùng văn bản liên tục, được sử dụng để đánh
dấu vị trí. Bookmark có thể chỉ là 1 điểm chèn, mà cũng có thể là toàn bộ
văn bản. Bookmark có các đặc điểm sau:
 Có thể có tên.
 Được lư
u cùng với document.

 Mặc định là được ẩn đi.
9.2.3
Ngôn ngữ VBA (Microsoft Visual Basic for Applications)
Tất cả các ứng dụng của Microsoft Office đều có ngôn ngữ script của nó, đó
chính là VBA. Ngôn ngữ này có thể được sử dụng để thực hiện các nhiệm vụ trong
ứng dụng. Nói 1 cách dễ hiểu thì tất cả các thao tác trên ứng dụng thông qua thanh
menu và bàn phím đều có thể được diễn tả lại bằng ngôn ngữ này. Vì vậy, có 1 cách
giúp cho người chưa quen với đối tượng của MS Word xác định được các công việc








126
phải làm khi thực hiện automation là sử dụng các macro của chính MS Word ghi lại
các thao tác muốn automate.
Ví dụ bạn muốn automate MS Word để tạo 1 file mới, gõ vào 1 đoạn text rồi
lưu lại nhưng bạn không biết phải sử dụng các hàm nào. Bạn có thể thông qua các
macro để biết được điều đó.
Trước tiên, bạn phải ghi lại 1 macro mới.

Hình 9-2 Record macro trong MS Word
Sau đó, bạn thực hiện các thao tác muốn automate rồi dừng việc ghi macro lại.
Và cuối cùng, bạn chỉ việc xem MS Word đã thao tác như thế nào thông qua macro
vừa ghi được.









127

Hình 9-3 Edit macro trong MS Word

Hình 9-4 Kết quả edit macro trong MS Word








128
9.2.4 Ứng dụng trong hệ thống
Để có thể thực hiện automation, trước tiên phải cho phép chương trình tham
chiếu đến thư viện xử lý của Word.

Hình 9-5 Add reference đến Word Object Library trong .NET
9.2.4.1 Import
Thao tác import trong hệ thống cần phải xử lý cả việc import hình ảnh. Mà
như đã biết, các hình ảnh được chèn vào trong file .doc thì sẽ được lưu cùng với
file .doc đó. Do vậy, để lấy được hình cụ thể, chúng em phải tiến hành lưu tạm
file .doc dưới dạng trang web, rồi tìm trong source của trang web liên kết đến hình

ảnh cụ thể để copy lưu vào trong cơ sở dữ liệu.
Object missing = System.Reflection.Missing.Value;

object saveFileName = uniqueFileName;
object fileFormat = Word.WdSaveFormat.wdFormatHTML;

// Luu vao file tam duoi dang html
wordApp.ActiveDocument.SaveAs(
ref saveFileName, ref fileFormat, ref missing, ref missing,
ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing);









129
wordApp.ActiveDocument.Close(ref missing, ref missing, ref missing);

StreamReader r = new StreamReader(uniqueFileName);
string str = r.ReadToEnd();
r.Close();

int n1 = str.IndexOf("<body");
char tempChar = '<';

while(tempChar != '>')
{
tempChar = str[n1];
n1++;
}
int n2 = str.IndexOf("</body>");
string strFinal = str.Substring(n1, n2 - n1);
Dựa vào các dấu phân cách quy định sẵn, chúng em sẽ tách được nội dung các
câu hỏi, và trong mỗi câu hỏi sẽ lọc ra được đâu là nội dung hỏi và đâu ra nội dung
các lựa chọn (đơn thuần chỉ là thao tác xử lý chuỗi). Cụ thể, một câu hỏi trong file
muốn import phải có định dạng như sau:
[!!!] Nội dung hỏi
<!!!> Nội dung lựa chọn thứ 1 *
<!!!> Nội dung lựa chọn thứ 2
<!!!> Nội dung lựa chọ
n thứ 3
<!!!> Nội dung lựa chọn thứ 4 *
<!!!> Nội dung lựa chọn thứ 5
Trong đó:
- [!!!] là dấu quy định phân cách các câu hỏi.
- <!!!> là dấu quy định phân cách các lựa chọn.
- * là dấu quy định lựa chọn đúng.
- Số lựa chọn và số lựa chọn đúng là không có giới hạn.
Thông tin nội dung câu hỏi lấy được sẽ được sử dụng để xây dựng thành chuỗi
xml và lưu vào CSDL.









130
9.2.4.2
Export
Hệ thống hỗ trợ việc export 1 đề thi ra file .doc theo 1 template đề thi có sẵn.
Template đề thi được tạo ra theo ý thích của các giáo viên và được copy vào trong
thư mục WordFile Temlates của hệ thống. 1 template đề thi phải đáp ứng các yêu
cầu sau:
- Có 1 bookmark có tên là assName đặt tại vị trí giáo viên muốn hiển thị tên
bài thi.
- Có 1 bookmark có tên là assHeader đặt tại vị trí giáo viên muốn hiển thị các
ghi chú đầu bài thi (header)
- Có 1 bookmark có tên là assFooter đặt tại vị trí giáo viên muốn hiển thị các
ghi chú cuố
i bài thi (footer)
- Có 1 bookmark có tên là assSections đặt tại vị trí giáo viên muốn bắt đầu
hiển thị các section, các câu hỏi của bài thi.
- Phần nào giáo viên không muốn hiển thị thì bookmark đánh dấu phần đó
không cần phải được tạo ra.
Khi có yêu cầu export 1 đề thi ra file, chương trình sẽ tìm vị trí các bookmark,
nếu bookmark tồn tại trong file template được chọn thì chương trình sẽ ghi đoạn
văn bản phù hợp vào vị trí bookmark đó.
foreach (Word.Bookmark brm in privateWordApp.ActiveDocument.Bookmarks)
if (brm.Name == "assHeader")
ReplaceBookmarkText("assHeader", privateAssessment.HeaderNote);

Trường hợp đoạn văn bản cần ghi có chứa tag image (tức là phải chèn 1 hình
vào file) thì chương trình sẽ thực hiện thêm 1 đối tượng Word.Shape vào tập hợp

hình ảnh mà văn bản đang được xử lý quản lý. Khi lưu văn bản, các hình ảnh cũng
sẽ được lưu trữ theo.
private void TypeString(Word.ApplicationClass privateWordApp, string
strText)
{
int pos = strText.IndexOf("<img");
while (pos >= 0)
{
privateWordApp.Selection.TypeText(strText.Substring(0, pos));

strText = strText.Remove(0, pos);









131
pos = strText.IndexOf("src=");
strText.Remove(0, pos+1);

pos = strText.IndexOf("\"");

string image = strText.Substring(0, pos);

Object oFalse = false;
Object oTrue = true;

Object oMissing = Type.Missing;

// them 1 hinh anh vao tap hop InlineShapes
privateWordApp.Selection.InlineShapes.AddPicture(image, ref
oFalse, ref oTrue, ref oMissing);

pos = strText.IndexOf("/img>");
strText.Remove(0, pos);

pos = strText.IndexOf("<img");
}

privateWordApp.Selection.TypeText(strText);
}









132
Chương 10 Tổng kết
10.1 Kết luận
Sau thời gian nghiên cứu, tìm hiểu các hình thức trắc nghiệm và phát triển ứng
dụng, đề tài đã đạt được các mục tiêu sau:
o Xây dựng được một cổng dịch vụ thi cử là một hệ thống liên hoàn phối
hợp nhuần nhuyễn giữa môi trường web và windows trong việc quản lý

ngân hàng câu hỏi, đề thi và tổ chức thi trắc nghiệm.
o Có một khung ứng dụng (framework) hết sức linh động, có tính tiến hóa
cao giúp cho vi
ệc mở rộng và nâng cấp hệ thống thật sự dễ dàng và hiệu
quả.
o Xây dựng được các ứng dụng trên web và trên windows tiện dụng, ổn
định và nhiều tính năng hữu ích, có thể ứng dụng được ngay trong thực tế
trong việc soạn câu hỏi, đề thi trắc nghiệm và thực hiện việc đánh giá,
kiểm tra nhanh chóng.
o Cấu trúc câu hỏi trắc nghiệm tuân theo đặc tả IMSQTI – một
đặc tả XML,
là đặc tả quốc tế được sử dụng rộng rãi nhất trên thế giới. Nhờ đó, cơ sở
dữ liệu ngân hàng câu hỏi của hệ thống có khả năng trao đổi, có thể phân
phối hay sử dụng lại ở bất cứ hệ thống nào khác trên thế giới có sử dụng
đặc tả này.
10.2 Hướng phát triển
 Thêm nhiều loại câu hỏi thêm nữa
 Hỗ trợ thêm nhiều phiên bản khác nhau cho từng loại câu hỏi
 Hoàn thiện thêm các chức năng giúp thuận tiện hơn cho người sử dụng








133
Phuï luïc A - Export database theo đặc tả IMSQTI
Nội dung file XSLT làm nhiệm vụ export:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl=" >

<xsl:template match="@*|node()">
<xsl:apply-templates select="*" />
</xsl:template>

<xsl:template match="assessmentItem">
<xsl:copy>
<xsl:apply-templates select="@* | text() | node()" />

</xsl:copy>
</xsl:template>

<xsl:template match="responseDeclaration">
<xsl:copy>
<xsl:apply-templates select="@* | text() | node()" />
</xsl:copy>
</xsl:template>

<xsl:template match="responseDeclaration/node()
| responseDeclaration/text()
| responseDeclaration/node()/node()
| responseDeclaration/text()/node()">
<xsl:copy>
<xsl:apply-templates select="@* | text() | node()" />
</xsl:copy>
</xsl:template>


<xsl:template match="outcomeDeclaration">
<xsl:copy>
<xsl:apply-templates select="@* | text() | node()" />
</xsl:copy>
</xsl:template>

<xsl:template match="itemBody">
<xsl:copy>
<xsl:apply-templates select="@* | text() | node()" />
</xsl:copy>
</xsl:template>

<xsl:template match="itemBody/node() | itemBody/text()
| itemBody/node()/node() | itemBody/node()/text()">
<xsl:copy>
<xsl:apply-templates select="@* | text() | node()" />
</xsl:copy>








134
</xsl:template>

<xsl:template match="itemBody/questionView">
</xsl:template>


<xsl:template match="responseProcessing">
<xsl:copy>
<xsl:apply-templates select="@* | text() | node()" />
</xsl:copy>
</xsl:template>

<xsl:template match="@*">
<xsl:copy>
<xsl:apply-templates select="*" />
</xsl:copy>
</xsl:template>

<xsl:template match="text()">
<xsl:copy>
<xsl:apply-templates select="*" />
</xsl:copy>
</xsl:template>

</xsl:stylesheet>









135

Phuï luïc B - Phần lưu trữ XML của một số dạng câu hỏi trong
đặc tả IMSQTI

o Câu hỏi inlineChoiceInteraction:
<?xml version="1.0" encoding="UTF-8"?>
<assessmentItem identifier="choiceMultiple"
title="Composition of Water"
adaptive="false" timeDependent="false">
<responseDeclaration identifier="RESPONSE"
cardinality="multiple" baseType="identifier">
<correctResponse>
<value>H</value>
<value>O</value>
</correctResponse>
<mapping lowerBound="0" upperBound="2" defaultValue="-2">
<mapEntry mapKey="H" mappedValue="1"/>
<mapEntry mapKey="O" mappedValue="1"/>
<mapEntry mapKey="Cl" mappedValue="-1"/>
</mapping>
</responseDeclaration>
<outcomeDeclaration identifier="SCORE" cardinality="single"
baseType="integer"/>
<itemBody>
<choiceInteraction responseIdentifier="MR01" shuffle="true"
maxChoices="4">
<prompt>Which of the following elements are used to form
water?</prompt>
<simpleChoice identifier="H"
fixed="false">Hydrogen</simpleChoice>
<simpleChoice identifier="He"

fixed="false">Helium</simpleChoice>
<simpleChoice identifier="C"
fixed="false">Carbon</simpleChoice>
<simpleChoice identifier="O"
fixed="false">Oxygen</simpleChoice>
<simpleChoice identifier="N"
fixed="false">Nitrogen</simpleChoice>
<simpleChoice identifier="Cl"
fixed="false">Chlorine</simpleChoice>
</choiceInteraction>
</itemBody>
<responseProcessing
template=" />nse"
templateLocation=" /RPTemplates/rpMapResponse.xml"/>
</assessmentItem>








136
o Câu hỏi textEntryInteraction:
<?xml version="1.0" encoding="UTF-8"?>
<assessmentItem identifier="textEntry" title="Richard III (Take
3)"
adaptive="false" timeDependent="false">
<responseDeclaration identifier="RESPONSE" cardinality="single"

baseType="string">
<correctResponse>
<value>York</value>
</correctResponse>
<mapping defaultValue="0">
<mapEntry mapKey="York" mappedValue="1"/>
<mapEntry mapKey="york" mappedValue="0.5"/>
</mapping>
</responseDeclaration>
<outcomeDeclaration identifier="SCORE" cardinality="single"
baseType="float"/>
<itemBody>
<p>Identify the missing word in this famous quote from
Shakespeare's Richard III.</p>
<blockquote>
<p>Now is the winter of our discontent<br/> Made glorious
summer by this sun of
<textEntryInteraction responseIdentifier="RESPONSE"
expectedLength="15"/>;<br/>
And all the clouds that lour'd upon our house<br/> In
the deep bosom of the ocean buried.</p>
</blockquote>
</itemBody>
<responseProcessing
template=" />nse"
templateLocation=" /RPTemplates/rpMapResponse.xml"/>
</assessmentItem>










137
o Câu hỏi orderInteraction:
<?xml version="1.0" encoding="UTF-8"?>
<assessmentItem identifier="order" title="Grand Prix of Bahrain"
adaptive="false" timeDependent="false">
<responseDeclaration identifier="RESPONSE"
cardinality="ordered" baseType="identifier">
<correctResponse>
<value>DriverC</value>
<value>DriverA</value>
<value>DriverB</value>
</correctResponse>
</responseDeclaration>
<outcomeDeclaration identifier="SCORE" cardinality="single"
baseType="integer"/>
<itemBody>
<orderInteraction responseIdentifier="RESPONSE"
shuffle="true">
<prompt>The following F1 drivers finished on the podium in
the first ever Grand Prix of
Bahrain. Can you rearrange them into the correct
finishing order?</prompt>
<simpleChoice identifier="DriverA">Rubens
Barrichello</simpleChoice>

<simpleChoice identifier="DriverB">Jenson
Button</simpleChoice>
<simpleChoice identifier="DriverC">Michael
Schumacher</simpleChoice>
</orderInteraction>
</itemBody>
<responseProcessing

template=" />Correct" templateLocation=" /RPTemplates/rpMatchCorrect.xml"/>
</assessmentItem>









138
TÀI LIỆU THAM KHẢO
[1] www.msdn.microsoft.com
[2] www.imsglobal.org

[3] www.el.edu.net.vn

[4] www.codeproject.com

[5] www.dnzone.com


[6] www.asp.net

[7] www.w3.org



×