首页>参考读物>计算机科学与技术>软件与程序设计

零基础学ASP.NET 2.0
作者 : 王院峰
丛书名 : 零基础学编程
出版日期 : 2007-12-20
ISBN : 7-111-23003-8
定价 : 50.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 404
开本 : 16开
原书名 :
原出版社:
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

本书精华
  ◎ASP.NET程序的创建、配置和调用
  ◎ASP.NET开发环境Visual Studio 2005介绍
  ◎常量、变量、流程控制、面向对象
  ◎页面对象:Application、Session、Cookie、Request和Response
  ◎智能表单的创建:文本、表格、图像、上传等
  ◎客户端表单验证:普通验证、自定义验证、比较验证等
  ◎超链接、页面容器、广告、日历控件
  ◎用户控件、自定义控件的创建、使用
  ◎母版页、主题和皮肤的个性化设置
  ◎网站导航、结合XML的导航实现
  ◎SQL Server 2005中数据库、数据表的管理
  ◎ADO.NET 2.0的数据库关联操作:插入、删除、修改、查询
  ◎SQL数据源控件、XML数据源控件与数据库的绑定和管理
  ◎GridView、DetailsView等数据展示控件的应用技巧、常见问题
  ◎文件和文件夹的管理
  ◎数据缓存的方式和技巧
  ◎ASP.NET应用程序的身份验证:Windows、Forms等
  ◎Web Service的特色、创建和应用
  ◎完整的在线投票系统
  ◎完整的XML论坛

图书特色

图书前言

科技的突飞猛进带动着软件开发技术的发展。ASP.NET的出现,颠覆了传统的Web开发模式。新版本ASP.NET 2.0更是在早期版本的基础上,添加和增强了许多功能。目前,市面上讲述ASP.NET的书已经很多,但还有大量的读者,他们渴望学习自己喜欢的技术,却找不到适合自己的书籍。这些读者大多是一些初级读者,而市面上的书籍还停留在早期版本的内容上,很多内容对于新版本已不再适应。而且大多是一些专业术语很强的书籍,对读者的基础要求会比较高。就算勉强地阅读一段时间后,还是一头雾水。有时,读者费了九牛二虎之力,将书中的范例代码输入编译器进行测试时,却发现不能通过。原来是新版本平台早已不支持了。
  本书的应运而生刚好填补了这个空缺。为了使这些渴望学习新知识的入门级读者可以拥有属于自己的“引导老师”,笔者根据入门读者的特点,采用简洁易懂的语言,对ASP.NET 2.0的各个部分进行了详尽的讲解。并结合自己在实际项目开发过程中的经验,为每一个知识点精心设计了具有代表性的实例。
  笔者的写作平台为Windows Server 2003 Standard Edition SP2 + Visual Studio 2005 + SQL Server 2005,保证了知识的最新和版本兼容性。对于书中的实例代码,都进行了严格的测试。在基于笔者的写作平台下,本书中出现的实例代码均可以直接运行通过。
  本书的内容安排
  本书共分为五篇,循序渐进地讲述了ASP.NET 2.0从零基础到入门、从基本知识到具体实践等全方位的知识:
  第一篇(第1章~第4章)主要讲述ASP.NET 2.0的基础知识,包括开发环境,编程语言C#的一些基础知识,还有一些基本页面对象。这些都是学习ASP.NET 2.0最基本的知识。通过大量的图示、代码范例与简洁易懂的语言来讲解,使读者轻松跨进ASP.NET 2.0的大门。
  第二篇(第5章~第11章)讲述有关Web页面的开发设计,包括与服务器交互的表单,一些数据验证控件,页面布局和风格,导航等,通过大量实例来讲述。
  第三篇(第12章~第15章)讲述了ADO.NET 2.0 数据库管理,包括SQL Server 2005和ADO.NET 2.0的一些知识,通过大量的实例和图示来讲述数据访问、绑定、读取和显示等内容。
  第四篇(第16章~第19章)讲述ASP.NET 2.0的高级应用。通过对于文件操作、数据缓存、安全性和Web服务等知识的讲解,使读者真正感觉到ASP.NET 2.0的强大。
  第五篇(第20章~第21章)是综合实例篇。通过介绍一个在线投票系统和一个论坛系统的开发,使读者真正能将学到的知识应用到实际的项目开发过程,达到学以致用的目的。
  本书的学习流程如下图所示。
  本书的特点
  本书是一本讲述ASP.NET 2.0的入门书籍。所面向的读者基本都是没有学习过Web开发的,或者学过其他Web开发而又想学习ASP.NET 2.0的,也可以是学过ASP.NET 1.1现在又想了解一些ASP.NET 2.0中出现的一些新东西的读者。在写作过程中采用了大量的实例进行演示。读者通过对实例的理解,更提高了对整个ASP.NET 2.0的理解。整本书将引导读者从“零基础”到“入门”。本书将会给出大量与实际开发工作紧密相关的实例,让大家与现实开发工作密切结合。为了能让初学者便于理解,所以本书中的实例都会比实际开发中的要简单得多。其特点主要体现在以下几个方面:
  ·本书采用了大量的实例,来讲述ASP.NET 2.0入门的各个方面。
  ·本书采用了简洁易懂的语言来讲解,不会有高深且难以理解的专业术语。
  ·对于综合实例,采用了实例加分析的方法。
  ·大量的实例和效果,能很好地帮助读者分析和掌握所学知识。
  ·在很多知识点的讲解后都会有补充说明,帮助读者加深理解。
  ·每学习到一个新的知识点时,都会和前面的知识点联系起来讲解,不会有很大的跳跃。
  ·注重实际应用,不会让读者学习完了还不知道该怎么去应用。
  适合阅读本书的读者
  ·ASP.NET 2.0的初学者。
  ·对ASP.NET 2.0感兴趣的人员。
  ·使用数据绑定控件应用开发的人员。
  ·使用ASP.NET技术进行网站开发的人员。
  ·使用SQL Server 2005数据库进行网站开发的人员。
  ·软件专业的在校学生。
  ·想了解ASP.NET 2.0的其他开发人员。
  本书由王院峰组织,同时参与编写和资料整理的有张庆华、刘亮亮、丁士锋、何涛发、陈杰、黄曦、罗嘉、段春江、韩红宇、李嵩峰、邓佑权、吕洋波、莫光胜、王天国、李蓉、吴荣、宋祥亮、刘宇、吕晓鹏、王大伟、吴小平、刘辉、张卫忠、施佳鹏、王嘉、吴雪、阳婷、张秀妍、王江、王志永、杨红、郑维龙、王松、张文、斯琴巴图,在此一并表示谢意。由于笔者水平有限,加之时间仓促,疏漏之处在所难免,还望广大读者批评指正。

  编  者

