| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 526 人关注过本帖
标题:如何由 开支明细帐.dbf 动态生成 开支统计表.dbf
只看楼主 加入收藏
王咸美
Rank: 1
等 级:新手上路
帖 子:821
专家分:3
注 册:2018-1-4
结帖率:97.4%
收藏
已结贴  问题点数:20 回复次数:48 
如何由 开支明细帐.dbf 动态生成 开支统计表.dbf
现有 开支明细帐.dbf 我想动态生成 开支统计表.dbf
要求:
1、开支统计表中除“姓名”、“合计”字段外,其它字段由 开支明细帐.dbf中“支出明细”动态生成,具体字段数量不固定;
2、“合计”字段要放在最右边;
3、最后统计毎个学生支出金额,写入“合计”中。
【由于本人是新手,对vfp纯属个人爱好,不喜勿喷!】
请各位高手不吝赐教,万分感谢!!!
开支明细帐.rar (563 Bytes)

原始表:开支明细帐.dbf
图片附件: 游客没有浏览图片的权限,请 登录注册

结果表:开支统计表.dbf
图片附件: 游客没有浏览图片的权限,请 登录注册


[此贴子已经被作者于2025-10-20 16:00编辑过]

搜索更多相关主题的帖子: 写入 dbf 统计 字段 动态生成 
3 天前 15:58
my2318
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:14
帖 子:310
专家分:699
注 册:2014-3-18
收藏
得分:0 
数据表设计不好,不便于统计
3 天前 18:32
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:66
帖 子:1118
专家分:2757
注 册:2015-12-30
收藏
得分:0 
跟费用明细账那个贴是一个意思
看上去格式规范了,但看到后面,逗号又变成全角了,不知是否还有别的问题
楼上说的正是,数据表设计不好,其实就是源头没设计好
对于很随意的用户,你永远也不知道下一步他会做出什么来,所以你会有永远解决不完的问题
前天 08:45
王咸美
Rank: 1
等 级:新手上路
帖 子:821
专家分:3
注 册:2018-1-4
收藏
得分:0 
数据表已作修改,不知是否规范
开支明细帐.rar (569 Bytes)

图片附件: 游客没有浏览图片的权限,请 登录注册
前天 10:20
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2319
专家分:4195
注 册:2007-4-27
收藏
得分:6 
程序代码:

       ***************
       * 名称:将开支明细转换成按物品清单列表
       * 来源:https://bbs.bc-/thread-514547-1-1.html
       * 时间:2025-10-21
       * 思路:因原表开支明细中的记录缺少规律,第一步将“,”号和“,”号进行统一,使之有规律性;
       *       第二步提取“物品”的名称;第三步创建统计表;第四步进行统计;第五步算合计。
       * ★★★★★★★★以上五步中有一个BUG,即 当“物品”的长度超过5个汉字,会出错★★★★★★★★
       ***************
       CLEAR 
       SET SAFETY off
       SET engi 70
       CLOSE DATABASES 
       
       SELECT * from 开支明细帐 into table ls
       SELECT ls
       REPLACE 支出明细 with STRTRAN(支出明细,[],[,]) ALL   &&& 第一步完成
       zfc=[,]
       SELECT ls
       GO top
       SCAN
         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)                      &&& 得到 物品名称
           IF !aa$zfc
             zfc=zfc+[0000000.00 as ]+aa+[,]          &&& 形成SQL语句中的字段列表
           ENDIF 
           k1=k2+3
         ENDFOR 
         SELECT ls
       ENDSCAN                                        &&& 第二步完成
       c_zdm=[姓名]+zfc+[合计]
       SELECT &c_zdm. from ls into table 开支统计表   &&& 第三步完成
       SELECT 开支统计表
       USE 开支统计表 alia bmk
       SELECT ls
       GO top
       SCAN
         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  
           zdm=SUBSTR(c_zf,1,k-1)                     &&& 得到 物品名称
           aa=[]
           FOR ii=1 to LEN(c_zf)
             IF SUBSTR(c_zf,ii,1)$[0123456789.]
               aa=aa+SUBSTR(c_zf,ii,1)                &&& 得到 金额 文本
             ENDIF 
           ENDFOR 
           n_rmb=VAL(aa)                              &&& 金额文本转数值
           SELECT bmk
           LOCATE for bmk.姓名=ls.姓名
           IF FOUND()
             REPLACE ([bmk.]+zdm) with n_rmb          &&& 记录消费的金额
           ENDIF 
           k1=k2+3                                    &&& 确定 下一个 取词的起始位置值班
         ENDFOR 
         SELECT ls
       ENDSCAN                                        &&& 第四步完成
       SELECT bmk
       GO top
       SCAN
         sn=0
         FOR i=2 to FCOUNT()-1
           sn=sn+EVALUATE(FIELD(i))                   &&& 求得某人的消费金额和
         ENDFOR 
         REPLACE 合计 with ALLTRIM(TRANSFORM(sn,[]))+[] &&& 写入合计数(王老师这次的开支明细表上合计字段 用了 “字符型” !!!★★★ 真 的 讨 厌 ★★★)
         SELECT bmk
       ENDSCAN                                        &&& 第五步完成
       CLOSE DATABASES 
       QUIT 
       * 边试边写,已成功
       * 原始表中的开支明细记载方法 属于不可取的方法



王老师,要在初始数据表设计上下功夫,代码可以很简单的!
上午没什么事,帮你做了。其他人做代码是可以再精简一些的!

只求每天有一丁点儿的进步就可以了
前天 10:31
王咸美
Rank: 1
等 级:新手上路
帖 子:821
专家分:3
注 册:2018-1-4
收藏
得分:0 
谢谢!!!
前天 10:39
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2319
专家分:4195
注 册:2007-4-27
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册


原始设计成这样,统计会很简单的

只求每天有一丁点儿的进步就可以了
前天 10:43
王咸美
Rank: 1
等 级:新手上路
帖 子:821
专家分:3
注 册:2018-1-4
收藏
得分:0 
如何确保“合计”字段放在所有字段的最右边,请指点!
前天 11:27
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2319
专家分:4195
注 册:2007-4-27
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

5楼代码中的这一句,让合计在最右边

你把这一句子中的姓名 与  合计  交换一下位置执行一下,打开表看看就知道了

[此贴子已经被作者于2025-10-21 12:36编辑过]


只求每天有一丁点儿的进步就可以了
前天 12:31
王咸美
Rank: 1
等 级:新手上路
帖 子:821
专家分:3
注 册:2018-1-4
收藏
得分:0 
谢谢!我想将生成的“开支统计表.dbf”中的“合计”放到表的最后(最右边)显示,不知可行?另外,可否去掉小数部分,请赐教!

[此贴子已经被作者于2025-10-21 16:30编辑过]

前天 16:16
快速回复:如何由 开支明细帐.dbf 动态生成 开支统计表.dbf
数据加载中...
 
   



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

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