导入Excle

/**
  * 导入Excle
  * @throws Exception
  */
 public int importExcel(String path,MultipartFile[] upfiles) throws Exception{
  int count = 0; 
  String fileName = "";
  
  if (upfiles != null && upfiles.length > 0) {
   for (MultipartFile f : upfiles) {
    if (f.isEmpty()) {
     continue;
    } else {
     fileName = f.getOriginalFilename();
     FileUtils.copyInputStreamToFile(f.getInputStream(),new File(path + fileName));
    }
   }
  }
   Workbook wb = WorkbookFactory.create(new File(path+fileName));
   
   int bigProblemId = 0 , smallProblemId = 0,allPrice = 0,levelNo = 0,colLength = 10;
   String problemName = "",sheetName = "",bigProblem= "美容报价",smallProblem = "",phoneTypeName="",brandName="";
   
   RmaMobileInfo rmaMobileInfo = null;
   //rmaRepairCostService.executeBySql("delete from rma_repair_part where part_type = 2");
   // 循环工作表Sheet 
   for(int numSheet = 0; numSheet <  wb.getNumberOfSheets(); numSheet++){ 
    try {
     sheetName = wb.getSheetName(numSheet);
     phoneTypeName = sheetName.split("-")[0];
     brandName = sheetName.split("-")[1];
    } catch (Exception e) {
     // TODO: handle exception
    }
    List<RmaMobileInfo> rmis =getByProperty("typeName", phoneTypeName);
    if(rmis == null || rmis.size() < 1){
     System.out.println("机型:"+phoneTypeName+" 不存在");
     continue;
    }else{
     rmaMobileInfo = rmis.get(0);
    }
    Sheet hssfSheet = wb.getSheetAt( numSheet);
    if(hssfSheet == null){
     continue; 
    }else{
     //获取sheet的name
     sheetName = hssfSheet.getSheetName();
    }
    
    // 循环行Row   hssfSheet.getLastRowNum();
    for(int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++){ 
     Row hssfRow = hssfSheet.getRow(rowNum);
     if(hssfRow == null){ 
      continue; 
     } 
     smallProblem = getValue(hssfRow.getCell((short)0));
     if(smallProblem.equals("综合报价")){
      continue;
     }
     problemName = getValue(hssfRow.getCell((short)1));
     // 循环列Cell   
     for(int cellNum = 3; cellNum <= colLength; cellNum++){ 
      Cell hssfCell = hssfRow.getCell((short)cellNum); 
      if(hssfCell == null || hssfCell.equals("")){ 
       continue; 
      }else{
       String title = getValue((hssfSheet.getRow((short)0)).getCell((short)cellNum));
       Integer costInt = ((Double)(hssfRow.getCell((short)cellNum).getNumericCellValue()*100)).intValue();
       if(costInt == 0 ){
        continue;
       }
       RmaRepairPart part = new RmaRepairPart();
       part.setBrand(sheetName);
       part.setName(smallProblem);
       part.setPartName(title);
       part.setCost(null);
       part.setParentName(bigProblem);
       part.setPartValue(costInt);
       part.setPartType(2);
       part.setPhoneInfo(rmaMobileInfo.getTypeName());
       part.setEccPhoneId(rmaMobileInfo.getEccTypeId());
       part.setRmaPhoneId(rmaMobileInfo.getId());
       rmaRepairPartService.save(part);
       
      }
      
     } 
    } 
   } 
   
   
   
   
   
   
   
   
   
   
   
   
   
   ///this.dao.save(t);
   
   
   
  /* user.setUsername(getCellValue(row.getCell(0)));
   user.setPassword(getCellValue(row.getCell(1)));
   user.getRole().setId(getRoleId(getCellValue(row.getCell(2))));*/
  /* if (getCellValue(row.getCell(3)).equals("全部")) {
    user.getArea().setId(0);
   }else{
    int aid = getAreaId(getCellValue(row.getCell(3)));
    user.getArea().setId(aid);
   }
   if (getCellValue(row.getCell(4)).equals("全部")) {
    user.getSchool().setId(0);
   }else{
    user.getSchool().setId(getSchoolId(getCellValue(row.getCell(4))));
   }
   if (getCellValue(row.getCell(5)).equals("yes")) {
    user.setQuery_prower(1);
   }else{
    user.setQuery_prower(0);
   }
   if (getCellValue(row.getCell(6)).equals("yes")) {
    user.setAdd_prower(1);
   }else{
    user.setAdd_prower(0);
   }
   if (getCellValue(row.getCell(7)).equals("yes")) {
    user.setEdit_prower(1);
   }else{
    user.setEdit_prower(0);
   }
   if (getCellValue(row.getCell(8)).equals("yes")) {
    user.setRemove_prower(1);
   }else{
    user.setRemove_prower(0);
   }
   count += addUser(user);*/
 /* }
  return count;*/
   return 0;
 }
 
 
 
 @SuppressWarnings("static-access") 
 private String getValue(Cell cell){ 
  if (cell == null) {
            return "";
        }
  String strCell = "";
        switch (cell.getCellType()) {
        case HSSFCell.CELL_TYPE_STRING:
            strCell = cell.getStringCellValue();
            break;
        case HSSFCell.CELL_TYPE_NUMERIC:
         BigDecimal bd = new BigDecimal(cell.getNumericCellValue());
         strCell = bd.toPlainString();
            strCell = String.valueOf(cell.getNumericCellValue());
            break;
        case HSSFCell.CELL_TYPE_BOOLEAN:
            strCell = String.valueOf(cell.getBooleanCellValue());
            break;
        case HSSFCell.CELL_TYPE_BLANK:
            strCell = "";
            break;
        default:
            strCell = "";
            break;
        }
        if (strCell.equals("") || strCell == null) {
            return "";
        }
       
        return strCell;
 }
 


 //导出

  @RequestMapping(value = "admin/exportDill")
 public void exportDill(ModelAndView mav, HttpServletRequest request,
   HttpServletResponse response) {

  List<RmaBillDetail> list = (List<RmaBillDetail>) rmaBillDetailService
    .createQueryModelByHql("from RmaBillDetail").query();

  if (list != null && list.size() > 0) {
   // 第一步,创建一个webbook,对应一个Excel文件
   HSSFWorkbook wb = new HSSFWorkbook();
   // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet

   HSSFSheet sheet = wb.createSheet("订单明细单");
   sheet.setDefaultColumnWidth(25);
   sheet.setDefaultRowHeight((short) 500);
   // 第三步,在sheet中添加表头第0行
   HSSFRow row = sheet.createRow((int) 0);
   // 第四步,创建单元格,并设置值表头 设置表头居中
   Font font = wb.createFont();
   font.setFontHeightInPoints((short) 10);// 设置字号
   font.setFontName("黑体");// 设置字体
   // font.setStrikeout(true);//设置是否强调
   CellStyle style = wb.createCellStyle();
   style.setFont(font);
   style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
   HSSFCell cell = row.createCell(0);
   cell.setCellValue("订单编号");
   cell.setCellStyle(style);
   cell = row.createCell(1);
   cell.setCellValue("子单号");
   cell.setCellStyle(style);
   cell = row.createCell(2);
   cell.setCellValue("IMEI码");
   cell.setCellStyle(style);
   cell = row.createCell(3);
   cell.setCellValue(" 保内保外 ");
   cell.setCellStyle(style);
   cell = row.createCell(4);
   cell.setCellValue("时间段");
   cell.setCellStyle(style);
   cell = row.createCell(5);
   cell.setCellValue("地区");
   cell.setCellStyle(style);
   cell = row.createCell(6);
   cell.setCellValue("型号");
   cell.setCellStyle(style);
   cell = row.createCell(7);
   cell.setCellValue("制式");
   cell.setCellStyle(style);
   cell = row.createCell(8);
   cell.setCellValue("故障 ");
   cell.setCellStyle(style);
   cell = row.createCell(9);
   cell.setCellValue("购买时间 ");
   cell.setCellStyle(style);
   cell = row.createCell(10);
   cell.setCellValue("使用时长 ");
   cell.setCellStyle(style);
   cell = row.createCell(11);
   cell.setCellValue("服务类型");
   cell.setCellStyle(style);
  

   for (int i = 0; i < list.size(); i++) {
    row = sheet.createRow((int) i + 1);
    RmaBillDetail bd = list.get(i);
    // 根据子单据号查询 故障
    List<RmaDetailCostLog> rmaDetailCostLogList = (List<RmaDetailCostLog>) rmaDetailCostLogService.createQueryModelByHql("from RmaDetailCostLog where detailNo=?",bd.getDetailNo()).query();
    // RmaDetailCostLog RmaDetailCost= rmaDetailCostLogList.get(i);
    StringBuffer sb = new StringBuffer();
    for (int j = 0; j < rmaDetailCostLogList.size(); j++) {
     String broken=rmaDetailCostLogList.get(j).getCostName();
     String str=null;
     if(broken.indexOf("、")!=-1){
       str=broken.substring(broken.indexOf("、")+1);
       System.out.println(str);     
     }else{
      str=broken;
      
     }
       String appenCont=(j+1) +"、"+ str+" ";
       sb.append(appenCont);
    
     
    }
    String breakdown = sb.toString();
    // 第四步,创建单元格,并设置值
    row.createCell((short) 0).setCellValue(bd.getBill().getBillNo());
    row.createCell((short) 1).setCellValue(bd.getDetailNo());
    row.createCell((short) 2).setCellValue(bd.getImeiEsn());
    row.createCell((short) 6).setCellValue(bd.getPhoneType());
    if (bd.getBill().getBillType() == 2) {

     row.createCell((short) 11).setCellValue("本地网点");
    } else {

     row.createCell((short) 11).setCellValue("原厂维修");
    }
    row.createCell((short) 8).setCellValue(breakdown);
    
    // 根据imei编号,查询imei相关信息
    if(bd.getBill()!=null){
     List<RmaImeiInfo> imeiInfols = (List<RmaImeiInfo>) rmaImeiInfoService.createQueryModelByHql("from RmaImeiInfo where imei = ?",bd.getImeiEsn()).query();
     RmaImeiInfo imeiInfo = null;
     if (imeiInfols != null && imeiInfols.size() > 0) {

      imeiInfo = imeiInfols.get(0);
      row.createCell((short) 5).setCellValue(imeiInfo.getAcceptAddress());
      row.createCell((short) 7).setCellValue(imeiInfo.getMobClass());

      SimpleDateFormat simple = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      String dates=null;
      if(bd.getBuyTime()!=null){
       dates = simple.format(bd.getBuyTime());
       row.createCell((short) 9).setCellValue(dates);
         
     
      /*
       * 有延保 只关注 当前时间 < 延保开始时间+延保周期 保内 否则保外没有延保
       * 按15个月(366+92天)+出厂日期 计算是否保内
       */
      String wType = imeiInfo.getwType();// 延保类型
      String period = imeiInfo.getwPeriod();// 延保周期
      String outStoreDate = simple.format(imeiInfo.getOutStoreDate());// 出厂时间
      String flag = null;// 标识
      String date = null;
      Date d = new Date(); // 当前时间
      Date outDate;// 保修最后的期限时间
      if (null == wType || "".equals(wType) || null == period
        || "".equals(period)) {
       // 没有使用延保卡
       outDate = Utils.getBeforeAfterDate(outStoreDate, 458);
       if (d.before(outDate)) {
        flag = "保内";
       } else {
        flag = "保外";
       }

       date = outStoreDate + "~" +simple.format(outDate);
      } else {
       String wStartTime = imeiInfo.getwStartTime().toString();// 保修卡开始时间
       int end = Integer.parseInt(period);// 月份
       DateFormat format2 = new SimpleDateFormat(
         "yyyy-MM-dd HH:mm:ss");
       Date startTime = null;
       try {
        startTime = format2.parse(wStartTime);
       } catch (ParseException e) {
        e.printStackTrace();
       }
       Calendar c = Calendar.getInstance();
       c.setTime(startTime);
       c.add(c.MONTH, end);// 月份的计算
       outDate = c.getTime();
       if (d.before(outDate)) {
        flag = "保内";
       }
       else {
        flag = "保外";
       }
       date = simple.format(startTime) + "~"+ simple.format(outDate);
      }
      try {
       Date dat=simple.parse(dates);
       long diff = d.getTime() - dat.getTime();
       long days = diff /(1000 * 60 * 60 * 24);
          row.createCell((short) 10).setCellValue(days+"天");
      } catch (ParseException e) {
       e.printStackTrace();
      }
      row.createCell((short) 3).setCellValue(flag);
      row.createCell((short) 4).setCellValue(date);

     }
      }  
     
    }
    
   }
   OutputStream outputStream = null;
   try {
    response.setContentType("text/html;charset=utf-8");
    PrintWriter out = response.getWriter();
    response.reset();
    response.setContentType("application/x-msdownload");
    response.setHeader(
      "Content-Disposition",
      "attachment; filename="
        + java.net.URLEncoder.encode("订单明细单.xls",
          "UTF-8"));
    outputStream = response.getOutputStream();
    wb.write(outputStream);
    outputStream.flush();
    outputStream.close();
   } catch (Exception e) {
    e.printStackTrace();
   }
  }

 }

