| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 136 人关注过本帖
标题:为王咸美特开一贴
只看楼主 加入收藏
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2327
专家分:4195
注 册:2007-4-27
结帖率:96.15%
收藏
 问题点数:0 回复次数:8 
为王咸美特开一贴
只是为了给王咸美老师提供一个思路

wxm开支明细转换与统计.rar (2.57 KB)


依次执行二个PRG文档,即可得到结果

分二个PRG 相当于小学数学应用题的分步列式计算

[此贴子已经被作者于2025-10-27 14:05编辑过]

收到的鲜花
  • kangss前天 15:32 送鲜花  1朵  
搜索更多相关主题的帖子: PRG 数学 应用 结果 计算 
前天 12:49
王咸美
Rank: 1
等 级:新手上路
帖 子:832
专家分:3
注 册:2018-1-4
收藏
得分:0 
谢谢!谢谢🙏
前天 20:55
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2327
专家分:4195
注 册:2007-4-27
收藏
得分:0 
感谢kangss赠送鲜花,谢谢!

只求每天有一丁点儿的进步就可以了
昨天 07:51
王咸美
Rank: 1
等 级:新手上路
帖 子:832
专家分:3
注 册:2018-1-4
收藏
得分:0 
可以将两个prg文件作为过程文件写到一个程序里吗?我刚试了一下没成功。请予指点,谢谢!
昨天 10:34
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2327
专家分:4195
注 册:2007-4-27
收藏
得分:0 
可以直接合并成一个的
分二个是中途可以停下,手工打开kzmx.dbf观察
也是让你看的时候,思路更清晰一些而已



[此贴子已经被作者于2025-10-28 10:45编辑过]


只求每天有一丁点儿的进步就可以了
昨天 10:43
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2327
专家分:4195
注 册:2007-4-27
收藏
得分:0 
程序代码:
       ***************
       * 名称:将开支明细转换成按物品清单列表
       * 来源:https://bbs.bc-/thread-514547-1-1.html
       * 时间:2025-10-24
       * 思路:因原表开支明细中的记录缺少规律,创建结果表;
       *       第二步将“,”号和“,”号进行统一,使之有规律性;
       *       第三步提取“物品”的名称和金额;
       ***************
       CLEAR 
       SET SAFETY off
       SET engi 70
       CLOSE DATABASES 
       CREATE TABLE kzmx ( xm c(10) ,mc c(10) ,je n(7,2))   &&& 第一步完成(如不要小数,将 n(7,2) 改成 n(4) 即可)
       
       SELECT * from 开支明细帐 into table ls
       SELECT ls
       REPLACE 支出明细 with STRTRAN(支出明细,[],[,]) ALL   &&& 第二步完成(每一笔开支间的分隔符“,,”都取消,方便后续判断)
       zfc=[,]
       SELECT ls
       GO top
       SCAN
         ygxm=姓名
         fymx=支出明细
         n=OCCURS([],fymx)
         k1=1
         FOR i=1 to n
           k2=AT([],fymx,i)
           c_zf=SUBSTR(fymx,k1,k2-k1+2)               &&& 得到如“巧克力9元”的消费内容(后续作字段名用的)
           FOR j=1 to LEN(c_zf)
             IF SUBSTR(c_zf,j,1)$[0123456789.]
               k=j                                    &&& 得到 金额数字开始的位置值
               EXIT for 
             ENDIF 
           ENDFOR  
           aa=SUBSTR(c_zf,1,k-1)                      &&& 得到 物品名称           
           bb=[]
           FOR ii=1 to LEN(c_zf)
             IF SUBSTR(c_zf,ii,1)$[0123456789.]
               bb=bb+SUBSTR(c_zf,ii,1)                &&& 得到 金额 文本
             ENDIF 
           ENDFOR 
           SELECT kzmx
           APPEND BLANK                               &&& 增加记录,写入姓名,物品名称,金额
           REPLACE kzmx.xm with ygxm
           REPLACE kzmx.mc with aa
           REPLACE kzmx.je with VAL(bb)
           k1=k2+3
         ENDFOR 
         SELECT ls
       ENDSCAN                                        &&& 完成转换
       CLOSE DATABASES 
**       QUIT 
**
**       ***************
**       * 名称:将开支明细转换成按物品清单列表
**       * 来源:https://bbs.bc-/thread-514547-1-1.html
**       * 时间:2025-10-24
**       * 思路:依据第一步转换得到的表 kzmx.dbf 进行处理:
**       *       第一步取得物品名称的唯一,即得横表的字段名;第二步创建横表;
**       *       第三步按人员、分“物品”进行统计;第四步对横表求合计。
**       ***************
**       CLEAR 
**       SET SAFETY off
**       SET engi 70
**       CLOSE DATABASES 
       SELECT 0
       USE kzmx alia kg
       SELECT mc from kg grou by mc into cursor tmp    &&& 第一步完成
       zfc=[,]
       SELECT tmp
       SCAN
         zfc=zfc+ALLTRIM(mc)+[ n(4),]           &&& n(4) 中的数字可以根据开支金额大小修正,如写成 n(7,2)则是有二位小数的,特为王老师注
       ENDSCAN 
       bjg=[姓名 c(10)]+zfc+[合计 n(4)]         &&& 此处合计是尾部,即符合 王老师的要求,在最右侧
       CREATE TABLE 开支统计(横式)表 (&bjg.)  &&& 第二步完成
       *---
       CLOSE DATABASES 
       SELECT 0
       USE 开支统计(横式)表 alia bmk
       SELECT 0
       USE kzmx alia kg
       SCAN
         zdm=[bmk.]+ALLTRIM(kg.mc)
         SELECT bmk
         LOCATE for bmk.姓名=kg.xm
         IF FOUND()
           REPLACE &zdm. with kg.je
         ELSE
           APPEND BLANK 
           REPLACE bmk.姓名 with kg.xm
           REPLACE &zdm. with kg.je
         ENDIF 
         SELECT kg
       ENDSCAN                                  &&& 第三步完成
       SELECT bmk
       GO top
       SCAN
         sn=0
         FOR i=2 to FCOUNT()-1
           sn=sn+EVALUATE(FIELD(i))             &&& 求得某人的消费金额和
         ENDFOR 
         REPLACE 合计 with sn 
         SELECT bmk
       ENDSCAN          
       CLOSE DATABASES 
       QUIT 



将二个粘贴到一起,删除连接处注释部分,执行一次就成了
能理解就有大进步的


只求每天有一丁点儿的进步就可以了
昨天 10:50
chychychy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:434
专家分:143
注 册:2015-4-18
收藏
得分:0 
回复 6楼 wengjl
,学习了
昨天 11:01
王咸美
Rank: 1
等 级:新手上路
帖 子:832
专家分:3
注 册:2018-1-4
收藏
得分:0 
谢谢!
昨天 12:01
星光闪闪513
Rank: 2
等 级:论坛游民
威 望:1
帖 子:31
专家分:34
注 册:2015-10-27
收藏
得分:0 
昨晚 20:25
快速回复:为王咸美特开一贴
数据加载中...
 
   



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

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025608 second(s), 12 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved