0

0

使用Asp.net实现信息管理系统的数据统计功能

巴扎黑

巴扎黑

发布时间:2017-08-15 13:48:58

|

2699人浏览过

|

来源于php中文网

原创

这篇文章主要介绍了asp.net管理信息系统中数据统计功能的实现方法,需要的朋友可以参考下

数据统计是每个系统中必备的功能,在给领导汇报统计数据,工作中需要的进展数据时非常有用。

在我看来,一个统计的模块应该实现以下功能:

  • 能够将常用的查询的统计结果显示出来;

  • 显示的结果可以是表格形式,也可以是图形形式,如果是图形的话能够以多种形式显示(柱状图、折线图、饼图、雷达图、堆叠柱状图等):

  • 统计查询的结果,点击数字或者百分比能够显示详细的数据;

  • 能够自由组合查询条件、筛选条件、分组条件、排序等;

  • 统计结果最好有个实时预览;

  • 查询统计能够保存,以便下次能直接调用并显示统计查询的结果;

  • 对于保存后的查询统计,下次调用时也可以按照灵活的筛选手段对查询结果进行筛选;

  • 界面需要做的简洁、直观,就算是不太懂电脑的操作员也能够方便使用;

  • 对于一些复杂的查询,能够直接在后台写Sql或者调用Sp出数据

......

好了,以下是在实际环境中的实现和应用:

这是一个学生的就业系统,学生在不同的时期会对自己毕业去向进行登记,因此按照不同时间截点统计出来的数据是不一样的。数据表有100多个字段(并不是所有字段都需要统计)。

I-Shop购物系统
I-Shop购物系统

部分功能简介:商品收藏夹功能热门商品最新商品分级价格功能自选风格打印结算页面内部短信箱商品评论增加上一商品,下一商品功能增强商家提示功能友情链接用户在线统计用户来访统计用户来访信息用户积分功能广告设置用户组分类邮件系统后台实现更新用户数据系统图片设置模板管理CSS风格管理申诉内容过滤功能用户注册过滤特征字符IP库管理及来访限制及管理压缩,恢复,备份数据库功能上传文件管理商品类别管理商品添加/修改/

下载

首先,我们在数据库中构建一个表值函数,能够按照不同的时间截点返回出数据,表也起到视图的作用,将参数表的值直接包含到返回结果中去。


ALTER FUNCTION [dbo].[Get.............]
( 
 @gxsj datetime
)
RETURNS TABLE 
AS
RETURN 
(
 select t1.*, 
 dbo.depacode.xymc, 
 CASE t1.xldm WHEN '01' THEN '博士' WHEN '11' THEN '硕士' WHEN '25' THEN '双学位' WHEN '31' THEN '本科' WHEN '41' THEN '专科' WHEN '61' THEN '高职' ELSE '' END AS xlmc, 
 CASE WHEN LEFT(t1.sydqdm, 2) IN ('11', '12', '13', '21', '31', '32', '33', '35', '37', '44', '46', '71', '81', '82') THEN '东部' 
 WHEN LEFT(t1.sydqdm, 2) IN ('14', '22', '23', '34', '36', '41', '42', '43') THEN '中部' 
 WHEN LEFT(t1.sydqdm, 2) IN ('15', '45', '51', '50', '52', '53', '54', '61', '62', '65', '63', '64') THEN '西部' ELSE '' END AS sydq, 
 sydq.dwdqmc AS sysf,
 CASE WHEN LEFT(t1.dwdqdm, 2) IN ('11', '12', '13', '21', '31', '32', '33', '35', '37', '44', '46', '71', '81', '82') THEN '东部' 
 WHEN LEFT(t1.dwdqdm, 2) IN ('14', '22', '23', '34', '36', '41', '42', '43') THEN '中部' 
 WHEN LEFT(t1.dwdqdm, 2) IN ('15', '45', '51', '50', '52', '53', '54', '61', '62', '65', '63', '64') THEN '西部' ELSE '' END AS dwdq, 
  dwdq.dwdqmc AS dwsf, dbo.Entcode.hyname, 
 dbo.hydygx.hymldm, dbo.hydygx.hyml, 
 CASE t1.xbdm WHEN 1 THEN '男' WHEN 2 THEN '女' ELSE '男' END AS xbmc,
 [mzdmb].[nation] AS mzmc,
 [EjByqxdmb].[Ejbyqxmc], dbo.byqxdygx.jybbyqx, t1.gn500 AS jybdwxzdm,
 CASE t1.knslbdm WHEN '7' THEN '就业困难、家庭困难和残疾' WHEN '6' THEN '家庭困难和残疾' WHEN '5' THEN '就业困难和残疾' WHEN '4' THEN '残疾' WHEN '3' THEN '就业和家庭困难' WHEN '2' THEN '家庭困难' WHEN '1' THEN '就业困难' ELSE '非困难生' END AS Knslb
 from [table] as t1 
 LEFT OUTER JOIN
 dbo.depacode ON t1.xydm = dbo.depacode.xydm LEFT OUTER JOIN
 dbo.dwdq AS sydq ON LEFT(t1.sydqdm, 2) + '0000' = sydq.dwdqdm LEFT OUTER JOIN
 dbo.dwdq AS dwdq ON LEFT(t1.dwdqdm, 2) + '0000' = dwdq.dwdqdm LEFT OUTER JOIN
 dbo.Entcode ON t1.hylb = dbo.Entcode.hycode LEFT OUTER JOIN
 dbo.hydygx ON t1.hylb = dbo.hydygx.hydldm LEFT OUTER JOIN
 [mzdmb] ON t1.mzdm = [mzdmb].[mzdm] LEFT OUTER JOIN
 [EjByqxdmb] ON t1.byqx2 = [EjByqxdmb].[Ejbyqxdm] LEFT OUTER JOIN
 dbo.byqxdygx ON t1.byqx = dbo.byqxdygx.shbyqx AND 
 t1.dwxzdm = dbo.byqxdygx.shdwxzdm
 where [gxsj] <= dateadd(day,1,@gxsj) and HisId in 
 (SELECT TOP 1 HisId FROM [table]
 WHERE [gxsj] <= dateadd(day,1,@gxsj) and xsxh = t1.xsxh
 and bynf = t1.bynf and t1.byqx not in ('08','05','11')
 ORDER BY [gxsj] DESC)
)

