| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1773 人关注过本帖
标题:求教一个VFP的编程问题
取消只看楼主 加入收藏
thomasou
Rank: 1
等 级:新手上路
帖 子:67
专家分:3
注 册:2010-8-15
结帖率:30%
收藏
已结贴  问题点数:30 回复次数:12 
求教一个VFP的编程问题
版主:您好,俺又有一个VFP的编程问题求教,请赐教,谢谢。
   b01 是一张饭店入住登记的表格,有客人名字、性别、国籍、身份证号码、入住日期、离店日期等资料,那么,通过编程形成了b201008表,统计出8月份每天的在住和已订房间的住客数量(表中的“1”表示占用房间)。俺编写了以下的程序,可以在VFP6.0环境运行,b02是过渡表,为了方便了解,把b01表编程自动形成的,其实现实中b01表的全部资料都是动态的,是通过人工输入的。俺编的这个程序只能解决单月发生的问题,也就是说入住和离店都是在同一个月发生的。
    现在俺求教的问题是:入住日期和离店日期是跨月份怎样处理,譬如,某客人2010-08-17入住,2010-10-06离店,那么08-17至08-31的放进b201008表,09-01至09-31的放进b201009表,10-01至10-05的放进b201010表,类推。还有最后怎样对每个表ms1至ms31的每个字段进行批量求和?谢谢。
          close all
         clear
         set safe off
         Create Table b01 (ss n(4),xm c(10),sex c (4),nation c (10),address c (15),idno c(15),rz d(8),ld d(8))
         Create Table b02 (ss n(4),xm c(10),rz d(8),ld d(8))  
            FOR i=1 TO 31
            cComstr="ALTER TABLE b02 ADD COLUMN ms"+CHRTRAN(STR(i,2),' ','0')+" n(1)"
             &cComstr   
           ENDFOR
            Create Table b201008 (ss n(4),xm c(10),roomno c (4),rz d(8),ld d(8))
            FOR i=1 TO 31
            cComstr="ALTER TABLE b201008 ADD COLUMN ms"+CHRTRAN(STR(i,2),' ','0')+" n(1)"
           &cComstr   
           ENDFOR
              close all
              clear
              use b03
              dele all
              pack
              use b02
              dele all
              pack
              use b01
              dele all
              pack
              close all
          use b01
           Insert Into b01 (xm,rz,ld) Values ("李明",{^2010/8/1},{^2010/8/8})
           Insert Into b01 (xm,rz,ld) Values ("张三",{^2010/8/8},{^2010/8/15})
           Insert Into b01 (xm,rz,ld) Values ("thomas",{^2010/8/16},{^2010/8/22})
           Insert Into b01 (xm,rz,ld) Values ("mimi",{^2010/8/19},{^2010/8/30})

          repl ss with recno() all
          brow
            close all
            clear
           
       use b01
         FOR K=1TO 30
              use b02
              dele all
              pack
              append from  b01 for  ss=K
              use b02   
           FOR i=day(rz)to (day(ld)-1)
                 repl ms01 with 1 for i=1
                   repl ms02 with 1 for i=2
                    repl ms03 with 1 for i=3
                      repl ms04 with 1 for i=4
                        repl ms05 with 1 for i=5
                          repl ms06 with 1 for i=6
                            repl ms07 with 1 for i=7
                              repl ms08 with 1 for i=8
                                repl ms09 with 1 for i=9
                                   repl ms10 with 1 for i=10
                                     repl ms11 with 1 for i=11
                                        repl ms12 with 1 for i=12
                                          repl ms13 with 1 for i=13
                                             repl ms14 with 1 for i=14
                                               repl ms15 with 1 for i=15
                                             repl ms16 with 1 for i=16
                                            repl ms17 with 1 for i=17
                                           repl ms18 with 1 for i=18
                                         repl ms19 with 1 for i=19
                                       repl ms20 with 1 for i=20
                                     repl ms21 with 1 for i=21
                                   repl ms22 with 1 for i=22
                                 repl ms23 with 1 for i=23
                               repl ms24 with 1 for i=24
                             repl ms25 with 1 for i=25
                           repl ms26 with 1 for i=26
                         repl ms27 with 1 for i=27
                        repl ms28 with 1 for i=28
                       repl ms29 with 1 for i=29
                      repl ms30 with 1 for i=30
                     repl ms31 with 1 for i=31
            endfor
                 use b201008
                 append from b02
          endfor
            use b201008
            append blank
            repl xm with "合计"  && 对本月每一天进行合计,就知道每一天的住房数量了。
            brow
   
