好伤脑筋的一道题,请来帮忙!
这个程序是对数据表的更新,思路是: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以上为老年居民。但更新完后还是“其他非从业居民”代码没变。请教各位老师。