| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1217 人关注过本帖
标题:好伤脑筋的一道题,请来帮忙!
只看楼主 加入收藏
shyibaoban
Rank: 1
等 级:新手上路
帖 子:125
专家分:2
注 册:2008-12-3
结帖率:77.78%
收藏
已结贴  问题点数:10 回复次数:13 
好伤脑筋的一道题,请来帮忙!
这个程序是对数据表的更新,思路是:1、低保人员,学生,重残人员性质及代码不动,根据身份证算出年龄,根据年龄计算出身份标志来,男60以上为老年人,女55以上为老年人,18周岁以下为学生儿童,期间的为成年人。2、除去1之外根据身份证号算出年龄,根据年龄判断人员性质,男60以上代码为B,人员性质为“老年居民”,女55以上,代码为B,人员性质为“老年居民”,18周岁以下代码A,人员性质为“儿童及18周岁以下居民”,这期间的代码为C,人员性质为“其他非从业居民”。最为难过的是年龄更新了,性质却没变,1中的身份标志也没变。好伤脑筋,请教各位高手老师,请看一下我的代码,错在哪?如果这个代码不行请给个程序,我头疼了好几天了,本不想麻烦各位,可是不得已了。在此先行谢谢!


PUBLIC rycsrq,rynl
&&以下用身份证号算出出生日期,再根据出生日期算出年龄,根据年龄和性别算出人员性


**---------------------**
**---------------------**
**人员性质表述如下:
** 1 a 儿童及18周岁以下居民 40 260 **
** 2 b 老年居民 140 160 **
** 3 c 其他非从业居民 240 60 **
** 4 d 低保人员 300 **
** 5 e 重度残疾人员 300 **
** 6 f 学生 40 260 **
**说明:老年居民为男60周岁以上,女55周岁以上。**
**其他非从业人员为18周岁以上,男60周岁以下,女55周岁以下。**
**低保人员和重度残疾人员不分年龄。**
**标志为学生的不分年龄。**
**---------------------**
**---------------------**
&&思路:1、标志为学生的性质不动。
&& 2、标志为低保人员、重度残疾人员的性质不动。
&& 3、判断年龄男在60周岁以上,女在55周岁以上且标志不为学生和低保、重度残

疾的变为老年居民。
&& 4、判断年龄在18周岁以下且标志不为学生和低保、重度残疾的变为18周岁以下

居民。
&& 5、其他的标志不为学生和低保、重度残疾的变为其他非从业居民。
&&说明一下:在设计表时人员表中不应该把年龄和性质包括在内。而应在单独的表中呈现

,在需要的时候利用查询就可以了。
***********************先根据身份证号算出年龄和出生日期

**************************************************

IF messagebox("确定要初始数据吗?",1+32+256,"居民医保管理系统")=2
RETURN
ELSE
select ry
GO top
***********以下为以出生日期来算年龄********************************
DO WHILE .t.
IF EOF()
EXIT
ENDIF
DO case
case LEN(ALLTRIM(sfzh))=15
rycsrq=ALLTRIM("19"+SUBSTR(ALLTRIM(sfzh),7,6))
case LEN(ALLTRIM(sfzh))=18
rycsrq=ALLTRIM(SUBSTR(ALLTRIM(sfzh),7,8))
ENDCASE
replace nl WITH ALLTRIM(STR(year(DATE())-VAL((SUBSTR(ALLTRIM

(rycsrq),1,4)))))

SKIP
ENDD
*********************************************************

******************************************************************************

**************************
*cmessagetitle='医疗保险管理系统'
*cmessagetext='确定要初始数据吗?'
*ndialogtype=4+32
*nAnswer=messagebox(cmessagetext,ndialogtype,cmessagetitle)
*rynl=VAL(ALLTRIM(nl))+1

*UPDATE ry SET nl=STR(rynl)

******************************************************************************

****************************
SELECT ry
GO top
rynl=VAL(nl)
DO WHILE .t.
IF EOF()
EXIT
ENDIF
IF rynl>=60 AND xb="男" AND xzdm!="d" AND xzdm!="e"
replace xzdm WITH "b",ryxz WITH "老年居民"
ENDIF
IF rynl>=55 AND xb="女" AND xzdm!="d" AND xzdm!="e"
replace xzdm WITH "b",ryxz WITH "老年居民"
ENDIF
IF rynl<18 AND xzdm!="d" AND xzdm!="e" AND xzdm!="f"
replace xzdm WITH "a",ryxz with "儿童及18周岁以下居民"
ENDIF
IF rynl>=18 AND rynl<60 AND xb="男" AND xzdm!="d" AND xzdm!="e" AND xzdm!="f"
replace xzdm WITH "c",ryxz with "其他非从业居民"
ENDIF
IF rynl>=18 AND rynl<55 AND xb="女" AND xzdm!="d" AND xzdm!="e" AND xzdm!="f"
replace xzdm WITH "c",ryxz WITH "其他非从业居民"
ENDIF
skip
ENDDO


