| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1277 人关注过本帖
标题:求助,在做一个考试系统时,随机抽取时,出现一个问题。( 附运行结果)
只看楼主 加入收藏
sdyswjlu
Rank: 1
等 级:新手上路
帖 子:108
专家分:0
注 册:2010-9-10
结帖率:95%
收藏
已结贴  问题点数:10 回复次数:10 
求助,在做一个考试系统时,随机抽取时,出现一个问题。( 附运行结果)
在执行完后,ls显示的结果.rar (101.34 KB)
***********定义三个数组,用于存放产生的随机数
   dimension   suiji1(10),suiji2(10),suiji3(10)
   suiji=int(rand(-100))
   
   for  i=1  to  10
   suiji1(i)=int(1+50*rand())

   suiji2(i)=int(1+32*rand())

   suiji3(i)=int(1+30*rand())

   endfor


************根据tnumber的数字来判断对那个表进行操作,并对每个表中所选择的记录存入一个表(ls)中,定义一变量tnumber
  for    i=1  to 10
      
       if  tnumber<=10
         select  2    &&&&&&&&打开pd表
        
         goto  suiji1(i)
         scatter memvar
         select  1 &&&&&&&&&打开ls表
         append blank
         gather   memvar
      
         
         tnumber= tnumber+1
      endif
 endfor

 sele  2
 use &&&&&&&&关闭打开的表pd

***********以上用于判断从判断题中取10题
      
 for  i=1  to  10
        
        tnumber= tnumber+1
       if    tnumber>=11.and. tnumber<=20
        select  3   &&&&&&&&打开 dxxz表
        
        goto    suiji2(i)
       scatter  memvar
display
wait
        sele  1&&&&&&&&&打开ls表
        append blank
         gather  memvar
display
wait
         endif
   endfor

   sele  3
   use &&&&&&&&关闭打开的表
    ***********以上用于判断从单项题选择中取10题
  for  i=1 to 10  
      
        tnumber= tnumber+1
        if  tnumber>=21.and. tnumber<=30
        select  4&&&&&&&&打开 dxxz表
        
         goto  suiji3(i)
         scatter memvar
                       
         select  1&&&&&&&&&打开ls表
         append blank
         gather  memvar
      
      
       endif  
   

endfor
select 4
use&&&&&&&&关闭打开的表&&&&&&&&关闭打开的表
   ***********以上用于判断从多项题选择中取10题
我的pd,dxxz,duoxxz,ls表,都有8个字段,分别是xh,tg,xx1,xx2,xx3,xx4,danan ,onedanan,字段设置全都一样。
想实现分别从pd,dxxz,duoxxz中取10题,到ls表中。
在判断题和多项题的选择中,数据正常。但在对单项题时,进行随机抽题时,xh,tg,xx1,xx2,xx3,xx4,和dxxz表中的记录一样,但字段ls.danan 就不dxxz.danan的数据一样了,ls表第11号记录(从单选)开始到20号记录的danan字段总是出现和第10记录相同的danan相同的数值。
在以上程序中,我加入了2个红色的display  wait,在执行完scatter memvar时和dxxz.dbf中danan 相同,但执行完gather  memvar 后,查看第2个红色的display  wait,ls表中的danan就变的不一样了,不知什么原因。
问题复杂了点,但我的分也不多了,给10分,好不好


[ 本帖最后由 sdyswjlu 于 2010-9-14 22:15 编辑 ]
搜索更多相关主题的帖子: 考试 系统 抽取 结果 随机 
2010-09-14 22:05
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:5 
老眼昏花,看了许久也没理清楼主的思路。提出以下建议供参考,若是理解错了请海涵!
1、第一段产生随机数组时应该防止产生重复的随机数据,以免同一次考试中出现重复的题目。
2、既然单选题和判断题表的结构完全一样,何不合并成一个表,添加一个题目类型的字段来区别,这样程序处理起来可能会更方便些。
楼主通过数组来将选中的题目从题库表中复制到考试表,做法是正确的,程序也没有错误。答案变得不一样会不会是其他原因造成的?

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2010-09-15 07:25
panpende
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:528
专家分:963
注 册:2009-4-27
收藏
得分:5 
建议 scatter memvar 用 COPY TO LSWJ NEXT 1 代替;

append blank   gather  memvar  用 APPEND FROM LSWJ  代替 。

一般我是这样处理类似过程,从未出错。


2010-09-15 07:59
sdyswjlu
Rank: 1
等 级:新手上路
帖 子:108
专家分:0
注 册:2010-9-10
收藏
得分:0 
以下是引用panpende在2010-9-15 07:59:13的发言:

建议 scatter memvar 用 COPY TO LSWJ NEXT 1 代替;

append blank   gather  memvar  用 APPEND FROM LSWJ  代替 。

一般我是这样处理类似过程,从未出错。
这个copy  lswj next  1我在vf 6.0帮助文件中没有发现这个命令,能不能具体告诉我一下,这个命令的用法,
2010-09-15 22:03
sdyswjlu
Rank: 1
等 级:新手上路
帖 子:108
专家分:0
注 册:2010-9-10
收藏
得分:0 
2楼的理解是正确的,谢谢您了,我试试看
2010-09-15 22:04
sdyswjlu
Rank: 1
等 级:新手上路
帖 子:108
专家分:0
注 册:2010-9-10
收藏
得分:0 
以下是引用panpende在2010-9-15 07:59:13的发言:

建议 scatter memvar 用 COPY TO LSWJ NEXT 1 代替;

append blank   gather  memvar  用 APPEND FROM LSWJ  代替 。

一般我是这样处理类似过程,从未出错。
按照3楼的做法,还是出现相似的问题,只是ls 表中的danan 字段为空了,没有数值了。其它字段的值和表dxxz字段值 一致,不知道啥原因
2010-09-15 22:16
sdyswjlu
Rank: 1
等 级:新手上路
帖 子:108
专家分:0
注 册:2010-9-10
收藏
得分:0 
copy to next 1和append from后的结果.rar (154.87 KB)



建议 scatter memvar 用 COPY TO LSWJ NEXT 1 代替;

append blank   gather  memvar  用 APPEND FROM LSWJ  代替 。

一般我是这样处理类似过程,从未出错。
按照3楼的做法,还是出现相似的问题,只是ls 表中的danan 字段为空了,没有数值了。其它字段的值和表dxxz字段值 一致,不知道啥原因

在附件中,第1幅图是在执行了 COPY TO LSWJ NEXT 1 后,我加了display  wait两个命令的结果
第2幅是执行了APPEND FROM LSWJ  我加了display  wait两个命令的结果
望专家给予解决为盼


[ 本帖最后由 sdyswjlu 于 2010-9-15 22:34 编辑 ]
2010-09-15 22:23
sdyswjlu
Rank: 1
等 级:新手上路
帖 子:108
专家分:0
注 册:2010-9-10
收藏
得分:0 
使用scatter memvar 和gather memvar的结果.rar (147.5 KB)


我加入了2个红色的display  wait,在执行完scatter memvar时和dxxz.dbf中danan 相同,但执行完gather  memvar 后,查看第2个红色的display  wait,ls表中的danan就变的不一样了,不知什么原因。
我把运行结果发了,希望专家给予解决为盼
第1幅是执行了,scatter  memvar   后我加了display  wait两个命令后的结果
第2幅是执行了,gather   memvar   后我加了display  wait两个命令后的结果
从结果来看,第1幅是danan 字段是“B”,第2幅的danan字段就变成了“错”

[ 本帖最后由 sdyswjlu 于 2010-9-15 22:39 编辑 ]
2010-09-15 22:27
panpende
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:528
专家分:963
注 册:2009-4-27
收藏
得分:0 
LSWJ 是表,临时文件。
COPY TO LSWJ NEXT 1   是把当前记录复制到临时文件LSWJ。并不改变当前变量。所以display  wait ,是看不到变量的变化。

APPEND FROM LSWJ    是把临时文件LSWJ的记录,追加到当前工作区的表的末尾。可以从当前工作区的表中,检查效果。
2010-09-16 09:02
sdyswjlu
Rank: 1
等 级:新手上路
帖 子:108
专家分:0
注 册:2010-9-10
收藏
得分:0 
我就是用use  命令打开的表,结果一样,是空的。我已经试过了,还是不行。
我的表是通过excel 导入的,是不是原因在这里,我重新导入了一次,生成了一样的表,运行以后,结果显示又和以前的不一样了,以前是1记录-10记录正确,11-20不正确,21-30正确。现在正好是反过来了,只有11-20正确。是不是因为excel在导入前,各个excel表不一样而引起的。我导入以后,对各个dbf表,重新modi  stru了,设置全一样。原因是不是在此

[ 本帖最后由 sdyswjlu 于 2010-9-16 11:50 编辑 ]
2010-09-16 11:43
快速回复:求助,在做一个考试系统时,随机抽取时,出现一个问题。( 附运行结果) ...
数据加载中...
 
   



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

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