//导出excle

public String execute() throws Exception {
   
    //Criteria cr = rmaBillService.createCriteria();
    //SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
    //RmaBill bill = JSONUtil.fromJson(b, RmaBill.class);

    /*if (!StringUtils.isBlank(endTime)) {
     Date end = sdf.parse(endTime + " 23:59:59");
     if (end != null)
      cr.add(Restrictions.le("createTime", end));
    }
    if (!StringUtils.isBlank(startTime)) {
     Date start = sdf.parse(startTime + " 00:00:00");
     if (start != null)
      cr.add(Restrictions.ge("createTime", start));
    }
    if (bill != null) {
     if (!StringUtils.isBlank(bill.getBillNo())) {
      cr.add(Restrictions.like("billNo", "%"
        + bill.getBillNo().toUpperCase() + "%"));
     }
     if (!StringUtils.isBlank(bill.getLinkName())) {
      cr.add(Restrictions.like("linkName", "%" + bill.getLinkName()
        + "%"));
     }
     if (!StringUtils.isBlank(bill.getLinkPhone())) {
      cr.add(Restrictions.like("linkPhone", "%" + bill.getLinkPhone()
        + "%"));
     }
    }
    cr.addOrder(org.hibernate.criterion.Order.desc("id"));
    cr.add(Restrictions.isNull("isTemp"));
    List<RmaBill> RmaBillList = (List<RmaBill>) rmaBillService.createQueryModelByCriteria(cr).query();
    List<RmaBillDetail> list=new ArrayList<RmaBillDetail>();
    
     for(RmaBill bills:RmaBillList){   
     List<RmaBillDetail> rmaBillDetails= bills.getRmaBillDetails();
     for(RmaBillDetail rmas:rmaBillDetails){
      
      list.add(rmas);
     }
     
     } */
    
  /*
    List<RmaBillDetail> list = (List<RmaBillDetail>) rmaBillDetailService
      .createQueryModelByHql("from RmaBillDetail").query();*/

    //if (list != null && list.size() > 0) {
     // 第一步,创建一个webbook,对应一个Excel文件
     HSSFWorkbook wb = new HSSFWorkbook();
     // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
     
    

     HSSFSheet sheet = wb.createSheet("订单明细单");
     sheet.setDefaultColumnWidth(25);
     sheet.setDefaultRowHeight((short) 500);
     // 第三步,在sheet中添加表头第0行
     HSSFRow row = sheet.createRow((int) 0);
     // 第四步,创建单元格,并设置值表头 设置表头居中
     Font font = wb.createFont();
     font.setFontHeightInPoints((short) 10);// 设置字号
     font.setFontName("黑体");// 设置字体
     // font.setStrikeout(true);//设置是否强调
     CellStyle style = wb.createCellStyle();
     style.setFont(font);
     style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
     HSSFCell cell = row.createCell(0);
     cell.setCellValue("订单编号");
     cell.setCellStyle(style);
     cell = row.createCell(1);
     cell.setCellValue("子单号");
     cell.setCellStyle(style);
     cell = row.createCell(2);
     cell.setCellValue("IMEI码");
     cell.setCellStyle(style);
     cell = row.createCell(3);
     cell.setCellValue(" 保内保外 ");
     cell.setCellStyle(style);
     cell = row.createCell(4);
     cell.setCellValue("时间段");
     cell.setCellStyle(style);
     cell = row.createCell(5);
     cell.setCellValue("地址");
     cell.setCellStyle(style);
     cell = row.createCell(6);
     cell.setCellValue("型号");
     cell.setCellStyle(style);
     cell = row.createCell(7);
     cell.setCellValue("制式");
     cell.setCellStyle(style);
     cell = row.createCell(8);
     cell.setCellValue("故障 ");
     cell.setCellStyle(style);
     cell = row.createCell(9);
     cell.setCellValue("购买时间 ");
     cell.setCellStyle(style);
     cell = row.createCell(10);
     cell.setCellValue("使用时长 ");
     cell.setCellStyle(style);
     cell = row.createCell(11);
     cell.setCellValue("服务类型");
     cell.setCellStyle(style);
     //HSSFCell.ENCODING_UTF_16;
     
     
     // 第四步,创建单元格,并设置值
     row.createCell((short) 0).setCellValue("z347324932");
     row.createCell((short) 1).setCellValue("z347324932-1");
     row.createCell((short) 2).setCellValue("47848384394");
     row.createCell((short) 6).setCellValue("N5");
     row.createCell((short) 5).setCellValue("长沙");
    

     /*for (int i = 0; i < list.size(); i++) {
      row = sheet.createRow((int) i + 1);
      RmaBillDetail bd = list.get(i);
      // 根据子单据号查询 故障
      List<RmaDetailCostLog> rmaDetailCostLogList = (List<RmaDetailCostLog>) rmaDetailCostLogService.createQueryModelByHql("from RmaDetailCostLog where detailNo=?",bd.getDetailNo()).query();
      // RmaDetailCostLog RmaDetailCost= rmaDetailCostLogList.get(i);
      StringBuffer sb = new StringBuffer();
      for (int j = 0; j < rmaDetailCostLogList.size(); j++) {
       String broken=rmaDetailCostLogList.get(j).getCostName();
       String str=null;
       if(broken.indexOf("、")!=-1){
         str=broken.substring(broken.indexOf("、")+1);
         System.out.println(str);     
       }else{
        str=broken;
        
       }
         String appenCont=(j+1) +"、"+ str+" ";
         sb.append(appenCont);
      
       
      }
      String breakdown = sb.toString();
      // 第四步,创建单元格,并设置值
      row.createCell((short) 0).setCellValue(bd.getBill().getBillNo());
      row.createCell((short) 1).setCellValue(bd.getDetailNo());
      row.createCell((short) 2).setCellValue(bd.getImeiEsn());
      row.createCell((short) 6).setCellValue(bd.getPhoneType());
      row.createCell((short) 5).setCellValue(bd.getBill().getLinkAddress());
      if (bd.getBill().getBillType() == 2) {

       row.createCell((short) 11).setCellValue("本地网点");
      } else {

       row.createCell((short) 11).setCellValue("原厂维修");
      }
      row.createCell((short) 8).setCellValue(breakdown);
      
      // 根据imei编号,查询imei相关信息
      if(bd.getBill()!=null){
       List<RmaImeiInfo> imeiInfols = (List<RmaImeiInfo>) rmaImeiInfoService.createQueryModelByHql("from RmaImeiInfo where imei = ?",bd.getImeiEsn()).query();
       RmaImeiInfo imeiInfo = null;
       if (imeiInfols != null && imeiInfols.size() > 0) {

        imeiInfo = imeiInfols.get(0);
        
        row.createCell((short) 7).setCellValue(imeiInfo.getMobClass());

        SimpleDateFormat simple = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dates=null;
        if(bd.getBuyTime()!=null){
         dates = simple.format(bd.getBuyTime());
         row.createCell((short) 9).setCellValue(dates);
           
       
        
         * 有延保 只关注 当前时间 < 延保开始时间+延保周期 保内 否则保外没有延保
         * 按15个月(366+92天)+出厂日期 计算是否保内
        
        String wType = imeiInfo.getwType();// 延保类型
        String period = imeiInfo.getwPeriod();// 延保周期
        String outStoreDate = simple.format(imeiInfo.getOutStoreDate());// 出厂时间
        String flag = null;// 标识
        String date = null;
        Date d = new Date(); // 当前时间
        Date outDate;// 保修最后的期限时间
        if (null == wType || "".equals(wType) || null == period
          || "".equals(period)) {
         // 没有使用延保卡
         outDate = Utils.getBeforeAfterDate(outStoreDate, 458);
         if (d.before(outDate)) {
          flag = "保内";
         } else {
          flag = "保外";
         }

         date = outStoreDate + "~" +simple.format(outDate);
        } else {
         String wStartTime = imeiInfo.getwStartTime().toString();// 保修卡开始时间
         int end = Integer.parseInt(period);// 月份
         DateFormat format2 = new SimpleDateFormat(
           "yyyy-MM-dd HH:mm:ss");
         Date startTimes = null;
         try {
          startTimes = format2.parse(wStartTime);
         } catch (ParseException e) {
          e.printStackTrace();
         }
         Calendar c = Calendar.getInstance();
         c.setTime(startTimes);
         c.add(c.MONTH, end);// 月份的计算
         outDate = c.getTime();
         if (d.before(outDate)) {
          flag = "保内";
         }
         else {
          flag = "保外";
         }
         date = simple.format(startTime) + "~"+ simple.format(outDate);
        }
        try {
         Date dat=simple.parse(dates);
         long diff = d.getTime() - dat.getTime();
         long days = diff /(1000 * 60 * 60 * 24);
            row.createCell((short) 10).setCellValue(days+"天");
        } catch (ParseException e) {
         e.printStackTrace();
        }
        row.createCell((short) 3).setCellValue(flag);
        row.createCell((short) 4).setCellValue(date);

       }
        }  
       
      }
      
     }*/
     OutputStream outputStream = null;
     try {
      HttpServletResponse response=  ServletActionContext.getResponse();
      response.setContentType("text/html;charset=utf-8");
      response.setCharacterEncoding("UTF-8");
      response.reset();
      response.setContentType("application/msexcel");
      response.setHeader("Content-Disposition","attachment; filename="+ java.net.URLEncoder.encode("订单明细单.xls","UTF-8"));
      outputStream = response.getOutputStream();
     /* ConnectionFactory conn = (ConnectionFactory) new SingleConnectionFactory();
      JmsTemplate jms=new JmsTemplate(conn);*/
       
     
      wb.write(outputStream);
      outputStream.close();
     } catch (Exception e) {
      e.printStackTrace();
     }
    //}

   //}
 
   
    
    
 
  return null;
 }

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值