| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 575 人关注过本帖
标题:如何随机抽取试题
只看楼主 加入收藏
王咸美
Rank: 1
等 级:新手上路
帖 子:665
专家分:3
注 册:2018-1-4
结帖率:97.48%
收藏
已结贴  问题点数:20 回复次数:8 
如何随机抽取试题
timu.zip (1.12 KB)
现有试题库 timu.dbf,如何随机抽取5题组成word试卷。下列代码不能随机抽取试题,望高手指教,万分感谢!!!
cs3.zip (1.42 KB)



搜索更多相关主题的帖子: 代码 试题 抽取 随机 word 
2024-05-23 16:06
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2214
专家分:3882
注 册:2007-4-27
收藏
得分:5 
我想,思路大概是这样:
在试题库表上加一个字段,写上随机数,按随机数排序,最前5或后5,的五个题,到试卷

只求每天有一丁点儿的进步就可以了
2024-05-23 16:12
王咸美
Rank: 1
等 级:新手上路
帖 子:665
专家分:3
注 册:2018-1-4
收藏
得分:0 
具体代码如下:

CLOSE DATABASES
CLEAR ALL
cPath=ADDBS(JUSTPATH(SYS(16)))
SET DEFAULT TO (cPath)
 
* 随机生成5个题目到EXCEL

USE timu IN 0 ALIAS timu
SELECT timu
replace isc WITH '' all
replace sjs WITH RAND()*1000 all
xt= 5
filecnt=INT(RECCOUNT()/xt)
SET ORDER TO sjs
GO top
FOR i=1 to filecnt
replace isc WITH ALLTRIM(STR(i)) NEXT xt
SKIP
ENDFOR
replace isc WITH ALLTRIM(STR(i)) FOR EMPTY(isc)
filepath="E:\temp1\"
eole=CREATEOBJECT('Excel.Application')
*!* eloe.visible=.t.
*!* 生成 EXCEL
FOR j=1 TO i
 SELECT * FROM timu WHERE isc== ALLTRIM(STR(j)) INTO CURSOR temp
 IF _tally=0
  RETURN
 ENDIF
 eole.workbooks.Add
 eole.worksheets("Sheet1").Activate
 lanmu()
 excelpath=filepath+"随机选题第"+ALLTRIM(STR(j))+"套.xls"
 ? '正在生成:'+excelpath
 SELECT temp
 k=2
 SCAN
  eole.Cells(k,1)='单选题'
  eole.Cells(k,2)=ALLTRIM(tm)+ALLTRIM(tm2)
  eole.Cells(k,3)=ALLTRIM(xxa)
  eole.Cells(k,4)=ALLTRIM(xxb)
  eole.Cells(k,5)=ALLTRIM(xxc)
  eole.Cells(k,6)=ALLTRIM(xxd)
  eole.Cells(k,8)=ALLTRIM(anwser)
  eole.Cells(k,10)='5'
  k=k+1
 ENDSCAN
 eole.ActiveWorkbook.SaveAs(excelpath)
 eole.Workbooks.close
ENDFOR
eole.Quit
RELEASE eole
clear
 
