为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

网站毕业论文asp .net

2017-09-19 34页 doc 306KB 57阅读

用户头像

is_153723

暂无简介

举报
网站毕业论文asp .net摘要     随着网络技术的迅猛发展, 当代企业纷纷建立自己的网站,借助于互联网扩大自己的影响、推广自己的产品,同时通过互联网快速的信息传递加速自身的发展。     本论文设计实现了一个电子商务网站前台框架搭建和后台数据库管理系统,意在通过设计一个具有强大的数据管理功能的系统来管理前台页面中不断更新的数据,方便网站管理员日后对网站的维护和数据更新。本论文所提出的方案是采用现在比较流行的.net技术和软件Microsoft Visual Studio 10.0并配合网页三剑客(dreamweaver、photoshop、flas...
网站毕业论文asp .net
摘要     随着网络技术的迅猛发展, 当代企业纷纷建立自己的网站,借助于互联网扩大自己的影响、推广自己的产品,同时通过互联网快速的信息传递加速自身的发展。     本论文设计实现了一个电子商务网站前台框架搭建和后台数据库管理系统,意在通过设计一个具有强大的数据管理功能的系统来管理前台页面中不断更新的数据,方便网站管理员日后对网站的维护和数据更新。本论文所提出的是采用现在比较流行的.net技术和软件Microsoft Visual Studio 10.0并配合网页三剑客(dreamweaver、photoshop、flash)等制作工具来设计和建设一个企业网站前台框架搭建和后台数据库管理系统。   关键词:减振器电子商务网站、ASP.NET技术、SQL server数据库 目录 第一章 绪论    1 1.1 设计背景    1 1.2 构架系统    1 第二章 可行性分析    4 2.1技术可行性    4 2.2社会可行性    4 第三章 动态网站的开发技术及其实现    6 3.1动态网站的关键开发技术    6 3.2动态网站的实现    7 3.2.1网站建设的市场背景    7 3.2.2网站实现的功能    8 3.2.3网站内容风格设计    8 第四章 动态网站的总体模块设计    8 4.1前台功能模块总体设计    8 4.2后台功能模块总体设计    9 4.3数据库模块总体设计    10 第五章 三层架构代码实现及页面展示    10 5.1数据层    10 5.2数据层    13 5.2.1数据访问层    13 5.2.2业务逻辑层    19 5.3表示层    20 5.3.1首页展示    21 5.4三层架构的优势展示    27 第六章 各模块功能实现及代码分析    39 6.1分页功能的实现    39 6.2页面传参实现框架功能    42 6.3搜索功能实现    45 结论    48 致谢    49 参考文献    50 第一章 绪论 1.1 设计背景 在Internet飞速发展的今天,互联网成为人们快速获取、发布和传递信息的重要渠道,它在人们政治、经济、生活等各个方面发挥着重要的作用。Internet上发布信息主要是通过网站来实现的,获取信息也是要在Internet“海洋”中按照一定的检索方式将所需要的信息从网站上下载下来。因此网站建设在Internet应用上的地位显而易见,它已成为政府、企事业单位信息化建设中的重要组成部分,从而倍受人们的重视。 网络在现代生活中日益盛行,越来越多的人对此也极为痴迷,随着网络技术的迅猛发展, 当代企业纷纷建立自己的网站,借助于互联网扩大自己的影响、推广自己的产品,同时通过互联网快速的信息传递加速自身的发展。因此我选择将公司网站的设计以及后台的管理作为我的项目——减震器网站设计与制作。 1.2 构架系统 >> N层架构 每一层都可以在仅仅更改很少量的代码后,就能放到物理上不同的服务器上使用,因此结构灵活而且性能更佳。此外,每层做些什么其它层是完全看不到的,因此更改、更新某层,都不再需要重新编译或者更改全部的层了。这是个很强大的功能。例如,如果把数据访问代码与业务逻辑层分离,当数据库服务器更改后,你只需要更改数据访问的代码,因为业务逻辑层是不变的,因此不需要更改或者重新编译业务逻辑层。 一个N层[3]的应用程序通常有三层:表现层、业务层和数据层。下面让我们看看每层都做些什么。 ● 表现层(Presentation Layer) 表现层用于用户接口的展示,以及用业务层的类和对象来“驱动”这些接口。 在ASP.NET中,该层包括aspx页面、用户控制、服务器控制以及某些与安全相关的类和对象。 ● 业务层(Business Tier) 业务层用于访问数据层,从数据层取数据、修改数据以及删除数据,并将结果返回给表现层。 在ASP.NET中,该层包括使用SqlClient或OleDb从SQL Server或Access数据库取数据、更新数据及删除数据,并把取得的数据放到DataReader或DataSet中返回给表现层。返回的数据也许只有一个整型数字,比如一个表的行记录数目,但这也要用数据层的数据进行计算。 ● BLL和DAL 通常该层被划分成两个子层:业务逻辑层(Business Logic Layer,BLL)和数据访问层(Data Access Layers,DAL)。业务逻辑层在数据访问层之上,也就是说BLL调用DAL的类和对象。DAL访问数据并将其转给BLL。 在ASP.NET中,该层可以用SqlClient或OleDb从SQL Server或Access数据库取数据,把数据通过DataSet 或DataReader的形式给BLL,BLL处理数据给表现层。有的时候,例如直接把DataSet 或DataReader送给表现层的时候,BLL是一个透明层。 ● 数据层(Data Tier) 数据层是数据库或者数据源。在.NET中,通常它是一个SQL Server或Access数据库,但不仅限于此两种形式,它还可能是Oracle,mySQL,甚至是XML。 ● 逻辑层VS(分布式)物理层 人们容易将这两个概念搞混。我们说逻辑层是把层按类的集合来划分,而这些层都在同一台个服务器上。(分布式)物理层是指类的集合在不同的服务器上,用附加的代码来处理层间的通信,比如remoting和web服务。 >>ASP.NET的优势: ● 增强的性能。ASP.NET 是在服务器上运行的编译好的公共语言运行库代码。与被解释的前辈不同,ASP.NET 可利用早期绑定、实时编译、本机优化和盒外缓存服务。这相当于在编写代码行之前便显著提高了性能。 ● 世界级的工具支持。ASP.NET 框架补充了 Visual Studio 集成开发环 境中的大量工具箱和设计器。WYSIWYG 编辑、拖放服务器控件和自动部署只是这个强大的工具所提供功能中的少数几种。 ● 威力和灵活性。由于 ASP.NET 基于公共语言运行库,因此 Web 应用程序开发人员可以利用整个平台的威力和灵活性。.NET 框架类库、消息处理和数据访问解决方案都可从 Web 无缝访问。ASP.NET 也与语言无关,所以可以选择最适合应用程序的语言,或跨多种语言分割应用程序。另外,公共语言运行库的交互性保证在迁移到 ASP.NET 时保留基于 COM 的开发中的现有投资。 ● 简易性。ASP.NET 使执行常见任务变得容易,从简单的窗体提交和客户端身份验证到部署和站点配置。例如,ASP.NET 页框架使您可以生成将应用程序逻辑与表示代码清楚分开的用户界面,和在类似 Visual Basic 的简单窗体处理模型中处理事件。另外,公共语言运行库利用托管代码服务(如自动引用计数和垃圾回收)简化了开发。 ● 可管理性。ASP.NET 采用基于文本的分层配置系统,简化了将设置应用于服务器环境和 Web 应用程序。由于配置信息是以纯文本形式存储的,因此可以在没有本地管理工具帮助的情况下应用新设置。此"零本地管理"哲学也扩展到了 ASP.NET 框架应用程序的部署。只需将必要的文件复制到服务器,即可将 ASP.NET 框架应用程序部署到服务器。不需要重新启动服务器,即使是在部署或替换运行的编译代码时。 ● 可缩放性和可用性。ASP.NET 在设计时考虑了可缩放性[4],增加了专门用于在聚集环境和多处理器环境中提高性能的功能。另外,进程受到 ASP.NET 运行库的密切监视和管理,以便当进程行为不正常(泄漏、死锁)时,可就地创建新进程,以帮助保持应用程序始终可用于处理请求。 ● 自定义性和扩展性。ASP.NET 随附了一个设计周到的结构,它使开发人员可以在适当的级别"插入"代码。实际上,可以用自己编写的自定义组件扩展或替换 ASP.NET 运行库的任何子组件。实现自定义身份验证或状态服务一直没有变得更容易。 ● 安全性。借助内置的 Windows 身份验证和基于每个应用程序的配置,可以保证应用程序是安全的。 第二章 可行性分析 2.1技术可行性 硬件、软件要求不高,目前市场上的一般计算机硬件资源均能满足系统开发要求。其中运用的主要软件有Dreamweaver,photoshop,SQL server等,数据库采用sql server2000。采用ASP.NET技术,该技术功能强大,扩展性强,macromedia公司提供大量的第三方控件,并结合vbscript,javascript以及sql等脚本语言,以上技术足以完成本系统的开发和设计。 2.2社会可行性 在国外,特别是在美国,实施企业战略不只是空谈,它已经被列入了许多大企业的日程表中。与国外的热闹场面相比,国内了解企业概念的企业十分少,而计划建立企业的企业就更加微乎其微。但是应该看到,互联网在国内的发展速度相当迅速,企业网站作为一种新的形象传播途径,同传统媒介相比,对大众更具有亲和力与吸引力,可以帮助企业与消费者建立更亲密、更稳固的联系。 企业网站有很多作用: 一、拥有企业自己的域名,建立企业自己的网站,树立企业在科技信息时代的完美形象。作为第四媒体的互联网,其特点就是可以跨越时空,正常情况下, 网站无时无刻 不在工作通过企业的网站,用户可以跨越时空了解企业,利用多媒体技术,企业可以 向用户展示产品、技术、经营理念、企业文化、企业形象,树立现代企业形象,增值 企业无形资产。  二、宣传企业,创造销售机会据调查,有超过30%的人是通过上网查询企业的电话和地址的,这一比例和通过114查询的比例相接近,可见企业网站已成为许多人首次接触企业、了解相关信息的选择。 三、加强客户沟通宣传企业产品企业可以通过网站建立与客户沟通的便捷渠道,全面展示企业的所有产品。网络科技足以令您的产品与品牌形象更加立体地呈现在用户面前,就算企业仅仅把网站当成电子宣传册来使用,也较传统的宣传模式更加的多姿多彩、更加地易于发布与传播、更加的经济与环保。  四、丰富营销手段,扩大产品销售渠道企业网站可以满足一部分客户网上查询与采购的需要,抓住网络商机。企业通过网站可以开展电子营销。首先,电子营销作为传统营销的补充;其次, 电子营销可以拓展新的空间,增加销售渠道,接触更大的消费群体,获得更多的新顾 客,扩大市场;再次,电子营销可以减少环节,减少人员,节约费用,降低成本,有利于提高营销效率。  五、有利于了解顾客的意见,掌握顾客的需求在不干扰顾客正常工作和生活的条件下,企业通过网站上的调查表、留言薄、定 制服务以及E-MAIL可以倾听顾客的意见,了解顾客的心声,加强企业与顾客间的联系 建立良好的顾客关系。 六、有利于改善服务,提高企业服务质量利用网站,通过电子沟通方式,企业开展的在线服务是传统的沟通方式(如,邮 件、电话、传真等)所无比拟的,在线服务能够更加及时准确地掌握用户的需求,通过网站的交互式服务使得被动提供和主动获得统一起来,从而实现售前、售中、售后的全过程和全方位的服务。  七、 互联网的特点在于突破地域限制,一个网站能同时为您服务于世界各地的拥护;同时,网络无休息,一年365天、一天24小时,您的网站永远忠实地服务于您的所有客户。 第三章 动态网站的开发技术及其实现 3.1动态网站的关键开发技术 ASP.NET 是建立在公共语言运行库上的编程框架,可用于在服务器上生成功能强大的 Web 应用程序。与以前的 Web 开发模型相比,ASP.NET 提供了数个重要的优点[4]: ● 增强的性能[3]。ASP.NET 是在服务器上运行的编译好的公共语言运行库代码。与被解释的前辈不同,ASP.NET 可利用早期绑定、实时编译、本机优化和盒外缓存服务。这相当于在编写代码行之前便显著提高了性能。 ● 世界级的工具支持。ASP.NET 框架补充了 Visual Studio10.0 集成开发环境中的大量工具箱和设计器。WYSIWYG 编辑、拖放服务器控件和自动部署只是这个强大的工具所提供功能中的少数几种。 ● 威力和灵活性。由于 ASP.NET 基于公共语言运行库,因此 Web 应用程序开发人员可以利用整个平台的威力和灵活性。.NET 框架类库、消息处理和数据访问解决方案都可从 Web 无缝访问。ASP.NET 也与语言无关,所以可以选择最适合应用程序的语言,或跨多种语言分割应用程序。另外,公共语言运行库的交互性保证在迁移到 ASP.NET 时保留基于 COM 的开发中的现有投资。 ● 简易性。ASP.NET 使执行常见任务变得容易,从简单的窗体提交和客户端身份验证到部署和站点配置。例如,ASP.NET 页框架使您可以生成将应用程序逻辑与表示代码清楚分开的用户界面,和在类似 Visual Basic 的简单窗体处理模型中处理事件。另外,公共语言运行库利用托管代码服务(如自动引用计数和垃圾回收)简化了开发。 ● 可管理性。ASP.NET 采用基于文本的分层配置系统,简化了将设置应用于服务器环境和 Web 应用程序。由于配置信息是以纯文本形式存储的,因此可以在没有本地管理工具帮助的情况下应用新设置。此“零本地管理”哲学也扩展到了 ASP.NET 框架应用程序的部署[5]。只需将必要的文件复制到服务器,即可将 ASP.NET 框架应用程序部署到服务器。不需要重新启动服务器,即使是在部署或替换运行的编译代码时。 ● 可缩放性和可用性。ASP.NET 在设计时考虑了可缩放性,增加了专门用于在聚集环境和多处理器环境中提高性能的功能。另外,进程受到 ASP.NET 运行库的密切监视和管理,以便当进程行为不正常(泄漏、死锁)时,可就地创建新进程,以帮助保持应用程序始终可用于处理请求。 ● 自定义性和扩展性。ASP.NET 随附了一个设计周到的结构,它使开发人员可以在适当的级别“插入”代码。实际上,可以用自己编写的自定义组件扩展或替换 ASP.NET 运行库的任何子组件。实现自定义身份验证或状态服务一直没有变得更容易。 ● 安全性。借助内置的 Windows 身份验证和基于每个应用程序的配置,可以保证应用程序是安全的。 3.2动态网站的实现 3.2.1网站建设的市场背景 互联网的兴起及其在全球范围内的普遍应用,加快了全球信息化的步伐,同时,又使传统企业面临着新的挑战和机遇。传统企业广泛实施电子商务转型策略,是互联网经济时代新型企业的发展方向。 何将互联网技术应用于企业日常宣传、运作、管理中,如何在电子商务应用领域开拓市场,如何利用Internet给企业带来商机、拓展企业的规模和效益,如何加强内部管理等等…则更是企业在互联网经济浪潮中急需考虑的问题。 3.2.2网站实现的功能     通过实施一系列的电子化建设计划,该动态网站将实现: ● 整合企业的业务应用 ● 相关信息的动态发布:企业信息、产品信息、招聘信息等 ● 建立一个强大的对外宣传口径 ● 方便管理员对整个网站监控和维护   3.2.3网站内容风格设计 ● 总体印象:立足于企业服务宗旨,延伸至高新行业领域,主题突出,内容精干,形式简洁 ● 版式布局:栏目集中[1],分栏目检索明确,导航标志清晰 ● 色彩运用:色调总体呈畅快、简洁、专业的特征[2]:(根据企业实际需要决定) ● 图片运用:配合文字及色块,以生动的形象图片表达知名专业公司的实力和创造力 ● 在功能上:网站内容从各方面尽量满足客户和有需求的业内人士的合理要求 第四章 动态网站的总体模块设计 由于中小型企业网站的目标重点在于展示企业的信息和商品的在线销售。本章重点介绍前台功能模块总体设计、后台功能模块总体设计和数据库模块的总体设计。 4.1前台功能模块总体设计 前台功能模块主要包括:首页、公司产品、公司简介、减震选型、工程实例、售后服务、联系我们、人才招聘。总体设计展示如图4.1。 人才招聘                     图4.1 前台功能模块总体设计 4.2后台功能模块总体设计   后台功能模块包括:管理员的权限管理、产品管理、产品类型管理、公司信息管理、工程实例管理、招聘信息管理、招聘部门管理、留言信息管理的添加、修改、查看等。总体设计展示如图4.2。 首页登录                   图4.2后台功能模块总体设计 4.3数据库模块总体设计 数据库[7]模块的总体设计展示如图4.2。                     图4.3数据库功能模块总体设计 第五章 三层架构代码实现及页面展示 本网站的后台实现应用了三层架构:数据层、业务层(BLL和DAL)以及表现层。下面我们分别介绍。 5.1数据层   该网站使用的数据库是sql server2000[7],在数据层将每个数据表封装起来。下面以商品数据表为例,进行代码分析。在Visual Studio10.0中可以看到数据层的展示,如图5.1。 ProductModels.cs页面的源代码:    //命名空间 using System; 数据层                 图5.1数据层的展示 using System.Collections.Generic; using System.Linq; using System.Text; namespace TanganModels {    [Serializable][5]   public class ProductModels {//对应数据库定义私有变量         private int id;         private string proname= String.Empty;         private string projieshao = String.Empty;         private string proimg = String.Empty;         private DateTime prodate;         private int gid;         private int leixing;         private string yongliao = String.Empty;         private string jiegou = String.Empty;         private string jiegoutxt = string.Empty;         private string jishu = String.Empty;         private string cname = String.Empty;         public ProductModels(){ }//定义构造方法 //对变量进行封装   public int Id     {  get { return this.id; }    set { this.id = value; } }   public string ProName     {  get { return this.proname; }  set { this.proname = value; } }    public string Projieshao     {  get { return this.projieshao; } set { this.projieshao = value; }}   public string Proimg     {  get { return this.proimg; }  set { this.proimg = value; }}   public DateTime Prodate     {  get { return this.prodate; }  set { this.prodate = value; }}   public int Leixing   {  get { return this.leixing; }  set { this.leixing = value; }  }   public int Gid     {  get { return this.gid; }  set { this.gid = value; }}   public string Yongliao     {  get { return this.yongliao; }  set { this.yongliao = value; }}   public string Jiegou     {  get { return this.jiegou; }  set { this.jiegou = value; }}   public string Jiegoutext     {  get { return this.jiegoutxt; }  set { this.jiegoutxt = value; }}   public string Jishu     {  get { return this.jishu; }  set { this.jishu = value; }}   public string Cname     {  get { return this.cname; }  set { this.cname = value; }} 5.2数据层 业务层用于访问数据层,从数据层取数据、修改数据以及删除数据,并将结果返回给表现层。下面以商品数据表为例,进行代码分析。 5.2.1数据访问层     数据访问层用于链接数据库和各种方法的写。在Visual Studio10.0中可以看到数据访问层和业务逻辑层的展示,如图5.2。 业务逻辑层(BLL)             图5.2数据访问层和业务逻辑层的展示 ProductDAL.cs页面代码 //导入命名空间 using System.Data; System.Data.SqlClient; using TanganModels; namespace TanganDAL {  public static partial class ProductDAL { //商品添加 public static ProductModels Addproduct(ProductModels pro)   {    string sql ="INSERT product(proname,projieshao,proimg, prodate,leixing,gid,yongliao,jiegou,jiegoutext,jishu)" +"VALUES(@proname,@projieshao,@proimg,@prodate,@leixing,@gid,@yongliao,@jiegou,@jiegoutext,@jishu)";           sql += " SELECT @@IDENTITY";[7]   try       {  SqlParameter[] para=new SqlParameter[]           {  new SqlParameter("@proname",pro.ProName),               new SqlParameter("@projieshao",pro.Projieshao),               new SqlParameter("@proimg",pro.Proimg),               new SqlParameter("@prodate",pro.Prodate),               new SqlParameter("@leixing",pro.Leixing),               new SqlParameter("@gid",pro.Gid),               new SqlParameter("@yongliao",pro.Yongliao),               new SqlParameter("@jiegou",pro.Jiegou),               new SqlParameter("@jiegoutext",pro.Jiegoutext),               new SqlParameter("@jishu",pro.Jishu),      };               int proId = DBHelper.GetScalar(sql, para);               return GetProById(proId); }           catch (Exception e)           {  Console.WriteLine(e.Message);               throw e; } } //按id号删除记录       public void Delproduct(int id)       {  string sql = "DELETE product WHERE id=@id";           try           {  SqlParameter[] para = new SqlParameter[]                 {    new SqlParameter("@id", id)};               DBHelper.ExecuteCommand(sql, para);           }           catch (Exception e)           {  Console.WriteLine(e.Message);               throw e;           }} //按类型删除记录       public static void DelProCId(int leixing)       {  string sql = "DELETE Product WHERE leixing=@leixing";           try           {      SqlParameter[] para = new SqlParameter[]                 { new SqlParameter("@leixing", leixing) };               DBHelper.ExecuteCommand(sql, para);           }           catch (Exception e)           {  Console.WriteLine(e.Message);               throw e;           } } //更从商品记录       public static void UpdatePro(ProductModels pro)       {      string sql = "UPDATE product SET" +                         " proname=@proname," +                         " projieshao=@projieshao," +                         " proimg=@proimg," +                         " prodate=@prodate," +                         " leixing=@leixing," +                         " gid=@gid," +                         " yongliao=@yongliao," +                         " jiegou=@jiegou," +                         " jiegoutext=@jiegoutext," +                         " jishu=@jishu " +                         " WHERE id=@id";           try           {  SqlParameter[] para=new SqlParameter[][6]               {    new SqlParameter("@proname",pro.ProName),                     new SqlParameter("@projieshao",pro.Projieshao),                     new SqlParameter("@proimg",pro.Proimg),                     new SqlParameter("@prodate",pro.Prodate),                     new SqlParameter("@leixing",pro.Leixing),                     new SqlParameter("@gid",pro.Gid),                     new SqlParameter("@yongliao",pro.Yongliao),                     new SqlParameter("@jiegou",pro.Jiegou),                     new SqlParameter("@jiegoutext",pro.Jiegoutext),                     new SqlParameter("@jishu",pro.Jishu),                     new SqlParameter("@id",pro.Id),                 };               DBHelper.ExecuteCommand(sql, para);           }           catch (Exception e)           {  Console.WriteLine(e.Message);               throw e;           }  } //根据id号查询商品记录       public static ProductModels GetProById(int id)       { string sql = "SELECT * FROM product WHERE id=@id";           try          { SqlDataReader reader = DBHelper.GetReader(sql, new SqlParameter("@id", id));               if(reader.Read())               {  ProductModels pro=new ProductModels();                   pro.Id = (int) reader["id"];                   pro.ProName = (string) reader["proname"];                   pro.Jiegou = (string) reader["jiegou"];                   pro.Leixing = (int) reader["leixing"];                   pro.Prodate = (DateTime) reader["prodate"];                   pro.Proimg = (string) reader["proimg"];                   pro.Projieshao = (string) reader["projieshao"];                   pro.Yongliao = (string) reader["yongliao"];                   reader.Close();                   return pro; }                            else               { reader.Close();                   return null; }}           catch (Exception e)           {  Console.WriteLine(e.Message);               throw e; }  }         //查询同一类型的商品并存入DataTable[6]中       public static IList GetAllPro(int leixing)       {  string sql = "SELECT * FROM product,proclass WHERE leixing=cid AND leixing='"+leixing+"' ORDER BY prodate desc";           return GetProBySql(sql);       }       public static IList GetProBySql(string safeSql)       {  List list = new List();           try           {  DataTable table = DBHelper.GetDataSet(safeSql);               foreach (DataRow row in table.Rows)               {  ProductModels pro = new ProductModels();                   pro.Id = (int) row["id"];                   pro.ProName = (string) row["proname"];                   pro.Projieshao = (string) row["projieshao"];                   pro.Proimg = (string) row["proimg"];                   pro.Prodate = (DateTime) row["prodate"];                   pro.Leixing = (int) row["leixing"];                   pro.Gid = (int) row["gid"];                   pro.Yongliao = (string) row["yongliao"];                   pro.Jiegou = (string) row["jiegou"];                   pro.Jiegoutext = (string) row["jiegoutext"];                   pro.Jishu = (string) row["jishu"];                   pro.Cname = (string) row["cname"];                   list.Add(pro); }               return list; }           catch (Exception e)           {  Console.WriteLine(e.Message);               throw e;           }  } }} 5.2.2业务逻辑层 ProductBLL.cs页面 using System.Collections.Generic; using TanganModels; using TanganDAL; namespace TanganBLL {  public static partial class ProductBLL     {  public static ProductModels AddPro(ProductModels pro)         {    return ProductDAL.Addproduct(pro);    }         public static void DelPro(int id)         {    ProductDAL.Delproduct(id);  }         public static void DelProByLeixing(int leixing)         {    ProductDAL.DelProCId(leixing);    }         public static void UpdatePro(ProductModels pro)         {    ProductDAL.UpdatePro(pro);      }         public static IList GetAllPro(int leixing)         {    return ProductDAL.GetAllPro(leixing);    }         public static IList GetProBySql(string safeSql)         {    return ProductDAL.GetProBySql(safeSql);    }         public static ProductModels GetProById(int id)         {  return ProductDAL.GetProById(id);    }     }} 5.3表示层 表现层用于用户接口的展示,以及用业务层的类和对象来“驱动”这些接口[6]。在ASP.NET中,该层包括aspx页面、用户控制、服务器控制以及某些与安全相关的类和对象。在Visual Studio10.0中可以看到表示层的展示,如图5.3。下面以多个页面为例,进行代码分析。 表示层             图5.3表示层的展示 5.3.1首页展示     首页是访问者首先看到的页面,它的制作直接影响企业的形象。首页使用两个Repeater[8]分别对 “公司新闻”“工程实例”两个模块进行数据绑定,使图片和信息都从后台代码读出。展示效果如图5.5所示。                     图5.3 首页的展示 1. index.aspx前台相关代码            

企业概况

       
           

     

         
 
     
           

公司新闻

       
       
         

 

 

 

           
   
   
   
           

工程实例

   
       
     

最新消息

 

     
2. 后台代码: using System.Web.UI; using System.Web.UI.WebControls; using TanganModels; using TanganBLL; namespace bjtangan {    public partial class index : System.Web.UI.Page     {  protected void Page_Load(object sender, EventArgs e)         {  if (!Page.IsPostBack)             {  bindRep();}}         public void bindRep()         {  //公司概况           ComInfoModels co = ComInfoBLL.GetComByTitle("公司简介");             this.txtComtitle.Text = co.Title;             this.imgGaikuang.ImageUrl = "images/pic01.jpg";         this.txtComneirong.Text = Function.cutStr(co.Content, 120, "...");             //公司新闻             NewsModels xw = NewsBLL.GetLastNews();             this.txtNewstitle.Text = xw.Title;             this.imgNews.ImageUrl = xw.Imgpath;         this.txtNewneirong.Text = Function.cutStr(xw.Content, 30, "...");             this.repnews.DataSource=NewsBLL.GetNewsTops(5);             this.repnews.DataBind();             //案例           AnliModels anli = AnliBLL.GetLastAnli();             this.imgShili.ImageUrl = anli.Imgpath;             this.txtAnli.Text = Function.cutStr(anli.Alcontent, 30, "...");             this.repAnli.DataSource = AnliBLL.GetAnliTopps(5);             this.repAnli.DataBind(); }}} 5.3新闻管理页面的展示     新闻管理页面的展示效果如下图5.4所示。                 图5.3新闻管理页面的展示 1、product.aspx前台相关代码:                                                                          
ID号     新闻标题     新闻内容简介 管理时间编辑删除
    <%# Eval("title")%>      <%# Function.cutStr(Eval("content").ToString(), 25, "...")%><%# Eval("newsdate")%>" target="main">编辑
  2、后台代码: using System.Web.UI.WebControls; using TanganModels; using TanganBLL; namespace bjtangan {    public partial class product : System.Web.UI.Page     {  public string curPageStr = string.Empty;         public string keyWords = string.Empty;         public string txtLink = string.Empty;         public int cid;         protected void Page_Load(object sender, EventArgs e)         {if(!Page.IsPostBack)             {  txtLink = "?id=" + cid + "&keywords="+Request.QueryString["keywords"]+"&";                 BindRepClass();                 RepPds();               if(cid!=0)                 {           ProClassModels cla = ProclassBLL.GetClassByCid(cid);                   this.txtProname.Text = cla.Cname;                   this.txtProname2.Text = cla.Cname;                 }                 else               {  this.txtProname.Text = "全部商品";                     this.txtProname2.Text = "全部商品"; }}} public void BindRepClass()         {  //绑定左侧商品类型             this.repProclass.DataSource = ProclassBLL.GetAllProclass();             this.repProclass.DataBind();         }         private void BindPageInfo()         {     PagedDataSource pds = (PagedDataSource)this.repPro.DataSource;             this.lblPageSize.Text = pds.PageSize.ToString();             this.lblPageInfo.Text = (pds.CurrentPageIndex + 1).ToString() + "/" + pds.PageCount.ToString();             this.txtGo.Text = (pds.CurrentPageIndex + 1).ToString();         } 5.4三层架构的优势展示 三层架构的数据层可以将公用的一些方法写入一个类页面,然后通过导入命名空间就可以调用。如下图的DBHelper.cs和Function.cs页面。 DBHelper.cs页面[9]: using System.Text; using System.Data; using System.Data.SqlClient; using System.Configuration; using System.Web; namespace TanganDAL {  public static class DBHelper   {  private static SqlConnection connection;     public static SqlConnection Connection       {  get { String connectionString = System.Configuration.ConfigurationManager.          ConnectionStrings["sqlconn"].ToString();   connection = new SqlConnection(connectionString);                 if (connection == null)                 {                     connection.Open();                 }       else if (connection.State == System.Data.ConnectionState.Closed)                 {                     connection.Open();                 }     else if (connection.State == System.Data.ConnectionState.Broken)                 {                     connection.Close();                     connection.Open();                 }                 return connection;             }         }   public static int ExecuteCommand(string safeSql)         {             SqlCommand cmd = new SqlCommand(safeSql, Connection);             int result = cmd.ExecuteNonQuery();             connection.Close();             return result;        } public static int ExecuteCommand(string sql, params SqlParameter[] values)         {  SqlCommand cmd = new SqlCommand(sql, Connection);             cmd.Parameters.AddRange(values);             int result = cmd.ExecuteNonQuery();             connection.Close();             return result;}   public static string ReturnStringScalar(string safeSql)         {  SqlCommand cmd = new SqlCommand(safeSql, Connection);             try             {  string result = cmd.ExecuteScalar().ToString();                 return result; }             catch (Exception)             { return "0";}             finally             { connection.Close();}}         public static int GetScalar(string safeSql)         { SqlCommand cmd = new SqlCommand(safeSql, Connection);     try          { int result = Convert.ToInt32(cmd.ExecuteScalar());                 return result; }     catch (Exception)       { return 0; }             finally             { connection.Close();}}     public static int GetScalar(string sql, params SqlParameter[] values)         {             SqlCommand cmd = new SqlCommand(sql, Connection);             cmd.Parameters.AddRange(values);             int result = Convert.ToInt32(cmd.ExecuteScalar());             Connection.Close();             return result;         }         public static SqlDataReader GetReader(string safeSql)         {             SqlCommand cmd = new SqlCommand(safeSql, Connection); SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);             return reader; } public static SqlDataReader GetReader(string sql, params SqlParameter[] values)         {  SqlCommand cmd = new SqlCommand(sql, Connection);             if (values != null)             { cmd.Parameters.AddRange(values); } SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);             return reader;         }         public static DataTable GetDataSet(string safeSql)         {             DataSet ds = new DataSet();             SqlCommand cmd = new SqlCommand(safeSql, Connection);             SqlDataAdapter da = new SqlDataAdapter(cmd);             da.Fill(ds);             connection.Close();             connection.Dispose();             return ds.Tables[0];} Function.cs页面[10]: using System.Web.UI.HtmlControls; using System.Data.SqlClient; using System.Net; using System.IO; using System.Text.RegularExpressions; namespace TanganBLL {    public class Function     {    /*调出JAV*/         //弹出对话框JS函数[10]       public static void msgBox(string str, string stype, string url)         {  System.Web.HttpContext.Current.Response.Write ("");}         //上传文件方法          public static string uploadFile(HtmlInputFile file, string uploadDir, string addStr)         {  //获取文件路径             string fileName = file.PostedFile.FileName;             //获取文件的后缀 string extendName = fileName.Substring(fileName.LastIndexOf(".") + 1).ToLower();             string newName = null;             string dirName = null;             //过滤文件的后缀[11]   if (extendName == "jpg" || extendName == "bmp" || extendName == "gif" || extendName == "rar" || extendName == "pdf" || extendName == "doc" || extendName == "swf" || extendName == "xls" || extendName == "")             {  DateTime now = DateTime.Now;                 dirName = now.Year.ToString() + "-" + now.Month.ToString() + "-" + now.Day.ToString();                 if (!Directory.Exists(uploadDir + "/" + dirName))                 {               Directory.CreateDirectory(uploadDir + "/" + dirName);                 }                 newName = now.Year.ToString() + now.Month.ToString() + now.Day.ToString() + now.Hour.ToString() + now.Minute.ToString() + now.Second.ToString() + "_" + addStr;                 file.PostedFile.SaveAs(uploadDir + "/" + dirName + "/" + newName + "." + extendName);             }             else             {                 Function.msgBox("不允许上传的文件!", "", "");                 return "";             }             return "upfiles/" + dirName + "/" + newName + "." + extendName;         }         //截取字符串         public static string cutStr(string str, int len, string moreStr)         {    int count1 = len;             string returnStr = "";             for (int i = 0; i < str.Length; i++)             {  string str1 = str.Substring(i, 1);                 int asciiValue = char.Parse(str1);                 if (asciiValue > 0 && asciiValue < 255)                 { count1 = count1 - 1; }                 else                 { count1 = count1 - 2; }                 if (count1 <= 0)                 { returnStr = str.Substring(0, i + 1) + moreStr;                     return returnStr; }             }//end for             if (count1 >= 0)             {  returnStr = str; }             return returnStr; }         //将数据写入文件     public static void writeFile(string filePath, string strContent)         { Encoding code = Encoding.GetEncoding("utf-8");//数据编码       StreamWriter streamW = new StreamWriter(filePath, false, code);             streamW.Write(strContent);             streamW.Flush();             streamW.Close();}         //防止数据库注入,过滤特殊字符和命令[11]         public static string safeStr(string str)         {  string rtnStr = str;             rtnStr = rtnStr.Replace("'", "");             rtnStr = rtnStr.Replace("script", "");             rtnStr = rtnStr.Replace(";", "");             rtnStr = rtnStr.Replace("--", "");             rtnStr = rtnStr.Replace("or", "");             rtnStr = rtnStr.Replace("exec", "");             rtnStr = rtnStr.Replace("delete", "");             rtnStr = rtnStr.Replace("master", "");             rtnStr = rtnStr.Replace("truncate", "");             rtnStr = rtnStr.Replace("declare", "");             rtnStr = rtnStr.Replace("create", "");             rtnStr = rtnStr.Replace("xp_", "");             return rtnStr;         }         //过滤HTML代码的函数         public static string noHtml(string html)         {             System.Text.RegularExpressions.Regex regex1 = new System.Text.RegularExpressions.Regex(@"", System.Text.RegularExpressions.RegexOptions.IgnoreCase);             System.Text.RegularExpressions.Regex regex2 = new System.Text.RegularExpressions.Regex(@" href *= *[\s\S]*script *:", System.Text.RegularExpressions.RegexOptions.IgnoreCase);             System.Text.RegularExpressions.Regex regex3 = new System.Text.RegularExpressions.Regex(@" no[\s\S]*=", System.Text.RegularExpressions.RegexOptions.IgnoreCase);             System.Text.RegularExpressions.Regex regex4 = new System.Text.RegularExpressions.Regex(@"", System.Text.RegularExpressions.RegexOptions.IgnoreCase);             System.Text.RegularExpressions.Regex regex5 = new System.Text.RegularExpressions.Regex(@"", System.Text.RegularExpressions.RegexOptions.IgnoreCase);             System.Text.RegularExpressions.Regex regex6 = new System.Text.RegularExpressions.Regex(@"\]+\>", System.Text.RegularExpressions.RegexOptions.IgnoreCase);             System.Text.RegularExpressions.Regex regex7 = new System.Text.RegularExpressions.Regex(@"

", System.Text.RegularExpressions.RegexOptions.IgnoreCase);             System.Text.RegularExpressions.Regex regex8 = new System.Text.RegularExpressions.Regex(@"

", System.Text.RegularExpressions.RegexOptions.IgnoreCase);             System.Text.RegularExpressions.Regex regex9 = new System.Text.RegularExpressions.Regex(@"<[^>]*>", System.Text.RegularExpressions.RegexOptions.IgnoreCase);             html = regex1.Replace(html, ""); //过滤标记             html = regex2.Replace(html, ""); //过滤href=javascript: () 属性             html = regex3.Replace(html, " _disibledevent="); //过滤其它控件的on...事件             html = regex4.Replace(html, ""); //过滤iframe             html = regex5.Replace(html, ""); //过滤frameset             html = regex6.Replace(html, ""); //过滤frameset             html = regex7.Replace(html, ""); //过滤frameset             html = regex8.Replace(html, ""); //过滤frameset             html = regex9.Replace(html, "");             html = html.Replace(" ", "");             html = html.Replace("", "");             html = html.Replace("", "");             return html;         }         //验证一个字符串是不是数值         public static bool IsNumber(String strNumber)         {             Regex objNotNumberPattern = new Regex("[^0-9.-]");             Regex objTwoDotPattern = new Regex("[0-9]*[.][0-9]*[.][0-9]*");             Regex objTwoMinusPattern = new Regex("[0-9]*[-][0-9]*[-][0-9]*");             String strValidRealPattern = "^([-]|[.]|[-.]|[0-9])[0-9]*[.]*[0-9]+$";             String strValidIntegerPattern = "^([-]|[0-9])[0-9]*$";             Regex objNumberPattern = new Regex("(" + strValidRealPattern + ")|(" + strValidIntegerPattern + ")");             return !objNotNumberPattern.IsMatch(strNumber) &&             !objTwoDotPattern.IsMatch(strNumber) &&             !objTwoMinusPattern.IsMatch(strNumber) &&             objNumberPattern.IsMatch(strNumber);         }       public static string Md5(string md5str, int type)         {             if (type == 16)             { return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(md5str, "MD5").Substring(8, 16).ToLower();             }             else if (type == 32)             {  return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(md5str, "MD5").ToLower();}             return "";}         //获得文件夹大小         public static string getDirSize(string dirPath)         {            dirPath = System.Web.HttpContext.Current.Server.MapPath(dirPath);             DirectoryInfo dir = new irectoryInfo(dirPath);             return convertSize(DirSize(dir));}         //获得文件夹大小的函数         private static long DirSize(DirectoryInfo d)         {  long Size = 0;             // 所有文件大小.             FileInfo[] fis = d.GetFiles();             foreach (FileInfo fi in fis)             { Size += fi.Length ;}             // 遍历出当前目录的所有文件夹.             DirectoryInfo[] dis = d.GetDirectories();             foreach (DirectoryInfo di in dis)             { Size += DirSize(di); //这就用到递归[8]了,调用父方法,注意,这里并不是直接返回值,而是调用父返回来的} return Size; }       private static string convertSize(long size) //将文件尺寸转化         {  string sUnit = "Bytes,Kb,Mb,Gb,Tb";             string[] arUnit = sUnit.Split(',');             int i = 0;             decimal nSize = decimal.Parse(size.ToString());             while (nSize > 1024)             {  nSize = nSize / 1024; i = i + 1; }               return nSize.ToString("0.00") + arUnit[i]; }}} 第六章 各模块功能实现及代码分析 6.1分页功能的实现 分页功能的实现是使用了PagedDataSource封装数据绑定控件[11]执行页面的分页绑定。下面以商品页面为例,分析分页功能的实现的代码。展示效果如图6.1和点击“下一页”后的效果图6.2所示。                     图6.1 商品分页的展示                 图6.2 商品分页的展示 1.前台页面相关代码:

2. 后台页面相关代码:       //商品绑定及分页实现         private PagedDataSource RepPds()         {            string sqlStr = ""; if (Request.QueryString["id"] != null && Request.QueryString["id"] != "0")             {  cid = int.Parse(Request.QueryString["id"]);                 if (Request.QueryString["keyWords"] != null)                 {  keyWords = Request.QueryString["keyWords"];           sqlStr = "select * from Product,proclass where leixing=cid AND leixing=" + cid + " and";       if (keyWords != "")       { sqlStr = sqlStr + " proname like '%" + keyWords + "%' and";}     sqlStr = sqlStr.Substring(0, sqlStr.Length - 3);//去掉最后“and” }         else       {  sqlStr = "select * from Product,proclass where leixing=cid AND leixing=" + cid; }   }                else   {  sqlStr = "select * from Product,proclass WHERE leixing=cid ";      if (Request.QueryString["id"]!=null) {  keyWords = Request.QueryString["keywords"]; if(keyWords!=null) { sqlStr = sqlStr + " AND proname like '%" + keyWords + "%'";}   }}                  sqlStr += " order by prodate desc";     PagedDataSource pds = new PagedDataSource();     pds.AllowPaging = true;     pds.PageSize = 8;     pds.DataSource = ProductBLL.GetProBySql(sqlStr);     string txtPa = Request.QueryString["page"];     if (txtPa != null)     {  if ((Convert.ToInt32(txtPa) - 1) > (pds.PageCount - 1))         { pds.CurrentPageIndex = pds.PageCount - 1; }       else if ((Convert.ToInt32(txtPa) - 1) < 0)                 { pds.CurrentPageIndex = 0; }         else                    {  pds.CurrentPageIndex = Convert.ToInt32(txtPa) - 1; }       }     else     {  pds.CurrentPageIndex = 0; }         this.repPro.DataSource = pds;             this.repPro.DataBind();             return pds;   }   private void BindPageInfo()        {  PagedDataSource pds = (PagedDataSource)this.repPro.DataSource;       this.lblPageSize.Text = pds.PageSize.ToString();       this.lblPageInfo.Text = (pds.CurrentPageIndex + 1).ToString() + "/" + pds.PageCount.ToString();       this.txtGo.Text = (pds.CurrentPageIndex + 1).ToString();        }         private void linkBind()         {  string curPage = string.Empty;             curPage = Request.QueryString["Page"];             if (curPage != null)             {  curPageStr = curPage;}             else             {    curPageStr = "1"; }       PagedDataSource pds = (PagedDataSource)this.repPro.DataSource;             if (!pds.IsFirstPage)             {    this.hlFirst.NavigateUrl = txtLink + "Page=1";                 this.hlPre.NavigateUrl = txtLink + "Page=" + Convert.ToString((int.Parse(curPageStr) - 1)); }             if (!pds.IsLastPage)             { this.hlLast.NavigateUrl = txtLink + "Page=" + pds.PageCount;                 this.hlNext.NavigateUrl = txtLink + "Page=" + Convert.ToString(int.Parse(curPageStr) + 1);          }      } 6.2页面传参实现框架功能 从左边列表框中点击选项,通过判断传递的参数进行页面的选择和左边显示框中显示的图片及文字。 1. 点击“公司简介”的展示效果如图6.3所示。                       图6.3公司简介页面的展示 2.点击“企业文化”的页面展示效果如图6.4所示。                       图6.4 企业文化页面的展示 2. 点击“企业资质”页面展示效果如图6.5所示     图6.5 企业资质页面的展示 相关前台页面:
       
                         
当前位置:企业概况>
         
                                 
对应后台代码: public void binRep()   {  this.lbltitle.Text = "公司简介";          this.lbltitle1.Text = "公司简介";     if(Request.QueryString["id"]!=null)         { id = int.Parse(Request.QueryString["id"].ToString());           if (id == 1)             { this.lbltitle.Text = "公司简介";               this.lbltitle1.Text = "公司简介"; }           if(id==2)             { this.lbltitle1.Text = "企业文化";                 this.lbltitle.Text = "企业文化";}            if(id==4)             {  this.lbltitle.Text = "员工活动";                 this.lbltitle1.Text = "员工活动" }}         else  { id = 1; }             ComInfoModels co = ComInfoBLL.GetComById(id);             this.lbljieshao.Text = co.Content;         this.imgCom.ImageUrl = co.Imgpath; }     6.3搜索功能实现 实现了商品的搜索[9],通过选择商品类型和输入关键字,可以找到相关的商品,便于用户的查找。在页面“售后服务”的产品搜索中先选择产品类型如“坐式减振器”并在文本框中输入关键字如“DZ”。如图6.5。 图6.6 企业资质页面的展示 在点击“搜索”后,页面将会自动跳转到“公司产品”页面并找到相应的产品“DZ坐式减振器”。显示效果图6.6。 图6.7企业资质页面的展示 后台代码的实现 protected void Page_Load(object sender, EventArgs e)     { if(!Page.IsPostBack)          {  IList list = ProclassBLL.GetAllProclass();            foreach (ProClassModels cla in list)               { ListItem li = new ListItem();                   li.Text = cla.Cname;                   li.Value = cla.Cid.ToString();                 ddlSearch.Items.Add(li);}             }}         protected void btnSearch_Click(object sender, EventArgs e)         {  string keywords = this.txtSearch.Text;             int cid;             //Response.Write(ddlSearch.SelectedItem.Value);             if (ddlSearch.SelectedItem.Value != "全部")           {  cid = int.Parse(ddlSearch.SelectedItem.Value); }             else             {    cid = 0; } Response.Redirect("product.aspx?id=" + cid + "&keywords=" + keywords);         } } } 结论 本文具体论述了制作完成的减振器电子商务网站所实现的主要功能及体系结构,重点讨论了网站的设计背景、N层架构、网站的可行性分析、 ASP.NET制作网站的优势、动态网站的前后台模块简介、 三层架构在网站里的实现过程和代码分析以及各个功能模块的实现。 经过网站最后阶段的测试,有些功能和模块做的不是很全面。比如:后台代码重用性比较差,代码重复部分比较多,写的比较繁琐;网站的售后服务可以改进为在线服务,更加有利于与客户的交流;还有网站的后台管理员页面中,应该将文本编辑使用的文本框更改为为文本编辑器,然后进行图文并茂的设计,使添加更加丰富充实。而且由于本人水平有限,对有些原代码还存在认识上的偏差,所以本网站还有很多不足之处,有待进一步解决和完善。 致谢 本网站是在老师的精心指导下完成的,从选题到网站内容设计都给予了我悉心的指导和严格的教诲,无论从学术水平还是学术造诣上都使我受益非浅。不仅使我学到了许多社会经验,更重要的是让我开拓了眼界,使我意识到现代化科学技术的发展,以及它的优越性。 在做毕业设计阶段,我在学校老师的推荐下到美瑞恒信网络技术有限公司实习。在那里我学到了很多制作网站的技术和技巧,养成了良好的代码书写规范习惯。我非常感激母校能为我们安排专业对口的公司参加实习,让我们可以将学校学到的知识与市场所需衔接起来,使我们及时了解到自己的不足之处并进一步改善。 我的毕业设计及将成功结束,毕业论文也即将完成。在这段日子里,我学到了很多东西,重新巩固了原来的知识,甚至学到了那些没有在大学课堂里学到的知识,为今后的工作和再学习指明了方向。能有现在这样的成果,离不开老师、同事以及同学们的鼓励和帮助。 在此向毕业设计期间帮助过我的老师、同事、同学们致以诚挚的谢意,感谢你们在毕业设计期间所给予的指导和帮助,使我获益非浅! 参考文献 [1] 倪庆军 《巧学巧用——Dreamweaver CS3 Flash CS3 Fireworks CS3 制作网页》2008年9月 第六版 人民邮电出版社 [2] 鲍嘉 卢坚 《Dreamweaver CS3 全新网站大制作》2008年5月 北京第一版 中国青年电子出版社 [3]黄忠成 《深入剖析ASP.N ET组件设计》 2004年 第一版 电子工业出版社 [4]郭兴峰 陈建伟 《ASP.NET 动态网站开发基础教程(c#篇)》 2006年5月 第一版 清华大学出版社 [5] 张跃廷 顾彦玲 《ASP.NET从入门到精通》2008年 第一版 清华大学出版社 [6] [美]Matthew MacDonald  Mario Szpuszta 《ASP.NET 3.5高级程序设计》 2008年 第一版人民邮电出版社 [7] 刘志成 《数据库系统原理与应用(SQL server 2000)》 2008年6月  第一版 机械工业出版社 [8] 尚俊杰 秦卫中 《ASP.NET程序设计案例教程》 2005年 第一版 清华大学出版社 [9] Russell Jones 《ASP.NET与VB.NET从入门到精通》 2002年 第三版 电子工业出版社,. [10] 李明刚 肖建 《ASP.NET Web站点高级编程范例》 2004年 第一版 清华大学出版社 [11] 梅菊花 《ASP.NET中自开发控件的应用》 计算机与现代化  2005年 9:37 39,42.
/
本文档为【网站毕业论文asp .net】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索