封底文字

本书精华
  ◎ASP.NET程序的创建、配置和调用
  ◎ASP.NET开发环境Visual Studio 2005介绍
  ◎常量、变量、流程控制、面向对象
  ◎页面对象:Application、Session、Cookie、Request和Response
  ◎智能表单的创建:文本、表格、图像、上传等
  ◎客户端表单验证:普通验证、自定义验证、比较验证等
  ◎超链接、页面容器、广告、日历控件
  ◎用户控件、自定义控件的创建、使用
  ◎母版页、主题和皮肤的个性化设置
  ◎网站导航、结合XML的导航实现
  ◎SQL Server 2005中数据库、数据表的管理
  ◎ADO.NET 2.0的数据库关联操作:插入、删除、修改、查询
  ◎SQL数据源控件、XML数据源控件与数据库的绑定和管理
  ◎GridView、DetailsView等数据展示控件的应用技巧、常见问题
  ◎文件和文件夹的管理
  ◎数据缓存的方式和技巧
  ◎ASP.NET应用程序的身份验证:Windows、Forms等
  ◎Web Service的特色、创建和应用
  ◎完整的在线投票系统
  ◎完整的XML论坛

作者简介

王院峰:暂无简介

图书目录

目   录
写给未来的程序员
前言
第一篇  从零开始学习ASP.NET 2.0
第1章  认识ASP.NET 2.0 1
1.1  ASP.NET 2.0 是什么 1
1.2  第一个ASP.NET 2.0网站 2
1.2.1  创建网站 2
1.2.2  设计网站 3
1.2.3  通过预编译发布网站 5
1.3  ASP.NET 2.0必须具备的HTML知识 7
1.3.1  利用表单提交数据 8
1.3.2  使用表格进行布局 9
1.3.3  超级链接 10
1.3.4  CSS美化网页 10
1.4  ASP.NET 2.0必须具备的JavaScript知识 11
1.4.1  用JavaScript实现页面跳转 12
1.4.2  验证表单 12
1.4.3  JavaScript常用对象 13
1.5  常见问题 15
1.5.1  一定要熟记本章中的原理和概念吗 16
1.5.2  不懂CSS知识是否影响学习后面的内容 16
1.5.3  有C#的WinForm编程经验是否对ASP.NET开发有帮助 16
第2章  Visual Studio 2005开发环境 17
2.1  常用功能窗口介绍 17
2.1.1  主窗口 17
2.1.2  “解决方案资源管理器”窗口 19
2.1.3  “服务器资源管理器”窗口 19
2.1.4  工具箱 19
2.1.5  “属性”窗口 20
2.1.6  “错误列表”窗口 20
2.2  配置设置 21
2.2.1  自定义工具栏 21
2.2.2  “选项”对话框 22
2.2.3  导入和导出设置向导 22
2.3  类设计器 23
2.4  帮助系统 23
2.5  常见问题 24
2.5.1  自定义IDE时的布局是否能恢复到默认状态 24
2.5.2  如何将从网络下载的.NET控件添加到工具箱中 24
第3章  C# 2.0程序设计基础 25
3.1  初步认识C#语言 25
3.1.1  C#语言的特点 25
3.1.2  C#语言的程序结构 25
3.1.3  C#程序的编译 26
3.1.4  命名空间 26
3.1.5  程序的输入/输出 27
3.1.6  C#的注释 28
3.2  常量和变量 28
3.3  C#的数据类型 29
3.3.1  值类型 29
3.3.2  引用类型 32
3.3.3  装箱和拆箱 38
3.4  字符串处理 40
3.5  流程控制 41
3.5.1  条件语句 41
3.5.2  循环语句 44
3.5.3  异常处理 49
3.6  面向对象编程 52
3.6.1  创建类和对象 52
3.6.2  类的属性 53
3.6.3  类的方法 54
3.6.4  类的事件 55
3.6.5  类的继承 56
3.6.6  类的多态性 57
3.7  常见问题 59
3.7.1  到底什么是多态性 59
3.7.2  继承到底是继承了什么 59
3.7.3  值类型和引用类型有什么区别 59
第4章  ASP.NET 2.0页面基本对象 60
4.1  Application对象和Session对象 60
4.1.1  使用Application对象存储公用数据 60
4.1.2  使用Session对象存储单个用户数据 61
4.2  Request对象和Response对象 64
4.2.1  Response对象 64
4.2.2  Request对象 67
4.2.3  Response对象与Request对象综合小实例 69
4.3  Server对象 71
4.4  Page对象 74
4.5  Cookie对象 75
4.6  常见问题 77
4.6.1  Cookie欺骗是怎么回事 77
4.6.2  Cookie可以直接删除吗 77
第二篇  ASP.NET 2.0界面设计篇
第5章  创建智能表单 79
5.1  显示静态文本 79
5.2  TextBox控件 80
5.3  Button控件 82
5.4  单选按钮和单选按钮列表 84
5.4.1  RadioButton控件 84
5.4.2  RadioButtonList控件 86
5.5  下拉列表框 87
5.6  File Upload控件实现文件上传 88
5.7  BulletedList 控件创建项目列表 91
5.7.1  创建静态项目列表 91
5.7.2  响应用户选择事件 92
5.8  Image控件显示图像 94
5.9  MultiView和View控件实现多视图 95
5.9.1  MultiView和View控件简介 95
5.9.2  MultiView和View控件使用方法 96
5.10  Localize控件显示本地化文本 98
5.11  Literal控件以编程方式控制文本 99
5.12  常见问题 100
5.12.1  如何以编程的方式操作TextBox控件 101
5.12.2  TextBox控件的AutoPostBack属性有什么作用 101
5.12.3  如何让一个控件只在需要的时候显示 101
第6章  执行表单的检验 102
6.1  使用客户端检验 102
6.1.1  配置客户端检验 102
6.1.2  启用和禁用客户端检验 102
6.2  检验必填字段 103
6.3  检验表达式 104
6.4  通过比较值检验字段 108
6.4.1  比较一个控件与另一个控件的值 108
6.4.2  比较一个控件的值与固定值 110
6.4.3  执行数据类型检查 112
6.5  检查值的范围 114
6.6  错误汇总 117
6.7  执行自定义的检验 120
6.8  禁用检验 123
6.9  常见问题 125
6.9.1  检验的使用是否频繁 126
6.9.2  对表单执行检验时应注意什么 126
6.9.3  是否可以通过编程方式来检验控件 126
第7章  高级页面开发 127
7.1  超链接 127
7.1.1  LinkButton控件实现超链接 127
7.1.2  HyperLink控件实现超链接 128
7.2  页面容器 128
7.2.1  PlaceHolder控件 129
7.2.2  Panel控件 130
7.3  实现隐藏字段 132
7.4  表格 134
7.5  广告条 136
7.6  交互式的日历 137
7.7  常见问题 139
7.7.1  PlaceHolder控件和Panel控件有什么不同 139
7.7.2  Hyperlink和LinkButton控件实现的超链接在什么时候使用最恰当 139
7.7.3  通过设计视图是否可以操作Web服务端控件 139
第8章  创建用户控件和自定义控件 140
8.1  用户控件 140
8.1.1  用户控件概述 140
8.1.2  利用用户控件实现站点计数器 141
8.1.3  将Web窗体页转化为用户控件 143
8.2  自定义控件 143
8.2.1  制作一个简单的自定义控件 143
8.2.2  对自定义控件应用控件公共属性 146
8.2.3  无需编译测试自定义控件 146
8.2.4  将控件编译为程序集 149
8.2.5  控件状态 150
8.2.6  自定义控件的属性 154
8.3  常见问题 161
8.3.1  用户控件和自定义控件哪个对开发者要求比较高 161
8.3.2  能以编程的方式来控制用户控件进行加载吗 161
第9章  使用母版页统一网站界面 162
9.1  母版页概述 162
9.2  母版页的创建 162
9.3  母版页的使用 164
9.3.1  在内容页中使用母版页 164
9.3.2  内容页和母版页的交互 166
9.3.3  母版页的嵌套 167
9.4  常见问题 169
9.4.1  母版页是否可以动态切换 169
9.4.2  母版页使用频繁吗 170
第10章  使用主题和皮肤设置页面外观 171
10.1  主题和皮肤概述 171
10.2  创建主题 171
10.3  使用主题 173
10.4  样式 174
10.5  多主题的自动切换 175
10.6  常见问题 179
10.6.1  网站有多种风格可以切换是使用的主题吗 179
10.6.2  皮肤文件除手工书写外有没有其他简便方法 179
第11章  网站导航的设计 180
11.1  创建站点地图文件 180
11.2  制作导航条 182
11.3  实现导航路径 182
11.4  制作导航菜单 184
11.5  在母版页中添加导航 185
11.6  常见问题 186
11.6.1  创建站点地图文件有没有专门的工具 186
11.6.2  SiteMapDataSource控件起什么作用 186
第三篇  ADO.NET 2.0 数据库管理
第12章  SQL Server 2005基础 187
12.1  初步认识SQL Server 2005 187
12.1.1  SQL Server 2005的优势 187
12.1.2  SQL Server 2005的新特性 188
12.2  数据库操作 189
12.2.1  数据库相关知识 189
12.2.2  数据库的创建 190
12.2.3  数据库的修改 194
12.2.4  数据库的删除 195
12.2.5  数据库的备份和还原 196
12.3  数据表操作 198
12.3.1  了解数据表 198
12.3.2  数据表的创建 198
12.3.3  数据表的修改 200
12.3.4  数据表的删除 202
12.4  存储过程 203
12.4.1  了解存储过程 203
12.4.2  创建存储过程 203
12.4.3  执行存储过程 204
12.5  索引 204
12.5.1  索引概述 204
12.5.2  创建索引 204
12.5.3  修改、删除索引 206
12.6  视图 207
12.6.1  视图简介 208
12.6.2  创建视图 208
12.6.3  修改、删除视图 209
12.7  常见问题 209
12.7.1  SQL Server 2000数据库可以直接在SQL Server 2005中使用吗 210
12.7.2  SQL Server 2005的安全性怎么样 210
12.7.3  SQL Server 2005中的数据库可以在SQL Server 2000下直接使用吗 210
第13章  ADO.NET 2.0对象 211
13.1  ADO.NET 2.0概述 211
13.1.1  ADO.NET 2.0的新特性 211
13.1.2  ADO.NET中的对象 212
13.2  Connection对象 212
13.3  Command对象 215
13.3.1  插入数据 215
13.3.2  查询数据 217
13.3.3  更新数据 219
13.3.4  删除数据 222
13.3.5  返回单个值 224
13.4  DataReader对象 225
13.4.1  DataReader对象的常用属性和方法 225
13.4.2  使用DataReader对象读取数据 226
13.5  DataSet对象 227
13.5.1  创建DataSet对象 228
13.5.2  向DataSet中添加DataTable 228
13.5.3  将控件绑定到DataSet 229
13.5.4  通过程序创建DataTable 230
13.5.5  缓存DataSet 232
13.5.6  多个DataAdapter对象填充同一DataSet 233
13.5.7  将不同的查询填充到同一DataSet 235
13.5.8  合并DataSet 237
13.5.9  复制DataSet 240
13.6  配置应用程序 243
13.7  常见问题 244
13.7.1  介绍Connection对象时为什么在程序中出现的是SqlConnection 244
13.7.2  使用Command对象来执行SQL命令应注意什么 245
13.7.3  DataSet对象太复杂了 245
第14章  数据源控件访问数据库 246
14.1  访问SQL Server 2005数据库 246
14.1.1  使用SqlDataSource 数据源控件 246
14.1.2  参数声明 248
14.1.3  缓存数据 250
14.2  访问Access数据库 251
14.2.1  连接到Access数据文件 251
14.2.2  更新Access数据库 253
14.3  显示和转换XML数据 254
14.3.1  显示XML数据 254
14.3.2  转换XML数据 256
14.4  显示站点地图 257
14.5  显示和编辑中间层业务对象中的数据 258
14.5.1  实现数据检索并返回对象实例 259
14.5.2  使用参数执行数据更新 261
14.6  常见问题 265
14.6.1  如何选择合适的数据源控件 265
14.6.2  如何访问一个带密码的Access数据库 265
第15章  数据绑定控件显示数据 266
15.1  GridView控件 266
15.1.1  绑定数据到GridView控件 266
15.1.2  数据排序并进行分页 267
15.1.3  数据编辑和删除 269
15.2  DetailsView控件 272
15.2.1  将数据绑定到DetailsView控件 272
15.2.2  对数据进行编辑和分页 273
15.2.3  数据的插入和删除 275
15.3  FormView控件 276
15.3.1  将数据绑定到FormView控件 277
15.3.2  数据的编辑、插入和删除 278
15.4  DataList控件 281
15.4.1  将数据绑定到DataList控件 281
15.4.2  进行数据的模板化显示 282
15.5  常见问题 284
15.5.1  DataList控件的使用是否频繁 284
15.5.2  在使用GridView控件的过程中要注意什么 284
15.5.3  如何在用GridView控件浏览数据时插入新数据 284
第四篇  ASP.NET 2.0高级应用
第16章  文件处理 285
16.1  System.IO命名空间 285
16.2  文件操作 285
16.2.1  创建文件并写入内容 285
16.2.2  复制、删除文件 288
16.2.3  读取文件内容 291
16.3  文件夹操作 293
16.3.1  创建文件夹 293
16.3.2  移动、删除文件夹 295
16.4  常见问题 298
16.4.1  操作文件和文件夹的应用是否广泛 298
16.4.2  ASP.NET中操作文件和文件夹是否比其他脚本语言更方便 298
16.4.3  使用本章所介绍的知识能做出文件管理工具吗 298
第17章  数据缓存 299
17.1  ASP.NET 2.0缓存概述 299
17.2  使用页面输出缓存 299
17.2.1  启用页面输出缓存 299
17.2.2  按参数改变缓存内容 301
17.2.3  按头改变缓存内容 303
17.2.4  使用自定义字符串改变缓存内容 304
17.2.5  设置缓存位置 305
17.3  使用页面分段缓存 306
17.4  使用页面数据缓存 308
17.5  缓存依赖项 310
17.5.1  文件缓存依赖 310
17.5.2  其他缓存依赖 311
17.6  常见问题 311
17.6.1  页面输出缓存是否可以在Web.config文件中进行配置 311
17.6.2  如何让应用程序得到缓存项被删除的消息 311
第18章  ASP.NET 2.0的安全性 312
18.1  ASP.NET 2.0 的潜在威胁 312
18.2  使用基于表单的身份验证 312
18.2.1  启用并配置表单身份验证 313
18.2.2  建立登录页面 314
18.2.3  创建资源提供页 316
18.3  Windows身份验证 318
18.4  成员资格和角色管理 318
18.4.1  Membership类 318
18.4.2  成员资格提供程序 319
18.4.3  角色管理 320
18.4.4  Roles 类 321
18.4.5  对角色进行保护 322
18.5  加密受保护的配置信息 324
18.6  一个用户管理系统实例 326
18.6.1  配置数据存储区 326
18.6.2  配置安全选项 328
18.6.3  建立业务对象 331
18.6.4  首页的设计 333
18.6.5  登录页的设计 337
18.6.6  用户注册页的设计 338
18.6.7  修改密码页的设计 340
18.6.8  后台管理首页的设计 341
18.6.9  角色管理页的设计 344
18.7  常见问题 352
18.7.1  脚本漏洞在代码编写时需要注意什么 352
18.7.2  如何存储敏感信息 353
18.7.3  怎样避免错误信息中暴露敏感信息 353
第19章  Web服务 354
19.1  Web服务概述 354
19.2  创建、测试和调试Web服务 354
19.2.1  创建Web服务 354
19.2.2  测试Web服务 355
19.2.3  调试Web服务 356
19.3  部署和发布Web服务 357
19.3.1  部署Web服务 357
19.3.2  为Web服务启用发现 357
19.4  为Web服务创建代理 358
19.4.1  创建代理类 358
19.4.2  创建代理程序 359
19.5  使用Web服务 360
19.5.1  本地使用Web服务 360
19.5.2  远程使用Web服务 361
19.6  常见问题 363
19.6.1  Web服务可以被控制台或者桌面程序调用吗 363
19.6.2  一个Web服务会不会有生存周期 363
19.6.3  Web服务在不同的平台上都能被调用吗 363
第五篇  实   例
第20章  用ASP.NET 2.0制作在线投票系统 365
20.1  投票系统的功能模块 365
20.1.1  投票主题管理模块 366
20.1.2  投票项目管理模块 366
20.1.3  投票功能管理模块 366
20.2  投票系统的数据库架构 366
20.2.1  数据库表设计 366
20.2.2  数据库中数据之间的关系 367
20.3  投票主题管理模块 367
20.3.1  添加投票主题 368
20.3.2  编辑和删除投票主题 370
20.3.3  设置投票主题 371
20.4  投票项目管理模块 372
20.4.1  添加投票项目 372
20.4.2  编辑和删除投票项目 374
20.5  投票功能管理模块 375
20.5.1  获取投票主题 375
20.5.2  防作弊的投票功能 376
20.5.3  统计票数并图形化显示结果 380
20.6  投票系统后台权限管理模块 380
20.7  小结 381
第21章  用ASP.NET 2.0+XML打造BBS论坛 382
21.1  设计论坛数据库 382
21.1.1  设计数据表结构 382
21.1.2  设置数据表关系 383
21.1.3  配置数据库的Provider模式 384
21.1.4  配置Web.config中的数据库连接 386
21.1.5  添加数据库访问类 386
21.2  新用户入口 387
21.2.1  用户的注册 387
21.2.2  用户的登录 387
21.3  论坛类别管理模块 388
21.3.1  添加论坛的类别 388
21.3.2  编辑论坛的类别 390
21.3.3  显示论坛的类别 391
21.4  论坛的帖子管理模块 392
21.4.1  帖子列表的显示 392
21.4.2  实现发帖功能 393
21.4.3  显示帖子的详细信息 398
21.4.4  帖子的回复 400
21.5  小结 404

教学资源推荐
作者: (美)Stuart Reges,Marty Stepp 著
作者: 朱鸣华等
作者: 严义 包健 周尉 编著
参考读物推荐
作者: [美] 吉米·宋(Jimmy Song)著
作者: [美] 亚当·巴尔(Adam Barr) 著
作者: (美)Chuck Cavaness Brian Keeton