专栏首页加菲猫的VFP快撸三合一BS用户管理模块,撸完就去泡咖啡,谁能享受人生?

快撸三合一BS用户管理模块,撸完就去泡咖啡,谁能享受人生?

子曰:“温故而知新,可以为师矣。

大家好,我是秦时明月。上次我记录了利用“猫框”实现BS系统登录界面,今天我们实验一下BS应用系统之用户管理模块,前提是先抛开CSS样式在网页中应用和软件操作权限控制,只聊实现这一功能的操作方式。

先看一下我们要实现的界面效果:

01

第一次打开页面时的样子:

02

当你输入昵称“ALL”点“查询”之后的样子

03

当你输入查询昵称“jiafeimao”点“查询”之后的样子:

04

当你输入昵称和密码之后点击“添加”之后的界面

好了,通过以上的界面,我们知道了我们今天要试验的内容。接下来,我们来准备试验的文件。

1 当然是建表了wuser.dbf

2.BS网页文件clryxx.htm

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>用户管理模块</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body bgcolor="#ffffff">
  <form id="form1" name="form1" method="post" action="clryxx.fsp">
    <label for="textfield">请输入昵称:</label>
    <input type="text" name="lkname" id="lkname" value="<%u(cname)%>" title="输入 ALL  显示所有用户名"/>
    <input type="submit" name="button" id="button" value="查询" />    <label for="textfield">&nbsp;&nbsp;[输入ALL显示所有用户]</label>
  </form>
  <% if not empty(cname)%>  
  <hr />
  <table>
  <tr>
  <td align="center" bgcolor="#66CCFF"><strong>用户ID</strong></td>
  <td align="center" bgcolor="#66CCFF"><strong>昵称</strong></td> <td align="center" bgcolor="#66CCFF"><strong>密码</strong></td>
  <td bgcolor="#66CCFF"><strong>操作</strong></td>
  </tr>
  <tr>
  <% scan %>
  <form name="fm<%u(ID)%>" method=post action="clryxx.fsp">
  <td><input name="uid" type=text value="<%u(uid)%>" readonly="readonly"/></td>
  <td><input type=text name="uname" value="<%u(uname)%>"/></td>
  <td><input type=password name="upass" value="<%u(upwd)%>"/></td>
  <td><input type=hidden name="id" value="<%u(ID)%>" id="id" />
  <button type="submit" name="act" id="act" value="1"  onclick="return confirm('确定要修改吗?')">修改</button>
  <button type="submit" name="act" id="act" value="2"  onclick="return confirm('确定要删除吗?')">删除</button></td>   
  </form>
</tr> 
 <% endscan %>
  </table> 
<%endif %>

  <hr />
    <table>
  <tr>
  <td align="center" bgcolor="#66CCFF"><strong>用户ID</strong></td>
  <td align="center" bgcolor="#66CCFF"><strong>昵称</strong></td> <td align="center" bgcolor="#66CCFF"><strong>密码</strong></td>
  <td bgcolor="#66CCFF"><strong>操作</strong></td>
  </tr>    
    <tr>
  <form name="fmadd" method=post action="clryxx.fsp">
  <td><input name="uid" type=text value="系统自动分配" readonly="readonly"/></td>
  <td><input type=text name="uname" value="登录名"/></td>
  <td><input type=password name="upass" value=""/></td>
  <td><input type=hidden name="id" value="<%u(ID)%>" id="id" />
  <button type="submit" name="act" id="act" value="3"  onclick="return confirm('确定要添加吗?')">添加</button></td>   
  </form>
</tr>
  </table>
</body>
</html>

看着很多,实际上要关注的是以下的代码,这是输入查询条件的代码

<form id="form1" name="form1" method="post" action="clryxx.fsp">
    <label for="textfield">请输入昵称:</label>
    <input type="text" name="lkname" id="lkname" value="<%u(cname)%>" title="输入 ALL  显示所有用户名"/>
    <input type="submit" name="button" id="button" value="查询" />    <label for="textfield">&nbsp;&nbsp;[输入ALL显示所有用户]</label>
  </form>

这是中间列表部分的代码(列表,修改)

 <% if not empty(cname)%>  
  <hr />
  <table>
  <tr>
  <td align="center" bgcolor="#66CCFF"><strong>用户ID</strong></td>
  <td align="center" bgcolor="#66CCFF"><strong>昵称</strong></td> <td align="center" bgcolor="#66CCFF"><strong>密码</strong></td>
  <td bgcolor="#66CCFF"><strong>操作</strong></td>
  </tr>
  <tr>
  <% scan %>
  <form name="fm<%u(ID)%>" method=post action="clryxx.fsp">
  <td><input name="uid" type=text value="<%u(uid)%>" readonly="readonly"/></td>
  <td><input type=text name="uname" value="<%u(uname)%>"/></td>
  <td><input type=password name="upass" value="<%u(upwd)%>"/></td>
  <td><input type=hidden name="id" value="<%u(ID)%>" id="id" />
  <button type="submit" name="act" id="act" value="1"  onclick="return confirm('确定要修改吗?')">修改</button>
  <button type="submit" name="act" id="act" value="2"  onclick="return confirm('确定要删除吗?')">删除</button></td>   
  </form>
</tr> 
 <% endscan %>
  </table> 
<%endif %>

看下方的新增功能模块

<table>
  <tr>
  <td align="center" bgcolor="#66CCFF"><strong>用户ID</strong></td>
  <td align="center" bgcolor="#66CCFF"><strong>昵称</strong></td> <td align="center" bgcolor="#66CCFF"><strong>密码</strong></td>
  <td bgcolor="#66CCFF"><strong>操作</strong></td>
  </tr>    
    <tr>
  <form name="fmadd" method=post action="clryxx.fsp">
  <td><input name="uid" type=text value="系统自动分配" readonly="readonly"/></td>
  <td><input type=text name="uname" value="登录名"/></td>
  <td><input type=password name="upass" value=""/></td>
  <td><input type=hidden name="id" value="<%u(ID)%>" id="id" />
  <button type="submit" name="act" id="act" value="3"  onclick="return confirm('确定要添加吗?')">添加</button></td>   
  </form>
</tr>
  </table>

利用了三个<form>标签,提交给处理文件action=”clryxx.fsp”,除了“查询”按钮,其他按钮都有属性name=”act”,那么我们就来看看clryxx.fsp的代码。