这样我们使用 select * from [get...]('2016-8-25') 就可以查询出8月25日截止日期的数据。

接下来是界面设计,我们使用jequery-ui中dropable\dragable的控件,字段排列在界面上,直接拖拽到相应域里,就能够进行统计。

除了分组字段外,显示字段还能够按照具体的值进行统计过滤,起到多重分组统计的功能。

 大家可以看到,最上面一栏是数据筛选,然后是系统已经保存的查询(分为表格查询和图形查询),点击保存好的查询直接出查询结果,也可以删除保存的查询。在下面是自定义查询,上面是一排条件,然后是可以拖拽的字段,当字段拖至分组列,则显示字段名称;拖至显示列,还可以对显示的数据的具体值进行分组筛选统计。下方则是一些选项,是否显示小计、总计,以何种方式显示图表。

以表格形式的显示统计,可以看到,每个数值都可以点击弹出框显示详情,最下方能够保存查询条件,以图形方式显示等:

图形的展示:

以下是核心类InquireHelper.cs:

字段实体类(部分)


[Serializable]
 [XmlInclude(typeof(BYNF_InquireField))]
 [XmlInclude(typeof(Count_InquireField))]
 [XmlInclude(typeof(XYMC_InquireField))]
 [XmlInclude(typeof(ZYMC_InquireField))]
 [XmlInclude(typeof(SZBJ_InquireField))]
 [XmlInclude(typeof(FDY_InquireField))]
 [XmlInclude(typeof(XL_InquireField))]
 [XmlInclude(typeof(SYDQ_InquireField))]
 [XmlInclude(typeof(SYSF_InquireField))]
 [XmlInclude(typeof(DWDQ_InquireField))]
 [XmlInclude(typeof(DWSF_InquireField))]
 [XmlInclude(typeof(HYML_InquireField))]
 [XmlInclude(typeof(HYDL_InquireField))]
 [XmlInclude(typeof(XBMC_InquireField))]
 [XmlInclude(typeof(MZMC_InquireField))]
 [XmlInclude(typeof(BYQX_InquireField))]
 [XmlInclude(typeof(KNSLB_InquireField))]
 [XmlInclude(typeof(ZYDKL_InquireField))]
 [XmlInclude(typeof(DWXZ_InquireField))]
 [XmlInclude(typeof(EJBYQXMC_InquireField))]
 [XmlInclude(typeof(GZ_InquireField))]
 [XmlInclude(typeof(WYJE_InquireField))]
 public abstract class InquireFieldBase
 {
  public InquireFieldBase()
  {
   FieldItems = this.GetInquireItemsByInquireType();
  }
  [XmlAttribute]
  public int FieldDisplayOrder { get; set; }
  [XmlAttribute]
  public string FieldName { get; set; }
  [XmlAttribute]
  public string DbName { get; set; }
  [XmlAttribute]
  public bool IsAggregate { get; set; }
  [XmlAttribute]
  public InquireHelper.FieldType FieldType { get; set; }
  //用于highchart统计
  [XmlAttribute]
  public bool IsNameField { get; set; }
  //用于统计输出数据
  [XmlAttribute]
  public bool IsPercent { get; set; }
  [XmlIgnore]
  public List FieldItems { get; set; }
  public List FieldValue { get; set; }
  public bool? OrderByAsc { get; set; }
 }
 [Serializable]
 public class BYNF_InquireField : InquireFieldBase
 {
  public BYNF_InquireField()
  {
   FieldDisplayOrder = 1;
   FieldName = "毕业年份";
   DbName = "BYNF";
  }
 }
 [Serializable]
 public class XYMC_InquireField : InquireFieldBase
 {
  public XYMC_InquireField()
  {
   FieldDisplayOrder = 5;
   FieldName = "学院名称";
   DbName = "XYMC";
  }
 }
 [Serializable]
 public class ZYMC_InquireField : InquireFieldBase
 {
  public ZYMC_InquireField()
  {
   FieldDisplayOrder = 6;
   FieldName = "专业名称";
   DbName = "ZYMC";
  }
 }
 [Serializable]
 public class SZBJ_InquireField : InquireFieldBase
 {
  public SZBJ_InquireField()
  {
   FieldDisplayOrder = 7;
   FieldName = "所在班级";
   DbName = "SZBJ";
  }
 }
 [Serializable]
 public class FDY_InquireField : InquireFieldBase
 {
  public FDY_InquireField()
  {
   FieldDisplayOrder = 8;
   FieldName = "辅导员";
   DbName = "FDY";
  }
 }
 [Serializable]
 public class XL_InquireField : InquireFieldBase
 {
  public XL_InquireField()
  {
   FieldDisplayOrder = 9;
   FieldName = "学历";
   DbName = "XLMC";
  }
 }
 [Serializable]
 public class SYDQ_InquireField : InquireFieldBase
 {
  public SYDQ_InquireField()
  {
   FieldDisplayOrder = 10;
   FieldName = "生源地区";
   DbName = "SYDQ";
  }
 }
 [Serializable]
 public class SYSF_InquireField : InquireFieldBase
 {
  public SYSF_InquireField()
  {
   FieldDisplayOrder = 11;
   FieldName = "生源省份";
   DbName = "SYSF";
  }
 }
 [Serializable]
 public class DWDQ_InquireField : InquireFieldBase
 {
  public DWDQ_InquireField()
  {
   FieldDisplayOrder = 12;
   FieldName = "单位地区";
   DbName = "DWDQ";
  }
 }
 [Serializable]
 public class DWSF_InquireField : InquireFieldBase
 {
  public DWSF_InquireField()
  {
   FieldDisplayOrder = 13;
   FieldName = "单位省份";
   DbName = "DWSF";
  }
 }