******************************************************************************

***
SELECT ry
GO top
rynl=VAL(nl)
IF "d"$xzdm
DO WHILE .t.
IF EOF()
EXIT
ENDIF
DO case
CASE VAL(nl)<18 AND xzdm="d"
rysfbz="学生儿童"
replace sfbz WITH rysfbz
CASE VAL(nl)>=55 AND xzdm="d" AND xb="女"
rysfbz="老年人"
replace sfbz WITH rysfbz
CASE VAL(nl)>=60 AND xzdm="d" AND xb="男"
rysfbz="老年人"
replace sfbz WITH rysfbz
CASE VAL(nl)>=18 AND VAL(nl)<55 AND xzdm="d" AND xb="女"
rysfbz="成年人"
replace sfbz WITH rysfbz
CASE VAL(nl)>=18 AND VAL(nl)<60 AND xzdm="d" AND xb="男"
rysfbz="成年人"
replace sfbz WITH rysfbz
ENDCASE
SKIP
LOOP
ENDDO

endif
IF "e"$xzdm
DO WHILE .t.
IF EOF()
EXIT
ENDIF
DO case
CASE VAL(nl)<18 AND xzdm="e"
rysfbz="学生儿童"
replace sfbz WITH rysfbz
CASE VAL(nl)>=55 AND xzdm="e" AND xb="女"
rysfbz="老年人"
replace sfbz WITH rysfbz
CASE VAL(nl)>=60 AND xzdm="e" AND xb="男"
rysfbz="老年人"
replace sfbz WITH rysfbz
CASE VAL(nl)>=18 AND VAL(nl)<55 AND xzdm="e" AND xb="女"
rysfbz="成年人"
replace sfbz WITH rysfbz
CASE VAL(nl)>=18 AND VAL(nl)<60 AND xzdm="e" AND xb="男"
rysfbz="成年人"
replace sfbz WITH rysfbz
ENDCASE
SKIP
LOOP
ENDDO

endif
****************************更新一下参数

*****************************************
SELECT config
SCAN
UPDATE ry SET ry.ryxz=config.ryxz,ry.drjfe=config.cs1 WHERE

ry.xzdm=config.xzdm
ENDSCAN
******************************************************************************

**************************
messagebox("数据初始完成!",0+48,"居民医保管理系统")
ENDIF


比如女55以上为老年居民。但更新完后还是“其他非从业居民”代码没变。请教各位老师。




搜索更多相关主题的帖子: 伤脑筋 
2010-01-03 14:57
shyibaoban
Rank: 1
等 级:新手上路
帖 子:125
专家分:2
注 册:2008-12-3
收藏
得分:0 
求求各位,帮帮忙吧!
2010-01-03 15:02
Tiger5392
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:88
帖 子:2775
专家分:2237
注 册:2006-5-17
收藏
得分:2 
replace all 年龄 with year(date())-iif(len(alltrim(sfzh))=15,val('19'+substr(sfzh,7,2)),val(substr(sfzh,7,4)))

感言:学以致用。 博客:http://www./blog/user14/65009/index.shtml email:Tiger5392@
2010-01-03 15:54
Tiger5392
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:88
帖 子:2775
专家分:2237
注 册:2006-5-17
收藏
得分:0 
* 男60以上代码为B,人员性质为“老年居民”,女55以上,代码为B,人员性质为“老年居民”
* 18周岁以下代码A,人员性质为“儿童及18周岁以下居民”
* 这期间的代码为C,人员性质为“其他非从业居民”
replace all xzdm with iif(rynl>60 and xb='男' or rynl>55 and xb='女','B',iif(rynl<18,'A','C'))
replace all ryxz with iif(xzdm='A','儿童及18周岁以下居民',iif(xzdm='B','老年居民','其他非从业人员'))