*!* 生成WORD试卷  
eole=CREATEOBJECT('word.application')
*!* eole.visible=.t.
FOR j=1 TO i
 SELECT * FROM timu WHERE isc== ALLTRIM(STR(j)) INTO CURSOR temp
 IF _tally=0
  RETURN
 ENDIF
 eole.Documents.Add
 eole.ActiveDocument.PageSetup.TopMargin=1.27/0.035
 eole.ActiveDocument.PageSetup.BottomMargin=1.27/0.035
 eole.ActiveDocument.PageSetup.LeftMargin=1.27/0.035
 eole.ActiveDocument.PageSetup.RightMargin=1.27/0.035
 wordname="随机选题第"+ALLTRIM(STR(j))+"套"
 ? '正在生成:'+wordname
 eole.Selection.TypeText(wordname)
 eole.Selection.TypeParagraph
 SELECT temp
 k=1
 SCAN
   eole.Selection.TypeText(ALLTRIM(STR(k))+"."+ALLTRIM(tm))
   eole.Selection.TypeParagraph
   IF !EMPTY(tm2)
     eole.Selection.TypeText(ALLTRIM(tm2))
     eole.Selection.TypeParagraph
   ENDIF
   xa=ALLTRIM(xxa)
   xb=ALLTRIM(xxb)
   xc=ALLTRIM(xxc)
   xd=ALLTRIM(xxd)
   IF LEN(xa+xb+xc+xd)<80
    eole.ActiveDocument.Tables.Add(eole.Selection.Range,1,4,0,0)
    eole.Selection.Tables(1).Rows(1).Cells(1).Range.InsertAfter(xa)
    eole.Selection.Tables(1).Rows(1).Cells(2).Range.InsertAfter(xb)
    eole.Selection.Tables(1).Rows(1).Cells(3).Range.InsertAfter(xc)
    eole.Selection.Tables(1).Rows(1).Cells(4).Range.InsertAfter(xd)
   ELSE
    eole.ActiveDocument.Tables.Add(eole.Selection.Range,2,2,0,0)
    eole.Selection.Tables(1).Rows(1).Cells(1).Range.InsertAfter(xa)
    eole.Selection.Tables(1).Rows(1).Cells(2).Range.InsertAfter(xb)
    eole.Selection.Tables(1).Rows(2).Cells(1).Range.InsertAfter(xc)
    eole.Selection.Tables(1).Rows(2).Cells(2).Range.InsertAfter(xd)
    eole.Selection.MoveDown(5,1,.f.)
   ENDIF
   eole.Selection.MoveDown(5,1,.f.)
   k=k+1
   ENDSCAN
   eole.ActiveDocument.SaveAs(filepath+wordname+".doc")
   eole.ActiveDocument.close
  ENDFOR
  CLEAR
  *!* eole.visible=.t.
 
 FOR j=1 TO i
 SELECT * FROM timu WHERE isc== ALLTRIM(STR(j)) INTO CURSOR temp
 IF _tally=0
  RETURN
 ENDIF
 eole.Documents.Add
 eole.ActiveDocument.PageSetup.TopMargin=1.27/0.035
 eole.ActiveDocument.PageSetup.BottomMargin=1.27/0.035
 eole.ActiveDocument.PageSetup.LeftMargin=1.27/0.035
 eole.ActiveDocument.PageSetup.RightMargin=1.27/0.035
 wordname="随机选题第"+ALLTRIM(STR(j))+"套附答案"
 ? '正在生成:'+wordname
 eole.Selection.TypeText(wordname)
 eole.Selection.TypeParagraph
 SELECT temp
 k=1
 SCAN
   eole.Selection.TypeText(ALLTRIM(STR(k))+"."+ALLTRIM(tm))
   eole.Selection.TypeParagraph
   IF !EMPTY(tm2)
     eole.Selection.TypeText(ALLTRIM(tm2))
     eole.Selection.TypeParagraph
   ENDIF
   xa=ALLTRIM(xxa)
   xb=ALLTRIM(xxb)
   xc=ALLTRIM(xxc)
   xd=ALLTRIM(xxd)
   IF LEN(xa+xb+xc+xd)<80
    eole.ActiveDocument.Tables.Add(eole.Selection.Range,1,4,0,0)
    eole.Selection.Tables(1).Rows(1).Cells(1).Range.InsertAfter(xa)
    eole.Selection.Tables(1).Rows(1).Cells(2).Range.InsertAfter(xb)
    eole.Selection.Tables(1).Rows(1).Cells(3).Range.InsertAfter(xc)
    eole.Selection.Tables(1).Rows(1).Cells(4).Range.InsertAfter(xd)
   ELSE
    eole.ActiveDocument.Tables.Add(eole.Selection.Range,2,2,0,0)
    eole.Selection.Tables(1).Rows(1).Cells(1).Range.InsertAfter(xa)
    eole.Selection.Tables(1).Rows(1).Cells(2).Range.InsertAfter(xb)
    eole.Selection.Tables(1).Rows(2).Cells(1).Range.InsertAfter(xc)
    eole.Selection.Tables(1).Rows(2).Cells(2).Range.InsertAfter(xd)
    eole.Selection.MoveDown(5,1,.f.)
   ENDIF
   eole.Selection.MoveDown(5,1,.f.)
   eole.Selection.TypeText("答案:"+ALLTRIM(anwser))
   eole.Selection.TypeParagraph
   k=k+1
   ENDSCAN
   eole.ActiveDocument.SaveAs(filepath+wordname+".doc")
   eole.ActiveDocument.close
  ENDFOR
  eole.Quit
  RELEASE eole
  MESSAGEBOX("导出完毕")
 
  PROCEDURE lanmu
   eole.cells(1,1)='题型'
   eole.cells(1,2)='题目'
   eole.cells(1,3)='选项1'
   eole.cells(1,4)='选项2'
   eole.cells(1,5)='选项3'
   eole.cells(1,6)='选项4'
   eole.cells(1,7)='选项5'
   eole.cells(1,8)='答案'
   eole.cells(1,9)='解析'
   eole.cells(1,10)='分值'
   
     
 
   
 
 
 
 
2024-05-23 16:15
shizi0
Rank: 6Rank: 6
等 级:侠之大者
威 望:4
帖 子:129
专家分:404
注 册:2012-10-2
收藏
得分:8 
a=[,]
For i=1 to 5
    cNo=Transform(Int(Rand()*题库总数)+1)
    Do While cNo+[,]$a
        cNo=Transform(Int(Rand()*题库总数)+1)
    Enddo     
    ?[抽取第]+Transform(i)+[题:题库序号]+cNo
    a=a+cNo+[,]
Endfor     

[此贴子已经被作者于2024-5-23 17:16编辑过]

2024-05-23 17:10
yiyanxiyin
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:9
帖 子:232
专家分:1746
注 册:2023-6-29
收藏
得分:3 
既然生成了一个随机数字段sjs, 又搞个isc是干啥的, 直接按sjs排序取前5条数据不就行了么
2024-05-23 17:10
王咸美
Rank: 1
等 级:新手上路
帖 子:665
专家分:3
注 册:2018-1-4
收藏
得分:0 
isc 表示第几套试卷
2024-05-23 17:27
王咸美
Rank: 1
等 级:新手上路
帖 子:665
专家分:3
注 册:2018-1-4
收藏
得分:0 
从timu.dbf中随机抽5题生成一套试卷,能生成几套就生成几套,运行上面的代码每次生成的试卷都一样,不知为何?请高手赐教,不胜感激!

[此贴子已经被作者于2024-5-23 22:34编辑过]

2024-05-23 22:28
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:4 
回复 7楼 王咸美
调用rand()之前变动一下种子,如rand(-1)
2024-05-24 06:48
王咸美
Rank: 1
等 级:新手上路
帖 子:665
专家分:3
注 册:2018-1-4
收藏
得分:0 
谢谢!

2024-05-24 09:46
快速回复:如何随机抽取试题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021876 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved