asp.net三层架构

三层架构详解 如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码。在接下来的讲解中我们将以连接 SQL Server 为例介绍 ADO.NET 中的对象,引用的命名空间为 System.Data.SqlClient。在 C# 语言中 ADO.NET 是在 ADO 的基础上发展起来的,ADO (Active Data Object) 是一个 COM 组。件类库,用于访问数据库,而 ADO.NET 是在 .NET 平台上访问数据库的组件。层次清晰,分工明确, 阅读详情

前几天在网上看了一篇有关设计模式的文章主要讲的是mvc设计模式的文章,觉得mvc真的叫经典。网上也有人写过类似的文章,个人觉得写的不好,我看了下逻辑乱的不得了,描述也是乱七八糟的,说是代理模式吧又不像,说是工厂设计模式吧他在代码里给你弄个什么反射。看到这样的代码我很想给这位大哥拍砖,这不就是所说的误人子弟吗。所以呢我自己花了一个小时写了个小例子给大家参考一下。下面就一步一步的来作下这个小例子。

1.ADO.NET需要使用到连接字符串,我们先把连接字符串配置到Web.config文件中,如下所示

<appSettings>
    <!-- 配置连接字符串 -->
		<add key="SQLConnString" value="Data Source=.\SQLEXPRESS;AttachDbFilename=G:\usemvc\mvc3层架构\usemvc\App_Data\student.mdf;Integrated Security=True;User Instance=True"/>
</appSettings>

2.给程序分层

(1)数据访问层

(2)控制器,如ashx

(3)视图层,例如aspx,html


3.开始开发数据访问层

(1)写一个类用来取出配置文件里配置的连接字符串

using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

namespace usemvc.Utility
{
    public class ConnectionInfo
    {
        //取得web.config里配置的连接字符串
        public static string getConnectionString() {
            //SQLConnString是配置文件里面配置的名称应该保持一致
            return ConfigurationSettings.AppSettings["SQLConnString"];
        }
    }
}

(2)编写用于处理crdu的类,这个类用来连接数据库

using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;
using usemvc.Utility;

namespace usemvc.SQLServerDAL
{
    public abstract class SqlHelper
    {
        public static readonly string CONN_STR = ConnectionInfo.getConnectionString();

      
        public static SqlDataReader ExecuteReader(string connString, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
        {
            SqlCommand cmd = new SqlCommand();
            SqlConnection conn = new SqlConnection(connString);

            // 我们在这里用 try/catch 是因为如果这个方法抛出异常,我们目的是关闭数据库连接,再抛出异常,
            // 因为这时不会有DataReader存在,此后commandBehaviour.CloseConnection将不会工作。
            try
            {
                PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
                SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                cmd.Parameters.Clear();
                return rdr;
            }
            catch
            {
                conn.Close();
                throw;
            }
        }


        private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
        {

            if (conn.State != ConnectionState.Open)
                conn.Open();

            cmd.Connection = conn;
            cmd.CommandText = cmdText;

            if (trans != null)
                cmd.Transaction = trans;

            cmd.CommandType = cmdType;

            if (cmdParms != null)
            {
                foreach (SqlParameter parm in cmdParms)
                    cmd.Parameters.Add(parm);
            }
        }
    }
}
(3)编写pojo类

using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

namespace usemvc.Model
{
    public class StudentInfo
    {
        private int id;
        private String userName;

        public String UserName
        {
            get { return userName; }
            set { userName = value; }
        }
        private String password;

        public String Password
        {
            get { return password; }
            set { password = value; }
        }
      
        public int Id
        {
            get { return id; }
            set { id = value; }
        }

    }
}



(4) 开发处理业务逻辑的接口

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using usemvc.Model;

namespace usemvc.IDAL
{
    public interface IStudentDao
    {
        //通过ID取得用户信息
        StudentInfo getStudentInfoByID(int id);
        //判断数据库是否存在该用户
        int getUserCount(string username,string password);
    }
}

(5) 编写接口的实现类

using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using usemvc.IDAL;
using usemvc.Model;
using System.Data.SqlClient;

namespace usemvc.SQLServerDAL
{
    public class StudentImpl:IStudentDao
    {
       
