C#软件项目开发基础pdf下载pdf下载

C#软件项目开发基础百度网盘pdf下载

作者:
简介:本篇主要提供C#软件项目开发基础pdf下载
出版社:
出版时间:2017-01
pdf下载价格:0.00¥

免费下载


书籍下载


内容介绍

编辑推荐

本教材的编写本着与时俱进的原则,针对计算机科学及相关专业的教学特点和需求,在内容上力求反映教学改革的*新成果,指导学生进一步掌握C#软件项目开发的方法,学习软件分层、委托事件、Web服务以及设计模式等技术。

  本书特别强调了软件项目的思想、软件分层的思想、三层架构的思想、单元测试能力、设计模式的引入,只有掌握一定的软件项目经验、一定的大型程序的开发思路,才能站得高、看得远。对于阅读本书的读者而言,带着思考进行基础和本质的探索,同时也能体验技术学习的有效方法。作者在论述大部分的知识要点时,会总结和归纳其重要的规律和注意事项,这些归纳为实际的编程提供了良好的执行法则,读者应该花费必要的精力熟练掌握所有的归纳内容。

  .NET技术正是一个大花园的集合,每个程序开发者必须经历一次深入的磨炼,在基本认识的水平上前进一步,才能发现更多。就像练武之人,除了研习一招一式(了解常用的控件,了解典型的框架),还得修炼内功(认识运行机制,理解框架类库,品味设计架构)。

  这些正是本书呈现于读者的内容,也体现了不同于其他.NET专著的风格。


内容简介

  《C#软件项目开发基础》从.NET技术出发,结合软件项目开发的思想,从登录模块开始上手,培养学生兴趣,锤炼调试功底。本书直接介绍数据库的登录模块,引入ADO.NET;在代码不多的基础上,强化软件分层思想,引入三层架构,讲授了Web服务的使用,并结合单元测试、委托等技术,使读者可以边学习C#技术边进行软件项目模块的开发。通过学习本书,读者不仅可以了解常用的控件典型的框架,还能认识运行机制、理解框架类库、品味设计架构。

  本书体系新颖、内容丰富、结构合理、文句精练,不仅可以作为高等院校计算机专业大学生计算机C#编程技术课程的教材,也可以作为培训教材,为企业招聘人员进行入职培训提供指导。


内页插图

目录

第1章 C#与.NET Framework1

1.1 C#的历史1

1.1.1 从C到C++1

1.1.2 Java的出现2

1.1.3 C#的诞生3

1.1.4 C#的发展历程5

1.2 .NET Framework6

1.2.1 什么是 .NET Framework6

1.2.2 .NET Framework的工作原理7

1.2.3 公共语言运行时9

1.2.4 .NET Framework类库10

1.2.5 用C#创建.NET应用程序11

1.3 C#软件项目开发14

1.3.1 需求分析14

1.3.2 概要设计15

1.3.3 详细设计15

1.3.4 编码15

1.3.5 测试15

1.3.6 软件交付16

1.3.7 维护16

本章小结16

习题16

第2章 登录功能18

2.1 登录界面设计18

2.1.1 简化的用户登录界面18

2.1.2 新建项目19

2.1.3 界面设计20

2.2 登录模块23

2.2.1 模块和模块化23

2.2.2 登录IPO23

2.2.3 登录模块代码实现24

2.3 界面逻辑24

2.3.1 事件和事件驱动24

2.3.2 单击事件处理过程25

2.3.3 消息对话框显示25

2.3.4 界面跳转25

2.3.5 启动窗体设置26

2.4 详细代码和程序运行26

2.4.1 详细代码26

2.4.2 程序运行界面27

2.5 调试28

2.5.1 调试概述28

2.5.2 Visual Studio调试28

2.6 打字小游戏实例31

2.6.1 Timer控件31

2.6.2 键盘事件32

2.6.3 随机数32

2.6.4 实现打字小游戏33

2.7 四则运算器实例35

2.7.1 四则运算器要求35

2.7.2 操作步骤36

本章小结39

习题39

第3章 用数据库实现操作模块40

3.1 数据准备40

3.1.1 数据库、数据表及测试数据40

3.1.2 结构化查询语言SQL41

3.2 ADO.NET42

3.2.1 ADO.NET概述42

3.2.2 ADO.NET核心组成43

3.2.3 ADO.NET通俗理解44

3.2.4 ADO.NET命名空间44

3.3 登录模块45

3.3.1 程序步骤45

3.3.2 关键代码说明47

3.4 用户注册、删除和修改任务47

3.4.1 界面设计48

3.4.2 增删改模块48