define class clryxx as session 
      procedure ondefault    
        private   cname,cid,cuid,cuname,ccpwd,cact
        && 以下是获取网页传递过来的参数 无论是get or post   
        && 至于谁被传递过来是由触发提交表单的按钮决定的
        cname=allt(httpqueryparams("lkname"))
        cact=allt(httpqueryparams("act"))
        cid=allt(httpqueryparams("id"))
        cuid=allt(httpqueryparams("uid"))
        cuname=allt(httpqueryparams("uname"))
        ccpwd=allt(httpqueryparams("upass"))
        && 以下根据  name="act" 的 值决定进行什么操作   3 ad 2 del 1 edit  其他是查询
        do case
             case cact="3" && 添加动作
                    return this.actadd(cuname,ccpwd)  
             case cact="2" &&  删除动作
                    return this.actdel(cid)               case cact="1"  && 添加动作
             return this.actedit( cid,cuid,cuname,ccpwd)         other && 查询动作
                   return this.showlookinfo(cname)
              endcase  
      endpro 
      
      
      proce  showlookinfo  
          lpara s    
        if not used('wuser') then 
           sele 0
           use wuser
        endif 

        sele wuser
        if UPPER(s)<>"ALL" then 
          set filter to  "&s"$allt(uname)     
        endif 
        set dele on 
        go top         
         _currentcode="UTF-8"
        chtml=getwwwrootpath("")+"clryxx.htm"
        chtml= FWS_MergeFile(chtml)
        use in select('wuser')
        set dele off 
        return chtml          
      endproc 
      
      proc  actadd
     lpara cuname,ccpwd
     if not used('wuser') then 
        sele 0
        use wuser
     endif         
     sele wuser
     
     &&      这里是生成新序号
     select max(uid) uid  from wuser into cursor TJ

     sele tj 
     private lsid
     lsid=allt(subs(uid,2))
     lsid="A"+padl(int(val(lsid))+1,4,"0")
     use in select('tj') 
     
    sele wuser
    appe blank 
    repl uid with lsid,uname with cuname,upwd with ccpwd 
    use in select('wuser') 
    return this.showlookinfo(cuname)
   
      endpro
      
      proc actdel
          lpara cid
          private cmdstr
          if not used('wuser') then 
             sele 0
             use wuser
          endif         
          sele wuser
          set dele on        
          cmdstr=" dele for id="+cid
          &cmdstr
          use in select('wuser')
          set dele off 
          return this.showlookinfo("")
      endpro
      
      proc actedit
          lpara    cid,cuid,cuname,ccpwd
          if not used('wuser') then 
             sele 0
             use wuser
         endif         
         sele wuser
         set dele on        
         cmdstr=" loca for id="+cid
         &cmdstr
         if found()
             repl uname with cuname
             repl upwd with ccpwd
         else
            cuname=""
         endif 
         use in select('wuser')
         set dele off   
         return this.showlookinfo(cuname)       
      endproc
enddefi

猫框项目中启动调试服务器,然后在地址栏里输入http://IP:801/clryxx.fsp。而不是输入 clryxx.htm,不妨自己在地址栏试验一下,看有什么区别,为什么?欢迎在评论区留言。

写在最后面的话

加菲猫的VFP公众号接受稿搞,一经采用,即有稿费,稿费暂定50元一篇。

加菲猫的vfp倡导用VFP极简混合开发,少写代码、快速出活,用VFP,但不局限于VFP,各种语言混合开发。

已经带领一百多名会员成功掌到VFP的黑科技,进入了移动互联网时代,接下来我们要进入物联网领域。

