主题:请教VFP编程问题
thomasou
[专家分:0] 发布于 2010-07-27 00:08:00
请教, 用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个回复)
沙发
agt澳 [专家分:840] 发布于 2010-07-27 14:28:00
表一 姓名 入住日期 离店日期
李明 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
板凳
liupeisong [专家分:2340] 发布于 2010-07-27 15:51:00
楼主的思路有问题!
1、表不能使用数字作为字段名!
2、入住日期和离店日期是可变的,字段名及字段数目都不定,程序很难处理,况且如果某人住的天数很多的话,可能造成字段数目超出系统限制。
请重新设计系统结构吧
3 楼
thomasou [专家分:0] 发布于 2010-07-27 22:20:00
各位高手,俺把所提的问题再描述,表一的入住日期和离店日期都是变动中的。表二中虽然日期不能作为字段,但可以先以代号譬如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 楼
sywzs [专家分:5650] 发布于 2010-07-28 05:18:00
用离店日期-入住日期得到住店天数,从住店的日期连续填写N个字段即可。
5 楼
thomasou [专家分:0] 发布于 2010-07-28 13:59:00
尊敬的sywzs:请您把实现的过程,详细描述一下,好吗?谢谢。
6 楼
sywzs [专家分:5650] 发布于 2010-08-02 17:30:00
sele 姓名,入住日期,离店日期,离店日期-入住日期 天数 from 表一
7 楼
thomasou [专家分:0] 发布于 2010-08-02 21:16:00
谢谢6楼高手指点。
如用离店日期-入住日期的话,得到的应该是入住的天数,形成不了所要求的表二。
俺的想法是通过表一已知的入住日期,如21/5,通过编写程序推断出字段ms22(代表22/5)、ms23(代表23/5)、ms24(代表24/5),直到满足已知的离店日期(如25/5)为止,并且在这些字段下标注“1”。请继续指教,谢谢。
8 楼
sywzs [专家分:5650] 发布于 2010-08-03 05:31:00
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 楼
jxjdzwang5555 [专家分:1100] 发布于 2010-08-03 11:23:00
考虑住店应该是连续的,
sele 姓名 , 入住日期, 离店日期-入住日期 as 住店天数 from 表一 order by 姓名
这样应该符合楼主的意思
10 楼
thomasou [专家分:0] 发布于 2010-08-03 11:50:00
感谢8楼高手的指点。
俺提出这个问题,是俺在多年前在酒店工作中遇到过的,当时曾经用手工统计处理,主要目的是通过对客人入住日期和离店日期的判读,得出表二,产生每一天每一位客人单独的住宿天数,由此得出当天整个酒店客房当天住宿总数。这个问题的焦点主要是在知道入住日期如21/5,离店日期如25/5,由编程推出ms22(22/5),ms23(23/5),ms24(24/5)等字段,并在这些字段下标注“1”。
如果能够通过编程,能够把表一的数据,通过对入店日期和离店日期的判读,判读不同的月份,按月份的不同分派进入不同的表二(每月一个表格),并在所属于的日期下标注“1”,那就更好、更美了。
我来回复