        //查询用户是否存在
        public int getUserCount(string username, string password) {

            int temp=0;
            string sql = "select count(username) from m_student where username=@username and password=@password";
            //创建一个参数
            SqlParameter[] parm = new SqlParameter[] { new SqlParameter("@username",username), new SqlParameter("@password",password) };
            
            using (SqlDataReader sdr = SqlHelper.ExecuteReader(SqlHelper.CONN_STR, CommandType.Text,sql, parm))
            {
                if (sdr.Read())
                {

                    temp = sdr.GetInt32(0);
                }
            }
            return temp;
        }
        public StudentInfo getStudentInfoByID(int id)
        {
           
              string PARM_ID = "@ID";
              string SQL_SELECT_CONTENT = "Select username,password From m_student Where id = @ID";
        //用户登录的处理

            //创意文章内容类
            StudentInfo stu = null;

            //创建一个参数
            SqlParameter parm = new SqlParameter(PARM_ID, SqlDbType.Int, 8);
            //赋上ID值
            parm.Value = id;

            using (SqlDataReader sdr = SqlHelper.ExecuteReader(SqlHelper.CONN_STR, CommandType.Text, SQL_SELECT_CONTENT, parm))
            {
                if (sdr.Read())
                {
                   
                    stu = new StudentInfo();
                    stu.Password = sdr.GetString(1);
                    stu.UserName = sdr.GetString(0);
                }
            }
            return stu;
        }

       
    }
}

(6) 编写一个代理操作类

using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using usemvc.IDAL;
using usemvc.Model;
using usemvc.DALFactory;

namespace usemvc.SQLServerDAL
{
    public class StudentDaoProxy:IStudentDao
    {
        private IStudentDao dao;

        //构造方法实例化dao对象
        public StudentDaoProxy() {
            this.dao = new StudentImpl();
        }
        public StudentInfo getStudentInfoByID(int id) {
           //调用真实主题操作
            return this.dao.getStudentInfoByID(id);
            
        }
        public int getUserCount(string username,string password)
        {
            //调用真实主题操作
            return this.dao.getUserCount(username,password);

        }


       
    }
}

(7)编写工厂操作类

using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Reflection;
using usemvc.SQLServerDAL;
using usemvc.IDAL;


namespace usemvc.DALFactory
{
    public class StudentDaoFactory
    {
       //取得Dao接口实例
        public static IStudentDao getIStudentDaoInstance() {
            //取得代理操作类StudentDaoProxy实例
            return new StudentDaoProxy();
        }
    }
}


4.开发控制器层,这里我用ashx来处理

using System;
using System.Collections;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;
using System.Web.SessionState;
using usemvc.DALFactory;

namespace usemvc.ashx
{
    /// <summary>
    /// $codebehindclassname$ 的摘要说明
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public class CheckLogin : IHttpHandler, IRequiresSessionState
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/html";
          
            string username=context.Request["username"];
            string password= context.Request["password"];
           