感言:学以致用。 博客:http://www./blog/user14/65009/index.shtml email:Tiger5392@
2010-01-03 16:02
shyibaoban
Rank: 1
等 级:新手上路
帖 子:125
专家分:2
注 册:2008-12-3
收藏
得分:0 
谢谢Tiger5392,你给我简化了生成年龄的步骤。后边的该怎么做呢,根据年龄来判断的那些?
2010-01-03 16:06
shyibaoban
Rank: 1
等 级:新手上路
帖 子:125
专家分:2
注 册:2008-12-3
收藏
得分:0 
以下是引用Tiger5392在2010-1-3 16:02:00的发言:

* 男60以上代码为B,人员性质为“老年居民”,女55以上,代码为B,人员性质为“老年居民”
* 18周岁以下代码A,人员性质为“儿童及18周岁以下居民”
* 这期间的代码为C,人员性质为“其他非从业居民”
replace all x ...
不过有个问题,不是所有的都是这样的,要排除性质代码为D,E,F的,即:低保人员,重残人员和学生。其中低保人员,重残人员还是根据年龄来分出身份为老年人,成年人,儿童来。
2010-01-03 16:17
Tiger5392
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:88
帖 子:2775
专家分:2237
注 册:2006-5-17
收藏
得分:0 
有点乱,需要理一理。你在1楼说
1、低保人员,学生,重残人员性质及代码不动,根据身份证算出年龄,根据年龄计算出身份标志来,男60以上为老年人,女55以上为老年人,18周岁以下为学生儿童,期间的为成年人。
2、除去1之外根据身份证号算出年龄,根据年龄判断人员性质,男60以上代码为B,人员性质为“老年居民”,女55以上,代码为B,人员性质为“老年居民”,18周岁以下代码A,人员性质为“儿童及18周岁以下居民”,这期间的代码为C,人员性质为“其他非从业居民”。

于是,我设计的思路是
1 计算出年龄,3楼程序完成了
2 计算代码和人员性质,4楼程序完成了

至于4楼程序错了,你可以根据你的要求,修改4楼中的条件

感言:学以致用。 博客:http://www./blog/user14/65009/index.shtml email:Tiger5392@
2010-01-03 16:27
shyibaoban
Rank: 1
等 级:新手上路
帖 子:125
专家分:2
注 册:2008-12-3
收藏
得分:0 
Tiger5392老师,测试过了不能成功。一更新,年龄字段全为空。不知为什么?

[ 本帖最后由 shyibaoban 于 2010-1-3 18:25 编辑 ]
2010-01-03 18:14
shyibaoban
Rank: 1
等 级:新手上路
帖 子:125
专家分:2
注 册:2008-12-3
收藏
得分:0 
主要是这里:
SELECT ry
GO top
rynl=VAL(nl)
DO WHILE .t.
IF EOF()
EXIT
ENDIF
IF rynl>=60 AND xb="男" AND xzdm!="d" AND xzdm!="e"
replace xzdm WITH "b",ryxz WITH "老年居民"
ENDIF
IF rynl>=55 AND xb="女" AND xzdm!="d" AND xzdm!="e"
replace xzdm WITH "b",ryxz WITH "老年居民"
ENDIF
IF rynl<18 AND xzdm!="d" AND xzdm!="e" AND xzdm!="f"
replace xzdm WITH "a",ryxz with "儿童及18周岁以下居民"
ENDIF
IF rynl>=18 AND rynl<60 AND xb="男" AND xzdm!="d" AND xzdm!="e" AND xzdm!="f"
replace xzdm WITH "c",ryxz with "其他非从业居民"
ENDIF
IF rynl>=18 AND rynl<55 AND xb="女" AND xzdm!="d" AND xzdm!="e" AND xzdm!="f"
replace xzdm WITH "c",ryxz WITH "其他非从业居民"
ENDIF
skip
ENDDO

比如女55以上为老年居民。但更新完后人员性质和代码没变。

[ 本帖最后由 shyibaoban 于 2010-1-3 18:28 编辑 ]
2010-01-03 18:27
shyibaoban
Rank: 1
等 级:新手上路
帖 子:125
专家分:2
注 册:2008-12-3
收藏
得分:0 
根据这replace all xzdm with iif(rynl>60 and xb='男' or rynl>55 and xb='女','B',iif(rynl<18,'A','C'))
测试,xzdm全为'c',不知为啥?
2010-01-03 18:46
快速回复:好伤脑筋的一道题,请来帮忙!
数据加载中...
 
   



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

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