3.5 用户表显示50

3.5.1 DataGridView控件50

3.5.2 DataSet和DataTable50

3.5.3 数据绑定过程51

3.6 运行界面和详细代码52

3.6.1 用户运行界面52

3.6.2 完整代码54

本章小结57

习题57

第4章 软件分层和三层架构58

4.1 软件分层58

4.1.1 分层原理58

4.1.2 分层开发的特点和优势59

4.1.3 分层开发的缺点60

4.1.4 常用的软件分层技术60

4.2 三层架构63

4.2.1 基本原理63

4.2.2 三层架构的演变64

4.2.3 三层架构的形象对比65

4.3 搭建三层结构66

4.3.1 程序集66

4.3.2 搭建数据访问层67

4.3.3 搭建业务逻辑层69

4.3.4 搭建表示层69

4.3.5 添加各层之间的依赖关系69

4.4 登录案例70

4.4.1 编写实体类User.cs71

4.4.2 编写数据访问类UserService71

4.4.3 编写业务逻辑类

UserManager72

4.4.4 编写表示层72

本章小结74

习题74

第5章 Web服务75

5.1 Web服务的概念和用途75

5.1.1 Web服务的基本概念75

5.1.2 Web服务的优点75

5.1.3 Web服务的应用77

5.1.4 Web服务的调用原理78

5.1.5 支付宝Web服务接口79

5.2 Web服务实现80

5.2.1 用Visual Studio.NET建立

Web服务80

5.2.2 自定义Web服务82

5.2.3 WinForm项目调用84

5.2.4 Web项目调用86

5.2.5 Web服务常用接口88

本章小结88

习题88

第6章 C#面向对象程序设计89

6.1 类和对象概念89

6.1.1 对象89

6.1.2 类90

6.1.3 属性和字段90

6.1.4 方法91

6.1.5 对象的生命周期91

6.1.6 静态成员92

6.2 定义类92

6.3 定义类成员93

6.3.1 定义字段94

6.3.2 定义方法94

6.3.3 定义属性95

6.3.4 定义构造函数和析构函数96

6.3.5 重载97

6.3.6 类定义示例99

6.3.7 聪明猪实例100

6.4 继承、接口和抽象类103

6.4.1 继承103

6.4.2 接口定义103

6.4.3 接口和抽象类104

6.4.4 接口和抽象类示例104

6.5 常用字符串类String108

6.5.1 字符串与System.String108

6.5.2 字符串对象的不可变性109

6.5.3 正则字符串和原义字符串110

6.5.4 字符串转义序列110

6.5.5 格式字符串111

6.5.6 子字符串112

6.5.7 null字符串和空字符串113

6.5.8 使用 StringBuilder 快速创建

字符串115

本章小结115

习题116

第7章 委托与事件117

7.1 委托117

7.1.1 委托的引入117

7.1.2 委托使用方法120

7.1.3 定义和使用委托实例120

7.1.4 组合委托121

7.2 事件122

7.2.1 事件的概念122

7.2.2 创建步骤123

7.3 实例125

7.3.1 委托租房125

7.3.2 清晨鸡叫128

本章小结130

习题130

第8章 图形编程和Bitmap处理基础131

8.1 GDI+绘图基础131

8.1.1 GDI+概述131

8.1.2 Graphics类132

8.1.3 常用画图对象133

8.1.4 绘图程序示例137

8.2 Bitmap类141

8.2.1 Bitmap类支持的图像类型141

8.2.2 Bitmap类的方法141

8.2.3 图片处理实例142

本章小结144

习题144

第9章 异常处理和单元测试145

9.1 异常处理概述145

9.1.1 为何要用异常处理145

9.1.2 .NET异常处理机制146

9.2 异常处理148

9.2.1 基本格式148

9.2.2 异常的顺序和嵌套151

9.2.3 throw语句和自定义

异常类152

9.3 单元测试153

9.3.1 单元测试概述153

9.3.2 测试用例154

9.4 单元测试实例155

9.4.1 项目准备155

9.4.2 单元测试向导建立测试

项目156

9.4.3 建立测试用例159

9.4.4 Assert断言162

本章小结163

习题163

第10章 设计模式164

10.1 设计模式概述164

10.1.1 为什么要用设计模式164

10.1.2 设计模式的概念164

10.1.3 设计模式的基本要素165

10.1.4 常见设计模式165

10.2 简单工厂模式167

10.2.1 简单工厂模式的概念167

10.2.2 实例168

10.3 单例模式171

10.3.1 单例模式的概念171

10.3.2 为什么要用单例模式171

