精华内容
下载资源
问答
  • C#数据库系统开发案例精选之企业客户资源管理系统
  • 企业微信开发案例1

    2021-05-11 20:51:54
    企业微信开发(1) 背景知识 由同一企业主体下的公众号,企业微信、小程序使用unionid来标识同一个用户对象,而openid只用于一种应用标识用户 案例1 1 设计目的 通过已知客户的unionid,来修改客户备注信息,手机...

    企业微信开发案例1

     背景知识

    由同一企业主体下的公众号,企业微信、小程序使用unionid来标识同一个用户对象,而openid只用于一种应用标识用户

    Redis是一种基于key-value的数据库,一般用于缓存(cache)

    PHP使用REDIS   https://www.daixiaorui.com/manual/redis-hGetAll.html

     

    1   设计目的

    通过已知客户的unionid,来修改客户备注信息,手机号

     

    2  实现方法

    2.1  通过企业微信的第三方应用开发接口调用来实现

    使用第三方应用开发接口来开发,需要注册第三方服务商的资质,目前无法注册第三方服务提供商。暂且不表。

     

    2.2 通过企业微信的企业内部开发接口调用来实现

    A  通过枚具备客户联系功能的企业成员(follow)得到一个follow_list,企业微信的API接口描述如下

    https://open.work.weixin.qq.com/api/doc/90000/90135/92571

    B 通过批量获取客户详情功能,逐个的获取每个follow下的所有客户详情,主要需要的客户的(unionid, external_userid,  remark_mobiles)

    接口的描述如下

    https://open.work.weixin.qq.com/api/doc/90000/90135/92994

    C 将获得到的一个follow下的所有客户信息,以hash方式放到redis中key为unionid,  field value为一个多元组

    D 需要修改remark mobile号的客户unionid给定在一个数组中,遍历之并查询redis,调用如下描述的修改客户备注信息接口来修改客户的remark mobile

    https://open.work.weixin.qq.com/api/doc/90000/90135/92115

     

    3 项目源代码:

    <?php

    class JSSDK {  
      private $appId;  
      private $appSecret;  

      public function __construct($appId, $appSecret) {  
        $this->appId = $appId;  
        $this->appSecret = $appSecret;  
      }  

      public function api_notice_increment($url, $data){
        $ch = curl_init();

        curl_setopt($ch,CURLOPT_URL, $url);
        if(stripos($url,"https://")!==FALSE){
          curl_setopt($ch, CURLOPT_SSLVERSION, 1); //1 - CURL_SSLVERSION_TLSv1
          curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
          curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        }  else    {
          curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE);
          curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验
        }
        //设置header
        curl_setopt($ch, CURLOPT_HEADER, FALSE);
        //要求结果为字符串且输出到屏幕上
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT, 3); 
      
        //post提交方式
        curl_setopt($ch, CURLOPT_POST, TRUE);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

        $tmpInfo = curl_exec($ch);
        //var_dump($tmpInfo);
        /*if (curl_errno($ch)) {
          $tmpInfo = curl_exec($ch);
        }*/
        curl_close($ch);
        return $tmpInfo;
      }
     
      public function httpGet($url) {  
        $curl = curl_init();  
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);  
        curl_setopt($curl, CURLOPT_TIMEOUT, 5);  
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);  
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);  
        curl_setopt($curl, CURLOPT_URL, $url);  
      
        $res = curl_exec($curl);  
        curl_close($curl);  
        return $res;  
      }  
      
      public function getAccessToken() {  
        // access_token 应该全局存储与更新,以下代码以写入到文件中做示例
        $data = file_get_contents("access_token.json");
        if ($data != false) {
          $data = json_decode($data);
          if ($data->expire_time > time()) {
            return $data->access_token;
          }
        }

        // 如果是企业号用以下URL获取access_token  
        $url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$this->appId&corpsecret=$this->appSecret";  
    //  $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret";
        $res = json_decode($this->httpGet($url)); 
        $access_token = $res->access_token;

        if ($access_token) {  
          $data->expire_time = time() + 3600;  
          $data->access_token = $access_token; 
          //$fp = fopen("./access_token.json", "w"); 
          $fp = fopen("access_token.json", "w"); 
          fwrite($fp, json_encode($data));  
          fclose($fp);  
        }  
        return $access_token;  
      }  
    }

    class WeChat {
      private $jssdk;
      public  $errcode;
      
      public function __construct() {  
        $this->jssdk = new JSSDK("wwbce72cb895ea9678", "EMRcSyvbkXUfa-WTaHZ3nkBFm_WQUVmQI2LjXBibkPo");  
        $this->errcode = 0;
      }  
      
      public function getFollows() {
        $token = $this->jssdk->getAccessToken();
        $url = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get_follow_user_list?access_token=" . $token;
        $res = $this->jssdk->httpGet($url);
        $obj = json_decode($res);
        $ret = $obj->follow_user;
        $this->errcode = $obj->errcode;
        return $ret;
      }
      
      public function getExtIDbyFollow($follow, $icur, &$ocur) {
        $token = $this->jssdk->getAccessToken();
        $url = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/batch/get_by_user?access_token=" . $token;
        $data = (object)[];
        $data->userid = $follow;
        $data->limit = 100;
        if (strlen($icur) > 0)
          $data->cursor = $icur;
        $jsonobj = json_encode($data);

        $res = $this->jssdk->api_notice_increment($url, $jsonobj);
        $res = json_decode($res);

        if ($res->errcode != 0) {
          $this->errcode = $res->errcode;
          return;
        }
        $ocur = $res->next_cursor;

        $elist = $res->external_contact_list;
        $ret = array();

        foreach($elist as $item) {

          if (!isset($item->external_contact->unionid) ||
              !isset($item->external_contact->external_userid)) {
            continue;
          }

          $pair = (object)[];
          $pair->unionid = $item->external_contact->unionid;
          $pair->external_userid = $item->external_contact->external_userid;

          if (count($item->follow_info->remark_mobiles) > 0)
            $pair->mobile = $item->follow_info->remark_mobiles[0];
          else
            $pair->mobile = "";

          $ret[] = $pair;
        }

        return $ret;
      }
      
      public function changePhoneMarkbyExtID($uid, $eid, $phone) {
        $token = $this->jssdk->getAccessToken();
        $url = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/remark?access_token=" . $token."&debug=1";

        $jobj = array('userid'=>$uid, 'external_userid'=>$eid);
        $jobj['remark_mobiles'] = array("$phone");
        $jstr = json_encode($jobj);

        $res = $this->jssdk->api_notice_increment($url, $jstr);

        $res = json_decode($res);
        if ($res->errcode == 0)
          return true;
        return false;
      }
    }

    class Logger {
      private $filename;
      
      public function __construct($name, $flag=false) {  
        $this->filename = $name;
        if ($flag == true) {
          $fp = fopen($this->filename, "a+");
          if ($fp) {
            ftruncate($fp, 0);
            fclose($fp);
          }
        }
      }
      
      public function log($info) {
        $fp = fopen($this->filename, "a+");
        if ($fp) {
          fwrite($fp, date("Y-m-d H:i:s")."  ".$info."\n\n");
          echo date("Y-m-d H:i:s")."  ".$info."\n\n";
          fclose($fp);
        }
      }
    }

    define("UNCHANGED", 0);
    define("CHANGED", 1);
    define("ERROR", 2);

    //----------------------------------------
    //Step1  Prepare database and wechat context
    //----------------------------------------
    $wechat = new WeChat();
    $logger = new Logger("/home/w.log");

    $redis = new Redis();
    $redis->connect('127.0.0.1', 6379);
    $redis->select(15);

    $conn  = "mysql:host=localhost;dbname=kk_zuhao360_com;port=3306";
    $pdo   = new PDO($conn, "kk_zuhao360_com", "LbBdbHJxyrJ7G6nC");
    $pdo->exec("SET NAMES UTF8");
    $pdo->exec("SET character_set_client=utf8");
    $pdo->exec("SET character_set_results=utf8");


    //-------------------------------------------------
    //Step2  query DB for unreported customers 
    //-------------------------------------------------

    //Get unreported customers from DB
    $rset = $pdo->query("select i.unionid,u.mobile from zjhj_bd_user_info as i,zjhj_bd_user as u where i.upload=0 and length(u.mobile)>10 and i.user_id=u.id");
    if ($rset == false)
      exit(0);

    $cs_infos = $rset->fetchAll(PDO::FETCH_ASSOC);
    if (count($cs_infos) <= 0)
      exit(0);

    //Add err flag for successful upload
    foreach($cs_infos as &$cs) {
      $cs['status'] = UNCHANGED;
    }

    $logger->log("request upload = ".count($cs_infos));

    //-------------------------------------------------
    //Step3  Loop follows and change customers' mobile
    //-------------------------------------------------

    //Get all follows
    $follows = $wechat->getFollows();
    $logger->log("total follows = ".count($follows));

    //Loop follow for customers
    foreach($follows as $follow) {

      $icur = "";
      $ocur = "";
      
      //Loop for paging downloading and put to redis
      $custom_cnt = 0;
      $custom_redis_cnt = 0;
      $redis->flushdb();
      do {

        //Get customer by follow
        $euids = $wechat->getExtIDbyFollow($follow, $icur, $ocur);
        $icur = $ocur;
        $custom_cnt += count($euids);

        foreach($euids as $eu) {

          //Make sure insert data
          if ($redis->hMset($eu->unionid, array('0'=>$eu->external_userid, '1'=>$eu->mobile)) == true)
            $custom_redis_cnt++;
        }
      }
      while (strlen($ocur) != 0);
      $logger->log("follow($follow) has $custom_cnt customers, load $custom_redis_cnt to redis");
      
      //Loop cs_infos for external_userid
      foreach($cs_infos as &$cs) {
        $rres = $redis->hMget($cs['unionid'],array('0', '1'));
        
        // This customer does not belong to this follow
        if ($rres['0'] === false) {
          continue;
        }
        
        //mobile has been remarked
        $mobile = $cs['mobile'];   
        if ($mobile == $rres['1']) {
          $logger->log("({$cs['unionid']} : $mobile) has been changed");
          $cs["status"] = CHANGED;
          continue;
        }

        $eid = $rres['0'];
        $ret = $wechat->changePhoneMarkbyExtID($follow, $eid, $mobile);
        if ($ret == false) {
          $logger->log("({$cs['unionid']} : $mobile) failed to change");
          $cs['status'] = ERROR;
        }
        else {
          $cs['status'] = CHANGED;
        }
      }
    }

    $finish_cnt = 0;
    foreach($cs_infos as $cs) {
      if ($cs['status'] == CHANGED)
        $finish_cnt++;
    }
    $logger->log("total $finish_cnt customers finish changing mobile");


    /* Test code
    $uid="ZhouShiChun";
    $eid="wmmWd-CgAATwRz6cJuKpduKezVX2h-sg";
    $rdata='{"userid":"ZhouShiChun","external_userid":"wmmWd-CgAATwRz6cJuKpduKezVX2h-sg","remark_mobiles":["13800000002"]}';

    $r2data='{
    "unionid":"owxhs51dkeYBz6pv4r_PWkXu_KZs"
    }';

    $jssdk = new JSSDK("wwbce72cb895ea9678", "EMRcSyvbkXUfa-WTaHZ3nkBFm_WQUVmQI2LjXBibkPo");  
        $token = $jssdk->getAccessToken();
    echo $rdata."\n";
    $url="https://qyapi.weixin.qq.com/cgi-bin/externalcontact/remark?access_token=".$token;
    $res=$jssdk->api_notice_increment($url, $rdata);
    //$url="https://qyapi.weixin.qq.com/cgi-bin/externalcontact/list?access_token=".$token."&userid=".$uid;
    //$url = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get?access_token=".$token."&external_userid=".$eid;
    //$res = $jssdk->httpGet($url);
    var_dump($res);
    exit(0);
    */

    //Get all follows
    /*
    $token = $jssdk->getAccessToken();
    $url = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get_follow_user_list?access_token=".$token;
    $res = $jssdk->httpGet($url);
    $obj = json_decode($res);
    if ($obj["errcode"] == 0) {
      $follows = $obj["follow_user"];
    }

    foreach($userid in $follows) {
      $url
    }

    $uid="ZhouShiChun";
    $eid="wmmWd-CgAATwRz6cJuKpduKezVX2h-sg";
    $rdata='{   
     "userid": "ZhouShiChun",
     "external_userid": "wmmWd-CgAATwRz6cJuKpduKezVX2h-sg",
       "remark_mobiles": ["13800000002"] }';

    $r2data='{
    "unionid":"owxhs51dkeYBz6pv4r_PWkXu_KZs"
    }';

    //$url="https://qyapi.weixin.qq.com/cgi-bin/externalcontact/list?access_token=".$token."&userid=".$uid;

    //$url="https://qyapi.weixin.qq.com/cgi-bin/externalcontact/remark?access_token=".$token;

    $url = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/unionid_to_external_userid?access_token=".$token;
    $res=$jssdk->api_notice_increment($url, $r2data);

    //$url="https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get_follow_user_list?access_token=".$token;
    //$url="https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get?access_token=".$token."&external_userid=".$eid;
    $res = $jssdk->httpGet($url);
    */

     

     

    展开全文
  • 《C#数据库系统开发案例精选》之《企业客户资源管理系统》源代码
  • 基本信息 用户单位:某应用软件研发企业 用户规模:100人以上 组织过程水平:中等 CMMI评审等级:无 Subversion使用时间:1年 客户需求 由于公司每次向新客户提交软件的时候都需要派出一个小规模的团队到客户现场...

    基本信息

    用户单位:某应用软件研发企业
    用户规模:100人以上
    组织过程水平:中等
    CMMI评审等级:无
    Subversion使用时间:1年

    客户需求

    由于公司每次向新客户提交软件的时候都需要派出一个小规模的团队到客户现场进行一段时间的软件定制和维护。此外,老客户系统的重大升级和功能扩展也需要一个小团队在客户现场进行一段时间的开发。因此,异地开发的配置管理就是一个比较突出的问题了。

    虽然SVN本身提供了通过Http协议进行远程访问的能力,但出于安全的考虑,作为存有公司核心资产(源代码)的配置库在物理上和外部公共网络是相隔离的,所以必须采用分布式的管理模式。相关的具体需求可以归纳为:

    1、需要从主配置库中分离部分内容创建用于在异地开发的远程配置库
    2、远程配置库的访问权限能够直接从主配置库中直接获取
    3、可以对远程配置库进行单独的授权控制和管理
    4、当派出团队回到公司总部时需要对两个配置库的内容进行同步
    5、派出团队在异地时也需要用非在线的方式(如邮件、即时通信工具、FTP等)对两个配置库进行数据的同步。

    问题解析

        Subversion作为一种集中式管理的版本管理系统,本身并不支持分布式的开发管理,所以需要一些额外的技术手段。目前唯一支持SVN的分布式版本管理系统是SVK——一款基于脚本实现的开源软件。但该软件除了在使用上较为繁琐外,并不能满足用户对访问控制及离线同步等方面的要求。
        同时,根据分布式开发模式的特点,适合采用“远程代码线”的分支结构模式。因此,最为可行的解决方案应该是在“远程代码线”的模式的基础上通过技术上的一定扩展从而实现用户的所有相关需求。

    我们的解决方案

    我们所提供的解决方案如下图所示:

    分布式开发

        首先,在主版本库中采用远程代码线的分支结构模式,并通过远程代码线创建客户现场所使用的远程版本库,然后通过在线和离线两种方式进行数据的同步。 
        在这种操作模式下,为了保证数据的完整性和一致性,我们采用了若干技术手段提供了如下的约束机制:
        a、主版本库中的远程代码线在下一次同步操作前一直处于冻结状态,不允许进行任何检入操作。
        b、远程版本库中的主代码线、主版本库中的远程代码线以及主版本库中的主代码线三者的同步必须按照一定的顺序完成一个周期(如上图所示)
       另外,通过建立远程开发团队的相关信息,在创建远程版本库的时候,将继承主版本库的团队成员相关的访问控制权限,并提供对远程版本库的访问控制进行单独定义的机制。

    参见:SmartChange分布式开发管理模块

    展开全文
  • 云盒子企业网盘已服务全球超过20... 这一次,我们分享的客户案例是海隆石油集团。海隆石油工业集团(海隆控股,01623.HK,下面简称海隆)第一家公司于2002年创建,是一家为石油天然气开发提供高端油田设备及综合油田...

    云盒子企业网盘已服务全球超过20个行业、200万+政企用户,自成立以来就以“致力为各行业提供专业、精细化的文档云协作服务”为目标。我们从宝贵服务经验中,挖掘各行业文档管理特点,定制专属方案,激活企业高效文档云办公模式。
    这一次,我们分享的客户案例是海隆石油集团。
    企业网盘客户案例:海隆石油集团的文档云共享
    海隆石油工业集团(海隆控股,01623.HK,下面简称海隆)第一家公司于2002年创建,是一家为石油天然气开发提供高端油田设备及综合油田技术服务的大型上市实体企业集团,现已在全球建立40多个生产基地及业务分支机构。

    海隆石油文档管理需求

    海隆内部没有形成统一的文件存储方式,缺乏文件管理手段。每个员工将工作文件存在自己的电脑上,这样的文件存储方式引发了以下3点问题:

    1. 存储安全无保障

    当员工的电脑中病毒、离职时删除文件、或是岗位变动时文件没有交接全,都会让公司宝贵的文件资产彻底丢失,文档丢失影响工作业务进展。

    2. 文档权限不可控

    上级有对下级文件管理的需求。一些文件只想下级阅读,并不希望他们下载源文件,但一旦下发之后,却没有控制手段,无法了解下级都对哪些文件做了什么操作。

    3. 文件共享不方便

    找文件要先找当事人,然后使用微信、QQ和邮箱发送,曾发过的文件不记得存哪,或是文件失效又得重发。跨部门、分公司之间的文件分享不方便。

    云盒子企业网盘解决方案

    针对海隆石油的痛点问题,云盒子企业网盘给出安全存储、权限管控以及便捷共享的解决方案。

    1. 文档集中存储

    在海隆石油集团总部搭建云盒子企业网盘服务器,所有业务文件严格按照归档要求,全部上传到云盒子中。云盒子作为海隆石油集团的文件存储中心,通过服务器加密与数据备份等安全措施,保障文件的安全与完整。

    2. 文件权限设置与共享

    在云盒子中添加各级文档管理员,文档管理员根据业务情况,为不同的部门人员设置文档预览、编辑、下载等权限,防止分享出去的文件被人员进行越界操作。通过权限设置,上级对下级的文件拥有完全控制权,不仅控制文件权限,也能看到该账号对哪些文件做了哪些操作。

    3. 自主获取最新文件

    使用云盒子后,找文件不是先找同事,而是沿着云盘清晰的目录架构找或搜索,在云盘中永远显示最新的文件版本,不用担心文件版本不一致导致信息不对称的情况发生。常用文件收藏、重要文件关注,

    “非常实用,可以通过权限设置轻松管理文档,使用方便,提高了公司的工作效率。”海隆IT负责人如是说。

    如果您在日常的文档存储、分享、管理上遇到跟海隆石油集团有一样问题,请务必尝试云盒子企业网盘,凭借12年的技术经验累积,毫无疑问云盒子会在这条赛道上更快更强,也会给您提供最棒的文档云管理服务。

    展开全文
  • 精通ASP.NET 2.0企业级项目开发(案例) 全部源代码及数据库文件 <br/>会员积分系统 简单OA系统 客户关系管理系统 网上书店系统
  • jsp 案例 开发集锦

    2011-03-27 09:02:56
    由于WEB页面能把文本、图像、声音、动画、视像等多媒体信息集于一体,不但使信息的显示更加生动,而且使信息的浏览更为方便,同时WEB页能实现网上交易平台、客户信息,反馈了企业客户的信息交流。因此,网站建设在...
  • c#数据库开发案例

    2014-09-25 21:01:11
    企业客户资源管理系统--开发语言c#--数据库SQL
  • 客户整体情况,河南郑州大四在校学生,目前在企业实习,从事Java开发工作。有一定的项目开发经验,对Java周边技术有基本的理解。 客户购买的是“拜师学艺”服务,按月付款。 经过多次语音,有如下实质性进展:1. ...
    客户整体情况,河南郑州大四在校学生,目前在企业实习,从事Java开发工作。有一定的项目开发经验,对Java周边技术有基本的理解。

       客户购买的是“拜师学艺”服务,按月付款。

       经过多次语音,有如下实质性进展

    1. 客户遇到的最大问题是,职业规划问题。对于未来做什么,做到什么程度,希望能找到较为明确的答案。
        对于薪水等,希望实现自己的目标。

    2. 客户对Java技术,有经验,但是对于真实的完整的企业项目研发过程,不太懂。
        希望,能够搞懂所在公司的项目。
       
    3. 客户自己想通过研究某个小游戏-FlappyPig,探索自己的兴趣,希望能对这个项目给予“源码级别的指点”。

      客户购买服务的关键事实: 愿意相信,相信小雷FansUnion有能力有恒心提供靠谱的服务,能够帮他达成自己的目标。

    小雷FansUnion-博学的互联网技术工作者
    2014年11月30日

    湖北-武汉-循礼门 

    原文首发:http://fansunion.cn/case

    展开全文
  • C#项目开发案例代码

    2013-12-05 10:30:16
    本书以家庭视频监控系统、卡拉OK点歌系统、企业短信群发系统、企业电话客服系统、企业QQ系统、餐饮管理系统、房屋中介管理系统、企业客户资源管理系统、库存管理系统、人事工资管理系统、资产评估管理系统、企业人事...
  • 客户在拨打企业电话客服时,系统会自动接收、识别并记录来电的主叫号码并显示相应的客户信息。  客户电话打入时系统自动播放已设定好的欢迎词。  用户在拨打企业电话客服后,系统会进行自动语音引导,客户...
  • C#数据库系统开发案例精选,明日科技,人民邮电出版社。
  • 客户整体情况: 合肥薪火科技,是安徽合肥一家主营微信开发和运营的中小企业,http://weimarket.cn/。 这家公司筹备、创立、曲折创业的经历,我一直有关注。因为2个老板,都是我的同学校友,都是武汉科技大学-...
  • 这样说的好处是客户对象依赖于服务接口,即在开发过程中我们只关注于服务接口的定义,而不关注于服务对象的具体实现,客户对象只有在运行期才通过解耦与后期绑定辅助工具(类)与具体的服务实现对象动态的建议依赖....
  • 2.3 客户生命周期理论 2.3.1 客户生命周期的阶段划分 ;客户关系生命周期 阶段划分; 二形成期 关系的快速发展阶段双方关系能进入这一阶段表明在考察期双方相互满意并建立了一定的相互信任...企业的投入和开发期相比要小
  • c#数据库开发案例精选共两个,其中c#数据库开发案例精选之一里有高校教师档案管理系统(asp.net)、企业客户资源管理系统、商品进销存报表系统、固定资产管理系统。c#数据库开发案例精选之二有:库存管理系统、网上...
  • c#数据库开发案例精选共两个,其中c#数据库开发案例精选之一里有高校教师档案管理系统(asp.net)、企业客户资源管理系统、商品进销存报表系统、固定资产管理系统。c#数据库开发案例精选之二有:库存管理系统、网上...
  • 本文件是c#数据库开发案例精选七合一,都是网站性质的,包括新闻管理系统,新闻发布系统,配货管理系统,教师档案管理系统,固定资产管理系统,商品进销存报系统和企业客户资源管理系统。
  • 包含了6种JSP数据库系统经典案例的源代码,分别是《办公自动化系统》、《电子商务系统》、《客户管理系统》、《企业进销存管理系统》、《物流管理平台》、《新闻网》,里面附带了各个项目的使用说明和配置说明,也...
  • E立方Excel服务器开发出来的案例,都可以按客户的要求进行个性化的修改,使之完全适合企业的需要。且,这种修改可以由客户自己完成。 一、【淀粉产成品仓储管理系统】 本系统基于E立方Excel服务器开发的淀粉产成品...
  • app开发接单--app开发项目案例

    千次阅读 2013-05-06 14:26:45
    一点事工作室是广州一家专业承接iphone、ipad、android、网站软件、应用项目研发的团队,已为国内多家企业(电信、移动、国有银行)开发过杂志、新闻、产品展示应用、应用市场、家具、LBS应用、IM应用、OA软件、应用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 594
精华内容 237
关键字:

企业案例开发客户