2019.1.21

  今天的任务是完成会计是否在岗配置表格增加操作记录,任务描述:1.  【会计是否在岗配置】 查询结果界面: 修改人编码/修改人/修改时间 字段;2.      字段取值为【会计是否在岗配置】 新增/修改操作记录,更改坐席状态,添加记录。

 结果界面:

  • 第一步 通过界面寻找任务相关代码,分析功能逻辑。

    • 将鼠标放到【会计是否在岗配置表】,确定当前页面为getTprocAccountantteamUserStateList.jsp,在eclipse中通过快捷键Ctrl+H找到jsp页面。jsp代码如下:
    • <form id="queryForm" name="queryForm" method="post" action="commonbizajax2report.do?requestId=FindTodoList">
      <div id="wrapper" class="gray-bg">
      <%--<div id="page-wrapper" class="gray-bg">--%>
      <div class="">
      <div class="p-w-md m-t-sm">
      <div class="row">
      <div class="row" style="margin: 10px 0px"><!--面包屑开始-->
      <ol class="breadcrumb">
      <li class="active"><a style="color: #232323;">会计是否在岗配置表</a></li>
      </ol>
      </div><!--面包屑结束-->
      <div class="ibox">
      <div class="ibox-content">
      <div id="tt" style="display: block;">
      <div class="row">
      <div class="col-sm-3">
      <div class="form-group">
      <label class="font-noraml">会计组名称</label>
      <input type="text" id="teamname" name="teamname" class="form-control" style="width: 100%;height: auto">
      </div>
      <div class="display-none">
      <div class="form-group">
      <label class="font-noraml">坐席状态</label>
      <select name="seatstate" id="seatstate" class="form-control">
      <option value="">请选择</option>
      <option value="1">在岗</option>
      <option value="0">不在岗</option>
      </select>
      </div>
      </div>
      </div> <div class="col-sm-3">
      <div class="form-group">
      <label class="font-noraml">会计组编号</label>
      <input type="text" id="teamid" name="teamid" class="form-control" style="width: 100%;height: auto">
      </div>
      </div>
      <div class="col-sm-3">
      <div class="form-group">
      <label class="font-noraml">员工姓名</label>
      <input type="text" id="fullname" name="fullname" class="form-control" style="width: 100%;height: auto">
      </div>
      </div>
      <div class="col-sm-3">
      <div class="form-group">
      <label class="font-noraml">员工编号</label>
      <input type="text" id="userid" name="userid" class="form-control" style="width: 100%;height: auto">
      </div>
      </div>
      </div>
      <div class="row">
      <div class="col-sm-12">
      <div class="text-center"
      style="border-bottom: 1px solid rgba(183,212,246,0.50); padding-bottom: 20px">
      <button id="showAndHide" type="button"
      style="background-color: #48A0FF;height: 28px;width: 28px;border: 0px; background: url(${pageContext.request.contextPath}/newstatic/img/icon/group_12.png) 50% 50%; border-radius: 2px;color: #FFFFFF;font-size: 14px;">
      &nbsp;</button>
      <button style="background-color: #48A0FF;height: 28px;width: 100px;border: 0px;border-radius: 2px;color: #FFFFFF;font-size: 14px;" type="button" onclick="onQuery()">查询 </button>
      <button type="button" onclick="reset001()" style="background-color: #B7B9BB;height: 28px;width: 100px;border: 0px;border-radius: 2px;color: #FFFFFF;font-size: 14px;">重置</button>
      </div>
      </div>
      </div> </div>
      <div style="margin: 10px 0px 20px 0px; padding-top: 10px">
      <span style="border: 1px solid #48A0FF;margin-left: -20px;"></span>
      <span style="font-family: MicrosoftYaHei;font-size: 15px;color: #0B112A;margin-left: 13px;">查询结果</span>
      </div>
      <div class="checkListDiv q_mpsdc_body" style="margin-top: -20px;">
      <table id="dtClaimTodo"
      class="table table-striped table-hover q_table table_td_left"
      data-classes="table-no-bordered"
      data-id-field="" data-click-to-select="true" data-striped="true"
      data-ajax="claimTodoListSearchAjax"
      data-side-pagination="server" data-pagination="true" data-page-size="10"
      data-height="480" data-show-jumpto="true" data-resizable="false">
      <thead>
      <tr>
      <th data-width="150" data-field="str0" data-formatter="createTdTitle">
      员工姓名
      </th>
      <th data-width="150" data-field="str1" data-formatter="createTdTitle">
      员工编号
      </th>
      <th data-width="150" data-field="str2" data-formatter="createTdTitle">
      会计组编号
      </th>
      <th data-width="250" data-field="str3" data-formatter="createTdTitle">
      会计组名称
      </th>
      <th data-width="100" data-field="str7" data-formatter="createTdTitle">
      修改人编码
      </th>
      <th data-width="100" data-field="str6" data-formatter="createTdTitle">
      修改人
      </th>
      <th data-width="100" data-field="str8" data-formatter="createTdTitle">
      修改时间
      </th>
      <th data-width="100" data-field="str4" data-formatter="renderOption">
      座席状态
      </th>
      </tr>
      </thead>
      </table>
      </div>
      </div>
      </div>
      </div>
      </div>
      </div>
      <br/><br/><br/>
      <div class="navbar-fixed-bottom"
      style="height: 80px;width:100%;background: #FFFFFF;box-shadow: 0 -2px 10px 0 #C0DFFF;padding: 20px 60px;z-index: 10000;">
      </div>
      <%-- </div>--%>
      </div>
      </form>

      getTprocAccountantteamUserStateList.jsp

      <script>
      var curPortalUserGroupId = "";
      var user;
      var commonUiDataBindService4QueryList = new CommonUiDataBindService4QueryList("myTodo");
      $(function () {
      $("#showAndHide").click(function () {
      $(".display-none").slideToggle(function () {
      });
      $(this).toggleClass('showAndHide-active'); });
      $('#hh').click(function () {
      $('#tt').slideToggle();
      });
      $("#seatstate").chosen();
      $("#dtClaimTodo").bootstrapTable();//初始化表格
      });
      //=================================================查询条件========================================================================
      function onQuery(){
      $('#dtClaimTodo').bootstrapTable('refresh');
      }
      function reset001(){
      $("#queryForm input").val("");
      $("#queryForm select").val("");
      $("#queryForm select").trigger("chosen:updated");
      }
      //====================================================列表=======================================================
      function claimTodoListSearchAjax(params) {//数据查询ajax
      var paramUrl = contextPath + "/commonbizajax2report.do?requestId=listProcAccountantStateService";
      var queryResultModel = "str0,str1,str2,str3,str4,str5,str7,str6,str8";
      var data ={queryResultModel : queryResultModel};
      data = generateSearchConditionAndUpd2Ui(commonUiDataBindService4QueryList,this,"queryForm",data);
      loadBootstrapTableData(this, paramUrl, params, $('#queryForm'),data,setParam);//ajax加载表格
      }
      function setParam(data) {
      curPortalUserGroupId = JSON.parse(data.user).curGroupId;
      user = data.user;
      }
      function renderOption(value, row, index, field) {
      var result="";
      if(value =='1'){
      result += '<input type="radio" name=\"'+index+'\" checked="checked" onclick="update(\''+row.str5+'\',1);" value="1" /><label class="font-noraml">在岗</label>&nbsp;&nbsp;&nbsp;';
      result += '<input type="radio" name=\"'+index+'\" onclick="update(\''+row.str5+'\',0);" value="0" /><label class="font-noraml">不在岗</label>';
      }else{
      result += '<input type="radio" name=\"'+index+'\" onclick="update(\''+row.str5+'\',1);" value="1" /><label class="font-noraml">在岗</label>&nbsp;&nbsp;&nbsp;';
      result += '<input type="radio" name=\"'+index+'\" checked="checked" onclick="update(\''+row.str5+'\',0);" value="0" /><label class="font-noraml">不在岗</label>';
      }
      return result;
      } function update(id,obj){
      var url=doProcessUrl(contextPath +"/commonbizajax.do?requestId=updateTprocAccountantteamUserState&id="+id+"&seatstate="+obj);
      return ajaxService.post({ url: url, data: null}).done(function (ajaxResponse) {
      if (ajaxResponse.result == AjaxResultFlag.OK) {
      MessageBox.notice("更新坐席状态成功!");
      $('#dtClaimTodo').bootstrapTable('refresh');
      }else{
      MessageBox.error("更新坐席状态失败!");
      }
      });
      }
      </script>

      getTprocAccountantteamUserStateList.jsp的js代码

    • 要完成这个功能需要对两个功能做修改,【更新】和【查询】,对应jsp方法为update(id,obj)claimTodoListSearchAjax(params),可以看到两个方法拼接了URL,"/commonbizajax2report.do?requestId=listProcAccountantStateService",因为项目使用Struts1,通过requestId寻找控制器xxxaction.xml,相关代码如下:
      <!-- 会计是否在岗配置表  开始 -->
      <action requestId="listProcAccountantStateService" service="tprocAccountantteamService" method="getTprocAccountantteamUserStateList" path="/pages/workflow/getTprocAccountantteamUserStateList.jsp" />
      <action requestId="updateTprocAccountantteamUserState" service="tprocAccountantteamService" method="updateTprocAccountantteamUserState" >
      <result name="SUCCESS" type="redirect" path="/service.do?requestId=listProcAccountantStateService"/>
      <result name="ERROR" path="/newPages/efinance/common/errors.jsp" />
      </action>
      <!-- 会计是否在岗配置表 结束 -->

      Action-config-workflow.xml

    • 通过service以及method找到对应的serviceImpl:tprocAccountantteamServiceImpl,相关内容如下:
      public void getTprocAccountantteamUserStateList(IMessageObject mo)
      throws BusinessException, UnsupportedEncodingException {
      Map inputMap = mo.getInputMap();
      PageModel pm = PageUtil.getPageModel(mo);
      try {
      tprocAccountantteamDAO.getTprocAccountantteamUserStateList(pm, mo);
      } catch (DBException e) {
      e.printStackTrace();
      throw new BusinessException(e.getMessage());
      }
      mo.setOutput(pm);
      } public void updateTprocAccountantteamUserState (IMessageObject mo) throws BusinessException {
      String id =(String) mo.getInput("id");
      TProcAccountantteamUser user =tprocAccountantteamDAO.get(TProcAccountantteamUser.class, Long.parseLong(id));
      String seatstate =(String) mo.getInput("seatstate");
      String modifierName = mo.getUser().getFullname();
      String modifierId = mo.getUser().getUsername(); tprocAccountantteamDAO.updateComsegcodeStatus(id,seatstate,modifierId,modifierName);
      if(seatstate!=null&&seatstate.equals("1")){ Long handleCount=tprocAccountantteamDAO.matchCurrentOrder(String.valueOf(user.getTeamId()));
      user.setHandleCount(handleCount);
      user.setModifierName(modifierName);
      user.setModifierId(modifierId);
      tprocAccountantteamDAO.update(user); }
      SysLogUtils.saveSysLog("T_PROC_ACCOUNTANTTEAM_USER", "会计组人员", mo.getUser().getUserid(), modifierId, mo.getUser().getFullname(),
      new Date(), "修改", mo.getUser().getUserid()+"","会计组Id:"+ user.getTeamId()+"人员Id:"+user.getUserId()+" 改在岗状态为"+seatstate);
      }

      tprocAccountantteamServiceImpl.java

      相应的实体类和数据层为:TProcAccountantteamUser和tprocAccountantteamDAOImpl,相关代码如下:

      import java.io.Serializable;
      import java.util.Date; @SuppressWarnings("serial")
      public class TProcAccountantteamUser implements Serializable { private Long id;
      private Long compId;
      private Long teamId;
      private String teamName;
      private Long userId;
      private String userName;
      private String fullName;
      private Long groupId;
      private String groupName;
      private Long order; private String operatorUsername;
      private Date operatorDate;
      private String operatorIp; private String modifierId;
      private String modifierName;
      private Date modifierTime; private String seatState;
      private String groupLeader;
      private String userNo;
      private String teamNo; private String isReviewAccount;
      private String reviewAccountNo;
      private String reviewAccount;
      private Long handleCount; private Long index;

      TProcAccountantteamUser.java

      public void getTprocAccountantteamUserStateList(PageModel pageModel, IMessageObject mo) throws DBException{
      try{
      Map inputMap = mo.getInputMap();
      String compId = mo.getUser().getCurCompId();
      StringBuffer sql = new StringBuffer("");
      sql.append("select tu.full_name as fullname, ");//
      sql.append(" tu.user_name as username, ");//
      sql.append(" t.team_no as teamno,");//
      sql.append(" t.team_name as teamname, ");//
      sql.append(" tu.seatstate as seatstate, ");//
      sql.append(" tu.id as id ,");//
      sql.append(" tu.modifier_Id as modifierId ,");//
      sql.append(" tu.modifier_Name as modifierName ,");//
      sql.append(" tu.modifier_Time as modifierTime");// sql.append(" from t_Proc_Accountantteam_user tu");
      sql.append(" left join t_proc_accountantteam t ");
      sql.append(" on tu.team_id = t.id ");
      sql.append(" where t.comp_id = "+compId);
      sql.append(" and t.isenable = '1' "); String fullname = (String)inputMap.get("fullname");
      if (fullname!=null && !"".equals(fullname)){
      sql.append(" and tu.full_name like '%"+fullname.trim()+"%' ");
      }
      String userid = (String)inputMap.get("userid");
      if (userid!=null && !"".equals(userid)){
      sql.append(" and tu.user_name = '"+userid.trim()+"' ");
      }
      String teamid = (String)inputMap.get("teamid");
      if (teamid!=null && !"".equals(teamid)){
      sql.append(" and t.team_no like '%"+teamid.trim()+"%' ");
      }
      String teamname = (String)inputMap.get("teamname");
      if (teamname!=null && !"".equals(teamname)){
      sql.append(" and t.team_name like '%"+teamname.trim()+"%' ");
      }
      String seatstate = (String)inputMap.get("seatstate");
      if (seatstate!=null && !"".equals(seatstate)){
      sql.append(" and tu.seatstate = '"+seatstate+"' ");
      }
      sql.append(" order by t.id");
      System.out.println(sql);
      this.findsqlPageModel(pageModel, sql.toString());
      }catch(Exception e){
      e.printStackTrace();
      }
      } public boolean updateComsegcodeStatus(String id,String status,String modifierId,String modifierName) {
      boolean ret = true;
      StringBuilder sql = new StringBuilder();
      sql.append("update t_Proc_Accountantteam_user set ");
      sql.append(" seatstate = ?, ");
      sql.append(" modifier_Name = ?, ");
      sql.append(" modifier_Id = ?, ");
      sql.append(" modifier_Time = sysdate ");
      sql.append(" where id = ? ");
      try {
      this.excuteSql(sql.toString(),new Object[]{status,modifierId,modifierName,id});
      } catch (DBException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      }
      return ret;
      }

      tprocAccountantteamDAOImpl.java

    • 任务相关主要代码查找完毕,分析业务逻辑知,需要的工作为对service层、Dao层和前台代码做相应的修改,将用户的修改操作记录到数据库,并且通过list方法从数据库将信息取出,同时在点击【在岗】/【不在岗】刷新页面显示结果。简单的来说,首先在数据库、实体类【TProcAccountantteamUser】和jsp【getTprocAccountantteamUserStateList.jsp】分别增加关于操作记录的三条字段。然后在tprocAccountantteamDAOImpl对查询和更新方法修改sql语句。最后关于修改【坐席状态】时页面刷新,在jsp做相应的修改。
  • 第二步 根据需求修改代码
    • 在数据库(oracle数据库)增加三条字段

      alter table t_Proc_Accountantteam_user add(MODIFIER_ID varchar2(50));
      alter table t_Proc_Accountantteam_user add(MODIFIER_NAME varchar2(50));
      alter table t_Proc_Accountantteam_user add(MODIFIER_TIME timestamp);
    • 在实体类(TProcAccountantteamUser)增加三条字段
      private String modifierId;//修改人
      private String modifierName;//修改人编码
      private Date modifierTime;//修改时间
    • 在jsp(getTprocAccountantteamUserStateList)增加三条信息
      <th data-width="100" data-field="str6" data-formatter="createTdTitle">
      修改人编码
      </th>
      <th data-width="100" data-field="str7" data-formatter="createTdTitle">
      修改人
      </th>
      <th data-width="100" data-field="str8" data-formatter="createTdTitle">
      修改时间
      </th>
    • 对tprocAccountantteamDAOImpl修改sql代码,并在tprocAccountantteamServiceImpl进行相应的修改,修改【更新】方法时,【修改人操作时间】使用的是数据库提供的时间sysdate,所以在serviceImpl也就不需要提取用户的当前时间,
      String modifierName = mo.getUser().getFullname();
      String modifierId = mo.getUser().getUsername();
      public boolean updateComsegcodeStatus(String id,String status,String modifierId,String modifierName) {
      boolean ret = true;
      StringBuilder sql = new StringBuilder();
      sql.append("update t_Proc_Accountantteam_user set ");
      sql.append(" seatstate = ?, ");
      sql.append(" modifier_Name = ?, ");
      sql.append(" modifier_Id = ?, ");
      sql.append(" modifier_Time = sysdate ");
      sql.append(" where id = ? ");
      try {
      this.excuteSql(sql.toString(),new Object[]{status,modifierName,modifierId,id});
      } catch (DBException e) {
      e.printStackTrace();
      }
      return ret;

      TprocAccountantteamDAOImpl

      拼接三条更新字段的sql

      sql.append(" modifier_Name = ?, ");
      sql.append(" modifier_Id = ?, ");
      sql.append(" modifier_Time = sysdate ");

      修改【查询】方法,拼接select三条字段的sql

      public void getTprocAccountantteamUserStateList(PageModel pageModel, IMessageObject mo) throws DBException{
      try{
      Map inputMap = mo.getInputMap();
      String compId = mo.getUser().getCurCompId();
      StringBuffer sql = new StringBuffer("");
      sql.append("select tu.full_name as fullname, ");//
      sql.append(" tu.user_name as username, ");//
      sql.append(" t.team_no as teamno,");//
      sql.append(" t.team_name as teamname, ");//
      sql.append(" tu.seatstate as seatstate, ");//
      sql.append(" tu.id as id ,");//
      sql.append(" tu.modifier_Id as modifierId ,");//
      sql.append(" tu.modifier_Name as modifierName ,");//
      sql.append(" tu.modifier_Time as modifierTime");// sql.append(" from t_Proc_Accountantteam_user tu");
      sql.append(" left join t_proc_accountantteam t ");
      sql.append(" on tu.team_id = t.id ");
      sql.append(" where t.comp_id = "+compId);
      sql.append(" and t.isenable = '1' "); String fullname = (String)inputMap.get("fullname");
      if (fullname!=null && !"".equals(fullname)){
      sql.append(" and tu.full_name like '%"+fullname.trim()+"%' ");
      }
      String userid = (String)inputMap.get("userid");
      if (userid!=null && !"".equals(userid)){
      sql.append(" and tu.user_name = '"+userid.trim()+"' ");
      }
      String teamid = (String)inputMap.get("teamid");
      if (teamid!=null && !"".equals(teamid)){
      sql.append(" and t.team_no like '%"+teamid.trim()+"%' ");
      }
      String teamname = (String)inputMap.get("teamname");
      if (teamname!=null && !"".equals(teamname)){
      sql.append(" and t.team_name like '%"+teamname.trim()+"%' ");
      }
      String seatstate = (String)inputMap.get("seatstate");
      if (seatstate!=null && !"".equals(seatstate)){
      sql.append(" and tu.seatstate = '"+seatstate+"' ");
      }
      sql.append(" order by t.id");
      System.out.println(sql);
      this.findsqlPageModel(pageModel, sql.toString());
      }catch(Exception e){
      e.printStackTrace();
      }
      }

      TprocAccountantteamDAOImpl

      sql.append(" tu.modifier_Id  as  modifierId ,");//
      sql.append(" tu.modifier_Name as modifierName ,");//
      sql.append(" tu.modifier_Time as modifierTime");//
    • 这里可以看到使用的是典型的MVC设计模式思想,orm框架使用的是hibernate,通过Struts的action.xml耦合前台页面和后台系统。

    • 该需求还有一个功能是当操作人修改【坐席状态】要求页面响应,刷新出操作记录,这个功能需要对jsp页面的js代码进行修改,更新坐席状态成功时,使用bootstrap更新页面
      function update(id,obj){
      var url=doProcessUrl(contextPath +"/commonbizajax.do?requestId=updateTprocAccountantteamUserState&id="+id+"&seatstate="+obj);
      return ajaxService.post({ url: url, data: null}).done(function (ajaxResponse) {
      if (ajaxResponse.result == AjaxResultFlag.OK) {
      MessageBox.notice("更新坐席状态成功!");
      $('#dtClaimTodo').bootstrapTable('refresh');
      }else{
      MessageBox.error("更新坐席状态失败!");
      }
      });
      }

      update

      $('#dtClaimTodo').bootstrapTable('refresh');
  • 第三步 测试代码

IBM实习工作(一)的更多相关文章

  1. IBM实习工作(二)

    2019年秋招前夕再次到ibm项目组参加实习两周,这次主要负责的需求是建立牛奶数据池,在二级菜单建立对账单数据池,数据由Excel导入生成. 分析整个需求,主要分为以下几块: 1.牛奶数据池前台页面, ...

  2. 技术之美[程序人生]我在IBM实习的日子

    写这篇文章的时候,我已经在IBM正式工作了,看看上一篇博文的发布日期,才发现,我已经将近三个月没有更新博客了,多么惊人!为什么这么久?期间发生了很多事情.最重要的一件就是我大学毕业了!毕业的那么平淡, ...

  3. IBM实习

    来到北京,进入IBM实习已经好多天了,两个月的暑假,两个月夏日在这里度过了,并将在未来个一个月里面,仍将在这里走过,但是我却一无所成,现在仍然只在徘徊中游走,丹迪什么时候能真正懂得实习的难得可贵,懂得 ...

  4. 【SQL】数据库运维实习工作经验

    1.导入表格的时候回出现类型不对应的问题,T-SQL代码如下: USE zzzj2017 ALTER TABLE CJ ALTER COLUMN 付款时间 datetime    2.删除 USE s ...

  5. 因为 MongoDB 没入门,我丢了一份实习工作

    有时候不得不感慨一下,系统升级真的是好处多多,不仅让我有机会重构了之前的烂代码,也满足了我积极好学的虚荣心.你看,Redis 入门了.Elasticsearch 入门了,这次又要入门 MongoDB, ...

  6. 如果IBM再给我一次实习机会

    2014年,我拿到了IBM斯图加特R&D的实习机会.在连续被索尼和博世拒掉之后,这个实习对我来说弥足珍贵.我学的是通信专业,在这之前与编程相关的活动只有一学期的安卓Lab,还是靠抱队友大腿才及 ...

  7. 此文记录了我从研二下学期到研三上学期的找工历程,包括百度、腾讯、网易、移动、电信、华为、中兴、IBM八家企业的面试总结和心得--转

    感谢电子通讯工程的研究生学长为大家整理了这么全面的求职总结,希望进入通信公司和互联网公司做非技术类岗位的学弟学妹们千万不要错过哦~ ---------------------------原文分割线-- ...

  8. IBM中国研究院、SAP、网易游戏、IBM2015应届生招聘笔试面试问题分享

    IBM中国研究院实习生 早在今年4月份.我面试的是IBM中国研究院的实习生岗位.主要是自然语言处理和语义网方向.那时我还在香港上学,两个考官对我进行的是电话面试,大概持续半个多小时,首先是我的自我介绍 ...

  9. Atitit 硬件 软件 的开源工作 差异对比

    Atitit 硬件 软件 的开源工作 差异对比 1.1. 模块化,标准化,以及修改的便捷性1 1.2. 生产和发布成本 1 1.3.   3. 入行门槛搞2 1.4.  在软件业极度发达的今天,任何具 ...

随机推荐

  1. JDK源码分析系列02---ArrayList和LinkList

    ArrayList和LinkList的源码分析 概要 ArrayList和LinkList是常用的存储结构,不看源码先分析字面意思,Array意思是数组,可知其底层是用数组实现的,Link意思是链接, ...

  2. .Net进程外session配置

    配置步骤: 1.开启 ASP.NET状态服务:cmd状态下:services.msc 2.配置web.config文件,在system.web下加入如下配置 <sessionState mode ...

  3. kuangbin专题 专题一 简单搜索 棋盘问题 POJ - 1321

    题目链接:https://vjudge.net/problem/POJ-1321 题意:给一张棋盘,‘#’表示可以下棋的地方,‘.’表示不能下棋的地方.棋盘是n*n的,要求能放下k个棋子,要求k个棋子 ...

  4. 谷歌地球 Google Earth v7.3.2.5495 专业版

    谷歌地球(Google Earth,GE)是一款谷歌公司开发的虚拟地球软件,它把卫星照片.航空照相和GIS布置在一个地球的三维模型上.谷歌地球于2005年向全球推出,被<PC 世界杂志>评 ...

  5. Perm排列计数(新博客试水,写的不好,各路大神见谅)

    B. Perm 排列计数 内存限制:512 MiB 时间限制:1000 ms 标准输入输出   题目描述 称一个1,2,...,N的排列P1,P2...,Pn是Magic的,当且仅当2<=i&l ...

  6. STM32F0_HAL库驱动描述——基于F1的USART串口IT中断实现解析

    从原子F103 HAL库基础串口例程来看HAL程序结构: 从main函数开始,首先是HAL库两个函数的初始化: HAL_Init(): Stm32_Clock_Init(RCC_PLL_MUL9); ...

  7. 动态规划(1)——最长子序列(LCS)问题

    最长子序列问题:从中找出最长的字符序列,比如: cnblogs和belong.这两个字符串的最长子序列就是blog. 动态规划:通过分解大问题,不断的将大问题变成小问题,最终整合所有解,得出最优解(和 ...

  8. select语句中不应该数据库关键字(如:precision)

    解决方案: 在关键字左右家特殊小点,在esc键的下面.(不是单引号) 如:`precision` 也可以在字段前加上表名.

  9. Excel催化剂开源第50波-Excel与PowerBIDeskTop互通互联之第四篇

    答应过的全盘分享,也必承诺到底,此篇PowerBI功能分享的最后一篇,讲述如何导出数据模型的元数据,笔者定义其为模型的数据字典. 此篇对应功能实现出自:第6波-导出PowerbiDesktop模型数据 ...

  10. springboot启动代码(自用)

    1.springboot配置解释 @AutoConfigurationPackage //自动配置包 //@Import(AutoConfigurationPackages.Registrar.cla ...