控制类


public static class InquireHelper
 {
  public static List GetSubInquireList()
  {
   var inquires = new List();
   var subTypeQuery = from t in Assembly.GetExecutingAssembly().GetTypes()
        where IsSubClassOf(t, typeof(InquireFieldBase))
        select t;
   foreach (var type in subTypeQuery)
   {
    InquireFieldBase obj = CreateObject(type.FullName) as InquireFieldBase;
    if (obj != null)
    {
     inquires.Add(obj);
    }
   }
   return inquires;
  }
  static bool IsSubClassOf(Type type, Type baseType)
  {
   var b = type.BaseType;
   while (b != null)
   {
    if (b.Equals(baseType))
    {
     return true;
    }
    b = b.BaseType;
   }
   return false;
  }
  /// 
  /// 创建对象(当前程序集)
  /// 
  /// 类型名
  /// 创建的对象,失败返回 null
  public static object CreateObject(string typeName)
  {
   object obj = null;
   try
   {
    Type objType = Type.GetType(typeName, true);
    obj = Activator.CreateInstance(objType);
   }
   catch (Exception ex)
   {
   }
   return obj;
  }
  public static List BindCondition(this List conditions, string conditionName, List values)
  {
   var condition = conditions.FirstOrDefault(c => c.GetType().Name == conditionName && c.FieldType == FieldType.ConditionField);
   if (condition == null)
   {
    condition = CreateObject("BLL." + conditionName) as InquireFieldBase;
    condition.FieldType = FieldType.ConditionField;
    conditions.Add(condition);
   }
   condition.FieldValue = values;
   return conditions;
  }
  //public static List BindCondition(this List conditions, string conditionName, string range1, string range2)
  //{
  // var condition = conditions.FirstOrDefault(c => c.GetType().Name == conditionName && c.FieldType == FieldType.ConditionField);
  // if (!string.IsNullOrEmpty(range2)&&!string.IsNullOrEmpty(range1))
  // {
  //  if (condition == null)
  //  {
  //   condition = CreateObject("BLL." + conditionName) as InquireFieldBase;
  //   condition.FieldType = FieldType.ConditionField;
  //   conditions.Add(condition);
  //  }
  //  condition.FieldValue = string.Concat(condition.DbName,
  //   " between to_date('", range1, "', 'yyyy-mm-dd hh24:mi:ss') and to_date('", range2,
  //   "', 'yyyy-mm-dd hh24:mi:ss')");
  // }
  // return conditions;
  //}
  public static DataTable GetDataTable(StatisticsInquire inquire)
  {
   var inquireCond = new List();
   inquire.InquireFields.Where(f => f.FieldType == InquireHelper.FieldType.GroupField).ToList()
    .ForEach(f =>
    {
     if (!f.IsAggregate)
     {
      inquireCond.Add(string.Concat(f.DbName, " AS ", f.FieldName));
     }
    });
   inquire.InquireFields.Where(f => f.FieldType == FieldType.DisplayField).ToList().ToList()
    .ForEach(f => {
     if (f.IsAggregate)
     {
      inquireCond.Add(string.Concat(f.DbName, " AS ", f.FieldName));
     }
     else
     {
      if (f.IsPercent)
      {
       inquireCond.Add(string.Concat("ltrim(Convert(numeric(9,2), SUM(CASE WHEN ", f.DbName, " IN ('", string.Join("', '", f.FieldValue), "') THEN 1 ELSE 0 END)*100.0/Count(*))) + '%' AS '", f.FieldName, ":", string.Join(",", f.FieldValue).SubStr(60), "(%)'"));
      }
      else
      {
       inquireCond.Add(string.Concat("SUM(CASE WHEN ", f.DbName, " IN ('", string.Join("', '", f.FieldValue) , "') THEN 1 ELSE 0 END) AS '", f.FieldName, ":", string.Join(",", f.FieldValue).SubStr(60), "'"));
      }
     }
    });
   var whereCond = new List();
   inquire.InquireFields.Where(f => f.FieldType == InquireHelper.FieldType.ConditionField).ToList()
    .ForEach(f =>
    {
     whereCond.Add(string.Concat(f.DbName, " IN ('", string.Join("','", f.FieldValue), "')"));
    });
   var groupCond = new List();
   inquire.InquireFields.Where(f => f.FieldType == InquireHelper.FieldType.GroupField).ToList()
    .ForEach(f =>
    {
     groupCond.Add(f.DbName);
    });
   var orderbyCond = new List();
   inquire.InquireFields.Where(f => f.FieldType == InquireHelper.FieldType.OrderByField).ToList()
    .ForEach(f =>
    {
     orderbyCond.Add(string.Concat(f.DbName, " ", f.OrderByAsc.GetValueOrDefault() ? "ASC" : "DESC"));
    });
   var sqlStr = string.Concat("SELECT ",
    string.Join(", ", inquireCond),
    " FROM GetStudentStatusByGxsj('", inquire.StatisticsDate , "')",
    whereCond.Any() ? " WHERE " : string.Empty,
    string.Join(" AND ", whereCond),
    groupCond.Any() ? " GROUP BY " : string.Empty,
    (inquire.ShowSubSummary || inquire.ShowSummary)
     ? string.Concat("rollup(", string.Join(", ", groupCond), ")")
     : string.Join(", ", groupCond),
    orderbyCond.Any() ? " ORDER BY " : string.Empty,
    string.Join(", ", orderbyCond));
   var dt = DBUtility.DbHelperSql.Query(sqlStr).Tables[0];
   if (!inquire.ShowSubSummary)
   {
    if (inquire.ShowSummary)
    {
     var col = inquire.InquireFields.Where(f => f.FieldType == InquireHelper.FieldType.GroupField).Count();
     for(int i = dt.Rows.Count - 2; i >=0 ; i -- ){
      if (dt.Rows[i][col - 1].ToString() == "")
      {
       dt.Rows.RemoveAt(i);
       //dt.Rows.Remove[dt.Rows[i]);
      }
     }
    }
   }
   else
   {
    var col = inquire.InquireFields.Where(f => f.FieldType == InquireHelper.FieldType.GroupField).Count();
    for (int i = 0; i < dt.Rows.Count - 1; i++)
    {
     for (int j = 1; j < col; j++)
     {
      if (dt.Rows[i][j].ToString() == "")
      {
       dt.Rows[i][j] = "小计";
       break;
      }
     }
    }
   }
   if (inquire.ShowSubSummary || inquire.ShowSummary)
   {
    dt.Rows[dt.Rows.Count - 1][0] = "合计";
   }
   return dt;
  }
  public static string SubStr(this string str, int maxLength)
  {
   if (str.Length > maxLength)
   {
    return str.Substring(0, maxLength - 1);
   }
   else
   {
    return str;
   }
  }
  public static string ToSerializableXML(this T t)
  {
   XmlSerializer mySerializer = new XmlSerializer(typeof(T));
   StringWriter sw = new StringWriter();
   mySerializer.Serialize(sw, t);
   return sw.ToString();
  }
  public static T ToEntity(this string xmlString)
  {
   var xs = new XmlSerializer(typeof(T));
   var srReader = new StringReader(xmlString);
   var steplist = (T)xs.Deserialize(srReader);
   return steplist;
  }
  public enum FieldType
  {
   DisplayField, GroupField, ConditionField, OrderByField
  }
  private static ConcurrentDictionary> _inquireItems = new ConcurrentDictionary>();
  public static List GetInquireItemsByInquireType(this InquireFieldBase inquireField)
  {
   List inquireItems;
   if (_inquireItems.TryGetValue(inquireField, out inquireItems))
   {
    return inquireItems;
   }
   switch (inquireField.GetType().Name)
   {
    case "XYMC_InquireField":
     inquireItems = new BLL.depacode().GetModelList("").OrderBy(d => d.xydm).Select(d => d.xymc).ToList();
     break;
    case "ZYMC_InquireField":
     inquireItems = new BLL.profcode().GetModelList("").OrderBy(d => d.xydm).ThenBy(d => d.zydm).Select(d => d.zymc).ToList();
     break;
    case "SZBJ_InquireField":
     inquireItems = DbHelperSql.Query("select distinct szbj from jbdate order by szbj").Tables[0].AsEnumerable().Select(b => b["szbj"].ToString()).ToList();
     break;
    case "FDY_InquireField":
     inquireItems = new BLL.DepaUser().GetModelList("").OrderBy(d => d.XYDM).ThenBy(y => y.YHXM).Select(d => d.YHXM).ToList();
     break;
    case "XL_InquireField":
     inquireItems = new[] { "博士", "硕士", "双学位", "本科", "专科", "高职" }.ToList();
     break;
    case "SYDQ_InquireField":
     inquireItems = new[] { "东部", "中部", "西部" }.ToList();
     break;
    case "SYSF_InquireField":
     inquireItems = DbHelperSql.Query("select [Name] from [Sydqdm] where RIGHT([code], 4) = '0000' order by code").Tables[0].AsEnumerable().Select(b => b["Name"].ToString()).ToList();
     break;
    case "DWDQ_InquireField":
     inquireItems = new[] { "东部", "中部", "西部" }.ToList();
     break; 
    case "DWSF_InquireField":
     inquireItems = DbHelperSql.Query("select [Name] from [Sydqdm] where RIGHT([code], 4) = '0000' order by code").Tables[0].AsEnumerable().Select(b => b["Name"].ToString()).ToList();
     break;
    case "HYML_InquireField":
     inquireItems = DbHelperSql.Query("select distinct hyml from [hydygx]").Tables[0].AsEnumerable().Select(b => b["hyml"].ToString()).ToList();
     break;
    case "HYDL_InquireField":
     inquireItems = DbHelperSql.Query("select hydl from [hydygx] order by hydldm").Tables[0].AsEnumerable().Select(b => b["hydl"].ToString()).ToList();
     break;
    case "XBMC_InquireField":
     inquireItems = new[] { "男", "女" }.ToList();
     break;
    case "MZMC_InquireField":
     inquireItems = DbHelperSql.Query("select nation from [mzdmb] where nation in (select nation from jbdate) order by mzdm").Tables[0].AsEnumerable().Select(b => b["nation"].ToString()).ToList();
     break;
    case "BYQX_InquireField":
     inquireItems = new BLL.Byqxdmb().GetModelList("").OrderBy(d => d.Byqxdm).Select(d => d.Byqxmc).ToList();
     break;
    case "KNSLB_InquireField":
     inquireItems = new[] { "就业困难、家庭困难和残疾", "家庭困难和残疾", "就业困难和残疾", "残疾", "就业和家庭困难", "家庭困难", "就业困难", "非困难生" }.ToList();
     break;
    case "ZYDKL_InquireField":
     inquireItems = new[] { "专业对口", "专业相关", "不对口", "未填写" }.ToList();
     break;
    case "DWXZ_InquireField":
     inquireItems = new BLL.Dwxz().GetModelList("").OrderBy(d => d.dwxzdm).Select(d => d.dwxzmc).ToList();
     break;
    case "EJBYQXMC_InquireField":
     inquireItems = new BLL.EjByqxdmb().GetModelList("").OrderBy(d => d.Ejbyqxdm).Select(d => d.Ejbyqxmc).ToList();
     break;
   }
   if (inquireItems != null)
   {
    _inquireItems[inquireField] = inquireItems;
    return inquireItems;
   }
   return new List();
  }
 }
 [Serializable]
 public class StatisticsInquire
 {
  public List InquireFields { get; set; } 
  [XmlAttribute]
  public bool ShowSummary { get; set; }
  [XmlAttribute]
  public bool ShowSubSummary { get; set; }
  [XmlAttribute]
  public string StatisticsDate { get; set; }
  [XmlAttribute]
  public HighChart.ChartType ChartType { get; set; }
 }

