เกมตอบคำถามรุ่น 3.2001 (Javascript+exe+dbf)

ปรับปรุง : 2548-11-15 (เพิ่ม e-book)

บทเรียน ONLINE : การเขียนภาษา Clipper
[ เกมตอบคำถามรุ่น 3.2001 (Javascript+exe+dbf)]
[ ตัวอย่างข้อสอบ #099 | #100 | #101 | qjaval.htm | แฟ้ม qjava.dbf ใช้โปรแกรม DBU ใน compiler ปรับปรุงได้ | Clipper compiler 5]
[ qjava.prg เป็น source โปรแกรมของ qjava.exe | qjaval.prg เป็น source ที่มีปัญหากับ IE4 | qjava.exe ซึ่งนำไปใช้สร้างข้อสอบได้ทันที ]
เมื่อ copy qjava.exe และ qjava.dbf ไปประมวลผล จะสร้างข้อสอบ 1000 ชุด(.htm) ในเครื่องท่าน ใน 2 นาที
ซึ่งแต่ละครั้งที่ สร้างชุดข้อสอบ สามารถกำหนดจำนวนข้อในแต่ละชุด และกำหนดจำนวนชุดได้
ถ้าต้องการแก้โปรแกรม หรือข้อมูล ท่านต้อง copy clipper5.zip และ qjava.prg ไปปรับปรุงและแปลเป็น exe ใหม่

โปรแกรมชุดนี้เขียนเพื่อให้ท่าน copy ไปปรับปรุงแก้ไข แล้วใช้เล่นในโรงเรียนของท่าน .. เป็นสำคัญ
แล้วผมก็จะใช้โปรแกรมชุดนี้ในสถาบันของผมเช่นกัน .. แต่ต้องเตรียมข้อมูลชุดใหม่ ไม่ใช่ชุดตัวอย่างนี้

  1. หลักการในเบื้องต้น
  2. สิ่งที่ต้องจัดเตรียม เพื่อทำชุดข้อสอบแบบสุ่ม
  3. โปรแกรม และแฟ้มข้อมูลที่จำเป็นต้องใช้ (อธิบายโครงสร้างแฟ้ม เพื่อให้ท่านนำไปเพิ่ม ลบ แก้ไขข้อมูลได้)
  4. วิธีการเขียนส่วน Javascript สำหรับเช็คคำตอบ (ในที่นี้นำเสนอหลักการสั้น ๆ ให้เห็นภาพนิดหน่อยเท่านั้น)
  5. วิธีการเขียนโปรแกรมสร้างชุดข้อสอบ ด้วย clipper5 (qjava.prg)
  6. วิธีการเขียนโปรแกรมสร้างชุดข้อสอบ ด้วย clipper5 (qjaval.prg ซึ่งใช้ได้ไม่สมบูรณ์ใน ie4)
  7. แบบฝึกหัด
หลักการในเบื้องต้น
- ในปัจจุบันเครือข่าย internet เข้ามามีอิทธิพลในชีวิตของมนุษย์เพิ่มขึ้นทุกวินาที โดยเฉพาะการไหลเข้าไปสู่สถาบันการศึกษา เนื่องจากสถาบันการศึกษา คือแหล่งรวมของผู้ใฝ่ศึกษา และนักพัฒนาที่กระหายที่จะเรียนรู้ ศึกษา พัฒนา และนำไปใช้ เพราะศักยภาพของเครือข่าย internet ที่สามารถนำเสนอข้อมูลได้ทั้งภาพ และเสียง และยังสามารถนำข้อมูล จากมุมใดของโลกมาใช้ หรือแม้แต่การสั่งประมวลผลข้อมูลจากอีกมุมหนึ่งของโลก เพื่อมานำแสดงผลในคอมพิวเตอร์ที่ online เข้าสู่ระบบ internet ไว้ ดังนั้นการประยุกต์ และพัฒนาโปรแกรมต่าง ๆ เพื่อนำไปใช้ในเครือข่าย internet จึงเกิดขึ้นอยู่ตลอดเวลา และการพัฒนายังเกิดได้จากทุกมุมโลก จากนักพัฒนาทุกระดับ เพื่อให้การใช้ประโยชน์จากระบบเครือข่าย ได้ผลสูงสุด
- จากแนวคิดที่ว่า นักเรียน น่าจะได้เรียนรู้ และศึกษาหาข้อมูลที่อาจารย์ผู้สอน เตรียมไว้ให้นักเรียนเข้าไปศึกษา และเนื้อหาต่าง ๆ ควรได้รับการปรับปรุงให้ทันยุค ทันสมัยเสมอ สิ่งหนึ่งที่อาจารย์สามารถเตรียมให้นักเรียนของตน ได้ฝึกฝนตนเองเป็นอย่างดีคือ แบบฝึกหัด ซึ่งโดยทั่วไปแบบฝึกหัดที่อยู่ในชีท หรือรวบรวมเป็นเล่ม จะมีข้อจำกัดบางประการ เช่นนักเรียนเปิดแบบฝึกหัดหน้าที่ 10 ก็จะพบแต่ข้อสอบข้อเดิมไม่เคยเปลี่ยนแปลง เพื่อแก้ข้อจำกัดนั้น จึงได้มีแนวคิดที่จะทำคลังข้อสอบเก็บไว้ในเครือข่าย internet แล้วให้นักเรียนได้มาฝึกฝนผ่านคอมพิวเตอร์ที่ online อยู่จากที่ใดก็ได้ โดยมีจุดเด่นคือ การเปิดข้อสอบแต่ละครั้ง จะพบข้อสอบที่ไม่ซ้ำจากของเดิม และไม่มีการเรียงข้อ แต่ถ้านักศึกษาใช้เวลา กับการทำแบบฝึกหัดมาก ๆ ก็จะมีประสบการณ์ในการทำข้อสอบ และไม่รู้สึกเบื่อ ถ้าข้อสอบที่อาจารย์ผู้สอนเตรียมไว้ มีจำนวนข้อสอบมากมาก
- ดังนั้น จึงต้องการให้อาจารย์ผู้สอน ที่สนใจจะมีแบบฝึกหัด หรือข้อสอบเก่า เตรียมไว้ให้นักเรียน ได้เข้าไปฝึกฝนตนเอง โดยอาจารย์ท่านนั้น ควรจะมีความรู้เกี่ยวกับการเขียนโปรแกรมบ้าง เพื่อที่จะได้ปรับปรุงแก้ไขรูปร่างหน้าตาของข้อสอบ และสามารถเตรียมฐานข้อมูลแบบฝึกหัดได้ด้วยตนเอง ซึ่งอาจารย์ที่จะนำวิธีการนี้ไปใช้ จะทั้งการเขียนโปรแกรม บนระบบ DOS และการเขียนโปรแกรมในระบบ internet เพื่อที่จะทำศูนย์บริการข้อสอบ หรือแบบฝึกหัดนี้ แบบ online ให้นักเรียน หรือผู้สนใจได้ เข้าไปฝึกทำแบบฝึกหัดที่อาจารย์เตรียมไว้ ได้ตลอด 24 ชั่วโมง ได้ทุกมุมโลก แบบ online นี้เขียนอธิบายไว้ใน การทำศูนย์สอบ Online แบบตรวจทันที
- สำหรับบทความนี้จะต่างจากศูนย์สอบ online เล็กน้อย เพราะทราบว่า บางโรงเรียนไม่มีระบบ internet ให้บริการเต็มรูปแบบ หรือมีก็จะมีความเร็วที่ช้า หรือไม่ อาจารย์ก็ต้องการทำข้อสอบให้นักเรียนนำไปฝึกฝน ด้วยตนเองที่บ้าน และ โปรแกรมชุดนี้สนองความต้องการเหล่านั้นได้ โดยผู้ใช้จะสั่งประมวลผล เพื่อสร้างชุดข้อสอบแบบสุ่ม และให้นักเรียนนำไปทดสอบตนเองที่บ้าน หรือจะใช้เล่นในโรงเรียน ในแบบ offline ก็ทำได้
สิ่งที่ต้องจัดเตรียม เพื่อทำชุดข้อสอบแบบสุ่ม
  1. คอมพิวเตอร์ 1 เครื่องไม่ต้องเร็วมากก็ได้ จะ 386 หรือ 486 ก็ยังไหว
  2. เนื้อที่ใน harddisk ไม่เกิน 1 MB
  3. ใช้ Browser รุ่นใหม่ ยิ่งใหม่ยิ่งดี หรือจะเก่าหน่อยก็ไม่เป็นไร (รับได้หมด)
  4. ทำการประมวลผลใน dos mode ได้ เพราะ qjava.exe จะรับค่าแบบ text mode 3 ค่าไปสร้างชุดข้อสอบให้
  5. ไม่ต้องมี server หรือต่อ net แต่อย่างใด

โปรแกรม และแฟ้มข้อมูลที่จำเป็นต้องใช้
  1. qjava.dbf ทำหน้าที่เก็บข้อสอบทั้งหมด ภายในแฟ้มประกอบด้วยเขตข้อมูล 7 ตัว
    no : ลำดับของข้อสอบ (ตัวอักษร)
    ques : คำถาม (ตัวอักษร)
    c1 ถึง c4 : ตัวเลือกที่ 1 ถึง 4 (ตัวอักษร)
    ans : เลขตัวเลือกที่ถูกมีค่าระหว่าง 1 ถึง 4 (ตัวอักษร)
  2. qjava.exe ซึ่งเป็นผลจากการแปลโปรแกรม qjava.prg ทำหน้าที่อ่านข้อมูลจากแฟ้ม qjava.dbf มาเลือกข้อสอบแบบสุ่ม เท่าจำนวนที่กรอกเข้าไปเมื่อประมวลผล qjava.exe ผลของโปรแกรมนี้จะสร้างข้อสอบเท่าที่ต้องการ เช่น กรอกเลขเริ่มต้นว่า 15 และเลขสิ้นสุดว่า 914 โปรแกรมจะทำการสร้างข้อสอบให้ qjava015.htm ถึง qjava914.thm เป็นจำนวนถึง 900 ชุด ใน 2 นาที ซึ่ง จะอยู่ในรูปที่สามารถเลือกตอบ และตรวจคำตอบได้ด้วย Javascript ทันที
  3. qjava015.htm เป็นแฟ้มที่นักเรียนสามารถเปิด แฟ้มทดสอบทำด้วยตนเอง แต่แฟ้มนี้จะไม่ถูกเปลี่ยน จนกว่าจะมีการประมวลผล qjava.exe เพื่อสร้างข้อสอบใหม่ มาแทนที่ชุดเดิม ทุกชุด

วิธีการเขียนส่วน Javascript สำหรับเช็คคำตอบ
ในการใช้งานจะเพิ่มตัวแปร input มาอีก 2 ตัวเก็บใน button เพื่อแสดงคะแนนแต่ละข้อ และคะแนนทั้งหมด
เพื่อให้เข้าใจโปรแกรมต่อไปได้โดยง่าย จึงขออธิบายหลักการของ Javascript ให้เข้าใจได้โดยง่ายก่อน โดยโปรแกรมนี้จะแสดงให้เห็นส่วนสำคัญ 2 ส่วนคือ
1. ประกาศ function สำหรับเก็บค่าที่ถูกต้อง เมื่อมีการเรียก function checkq1 จะนำค่าที่ถูกส่งเข้าไปผ่านตัวแปร value ไปตรวจสอบ แล้วจึงสั่ง alert ค่า right หรือ wrong ที่ตรงกับเงื่อนไขทางจอภาพต่อไป
2. ส่วนของ form ใช้ทำหน้าที่แสดงข้อสอบบนจอภาพ เมื่อเลือกตอบตัวเลือกใด จะทำงานตาม function checkq1 ที่อยู่ในคุณสมบัติ onclick นั้น แล้วส่งค่าจากตัวแปร value ไปให้ function ตรวจสอบ
Source code เพื่อแสดงให้เห็นการใช้ Javascript ในการตรวจคำตอบ
    <html><head><title>Java sample</title> <script language="JavaScript"> <!-- function checkq1( value ) { if( value == 1) alert('Correct'); if( value == 2) alert('Wrong'); if( value == 3) alert('Wrong'); if( value == 4) alert('Wrong'); return true;} // --> </script></head> <body bgcolor=#ffffdd><font size=0 face="ms sans serif"> <form name=Question1> 1. 1+3 เท่ากับ เท่าไร <br><input type=radio name=Q1 value=1 onclick="checkq1(1);">4 <br><input type=radio name=Q1 value=2 onclick="checkq1(2);">3 <br><input type=radio name=Q1 value=3 onclick="checkq1(3);">2 <br><input type=radio name=Q1 value=4 onclick="checkq1(4);">1 </form> </body></html> ตัวอย่างผลลัพธ์
    1. 1+3 เท่ากับ เท่าไร 4 3 2 1

วิธีการเขียนโปรแกรมสร้างชุดข้อสอบ ด้วย clipper5
(qjava.prg -> qjava.exe)
ส่วนที่ 1 : ส่วนกำหนดค่าเริ่มต้นให้กับโปรแกรม
จะมีการทำงานของการรับค่าตัวแปรมา 3 ตัว
และนำไปควบคุมการทำซ้ำเพื่อเรียก procedure main
ซึ่ง ส่วนที่ 2 ถึง 6 จะอยู่ใน procedure main ทั้งสิ้น

ส่วนที่ 2 : ทำหน้าที่สุ่มเลขข้อมา 10 ข้อ ไม่ให้ซ้ำกัน เก็บไว้ใน array
ส่วนที่ 3 : ส่วนจัดทำ javascript เพื่อกำหนดข้อที่ถูกหรือผิด ตามเลขข้อที่สุ่มมา
ส่วนที่ 4 : ส่วน html เริ่มต้น
ส่วนที่ 5 : ส่วนสร้างข้อสอบ ในรูป form เลือกข้อสอบจากค่าที่ได้จากการสุ่ม
ส่วนที่ 6 : ส่วนปิด html

อธิบายลักษณะโปรแกรม
1. โปรแกรมนี้จะสร้างข้อสอบขึ้นมาให้เพียงครั้งละไม่เกิน 1000 ชุด ซึ่งเลือกได้เช่น qjava000.htm ถึง qjava999.htm
2. เมื่อสั่งประมวลผล qjava.exe โปรแกรมจะถามค่า 3 ค่าเพื่อนำไปใช้ในโปรแกรมคือ
2.1 เลขชุดข้อสอบเริ่มต้น ที่ต้องการสร้าง เช่น 0 ก็จะเริ่มสร้างข้อสอบตั้งแต่ชุดที่ qjava000.htm เป็นต้น
2.2 เลขชุดข้อสอบสุดท้าย ที่ต้องการสร้าง เช่น 999 ก็จะหยุดสร้างข้อสอบ เมื่อถึงชุดที่ qjava999.htm เป็นต้น
2.3 จำนวนข้อสอบในชุด ซึ่งในแต่ละชุดสามารถเลือกได้ว่าจะให้มีข้อสอบกี่ข้อ เช่นกรอกเลข 8 ก็จะทำให้ทุกชุดมีข้อสอบ 8 ข้อ เป็นต้น
ท่านสามารถดูผลการ run ของโปรแกรมนี้ก็คือ qjava099.htm ได้ที่นี่
Source code ของ qjava.prg
    // ส่วนที่ 1 : ส่วนกำหนดค่าเริ่มต้นให้กับโปรแกรม setcolor("/w");cls setcolor("/n");@ 1,5 clear to 22,78 setcolor("w/b");@ 2,3 clear to 23,76 startseries:=endseries:=allq:=0 @ 5,5 say "What series number that you want? (start) : " @ 5,60 get startseries @ 7,5 say "What series number that you want? (end) : " @ 7,60 get endseries @ 9,5 say "How many question in each series that you want? : " @ 9,60 get allq setcolor("n/b") @ 3,5 say "This program will create the quiz.(Such as qjava099.htm to qjava140.htm)" @ 11,5 say "Develop by webmaster@thaiall.com" @ 13,5 say "If you have problem on the processing, press CTRL-C." read cls @ 2,1 say "Result of processing" for ss = startseries to endseries if ss < 1000 ; sn = "qjava"+alltrim(str(ss))+".htm" ; end if ss < 100 ; sn = "qjava0"+alltrim(str(ss))+".htm" ; end if ss < 10 ; sn = "qjava00"+alltrim(str(ss))+".htm" ; end set printer to &sn set device to printer do main set device to screen ? ss - startseries + 1, sn , "OK" next procedure main _dbf=[qjava] _title=[เกมตอบคำถาม (ชุดทดสอบตนเอง ก่อนไปออกรายการทีวี)] _by1=[<a href=mailto:webmaster@thaiall.com?subject=Comment_on_Quiz_javascirpt_version>] _by2=[<font color=#ffff00>โดย คนไทย เพื่อคนไทย</font></a>] // ส่วนที่ 2 : ทำหน้าที่สุ่มเลขข้อมา 10 ข้อ ไม่ให้ซ้ำกัน เก็บไว้ใน array use &_dbf allquest=reccount() arn=array(allq) i=0;j=0 while i<allq j++ rnd=mod(int(second()*100+(22/7*1000000*j)),reccount())+1 if ascan(arn,rnd)=0 i++; arn[i]=rnd end end // ส่วนที่ 3 : ส่วนจัดทำ javascript เพื่อกำหนดข้อที่ถูกหรือผิด ตามเลขข้อที่สุ่มมา i=0 @i,0 say [<html><head><title>]+_title+[</title>];i++ @i,0 say [<script language="JavaScript">];i++ @i,0 say [<!-- ];i++ use &_dbf r=1 while r<=allq go arn[r] _ans=alltrim(ans) @i,0 say [function checkq]+alltrim(str(r))+[( value ) {];i++ @i,0 say [var s=document.total.tscore.value*1;];i++ @i,0 say [var os=document.result]+alltrim(str(r))+[.score.value*1;];i++ for f=1 to 4 ft=alltrim(str(f)) if _ans=ft @i,0 say [if( value == ] + ft + [) alert('Correct'); ];i++ else @i,0 say [if( value == ] + ft + [) alert('Wrong'); ];i++ endif next @i,0 say [if (value == ] + _ans + [) {];i++ @i,0 say [ total.tscore.value=s+1-os];i++ @i,0 say [ result]+alltrim(str(r))+[.score.value=1;];i++ @i,0 say [} else {];i++ @i,0 say [ total.tscore.value=s-os];i++ @i,0 say [ result]+alltrim(str(r))+[.score.value=0;];i++ @i,0 say [}];i++ @i,0 say [return true;}];i++ r++ skip end @i,0 say[/]+[/ -->];i++ @i,0 say[</script>];i++ @i,0 say[<style type=text/css>];i++ @i,0 say[TD{FONT-FAMILY:Ms Sans Serif;}];i++ @i,0 say[</style>];i++ @i,0 say[</head>];i++ // ส่วนที่ 4 : ส่วน html เริ่มต้น @i,0 say[<body bgcolor=#ffffdd><font face="ms sans serif" size=0>];i++ @i,0 say[<table width=100% cellpadding=1 cellspacing=1 bgcolor=#000000 border=0>];i++ @i,0 say[<td bgcolor=#fffffd align=center><font size=6><b>]+_title;i++ @i,0 say[</b></font><br><font size=0>];i++ @i,0 say[ให้ใช้ Mouse เลือกคำตอบ จากนั้นจะแจ้งผลถูกผิดทันที และรวมคะแนน ไว้ท้ายแบบทดสอบ<br>];i++ @i,0 say[รุ่น 3.2001 (เขียนให้ท่านสามารถ copy โปรแกรม พร้อมฐานข้อมูลไปใช้ และแก้ไขได้โดยตัวท่านเอง)<br>];i++ @i,0 say[หมายเลขชุด ]+sn+[</td></table>];i++ @i,0 say[<center>];i++ // ส่วนที่ 5 : ส่วนสร้างข้อสอบ ในรูป form เลือกข้อสอบจากค่าที่ได้จากการสุ่ม use &_dbf r=1 while r<=allq go arn[r] _no=alltrim(no); _ques=alltrim(ques) _c1=alltrim(c1); _c2=alltrim(c2) _c3=alltrim(c3); _c4=alltrim(c4) fr=alltrim(str(r)) @i,0 say [<br><br>โชคดีจงเป็นของท่าน<br>];i++ @i,0 say[<hr noshade width=50% color=#ff0000>];i++ @i,0 say[<table width=95% cellpadding=1 cellspacing=1 bgcolor=#000000 border=0>];i++ @i,0 say[<td bgcolor=#ddffff><br><font size=4><ul>];i++ @i,0 say [<form name="Question]+fr+[">];i++ @i,0 say fr+[. ]+_ques+[ --- (]+_no+[)];i++ for f=1 to 4 ft=alltrim(str(f)) fr=alltrim(str(r)) txt=[<br><input type="radio" name="Q]+fr txt=txt+[" value="]+ft txt=txt+[" onclick="checkq]+fr txt=txt+[(]+ft+[);">] @i,0 say txt+&("_c"+ft);i++ next @i,0 say[</form></ul>];i++ @i,0 say[<center><form name=result]+fr+[>];i++ @i,0 say[Score <input type=button name=score value="0"> for this question</form>];i++ @i,0 say[</td></table>];i++ r++ skip end // ส่วนที่ 6 : ส่วนปิด html @i,0 say[<hr noshade width=50% color=#ff0000>];i++ @i,0 say[<form name=total>];i++ @i,0 say[<font size=6>Total score <input type=button name=tscore value=0></form>];i++ @i,0 say[<hr noshade width=50% color=#ff0000>]+_by1+_by2;i++ @i,0 say[<br>]+sn;i++ @i,0 say[</body></html>];i++ return

วิธีการเขียนโปรแกรมสร้างชุดข้อสอบ ด้วย clipper5
(qjaval.prg -> qjaval.exe แต่ไม่ได้เตรียม qjaval.exe ไว้ให้ เพราะใช้กับ ie4 แล้วมีปัญหา)
ส่วนที่ 1 : ส่วนกำหนดค่าเริ่มต้นให้กับโปรแกรม
ส่วนที่ 2 : ทำหน้าที่สุ่มเลขข้อมา 10 ข้อ ไม่ให้ซ้ำกัน เก็บไว้ใน array
ส่วนที่ 3 : ส่วนจัดทำ javascript เพื่อกำหนดข้อที่ถูกหรือผิด ตามเลขข้อที่สุ่มมา
ส่วนที่ 4 : ส่วน html เริ่มต้น
ส่วนที่ 5 : ส่วนสร้างข้อสอบ ในรูป form เลือกข้อสอบจากค่าที่ได้จากการสุ่ม
ส่วนที่ 6 : ส่วนปิด html

อธิบายลักษณะโปรแกรม
1. โปรแกรมนี้จะสร้างข้อสอบขึ้นมาให้เพียงชุดเดียวชื่อ qjaval.htm
2. ข้อสอบที่สร้างขึ้นจะมีเพียง 10 ข้อ เท่านั้นเลือกไม่ได้เหมือนโปรแกรม qjava.prg
3. ข้อสอบจะมีตัวเลือกให้เลื่อนไปยังข้อต่าง ๆ ได้ เช่นไปบนสุด ล่างสุด หรือข้อต่อไป
4. โปรแกรมนี้ใช้งานได้ แต่ qjaval.htm นั้น นำไปใช้ใน ie4 แล้วทำให้ผลการตอบ ถูกลบทิ้ง
ท่านสามารถดูผลการ run ของโปรแกรมนี้ก็คือ qjaval.htm ได้ที่นี่
Source code ของ qjaval.prg
    // ส่วนที่ 1 : ส่วนกำหนดค่าเริ่มต้นให้กับโปรแกรม set printer to "qjaval.htm" set device to printer _dbf=[qjava] _title=[เกมตอบคำถาม (ชุดทดสอบตนเอง ก่อนไปออกรายการทีวี)] _by1=[<a href=mailto:webmaster@thaiall.com?subject=Comment_on_Quiz_javascirpt_version>] _by2=[<font color=#ffff00>โดย คนไทย เพื่อคนไทย</font></a>] // ส่วนที่ 2 : ทำหน้าที่สุ่มเลขข้อมา 10 ข้อ ไม่ให้ซ้ำกัน เก็บไว้ใน array allq=10 use &_dbf allquest=reccount() arn=array(allq) i=0;j=0 while i<allq j++ rnd=mod(int(second()*100+(22/7*1000000*j)),reccount())+1 if ascan(arn,rnd)=0 i++; arn[i]=rnd end end // ส่วนที่ 3 : ส่วนจัดทำ javascript เพื่อกำหนดข้อที่ถูกหรือผิด ตามเลขข้อที่สุ่มมา i=0 @i,0 say [<html><head><title>]+_title+[</title>];i++ @i,0 say [<script language="JavaScript">];i++ @i,0 say [<!-- ];i++ use &_dbf r=1 while r<=allq go arn[r] _ans=alltrim(ans) @i,0 say [function checkq]+alltrim(str(r))+[( value ) {];i++ @i,0 say [var s=document.total.tscore.value*1;];i++ @i,0 say [var os=document.result]+alltrim(str(r))+[.score.value*1;];i++ for f=1 to 4 ft=alltrim(str(f)) if _ans=ft @i,0 say [if( value == ] + ft + [) alert('Correct'); ];i++ else @i,0 say [if( value == ] + ft + [) alert('Wrong'); ];i++ endif next @i,0 say [if (value == ] + _ans + [) {];i++ @i,0 say [ total.tscore.value=s+1-os];i++ @i,0 say [ result]+alltrim(str(r))+[.score.value=1;];i++ @i,0 say [} else {];i++ @i,0 say [ total.tscore.value=s-os];i++ @i,0 say [ result]+alltrim(str(r))+[.score.value=0;];i++ @i,0 say [}];i++ @i,0 say [return true;}];i++ r++ skip end @i,0 say[/]+[/ -->];i++ @i,0 say[</script>];i++ @i,0 say[<style type=text/css>];i++ @i,0 say[A:link{COLOR:red;}];i++ @i,0 say[A:visited{COLOR:purple;}];i++ @i,0 say[TD{FONT-FAMILY:Ms Sans Serif;}];i++ @i,0 say[</style>];i++ @i,0 say[<base target=_parent>];i++ @i,0 say[</head>];i++ // ส่วนที่ 4 : ส่วน html เริ่มต้น @i,0 say[<body bgcolor=#ffffdd><font face="ms sans serif" size=0>];i++ @i,0 say[<table width=100% cellpadding=1 cellspacing=1 bgcolor=#000000 border=0>];i++ @i,0 say[<td bgcolor=#fffffd align=center><font size=6><b>]+_title;i++ @i,0 say[</b></font><br><font size=0>];i++ @i,0 say[ให้ใช้ Mouse เลือกคำตอบ จากนั้นจะแจ้งผลถูกผิดทันที<br>];i++ @i,0 say[รุ่น 3.2001 (เขียนให้ท่าน copy โปรแกรม และข้อมูลไปใช้ และแก้ไขได้ทุกกรณี)</td></table>];i++ @i,0 say[<center>];i++ @i,0 say[<hr noshade width=50% color=#ff0000>];i++ do listquiznumber // ส่วนที่ 5 : ส่วนสร้างข้อสอบ ในรูป form เลือกข้อสอบจากค่าที่ได้จากการสุ่ม use &_dbf r=1 while r<=allq go arn[r] _no=alltrim(no); _ques=alltrim(ques) _c1=alltrim(c1); _c2=alltrim(c2) _c3=alltrim(c3); _c4=alltrim(c4) fr=alltrim(str(r)) @i,0 say [<a name="qq]+fr+["></a><br><br>โชคดีจงเป็นของท่าน<br>];i++ @i,0 say[<hr noshade width=50% color=#ff0000>];i++ @i,0 say[<table width=95% cellpadding=1 cellspacing=1 bgcolor=#000000 border=0>];i++ @i,0 say[<td bgcolor=#ddffff><br><font size=4><ul>];i++ @i,0 say [<form name="Question]+fr+[">];i++ @i,0 say fr+[. ]+_ques+[ --- (]+_no+[)];i++ for f=1 to 4 ft=alltrim(str(f)) fr=alltrim(str(r)) txt=[<br><input type="radio" name="Q]+fr txt=txt+[" value="]+ft txt=txt+[" onclick="checkq]+fr txt=txt+[(]+ft+[);">] @i,0 say txt+&("_c"+ft);i++ next @i,0 say[</form></ul>];i++ @i,0 say[<center><form name=result]+fr+[>];i++ @i,0 say[Score <input type=button name=score value="0"> for this question</form>];i++ @i,0 say[- <a href=#bottom>ดูคะแนนรวม</a> - <a href=#top>กลับไปข้อแรกสุด</a> ];i++ @i,0 say[- <a href=#qq]+ alltrim(str(r+1)) +[>ไปข้อสอบข้อต่อไป</a> -<br>];i++ do listquiznumber @i,0 say[</td></table>];i++ r++ skip end // ส่วนที่ 6 : ส่วนปิด html @i,0 say[<a name=bottom></a><hr noshade width=50% color=#ff0000>];i++ @i,0 say[<form name=total>];i++ @i,0 say[<font size=6>Total score <input type=button name=tscore value=0></form>];i++ do listquiznumber @i,0 say[<hr noshade width=50% color=#ff0000>]+_by1+_by2;i++ @i,0 say[</body></html>];i++ procedure listquiznumber @i,0 say[ไปยังข้อสอบข้อที่ ];i++ n=1 while n<=allq fr=alltrim(str(n)) @i,0 say [- <a href="qjava.htm#qq]+fr+[">]+fr+[</a>];i++ n++ end @i,0 say [ -];i++ return

แบบฝึกหัด
    ให้ทำตามโจทย์ต่อไปนี้
  1. ให้ทดลองทำตามตัวอย่างข้างบนนี้
  2. ให้ปรับปรุงชื่อแฟ้มจาก qjava เป็นชื่ออื่นที่ท่านจะได้นำไปใช้
  3. ให้เพิ่มแฟ้ม dbf มากกว่า 1 แฟ้ม แล้วให้ระบบสุ่มมาใช้ตามจากหลาย dbf

แนะนำเว็บใหม่ : ผลการจัดอันดับ
รักลำปาง : thcity.com : korattown.com : topsiam.com : มหาวิทยาลัยโยนก
ศูนย์สอบ : รวมบทความ : ไอทีในชีวิตประจำวัน : ดาวน์โหลด : yourname@thaiall.com
ติดต่อ ทีมงาน ชาวลำปาง มีฝันเพื่อการศึกษา Tel.08-1992-7223