回 帖 发 新 帖 刷新版面

主题:请教VFP编程问题

请教, 用vfp编程,如何把表一 变为表二的显示?请详细指点,谢谢。

   表一         姓名            入住日期        离店日期
                李明            5/21/2010       5/25/2010

                张三            5/23/2010       5/26/2010


   表二         姓名     20   21    22   23   24   25   26
                李明           1     1    1    1
                张三                      1    1    1

回复列表 (共14个回复)

沙发

表一         姓名            入住日期        离店日期
                李明            5/21/2010       5/25/2010

                张三            5/23/2010       5/26/2010
转换为

   表二         姓名     20   21    22   23   24   25   26
                李明           1     1    1    1
                张三                      1    1    1

我想用笨办法是可以的,你想用更好的方法那只能另外再考虑啦

做个判断,做个循环,符合条件的一个一个的填进去就是啦。
*先根据姓名判断如李明,后张三等等
do while not eof()
*根据日期判断1-月底
do while not eof()
*姓名、日期满足条件表二就变1
*
enddo
enddo

板凳

楼主的思路有问题!
1、表不能使用数字作为字段名!
2、入住日期和离店日期是可变的,字段名及字段数目都不定,程序很难处理,况且如果某人住的天数很多的话,可能造成字段数目超出系统限制。

请重新设计系统结构吧

3 楼

各位高手,俺把所提的问题再描述,表一的入住日期和离店日期都是变动中的。表二中虽然日期不能作为字段,但可以先以代号譬如ms20、ms21、ms22、 ms23.....ms26 等代替,最后再转换字段处理生成表二。本问题焦点在于对表一日期开始到日期结束的过程判断,也就是说,知道从5月21日开始这一天,怎样编程判断出5/22、5/23、5/24, 直到5/25结束。请指教,谢谢。
        表一         姓名            入住日期        离店日期
                     李明            5/21/2010       5/25/2010
                     张三            5/23/2010       5/26/2010
                     
         表二         姓名     20/5   21/5    22/5   23/5   24/5   25/5   26/5 
                      李明             1       1       1     1
                      张三                             1     1      1
                                                            
        
                     

4 楼

用离店日期-入住日期得到住店天数,从住店的日期连续填写N个字段即可。

5 楼

尊敬的sywzs:请您把实现的过程,详细描述一下,好吗?谢谢。

6 楼

sele 姓名,入住日期,离店日期,离店日期-入住日期 天数 from 表一

7 楼

谢谢6楼高手指点。
如用离店日期-入住日期的话,得到的应该是入住的天数,形成不了所要求的表二。
俺的想法是通过表一已知的入住日期,如21/5,通过编写程序推断出字段ms22(代表22/5)、ms23(代表23/5)、ms24(代表24/5),直到满足已知的离店日期(如25/5)为止,并且在这些字段下标注“1”。请继续指教,谢谢。

8 楼

SELECT MIN(rz) da from b1 into curs tmp
minD=da
sele MAX(ld) da from b1 into curs tmp
maxD=da
ts=maxD-minD
R1=VAL(RIGHT(DTOC(minD),2))
cr="CREATE CURSOR B2(XM c(8)"
FOR I=0 TO ts-1
  cr=cr+",D"+ALLTRIM(STR(R1+I,2))+" n(1)"
NEXT 
cr=cr+")"
&cr
APPEND FROM b1
SELECT xm,VAL(RIGHT(DTOC(rz),2)) ST,ld-rz TS FROM b1 INTO CURSOR TMP
SCAN
  R1=ST
  FOR I=0 TO TS-1
  ZD="D"+ALLTRIM(STR(ST+I,2))
    UPDATE B2 SET &ZD=1 WHERE XM=TMP.XM
  NEXT 
ENDSCAN 
SELECT B2
BROWSE 

*以上变量:b1=表一  b2=表二  rz=入住日期   ld=离店日期   xm=姓名
*以上代码只提供了年份和月份相同的日期段,如果跨月或跨年则应改变字段的命名方法。
*不建议采用这种建表方法,入住人数众多,入住与离店日期跨度也大,可能要生成几十甚至几百个字段

9 楼

考虑住店应该是连续的,
sele 姓名 , 入住日期, 离店日期-入住日期 as 住店天数 from 表一 order by 姓名
这样应该符合楼主的意思

10 楼

感谢8楼高手的指点。
俺提出这个问题,是俺在多年前在酒店工作中遇到过的,当时曾经用手工统计处理,主要目的是通过对客人入住日期和离店日期的判读,得出表二,产生每一天每一位客人单独的住宿天数,由此得出当天整个酒店客房当天住宿总数。这个问题的焦点主要是在知道入住日期如21/5,离店日期如25/5,由编程推出ms22(22/5),ms23(23/5),ms24(24/5)等字段,并在这些字段下标注“1”。
如果能够通过编程,能够把表一的数据,通过对入店日期和离店日期的判读,判读不同的月份,按月份的不同分派进入不同的表二(每月一个表格),并在所属于的日期下标注“1”,那就更好、更美了。

我来回复

您尚未登录,请登录后再回复。点此登录或注册