10.3.3 剖析单例模式的实现

思路171

10.3.4 代码实现172

本章小结174

习题174

附录A C#代码规范175

A.1 编程风格175

A.1.1 统一编程风格的意义175

A.1.2 变量命名规则175

A.1.3 函数命名规则176

A.1.4 类命名规则177

A.1.5 常见语句书写规则177

A.1.6 注释风格178

A.2 代码组织179

A.3 代码优化179

A.3.1 代码优化的意义179

A.3.2 函数内的代码优化180

A.3.3 类内的代码优化181

A.3.4 类之间的代码优化181

A.4 调试技巧182

A.4.1 编译时的错误182

A.4.2 运行时的错误182

A.4.3 C#常见问题182

附录B C#基本语法183

B.1 变量和常量183

B.1.1 变量183

B.1.2 常量184

B.2 值类型和引用类型185

B.2.1 值类型186

B.2.2 引用类型188

B.3 装箱和拆箱190

B.4 类型转换190

B.5 流程控制191

B.5.1 条件语句191

B.5.2 循环195

B.5.3 跳转语句199

B.6 数组和集合200

B.6.1 数组200

B.6.2 集合201

参考文献212


精彩书摘

  第3章 用数据库实现操作模块
  学习目标:
  掌握用数据库实现用户登录的编程基本原理。
  掌握ADO.NET精髓。
  掌握C#访问数据库的基本原理。
  掌握登录模块的编写方法。
  掌握增删改模块的编写原理。
  第2章为了入门的方便,一步一步实现了登录模块。软件是由程序和数据组成的,但前面登录模块中的数据是固定的字符串常量,用户名和密码是固定的值,而一般数据都放在数据库中。本章主要介绍带数据库的登录程序和增删改模块的编写原理。在C#中,与数据库相关的类都被封装在ADO.NET框架中,ADO.NET是由.NET 数据提供者和DataSet组成的。其中,.NET 数据提供者又由4类组成,分别是Connection、Command、DataReader和DataAdapter,数据库采用SQL Server 2008。没有数据,就不存在软件,一般应用软件都需要数据库,通过这一章,就可以轻松入门C#对于数据库的操作。
  3.1 数 据 准 备
  要想实现有数据库的登录,必须确定数据需求,即确定数据库、数据表和表中的字段。只有这样,C#才能够调用系统模块去交互数据库,获得程序需要的信息或对数据库中的数据进行修改。
  3.1.1 数据库、数据表及测试数据
  本书需要读者具有一定的数据库基础。本程序主要从简单用户登录模块入手,故程序数据主要是用户数据,并简化为两种数据,一个是用户名,一个是密码。故可以在SQL Server 中建立一个Person数据库,数据库中有Users表,表中有UserName和UserPassword字段,在表中可以插入两条测试数据,具体数据如图3.1所示。
  这里特别注意的是,数据库的名字为person,数据表名为Users(注意别忘了s),表中的字段名为UserName和UserPassword,一定保持一致,这样便于以后的交流和调试。
  图3.1 Users数据表
  3.1.2 结构化查询语言SQL
  用户通过SQL(Structured Query Language,结构化查询语言)来访问数据库中的数据。使用SQL语句,可以查询、增加记录、删除、修改数据库中的数据。几乎所有的数据库都支持SQL语言,所以编写数据库应用程序必须学习SQL语言。
  1. 查询
  Select语句是最常用的语句,可以从数据库的表中获得满足一些条件的数据集。常见的Select语句如下:
  select * from users
  表示从表users中选择所有字段的所有记录。
  select count(*) from users
  表示从表users中获取记录数。
  select count(*)from Users where UserName='admin' and UserPassword='123'
  表示从表users中查找用户名为admin并且用户密码为123的用户记录,如果表中存在,返回1,否则返回2。这个逻辑就是登录模块的核心:C#程序需要通过系统模块输入SQL语句到数据库查询并获得信息,程序数据可以根据此信息进行判断。
  2. 增加、删除和修改
  增加、删除和修改功能对应3个命令,分别是Insert、Delete和Update。
  insert into users(UserName,UserPassword) values('admin','123')
  用于向数据库表中插入一个新记录。例如,向表users中插入一个新记录的语句。
  delete From users where UserName='admin'
  用于删除数据库表中的一个记录。例如,删除users表中用户名为admin的记录。
  update users UserPassword='111111' where UserName='admin'
  用于更新数据库的users表中用户名为admin的用户密码为111111。
  这里特别注意增删改三条语句执行结果是数据库中相应表中影响的行数。通过这个信息,C#程序才能跟数据库交互,进行数据的修改。
  截至目前,已经建立好数据库基础,并具备了用SQL访问数据库的能力。接下来就开始介绍ADO.NET系统模块。
  3.2 ADO.NET
  数据库访问是程序中应用最普遍的部分。建立一个数据库连接是一件非常耗时、耗力的事情。之所以会这样,是因为连接到数据库服务器需要经历几个漫长的过程:建立物理通道(如套接字或命名管道),与服务器进行初次握手,分析连接字符串信息,由服务器对连接进行身份验证,运行检查以便在当前事务中登记,等等。我们先不管为什么会有这样的机制,存在总是有它的道理。随着C#和ADO.NET的引入,这种操作会变得比较简单。
  3.2.1 ADO.NET概述
  ADO.NET是一种数据访问技术,使得应用程序可以连接到数据存储,并以各种方式操作存储在其中的数据。该技术基于.NET Framework,与.NET Framework类库的其余部分高度集成。ADO.NET API的设计,使得可以在所有面向.NET Framework的语言中使用该API,如Visual Basic、C#、J#和Visual C++。如图3.2所示,C#基本模块通过SQL调用ADO.NET,访问数据库,获取或修改数据库中的数据。
  图3.2 C#操作数据库原理
  ADO.NET的"提供者"是一些组件,这些组件知道如何与特定的数据存储设施交互(如有一个提供者与SQL Server交互,另一个提供者与Oracle数据库交互)。所有的提供者都向外提供一个统一的API接口,ADO.NET软件栈中的其他层在此API之上建立。
  ADO.NET还包括基于提供者而建立的一些服务,设计这些服务的目的,是为了方便编写应用程序。其中,一个服务是内存中的缓存(in-memory cache),缓存保存了数据的关系形式,并执行修改跟踪和约束验证等功能;该服务通过ADO.NET DataSet接口提供,包括一些与提供者层进行交互的组件。
  3.2.2 ADO.NET核心组成
  ADO.NET软件栈包含两个主要部分:.NET Data Provider提供者和DataSet服务。其中.NET Data Provider主要由四大对象组成,分别是Connection、Command、DataReader以及DataAdapter。ADO.NET对象模型中有5个主要组件,我们统一称为五大对象,即Connection、Command、DataAdapter、DataReader和DataSet。
  1. Connection(连接数据库)
  要和数据库交互,必须连接它。连接帮助指明数据库服务器、数据库名字、用户名、密码和连接数据库所需要的其他参数。Connection对象会被Command对象使用,这样就能够知道是在哪个数据源上面执行命令。
  与数据库交互的过程意味着必须指明想要执行的操作,这是依靠Command对象执行的。开发人员使用Command对象来发送SQL语句给数据库,Command对象使用Connection对象来指出与哪个数据源进行连接。开发人员能够单独使用Command对象来直接执行命令,或者将一个Command对象的引用传递给DataAdapter。
  2. Command(执行SQL语句)
  成功与数据建立连接后,就可以用Command对象来执行查询、修改、插入、删除等命令;Command对象常用的方法有ExecuteReader()方法、ExecuteScalar()方法和ExecuteNonQuery()方法;插入数据可用ExecuteNonQuery()方法。
  3. DataAdapter(用户填充DataSet,断开模式)
  某些时候,开发人员使用的数据主要是只读的,并且很少需要将其改变至底层的数据源。有时要求在内存中缓存数据,以此来减少数据被数据库调用的次数。DataAdapter通过断开模型来帮助开发人员方便地完成对以上情况的处理。当在一单批次的对数据库的读写操作返回至数据库的时候,DataAdapter 填充DataSet对象。DataAadapter包含对连接对象以及当对数据库进行读取或者写入时自动打开或者关闭连接的引用。另外,DataAdapter包含对数据的select、insert、update和delete等操作的Command对象引用。开发人员为DataSet中的每一个Table都定义DataAadapter,用于为开发人员照顾所有与数据库的连接。所以开发人员要做的工作是告诉DataAdapter什么时候装载或者写入数据库
  4. DataReader(读取数据库,一种只读模式,只向前)
  许多数据操作要求开发人员只是读取一串数据。DataReader对象允许开发人员获得从Command对象的select语句得到的结果。从DataReader返回的数据都是快速的且只是"向前"的数据流,这意味着开发人员只能按照一定的顺序从数据流中取出数据。这对于速度来说是有好处的,但是如果开发人员需要操作数据,更好的办法是使用DataSet。
  5. DataSet(数据集,好比计算机的内存)
  DataSet对象是数据在内存中的表示形式,它包括多个DataTable对象;而DataTable包含列和行,像一个普通的数据库中的表。开发人员甚至能够定义表之间的关系来创建主从关系(parent-child relationships)。DataSet在特定的场景下使用,以帮助管理内存中的数据并支持对数据的断开操作。DataSet是被所有Data Providers使用的对象,因此它并不像Data Provider一样需要特别的前缀。
  3.2.3 ADO.NET通俗理解
  数据库好比水源,存储了大量的数据。Connection好比伸入水中的进水笼头,保持与水的接触,只有它与水进行了"连接",其他对象才可以抽到水。Command则像抽水机,为抽水提供动力和执行方法,通过"水龙头",然后把水返给上面的"水管"。DataAdapter、DataReader就像输水管,担任着传输水的任务,并起着桥梁的作用。DataAdapter 像一根输水管,通过发动机,把水从水源输送到水库进行保存。DataReader 也是一种水管,和DataAdapter不同的是,DataReader不是把水输送到水库,而是单向地直接把水送到需要水的用户那里或田地里,所以要比在水库中转一下更快更高效。
  用好了这五大对象(见图3.3),就可以跟数据库自由地打交道了。
  图3.3 ADO.NET五大对象
  3.2.4 ADO.NET命名空间
  使用ADO.NET中的对象时,必须首先声明命名空间,这样编译器才知道到哪里去加载这些对象。根据ADO.NET的数据提供程序和主要数据对象,ADO.NET的命名空间可分为基本对象类、数据提供程序对象类和辅助对象类等。其中System.Data命名空间包含大部分ADO.NET的基础对象,如DataSet、DataTable、DataRow等,故在编写ADO.NET程序时,必须先声明。
  不同数据库操作的命名空间如表3.1所示。
  表3.1 ADO.NET不同数据库操作命名空间
  .NET Framework 数据提供程序
  命名空间
  SQL Server
  System.Data.SqlClient
  OLE DB
  System.Data.OleDb
  ODBC
  System.Data.Odbc
  Oracle
  System.Data.OracleClient
  在SqlClient命名空间中,因为是跟SQL Server进行交互,ADO.NET 的五大对象就变成了SqlConnection、SqlCommand、SqlDataReader、SqlDataAdapter和DataSet。
  ……