搜索更多相关主题的帖子: VFP 
2010-08-17 22:08
thomasou
Rank: 1
等 级:新手上路
帖 子:67
专家分:3
注 册:2010-8-15
收藏
得分:0 
版主:您好,前一个问题的您的三个程序,以俺的水平是怎么想都想不出来的,今天俺认真学习,觉得很周密,结构好,俺受益匪浅,谢谢您。
      俺今天提的这个问题是俺在十年前在饭店前厅部门上班时遇到过的,当时是用人工根据入住和离店日期画正字统计的,费时费力,俺现在虽不从事那个工作了,因近年的工作喜欢上了VFP,一直想尝试着思考解决这个问题。在别的地方提出又非全解。今天研读您的三个程序,想利用其原理,想着逆向处理,但想不出好办法,于是向您提出。俺也想过用一个表全部存放处理,但如果入住(起订)日期与离店日期跨度太长,譬如5个月,那么这个表就太长了,阅读很不方便,而且这个表又应是动态的,覆盖整月每天的,因为每个客人入住和离店的日期都可能是不太相同的。因此,只能考虑以一个月一个表的方式处理了,而且这月表是根据入住和离店日期编程生成的,如果入住和离店日期不涵盖的就不用生成了,一个月一个表的设计模式也迎合作为饭店前厅人员查询的习惯,如果跨月查询,拼表就行了。
      请版主赐教,谢谢。
  
2010-08-17 23:21
thomasou
Rank: 1
等 级:新手上路
帖 子:67
专家分:3
注 册:2010-8-15
收藏
得分:0 
版主Tiger5392先生:您好,俺恭请您继续指导俺这个问题,谢谢。
2010-08-20 00:50
thomasou
Rank: 1
等 级:新手上路
帖 子:67
专家分:3
注 册:2010-8-15
收藏
得分:0 
谢谢8楼的指引和提点.
2010-08-20 22:55
thomasou
Rank: 1
等 级:新手上路
帖 子:67
专家分:3
注 册:2010-8-15
收藏
得分:0 
版主Tiger5392先生:今天边研读您的大作边琢磨了俺的这个问题,在自动产生月分立表方面,有些许眉目,俺继续思考,谢谢。还请您继续指导。
2010-08-20 23:00
thomasou
Rank: 1
等 级:新手上路
帖 子:67
专家分:3
注 册:2010-8-15
收藏
得分:0 
请问8楼:怎样进入关于数据库集的内容,谢谢。
2010-08-20 23:18
thomasou
Rank: 1
等 级:新手上路
帖 子:67
专家分:3
注 册:2010-8-15
收藏
得分:0 
  版主Tiger5392先生:今天编写了自动产生月分立表的代码,但就是在&&***那一句过不去,余下的代码编得不知有否问题,请您指正,谢谢。     

    set talk off
        set safety off
           close all
        ldDate1=date(2010,8,21)
        ldDate2=date(2011,10,30)
         lcxm='张三'
         for i=year(ldDate1)to year(ldDate2)
              for j=month(ldDate1)to month(ldDate2)
                 ctable='m'+str(year(i)*100+month(j),6)  &&****        
                   use (ctable)in 1
                    append blank
                      repl xm with Icxm
                      if not found
                         lcSQL='create table( 'm'+str(year(i)*100+month(j),6),(xm c(10)'
                           FOR k=1 TO 31
                      cComstr="ALTER IcSQL ADD COLUMN ms"+CHRTRAN(STR(k,2),' ','0')+" n(1)"
                          &cComstr  
                           ENDFOR
                           endif
                           endfor
                           endfor
2010-08-21 11:22
thomasou
Rank: 1
等 级:新手上路
帖 子:67
专家分:3
注 册:2010-8-15
收藏
得分:0 
谢谢版主指教,俺又改善了代码,再请教:1、对于动态表名的产生的那一句(&&&--1)处理有问题(运行显示语法问题),2、加字段ms的那一句(&&-2)是否这样写呢,请指导,谢谢。
           set talk off
        set safety off
           close all
        ldDate1=date(2010,8,21)
        ldDate2=date(2011,10,30)
         lcxm='张三'
         for i=year(ldDate1)to year(ldDate2)
              for j=month(ldDate1)to month(ldDate2)
                    ctable='m'+str(i*100+j,6)
               
                   IF   FILE( 'ctable.dbf ')
                      use (ctable)in 2
                    append blank
                      repl xm with Icxm
                    else
                           IcSQL='creat table  'm'+str(i*100+j,6) ,(xm c(10))'&&————1
                           FOR k=1 TO 31
                      cComstr="ALTER IcSQL ADD COLUMN ms"+CHRTRAN(STR(k,2),' ','0')+" n(1)"&&--2
                          &cComstr  
                           ENDFOR
                           endif
                           endfor
                           endfor
2010-08-21 12:14
thomasou
Rank: 1
等 级:新手上路
帖 子:67
专家分:3
注 册:2010-8-15
收藏
得分:0 
谢谢版主教导,俺对于程序的编写包括思维方式是一般人的思想方式,不是计算机要求的思维方式,昨天俺买了一本《算法与程序设计》,俺再认真读书,提高水平。
再请教版主,对于俺这句代码 c Comstr="ALTER IcSQL ADD COLUMN ms"+CHRTRAN(STR(k,2),' ','0')+" n(1)"&&
                            &cCmostr
确实再运行中,走不过去,显示也是语法错误,正确的是怎样?请指教,谢谢。
2010-08-21 13:22
thomasou
Rank: 1
等 级:新手上路
帖 子:67
专家分:3
注 册:2010-8-15
收藏
得分:0 
更正17楼 &cCmostr 应为  &cComstr,打错了。
2010-08-21 13:31
快速回复:求教一个VFP的编程问题
数据加载中...
 
   



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

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