实际在使用中,还是非常方便的

预计以后版本需要制作的功能:

对统计字段进行进一步优化,能够使用多个条件组合筛选同一个字段,这个比较简单,扩展下类并且UI调整下就可以了。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

2

2026.01.29

java配置环境变量教程合集
java配置环境变量教程合集

本专题整合了java配置环境变量设置、步骤、安装jdk、避免冲突等等相关内容,阅读专题下面的文章了解更多详细操作。

2

2026.01.29

java成品学习网站推荐大全
java成品学习网站推荐大全

本专题整合了java成品网站、在线成品网站源码、源码入口等等相关内容,阅读专题下面的文章了解更多详细推荐内容。

0

2026.01.29

Java字符串处理使用教程合集
Java字符串处理使用教程合集

本专题整合了Java字符串截取、处理、使用、实战等等教程内容,阅读专题下面的文章了解详细操作教程。

0

2026.01.29

Java空对象相关教程合集
Java空对象相关教程合集

本专题整合了Java空对象相关教程,阅读专题下面的文章了解更多详细内容。

3

2026.01.29

clawdbot ai使用教程 保姆级clawdbot部署安装手册
clawdbot ai使用教程 保姆级clawdbot部署安装手册

Clawdbot是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

25

2026.01.29

clawdbot龙虾机器人官网入口 clawdbot ai官方网站地址
clawdbot龙虾机器人官网入口 clawdbot ai官方网站地址

clawdbot龙虾机器人官网入口:https://clawd.bot/,clawdbot ai是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

16

2026.01.29

Golang 网络安全与加密实战
Golang 网络安全与加密实战

本专题系统讲解 Golang 在网络安全与加密技术中的应用,包括对称加密与非对称加密(AES、RSA)、哈希与数字签名、JWT身份认证、SSL/TLS 安全通信、常见网络攻击防范(如SQL注入、XSS、CSRF)及其防护措施。通过实战案例,帮助学习者掌握 如何使用 Go 语言保障网络通信的安全性,保护用户数据与隐私。

8

2026.01.29

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

622

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
ASP.NET参考手册
ASP.NET参考手册

共0课时 | 0人学习

传播智客ASP.NET中级系列视频教程
传播智客ASP.NET中级系列视频教程

共33课时 | 6.4万人学习

传播智客ASP.NET高级系列视频教程
传播智客ASP.NET高级系列视频教程

共34课时 | 6.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号