前言/序言

  前 言

  目前大多数高校计算机专业都开设有计算机编程类课程,这类课程肩负着讲授计算机程序设计的任务,但侧重面多有不同。"C#软件项目开发基础"不同于一般的计算机编程类课程,它是计算机科学与技术及相关专业的一门重要专业特色课,主要讲授.NET框架下的程序设计,使学生对.NET技术有深入的了解,并能深刻认识C#软件项目开发。同时,该门课程也必须注重计算机应用能力的培养和计算机素质的全面提高,因此在理论教学的同时,应配套一定的实验环节。

  本教材的编写本着与时俱进的原则,针对计算机科学及相关专业的教学特点和需求,在内容上力求反映教学改革的最新成果,指导学生进一步掌握C#软件项目开发的方法,学习软件分层、委托事件、Web服务以及设计模式等技术。

  本书特别强调了软件项目的思想、软件分层的思想、三层架构的思想、单元测试能力、设计模式的引入,只有掌握一定的软件项目经验、一定的大型程序的开发思路,才能站得高、看得远。对于阅读本书的读者而言,带着思考进行基础和本质的探索,同时也能体验技术学习的有效方法。作者在论述大部分的知识要点时,会总结和归纳其重要的规律和注意事项,这些归纳为实际的编程提供了良好的执行法则,读者应该花费必要的精力熟练掌握所有的归纳内容。

  .NET技术正是一个大花园的集合,每个程序开发者必须经历一次深入的磨炼,在基本认识的水平上前进一步,才能发现更多。就像练武之人,除了研习一招一式(了解常用的控件,了解典型的框架),还得修炼内功(认识运行机制,理解框架类库,品味设计架构)。

  这些正是本书呈现于读者的内容,也体现了不同于其他.NET专著的风格。

  本书由苏前敏担任主编,杨孜茁、张辉担任副主编,具体分工如下:苏前敏编写了第2、3、4、5、7章,杨孜茁编写了第1章、第9章以及附录,张辉编写了第6、8、10章。本书是集体智慧的结晶,在此对清华大学出版社的编辑对本书的编辑和出版所做的努力表示感谢。本书还得到了上海工程技术大学教材建设项目的资助,一并感谢。

  由于作者水平有限,加之计算机科学与技术发展迅速、内容覆盖面广,书中错误和不妥之处在所难免,恳请读者批评指正。

  编 者