本文分享自微信公众号 - 加菲猫的VFP(VFPPLUS),作者:加菲猫的VFP

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-09-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何让你产品不被淘汰

    从互联网时代开始,再到现在的智能时代,听得最多的就是你什么也没做错,就是因为输给了这个时代。今天这家公司倒闭啦,明天又一巨头倒下,像索尼好像在互联网上已经倒闭了...

    脑袋长草
  • 技术趣味史-Java语言的身世

    时间回到 1990 年 12 月,一个叫做 帕特里克·诺顿 的大佬被他公司 Sun 开发的 C++ 和 C语言编译器搞得头大,主要是因为当时 C语言 对一些硬件...

    Wizey
  • 从春节送祝福谈谈 IO 模型(二)

    上期结合程序员小猿用温奶器给孩子热奶的故事,把面试中常聊的“同步、异步与阻塞、非阻塞有啥区别”简单进行普及。

    一猿小讲
  • 定制程序员的对联,让你流泪

    所以把这篇文章转载分享给大家。作者好像是 黄峰达(Phodal),ThoughtWorks 软件开发工程师,CSDN 博客专家。

    阳光之海
  • 这款“咖啡机器人”落地超百家,开启猎户星空机械臂生态第一步

    越来越多的服务机器人出现在我们生活中。从行业角度看,服务机器人已不再是“噱头”,“真有用”的机器人越来越多受到B端客户认可,服务机器人行业正在迎来拐点。

    量子位
  • 深度 | 新零售是个坑,线上流量红利一直都在

    前言 线上红利真的尽了?在我看来,更多是“渠道曝光”简单粗暴获取线上流量的红利尽了,我们进入了一个拼创意、拼内容的社交传播时代。 1 新零售是个坑 “新零售”是...

    灯塔大数据
  • 我可能去了假的星巴克,咖啡师竟然是机器人

    最近,机器人咖啡师出现在旧金山Cafe X咖啡店,它可以泡制咖啡。顾客用手机、平板预定咖啡,服务速度很快。 Fastcompany记者亚当•布鲁斯坦(Adam ...

    机器人网
  • 如何给女朋友解释什么是IO中的阻塞、非阻塞、同步、异步?

    周末在家加班,正在疯狂的撸代码,女朋友很开心的跑过来,手里拿着他刚刚画好的一副漫画。

    Java团长
  • 利用猫框三层框架开发(C+B+App/Api/S)食堂管理项目成功案例

    本人属于业余中业余VFP爱好者,也是第一次写这种分享,文字功底能力有限,大家!见好见好了!

    加菲猫的VFP
  • 漫话:如何给女朋友解释什么是IO中的阻塞、非阻塞、同步、异步?

    周末在家加班,正在疯狂的撸代码,女朋友很开心的跑过来,手里拿着他刚刚画好的一副漫画。

    后端码匠
  • 当我们在谈论瑞幸咖啡的时候,我们谈论什么?

    一个成立48年的咖啡巨头竟然被问到是否有可能被一个乳臭未干的新入局者超越,年初,路透社记者的这个提问让星巴克的CEO始料不及。但是瑞幸咖啡的破坏性创新更是让这家...

    曾响铃
  • 张泉灵:时代抛弃你时,连一声再见都不会说

    每一个追求上进的人,都会担心自己跟不上时代,但究竟怎样做才能消弭内心深处的不安全感呢?能给出标准答案的人不多。

    华章科技
  • 风投疯狂烧钱:科技创业没有泡沫 只有狂热

    腾讯科技 王根旺 9月28日报道 “请务必确保自己账上有足够9-12个月的现金储备。”经纬创投合伙人张颖最近一封名为《泡沫就在那里》的公开信在创业界和投资...

    腾讯研究院
  • 外卖进入三国时代,2016年有什么发展趋势?

    饿了么与阿里巴巴及蚂蚁金服日前正式达成战略合作协议,前者获得12.5亿美元的巨额投资,至此,外卖O2O市场正式进入BAT的怀抱:百度系的外卖+糯米、阿里系的饿了...

    罗超频道
  • 设计模式---装饰者模式

    装饰者模式(Decorator Pattern):动态地给一个对象增加一些额外的职责,增加对象功能来说,装饰模式比生成子类实现更为灵活。装饰模式是一种对象结构型...

    大忽悠爱学习
  • 设计模式,Let's “Go”! (上)

    前言 最近读了《Head First 设计模式》,每天早上看一章,学习一个设计模式,做些笔记,然后晚上抽空用刚学习的 Go 语言实现一下。半个月下来书读完了,留...

    枕边书
  • 逾期赖账两把刀“撸口子”,现金贷行业会不会坏账过多而亏死?

    导语:欠债还钱天经地义,可偏偏有一群人“凭本事”借钱,为什么要还?“撸口子”就是用来形容这些人的,因为目前现金贷的整顿,不允许暴利催收,所以借款人还款意愿明显下...

    企鹅号小编
  • “懒癌”患者福音:是时候找一个AI帮你做家务了

    作为一个每天忙于刷paper/撸代码/996/debug(误)的AI界人士,你一定恨不得每天回到家就变身懒癌患者吧,(即使是控制洗衣机微波炉)洗衣做饭这些低端智...

    量子位
  • 小程序上线后的500+天

    微信用户10亿,而小程序用户已有6亿。但很多人怀疑:依附于一款应用,真的不会有天花板么?如果微信到了天花板,小程序会不会也走到了头?

    中微信通

扫码关注云+社区

领取腾讯云代金券