             int temp=StudentDaoFactory.getIStudentDaoInstance().getUserCount(username,password);
             //下面是业务逻辑
             //如果数据库存在该用户
             if(temp==1){
                 //下面是程序的处理逻辑,我就不写了
                 //跳转或者数据处理
             }
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

5.开发视图层(数据的显示)

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="login.aspx.cs" Inherits="usemvc.login" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript">
  $(document).ready(function(){
    $("#login").click(function(){
       var username=$("#username").val();
       var password=$("#password").val();
       $.ajax({
		type:"POST",
		url:"ashx/CheckLogin.ashx",
		data:"username="+username+"&password="+password,
		success:
			function()
			{
			 //这里只是一个简单的实例,在这里可以在ashx生成xml 在这里可以先解析再做判断
			 //之后处理自己的业务逻辑
			 window.location="Default.aspx"
			}
	  });

    });
  });
</script>
    <title>用户登录</title>
</head>
<body>
   用户名:<input type="text" id="username"/><br />
   密码:<input type="password" id="password"/><br />
   <input type="button" id="login" value="登录"/>
</body>
</html>

用户信息的显示页面

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using usemvc.SQLServerDAL;
using usemvc.Model;
using usemvc.DALFactory;

namespace usemvc
{
    public partial class _Default : System.Web.UI.Page
    {
        StudentInfo ci;
        protected void Page_Load(object sender, EventArgs e)
        {
              //protected System.Web.UI.WebControls.Label username;
             // protected System.Web.UI.WebControls.Label lblDataTime;
            this.GetContent(1);
            //this.GetCount();
        }
        private void GetCount() {
            int a = StudentDaoFactory.getIStudentDaoInstance().getUserCount("chenruiyin","123456");
            this.Response.Write(a);
        }
         private void GetContent(int id)
        {
         
            ci = StudentDaoFactory.getIStudentDaoInstance().getStudentInfoByID(1);
            this.Response.Write("<table border='1' width='500' id='tab'>");
            this.Response.Write("<tr>");
            this.Response.Write("<td>"+"用户名"+"</td>");
            this.Response.Write("<td>" + "密码" + "</td>");
            this.Response.Write("</tr>");
            this.Response.Write("<tr>");
            if (ci != null)
            {
                 this.Response.Write("<td>"+ci.UserName+"</td>");
                 this.Response.Write("<td>" + ci.Password + "</td>");  
                //username.Text = ci.UserName;
            }
            this.Response.Write("<tr>");
            this.Response.Write("</table>");

            
        }
}
   
}

到这里开发就结束了,代码比较简单,只写了个SqlDataReader,ExecutenoneQuery类型的操作和js校验我没加上,大家自己加上好了。代码我会上传到资源里大家自己去下载啊。


ASP.NET三层架构(Visual Studio ) 前两天我们了解了数据库的创建以及编写,那么大家会想编写数据库总要用呀,所以今天我就来带大家了解一下asp.net的三层架构,三层架构里就能够很好的运用数据库 一、 三层架构概述 三层结构是一种严格分层方法,即数据访问层(DAL)只能被业务逻辑层(BLL)访问,业 务逻辑层只能被表示层(UI)访问,用户通过表示层将请求传送给业务逻辑层,业务逻辑层完 成相关业务规则和逻辑,并通过数据访问层访问数据库获得数据,然后按照相反的顺序依次 返回将数据显示在表示层。有的三层结构还加了Factory、 Mode... 阅读详情

相关推荐

asp.net三层架构增删改查

数据库 use master if exists (select * from sysdatabases where name='bond') drop database bond create database bond on PRIMARY ( name='bond_data', FILENAME='F:\asp\理财代销\management\bond.mdf', filegrowth=20...

勿语轻尘的博客 4091

ADO.NET三层架构

三层架构设计 为什么要使用架构 框架能够清晰的描述实体的组成结构 框架是实体的骨干,有骨干的实体显得很“结实” 框架设计的好坏直接影响到实体的质量 框架设计在实体构建中起着举足轻重的作用 软件是一个能够帮助人们高效办公的应用系统 软件开发之前我们必须要一个高质量的框架来保证软件的运行和后期维护 两层架构 视图层-数据访问层 这两层之间的数据传递通过数据实体模型来作为载体传递 两层和三层的区别:...

dust__的博客 2025

深入探究ASP.NET三层架构的经典实现

ASP.NET三层架构是一种分层的设计模式,广泛应用于Web应用程序开发中。它的核心思想是将应用程序分为三个逻辑层:表示层(UI)、业务逻辑层(BLL)和数据访问层(DAL)。这种分层方式不仅有助于提升代码的组织结构,还便于实现模块化开发,使得各层之间的耦合度降低,便于维护和扩展。在本章中,我们将简要介绍三层架构的由来和其基本理念,并探讨为何它能够成为一种经久不衰的设计模式。随后,我们将进入更具体的层实现细节,探讨如何在ASP.NET环境中应用三层架构,并考虑在具体实现时应遵循的最佳实践和原则。

weixin_35370061的博客 989

ADO.Net 精简的三层架构(初学者)

ADO.Net 精简的三层架构(初学者) DAL(Data Access Layer) 三层架构是企业开发中常用的设计模式,把数据库访问、业务逻辑、界面分离。 初学者直接学习三层架构比较难,因此先学习精简的三层架构,只用DAL层,把数据库访问封装到DAL中,UI调用DAL,原则“UI中不出现SQL”。 DAL常用封装:ToModel、ListAll、GetById、DeleteById、U...

编程语言小筑 487

掌握ASP.NET三层架构:从基础到实践

ASP.NET三层架构是一种流行的软件设计模式,用于构建可维护、可扩展的Web应用程序。它将应用程序分为三个主要层次:表现层(Presentation Layer)、业务逻辑层(Business Logic Layer, BLL)和数据访问层(Data Access Layer, DAL)。每个层次都有其明确的职责和功能。

weixin_42181686的博客 977

C#ADO.NET技术三层模式架构完整学生管理系统基础版本

C#ADO.NET技术三层模式架构完整学生管理系统基础版本

ADO.NET三层架构搭建案例详解

1、三层架构搭建方式 在进行三层分类时,这样新建类库。 1.文件->新建项目->其他项目类型->空白解决方案。 2.在右侧的“资源管理器”中,选中当前解决方案,右键添加->新建项目->类库(ClassLibrary),分别创建BLL,DAL,UL类库。(若添加后看不到解决方案则在菜单->工具->选项->项目和解决方案->总是显示解决方案)...

HKYAOYAOLING的博客 1170

ADO.NET数据库三层架构

数据库三层架构,DAL,BLL,UserInterface

【ASP.NET开发】.NET三层架构简单解析

这篇文章本来应该很早就写出来的,但是一直苦于自己的精神能力有限,而且已经到了我们学校的考试周,所以时间上还是有点紧迫。关键的一点就是,找不到合理的思路来写,思路没有的话,就算是再好的素材,也写不来大家喜欢的文章。 之前已经写过关于.NET三层架的两篇文章了,一篇是《【ASP.NET开发】ASP.NET(MVC)三层架构知识的学习总结》和《【ASP.NET开发】ASP.NET对SQLServer的

强子的专栏 2万+

基于ADO.NET的三层架构实现(修改SQL参数后可使用)

这款三层架构实现了BLL、DAL、Model,用SQLHelper与SQL Server通信。这款架构只需要修改SQL参数就可以使用,具有方便快捷的特点,既可以用于C#语言的项目开发,也可以用于教学。

模型参考自适应控制(MRAC):让PID参数动态优化

本文深入解析模型参考自适应控制(MRAC)技术,它通过实时调整PID参数,使控制系统能自动适应系统特性变化和外部干扰。文章详细介绍了MRAC的工作原理、数学基础,并提供了用C语言实现的实战代码示例,帮助工程师解决传统PID控制在非线性、时变系统中参数整定繁琐的难题。

tequila的博客 902

ASP.NET三层架构理解

一、基本概念及说明 ASP.NET三层架构主要包括UI(显示/表示)层、BLL(业务逻辑)层、DAL(数据访问)层。UI层主要用来显示数据,BLL层主要用来控制业务逻辑,有时什么都不做,只是简单作为传值用,而DAL层主要用来控制数据库,进行数据交互。并且还有Model层作为补充,进行参数传递。 ![三层架构](https://img-blog.csdnimg.cn/20200926173744919.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGV

qq_39806817的博客 2215

VTK基础教程(1)- vtkPolyData 介绍

目录 VTK的编译与环境搭建 VTK一般渲染流程 VTK数据类型-vtkPolyData 使用vtk自带的多边形数据 使用自己创建的数据 添加顶点颜色 添加面颜色 VTK的编译与环境搭建 这部分目前已经有了大佬做了成熟的傻瓜式配置,大家可以参考这篇文章:VTK+VS2019(或其他版本均可) 傻瓜式一站式 配置_Nancy_fairy的博客-优快云博客_vs2019 vtk VTK一般渲染流程 这部分的介绍也很多,大家可以参考这篇文章:VTK笔记-了解VTK_黑山老妖的博客.

qq_35769071的博客 9054

关于ASP.NET三层架构的搭建

关于ASP.NET三层架构的搭建

m0_46008427的博客 3364

MATLAB实战:利用扫频数据重构系统伯德图的关键步骤

本文详细介绍了如何利用MATLAB处理扫频数据并重构系统伯德图的完整实战流程。内容涵盖数据导入与清洗、增益与相位的精确计算、频率响应数据对象(frd)的构建、数据平滑与插值处理,以及最终生成专业伯德图并进行关键参数(如相位裕度)标注的方法。文章重点解决了从实测“黑盒子”系统数据出发,获取直观频率响应特性曲线的核心问题,为控制系统分析与设计提供了实用指南。

weixin_29098117的博客 397

基于FPGA的图像预处理系统(图)

 北京机械工业学院 韩娟娟 邓文怡 娄小平 由于获取图像的工具或手段的影响,使获取图像无法完全体现原始图像的全部信息。因此,对图像进行预处理就显得非常重要。预处理的目的是改善图像数据,抑制不需要的变形或者增强某些对于后续处理来说比较重要的图像特征。通常根据预处理目的的不同,把预处理技术归为图像增强技术和图像分割技术两类。图像对比度处理是空间域图像增强的一种方法。由于图像灰度范围狭窄会使

lyzhangxianglove的专栏 1779

ASP.NET三层架构和MVC

昨天继续学习asp.net,终于有了点眉目,看了一个实战,算是实战吧,介绍asp.net的三层架构,发现和java中的MVC三层架构有点区别,展示层-View;业务逻辑层-Control;持久层-Model。而asp.net中的三层架构是:用户界面表示层(UIL),业务逻辑层(BLL),数据访问层(DAL)。 用户表示层基本一致,其他两个层MVC中的model个人认为融合了BLL和DAL而,三层架

zxkevin1989的专栏 2276

FCC 首个扫地机器人豁免落地,Matic 凭什么抢先?

Matic获FCC首个扫地机器人豁免,实为提前布局的合规姿态。其产品在美国组装,并采用已认证射频模组,虽未达65%美国成分门槛,但已具备“本土制造”优势。豁免本质是对既有合规状态的确认,而非解救。此举在商业上放大品牌价值,抢占“安全、合规、本土”叙事高地,凸显供应链安全正取代技术标准成为监管核心。未来合规成本将攀升,规则主导权仍在FCC手中。

致力于lidar应用开发 98

Web网络编程第五次试验:ASP.NET三层架构

Web网络编程第五次试验:ASP.NET三层架构前言一、实验目的二、实验环境三、实验内容四、代码及截图五、实验总结 前言 为了帮助同学们完成痛苦的实验课程设计,本作者将其作出的实验结果及代码贴至优快云中,供同学们学习参考。如有不足或描述不完善之处,敬请各位指出,欢迎各位的斧正! 一、实验目的 1.理解ASP.NET三层架构。 2.掌握ASP.NET三层架构的建立和使用方法。 二、实验环境 Visual Studio 2019 ASP.Net Framework 三、实验内容 1、搭建基于APS.NET三层

sjx3161的博客 4559

【系统架构设计师-2023年真题】综合知识-答案及详解

要实现多任务间的协同工作,操作系统必须提供任务间的通信手段。嵌入式操作系统一般都会提供多任务间通信的方法,其中()是任务间最直接、最明显的通信方法,也是访问共享的数据结构,即不同的任务都可以访问同一地址空间。()作为一种更高级的通信方式,能够在同一处理器的各个任务间传递任意长度(理论上只受物理内存和机器字长限制)的信息。(1)A. 共享内存 B. Socket C. 消息传递 D. 信号量(2)A. 共享内存 B. Socket C. 消息传递 D. 信号量【答案】A、C关于星型拓扑结构,下列说法正确的是(

数据知道的博客 1万+

二极管限幅电路和钳位电路

二极管限幅电路和钳位电路学习

HW-BASE的博客 928

C# asp.net 三层架构

三层架构:指的是PL(present layer)层,BLL(business logical layer)层,DAL(data access layer)层,是一种总体设计的思想。 PL层:是表现层,主要是用来展示数据;BLL层:是处理层,主要是用来处理数据;DAL层:主要是从数据库获取数据的。PL面向用户,DAL面向数据库。 具体阐述:PL是web应用程序,调用BLL的

前端疯 5766

Label Studio 数据标注平台,大模型预训练与微调必备

摘要:LabelStudio是一款开源数据标注工具,支持文本、图像等多种数据类型的标注。本文介绍了其安装方法(通过conda创建环境并pip安装)、基础使用流程(创建项目、导入数据、设置标签、标注导出)以及AI自动标注功能的实现。重点讲解了如何通过MLBackend集成LangChain模型实现自动标注:创建自定义模型类、构建预测链、处理返回结果,最后配置到LabelStudio项目中。该功能可显著提升标注效率,标注人员只需在AI预测结果基础上进行修正。

技术引领业务创新 289

ASP.NET WebFroms三层架构个人博客实例

前段时间完成了一个简单的个人博客课程设计, 主要是为了完成后台与前台数据的传输,实现增、删、改、查等功能,所以前端页面设计的并不太漂亮。 在完成功能的过程中遇到了许多问题,但最终也是被一一解决了。 在这里记录一下,加深理解。 该实例通过VS工具的ASP.net语言,前端界面用了bootstrap框架,数据库sql server2017,设计上采用了三层架构的设计模式。 关于三层架构...

qq_41609957的博客 3272

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

上一篇: asp.net使用listview分页显示数据
下一篇: 建造者模式
青蛙小王子
博客等级 码龄16年 239粉丝 311原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值