C# for Programmers

C# for Programmers

4.08 (24 ratings by Goodreads)
By (author)  , By (author) 

List price: US$59.99

Currently unavailable

Add to wishlist

AbeBooks may have this title (opens in new window).

Try AbeBooks

Description

A new edition of this title is available, ISBN-10: 0137144156 ISBN-13: 9780137144150 The practicing programmer's DEITEL (R) guide to C# and the powerful Microsoft .NET Framework Written for programmers with a background in C++, Java, or other high-level languages, this book applies the Deitel signature live-code approach to teaching programming and explores Microsoft's C# language and the new .NET 2.0 in depth. The book is updated for Visual Studio (R) 2005 and C# 2.0, and presents C# concepts in the context of fully tested programs, complete with syntax shading, detailed line-by-line code descriptions, and program outputs. The book features 200+ C# applications with 16,000+ lines of proven C# code, as well as 300+ programming tips that will help you build robust applications.Start with a concise introduction to C# fundamentals using an early classes and objects approach, then rapidly move on to more advanced topics, including multithreading, XML, ADO.NET 2.0, ASP.NET 2.0, Web services, network programming, and .NET remoting. Along the way you will enjoy the Deitels' classic treatment of object-oriented programming and a new, OOD/UML (TM) ATM case study, including a complete C# implementation. When you are finished, you will have everything you need to build next-generation Windows applications, Web applications, and Web services.Dr. Harvey M. Deitel and Paul J. Deitel are the founders of Deitel & Associates, Inc., the internationally recognized programming languages content-creation and corporate-training organization. Together with their colleagues at Deitel & Associates, Inc., they have written many international best-selling programming languages textbooks that millions of people worldwide have used to master C, C++, Java (TM), C#, XML, Visual Basic (R), Perl, Python, and Internet and Web programming. The DEITEL (R) Developer Series is designed for practicing programmers. The series presents focused treatments of emerging technologies, including .NET, J2EE, Web services, and more. Pre-publication Reviewer Testimonials "Excellent coverage of developing ASP.NET 2.0 applications, with plenty of sample code. The chapter on exception handling is one of, if not the best such chapters I have seen in the 50+ .NET related books I've read and reviewed. The chapter on Networking is one of the best I have seen."--Peter Bromberg, Merrill Lynch, C# MVP"A comprehensive introduction to XML, and one of the clearest tutorials on Web services I've read, with great examples. An excellent chapter on generics." --Gavin Osborne, Saskatchewan Institute of Applied Science and Technology "A superb job of clearly integrating the theory of relational databases and SQL with ADO.NET!"--Harlan Brewer, University of Cincinnati"Excellent introduction to .NET collections."--Jose Antonio Gonzalez Seco, Andalucia's Parlamient"A beautiful presentation of threads."--Pavel Tsekov, Caesar BSC"The ATM OOD/UML case study is excellent! The implementation of the design developed in the early chapters gives the reader a fantastic model of a real world problem. You hit a home run with this one!" --Catherine Wyman, Devry-PhoenixPractical, Example-Rich Coverage Of: C# 2.0, .NET 2.0, FCL ASP.NET 2.0, Web Forms and Controls Database, SQL, and ADO.NET 2.0 Networking and .NET Remoting XML, Web Services Generics, Collections GUI/Windows (R) Forms OOP: Classes, Inheritance, and Polymorphism OOD/UML (TM) ATM Case Study Graphics and Multimedia Multithreading Exception Handling And more...VISIT WWW.DEITEL.COM Download code examples To receive updates on this book, subscribe to the free DEITEL (R) BUZZ ONLINE e-mail newsletter at www.deitel.com/newsletter/subscribe.html Read archived Issues of the DEITEL (R) BUZZ ONLINE Get corporate training informationshow more

Product details

  • Paperback | 1360 pages
  • 175.26 x 231.14 x 63.5mm | 1,927.76g
  • Pearson Education (US)
  • Prentice Hall
  • Upper Saddle River, United States
  • English
  • 2nd edition
  • 0131345915
  • 9780131345911
  • 2,048,350

Back cover copy

A new edition of this title is available, ISBN-10: 0137144156 ISBN-13: 9780137144150 The practicing programmer's DEITEL(R) guide to C# and the powerful Microsoft .NET Framework Written for programmers with a background in C++, Java, or other high-level languages, this book applies the Deitel signature live-code approach to teaching programming and explores Microsoft's C# language and the new .NET 2.0 in depth. The book is updated for Visual Studio(R) 2005 and C# 2.0, and presents C# concepts in the context of fully tested programs, complete with syntax shading, detailed line-by-line code descriptions, and program outputs. The book features 200+ C# applications with 16,000+ lines of proven C# code, as well as 300+ programming tips that will help you build robust applications. Start with a concise introduction to C# fundamentals using an early classes and objects approach, then rapidly move on to more advanced topics, including multithreading, XML, ADO.NET 2.0, ASP.NET 2.0, Web services, network programming, and .NET remoting. Along the way you will enjoy the Deitels' classic treatment of object-oriented programming and a new, OOD/UML(TM) ATM case study, including a complete C# implementation. When you are finished, you will have everything you need to build next-generation Windows applications, Web applications, and Web services. Dr. Harvey M. Deitel and Paul J. Deitel are the founders of Deitel & Associates, Inc., the internationally recognized programming languages content-creation and corporate-training organization. Together with their colleagues at Deitel & Associates, Inc., they have written many international best-selling programming languages textbooks that millions of people worldwide have used to master C, C++, Java(TM), C#, XML, Visual Basic(R), Perl, Python, and Internet and Web programming. The DEITEL(R) Developer Series is designed for practicing programmers. The series presents focused treatments of emerging technologies, including .NET, J2EE, Web services, and more. Pre-publication Reviewer Testimonials ""Excellent coverage of developing ASP.NET 2.0 applications, with plenty of sample code. The chapter on exception handling is one of, if not the best such chapters I have seen in the 50+ .NET related books I've read and reviewed. The chapter on Networking is one of the best I have seen."" --Peter Bromberg, Merrill Lynch, C# MVP ""A comprehensive introduction to XML, and one of the clearest tutorials on Web services I've read, with great examples. An excellent chapter on generics." " --Gavin Osborne, Saskatchewan Institute of Applied Science and Technology ""A superb job of clearly integrating the theory of relational databases and SQL with ADO.NET!"" --Harlan Brewer, University of Cincinnati ""Excellent introduction to .NET collections."" --Jose Antonio Gonzalez Seco, Andalucia's Parlamient ""A beautiful presentation of threads."" --Pavel Tsekov, Caesar BSC ""The ATM OOD/UML case study is excellent! The implementation of the design developed in the early chapters gives the reader a fantastic model of a real world problem. You hit a home run with this one!"" --Catherine Wyman, Devry-PhoenixPractical, Example-Rich Coverage Of: C# 2.0, .NET 2.0, FCL ASP.NET 2.0, Web Forms and Controls Database, SQL, and ADO.NET 2.0 Networking and .NET Remoting XML, Web Services Generics, Collections GUI/Windows(R) Forms OOP: Classes, Inheritance, and Polymorphism OOD/UML(TM) ATM Case Study Graphics and Multimedia Multithreading Exception Handling And more...VISIT WWW.DEITEL.COM Download code examples To receive updates on this book, subscribe to the free "DEITEL(R) BUZZ ONLINE" e-mail newsletter at www.deitel.com/newsletter/subscribe.html Read archived Issues of the DEITEL(R) BUZZ ONLINE Get corporate training informationshow more

About Paul J. Deitel

Harvey M. Deitel and Paul J. Deitel are the founders of Deitel & Associates, Inc., the internationally recognized programming languages content-creation and corporate training organization. Together with their colleagues at Deitel & Associates, Inc., they have written many international best-selling programming languages textbooks and professional books that millions of people worldwide have used to master C, C++, Java (TM), C#, XML, Visual Basic (R), Perl, Python, and Internet and Web programming. . Paul J. Deitel and Harvey M. Deitel are the founders of Deitel & Associates, Inc., the internationally recognized programming languages content-creation and corporate training organization. Together with their colleagues at Deitel & Associates, Inc., they have written many international best-selling programming languages textbooks and professional books that millions of people worldwide have used to master C, C++, Java (TM), C#, XML, Visual Basic (R), Perl, Python, and Internet and Web programming.show more

Table of contents

Preface xxiiiChapter1: Introduction to Computers, the Internet and Visual C# 11.1 Introduction 21.2 Microsoft's Windows (R) Operating System 21.3 C# 31.4 The Internet and the World Wide Web 41.5 Extensible Markup Language (XML) 51.6 Microsoft's .NET 51.7 The .NET Framework and the Common Language Runtime 61.8 Test-Driving a C# Application 81.9 (Only Required Section of the Case Study) Software Engineering Case Study: Introduction to Object Technology and the UML 101.10 Wrap-Up 161.11 Web Resources 16Chapter 2: Introduction to the Visual C# 2005 Express Edition IDE 182.1 Introduction 192.2 Overview of the Visual Studio 2005 IDE 192.3 Menu Bar and Toolbar 252.4 Navigating the Visual Studio 2005 IDE 272.5 Using Help 352.6 Using Visual Programming to Create a Simple Program Displaying Text and an Image 372.7 Wrap-Up 492.8 Web Resources 50Chapter 3: Introduction to C# Applications 513.1 Introduction 523.2 A Simple C# Application: Displaying a Line of Text 523.3 Creating Your Simple Application in Visual C# Express 583.4 Modifying Your Simple C# Application 653.5 Formatting Text with Console.Write and Console.WriteLine 673.6 Another C# Application: Adding Integers 683.7 Memory Concepts 723.8 Arithmetic 733.9 Decision Making: Equality and Relational Operators 773.10 (Optional) Software Engineering Case Study: Examining the ATM Requirements Document 813.11 Wrap-Up 91Chapter 4: Introduction to Classes and Objects 924.1 Introduction 934.2 Classes, Objects, Methods, Properties and Instance Variables 934.3 Declaring a Class with a Method and Instantiating an Object of a Class 954.4 Declaring a Method with a Parameter 994.5 Instance Variables and Properties 1024.6 UML Class Diagram with a Property 1074.7 Software Engineering with Properties and set and get Accessors 1084.8 Value Types vs. Reference Types 1094.9 Initializing Objects with Constructors 1114.10 Floating-Point Numbers and Type decimal 1134.11 (Optional) Software Engineering Case Study: Identifying the Classes in the ATM Requirements Document 1204.12 Wrap-Up 127Chapter 5: Control Statements: Part 1 1295.1 Introduction 1305.2 Control Structures 1305.3 if Single-Selection Statement 1335.4 if... else Double-Selection Statement 1345.5 while Repetition Statement 1375.6 Formulating Algorithms: Counter-Controlled Repetition 1395.7 Formulating Algorithms: Sentinel-Controlled Repetition 1435.8 Formulating Algorithms: Nested Control Statements 1475.9 Compound Assignment Operators 1505.10 Increment and Decrement Operators 1515.11 Simple Types 1545.12 (Optional) Software Engineering Case Study: Identifying Class Attributes in the ATM System 1545.13 Wrap-Up 159Chapter 6: Control Statements: Part 2 1606.1 Introduction 1616.2 Essentials of Counter-Controlled Repetition 1616.3 for Repetition Statement 1636.4 Examples Using the for Statement 1676.5 do... while Repetition Statement 1726.6 switch Multiple-Selection Statement 1736.7 break and continue Statements 1816.8 Logical Operators 1836.9 (Optional) Software Engineering Case Study: IdentifyingObjects' States and Activities in the ATM System 1896.10 Wrap-Up 193Chapter 7: Methods: A Deeper Look 1957.1 Introduction 1967.2 Packaging Code in C# 1977.3 static Methods, static Variables and Class Math 1977.4 Declaring Methods with Multiple Parameters 2007.5 Notes on Declaring and Using Methods 2047.6 Method Call Stack and Activation Records 2057.7 Argument Promotion and Casting 2067.8 The Framework Class Library 2087.9 Case Study: Random-Number Generation 2097.10 Case Study: A Game of Chance (Introducing Enumerations) 2157.11 Scope of Declarations 2197.12 Method Overloading 2227.13 Recursion 2257.14 Passing Arguments: Pass-by-Value vs. Pass-by-Reference 2287.15 (Optional) Software Engineering Case Study: Identifying Class Operations in the ATM System 2327.16 Wrap-Up 239Chapter 8: Arrays 2418.1 Introduction 2428.2 Arrays 2428.3 Declaring and Creating Arrays 2448.4 Examples Using Arrays 2458.5 Case Study: Card Shuffling and Dealing Simulation 2538.6 foreach Statement 2578.7 Passing Arrays and Array Elements to Methods 2598.8 Passing Arrays by Value and by Reference 2618.9 Case Study: Class GradeBook Using an Array to Store Grades 2658.10 Multidimensional Arrays 2718.11 Case Study: Class GradeBook Using a Rectangular Array 2768.12 Variable-Length Argument Lists 2818.13 Using Command-Line Arguments 2838.14 (Optional) Software Engineering Case Study: Collaboration Among Objects in the ATM System 2858.15 Wrap-Up 293Chapter 9: Classes and Objects: A Deeper Look 2949.1 Introduction 2959.2 Time Class Case Study 2969.3 Controlling Access to Members 2999.4 Referring to the Current Object's Members with the this Reference 3009.5 Indexers 3039.6 Time Class Case Study: Overloaded Constructors 3069.7 Default and Parameterless Constructors 3129.8 Composition 3129.9 Garbage Collection and Destructors 3169.10 static Class Members 3179.11 readonly Instance Variables 3229.12 Software Reusability 3249.13 Data Abstraction and Encapsulation 3259.14 Time Class Case Study: Creating Class Libraries 3279.15 internal Access 3319.16 Class View and Object Browser 3339.17 (Optional) Software Engineering Case Study: Starting to Program the Classes of the ATM System 3349.18 Wrap-Up 341Chapter 10: Object-Oriented Programming: Inheritance 34210.1 Introduction 34310.2 Base Classes and Derived Classes 34410.3 protected Members 34610.4 Relationship between Base Classes and Derived Classes 34710.5 Constructors in Derived Classes 37210.6 Software Engineering with Inheritance 37610.7 Class object 37810.8 Wrap-Up 380Chapter 11: Polymorphism, Interfaces & Operator Overloading 38111.1 Introduction 38211.2 Polymorphism Examples 38411.3 Demonstrating Polymorphic Behavior 38511.4 Abstract Classes and Methods 38811.5 Case Study: Payroll System Using Polymorphism 39011.6 sealed Methods and Classes 40511.7 Case Study: Creating and Using Interfaces 40611.8 Operator Overloading 41611.9 (Optional) Software Engineering Case Study: Incorporating Inheritance and Polymorphism into the ATM System 42111.10 Wrap-Up 429Chapter 12: Exception Handling 43112.1 Introduction 43212.2 Exception Handling Overview 43312.3 Example: Divide by Zero Without Exception Handling 43312.4 Example: Handling DivideByZeroExceptions and FormatExceptions 43612.5 .NET Exception Hierarchy 44212.6 finally Block 44312.7 Exception Properties 45112.8 User-Defined Exception Classes 45612.9 Wrap-Up 459Chapter 13: Graphical User Interface Concepts: Part 1 46013.1 Introduction 46113.2 Windows Forms 46313.3 Event Handling 46513.4 Control Properties and Layout 47213.5 Labels, TextBoxes and Buttons 47613.6 GroupBoxes and Panels 47913.7 CheckBoxes and RadioButtons 48213.8 PictureBoxes 49013.9 ToolTips 49213.10 NumericUpDown Control 49513.11 Mouse-Event Handling 49713.12 Keyboard-Event Handling 50013.13 Wrap-Up 503Chapter 14: Graphical User Interface Concepts: Part 2 50414.1 Introduction 50514.2 Menus 50514.3 MonthCalendar Control 51514.4 DateTimePicker Control 51514.5 LinkLabel Control 51914.6 ListBox Control 52314.7 CheckedListBox Control 52714.8 ComboBox Control 53014.9 TreeView Control 53414.10 ListView Control 54014.11 TabControl Control 54614.12 Multiple Document Interface (MDI) Windows 55114.13 Visual Inheritance 55914.14 User-Defined Controls 56214.15 Wrap-Up 565Chapter 15: Multithreading 56715.1 Introduction 56815.2 Thread States: Life Cycle of a Thread 56915.3 Thread Priorities and Thread Scheduling 57115.4 Creating and Executing Threads 57315.5 Thread Synchronization and Class Monitor 57615.6 Producer/Consumer Relationship without Thread Synchronization 57815.7 Producer/Consumer Relationship with Thread Synchronization 58515.8 Producer/Consumer Relationship: Circular Buffer 59315.9 Multithreading with GUIs 60115.10 Wrap-Up 606Chapter 16: Strings, Characters and Regular Expressions 60716.1 Introduction 60816.2 Fundamentals of Characters and Strings 60916.3 string Constructors 61016.4 string Indexer, Length Property and CopyTo Method 61116.5 Comparing strings 61316.6 Locating Characters and Substrings in strings 61616.7 Extracting Substrings from strings 61816.8 Concatenating strings 61916.9 Miscellaneous string Methods 61916.10 Class StringBuilder 62116.11 Length and Capacity Properties, EnsureCapacity Method and Indexer of Class StringBuilder 62316.12 Append and AppendFormat Methods of Class StringBuilder 62516.13 Insert, Remove and Replace Methods of Class StringBuilder 62716.14 Char Methods 63016.15 Card Shuffling and Dealing Simulation 63216.16 Regular Expressions and Class Regex 63616.17 Wrap-Up 646Chapter 17: Graphics and Multimedia 64717.1 Introduction 64817.2 Drawing Classes and the Coordinate System 64817.3 Graphics Contexts and Graphics Objects 65017.4 Color Control 65117.5 Font Control 65817.6 Drawing Lines, Rectangles and Ovals 66317.7 Drawing Arcs 66617.8 Drawing Polygons and Polylines 66917.9 Advanced Graphics Capabilities 67217.10 Introduction to Multimedia 67717.11 Loading, Displaying and Scaling Images 67817.12 Animating a Series of Images 68017.13 Windows Media Player 69117.14 Microsoft Agent 69217.15 Wrap-Up 706Chapter 18: Files and Streams 70718.1 Introduction 70818.2 Data Hierarchy 70818.3 Files and Streams 71018.4 Classes File and Directory 71118.5 Creating a Sequential-Access Text File 72018.6 Reading Data from a Sequential-Access Text File 73118.7 Serialization 74118.8 Creating a Sequential-Access File Using Object Serialization 74218.9 Reading and Deserializing Data from a Sequential-Access Text File 74818.10 Wrap-Up 752Chapter 19: Extensible Markup Language (XML) 75319.1 Introduction 75419.2 XML Basics 75419.3 Structuring Data 75719.4 XML Namespaces 76419.5 Document Type Definitions (DTDs) 76719.6 W3C XML Schema Documents 77019.7 (Optional) Extensible Stylesheet Language and XSL Transformations 77719.8 (Optional) Document Object Model (DOM) 78619.9 (Optional) Schema Validation with Class XmlReader 80019.10 (Optional) XSLT with Class XslCompiledTransform 80319.11 Wrap-Up 80619.12 Web Resources 806Chapter 20: Database, SQL and ADO.NET 80820.1 Introduction 80920.2 Relational Databases 81020.3 Relational Database Overview: Books Database 81120.4 SQL 81520.5 ADO.NET Object Model 82420.6 Programming with ADO.NET: Extracting Information from a Database 82520.7 Querying the Books Database 83720.8 Programming with ADO.NET: Address Book Case Study 84620.9 Using a DataSet to Read and Write XML 85420.10 Wrap-Up 85720.11 Web Resources 857Chapter 21: ASP.NET 2.0,Web Forms andWeb Controls 85921.1 Introduction 86021.2 Simple HTTP Transactions 86121.3 Multitier Application Architecture 86321.4 Creating and Running a Simple Web-Form Example 86421.5 Web Controls 87921.6 Session Tracking 90121.7 Case Study: Connecting to a Database in ASP.NET 91921.8 Case Study: Secure Books Database Application 93121.9 Wrap-Up 96021.10 Web Resources 961Chapter 22: Web Services 96222.1 Introduction 96322.2 .NET Web Services Basics 96422.3 Simple Object Access Protocol (SOAP) 97122.4 Publishing and Consuming Web Services 97322.5 Session Tracking in Web Services 98922.6 Using Web Forms and Web Services 100322.7 User-Defined Types in Web Services 101122.8 Wrap-Up 102122.9 Web Resources 1021Chapter 23: Networking: Streams-Based Sockets and Datagrams 102223.1 Introduction 102323.2 Connection-Oriented vs. Connectionless Communication 102423.3 Protocols for Transporting Data 102423.4 Establishing a Simple TCP Server (Using Stream Sockets) 102523.5 Establishing a Simple TCP Client (Using Stream Sockets) 102723.6 Client/Server Interaction with Stream-Socket Connections 102723.7 Connectionless Client/Server Interaction with Datagrams 103823.8 Client/Server Tic-Tac-Toe Using a Multithreaded Server 104323.9 WebBrowser Control 105823.10 .NET Remoting 106123.11 Wrap-Up 1073Chapter 24: Data Structures 107424.1 Introduction 107524.2 Simple-Type structs, Boxing and Unboxing 107524.3 Self-Referential Classes 107624.4 Linked Lists 107824.5 Stacks 109024.6 Queues 109424.7 Trees 109824.8 Wrap-Up 1112Chapter 25: Generics 111425.1 Introduction 111525.2 Motivation for Generic Methods 111625.3 Generic Method Implementation 111825.4 Type Constraints 112025.5 Overloading Generic Methods 112325.6 Generic Classes 112425.7 Notes on Generics and Inheritance 113325.8 Wrap-Up 1133Chapter 26: Collections 113426.1 Introduction 113526.2 Collections Overview 113626.3 Class Array and Enumerators 113826.4 Non-Generic Collections 114226.5 Generic Collections 115326.6 Synchronized Collections 116026.7 Wrap-Up 1161Appendix A: Operator Precedence Chart 1162Appendix B: Number Systems 1164B.1 Introduction 1165B.2 Abbreviating Binary Numbers as Octal and Hexadecimal Numbers 1168B.3 Converting Octal and Hexadecimal Numbers to Binary Numbers 1169B.4 Converting from Binary, Octal or Hexadecimal to Decimal 1169B.5 Converting from Decimal to Binary, Octal or Hexadecimal 1170B.6 Negative Binary Numbers: Two's Complement Notation 1172Appendix C: Using the Visual Studio (R) 2005 Debugger 1174C.1 Introduction 1175C.2 Breakpoints and the Continue Command 1175C.3 The Locals and Watch Windows 1180C.4 Controlling Execution Using the Step Into, Step Over, Step Out and Continue Commands 1183C.5 Other Features 1186C.6 Wrap-Up 1190Appendix D: ASCII Character Set 1191Appendix E: Unicode (R) 1192E.1 Introduction 1193E.2 Unicode Transformation Formats 1194E.3 Characters and Glyphs 1195E.4 Advantages/Disadvantages of Unicode 1195E.5 Using Unicode 1196E.6 Character Ranges 1198Appendix F: Introduction to XHTML: Part 1 1200F.1 Introduction 1201F.2 Editing XHTML 1201F.3 First XHTML Example 1202F.4 W3C XHTML Validation Service 1205F.5 Headers 1206F.6 Linking 1208F.7 Images 1210F.8 Special Characters and More Line Breaks 1214F.9 Unordered Lists 1216F.10 Nested and Ordered Lists 1218F.11 Web Resources 1220Appendix G: Introduction to XHTML: Part 2 1221G.1 Introduction 1222G.2 Basic XHTML Tables 1222G.3 Intermediate XHTML Tables and Formatting 1225G.4 Basic XHTML Forms 1227G.5 More Complex XHTML Forms 1230G.6 Internal Linking 1237G.7 Creating and Using Image Maps 1240G.8 meta Elements 1243G.9 frameset Element 1245G.10 Nested framesets 1249G.11 Web Resources 1251Appendix H: HTML/XHTML Special Characters 1252Appendix I: HTML/XHTML Colors 1253Appendix J: ATM Case Study Code 1256J.1 ATM Case Study Implementation 1256J.2 Class ATM 1257J.3 Class Screen 1263J.4 Class Keypad 1264J.5 Class CashDispenser 1264J.6 Class DepositSlot 1266J.7 Class Account 1266J.8 Class BankDatabase 1269J.9 Class Transaction 1271J.10 Class BalanceInquiry 1273J.11 Class Withdrawal 1274J.12 Class Deposit 1278J.13 Class ATMCaseStudy 1281J.14 Wrap-Up 1281Appendix K: UML 2: Additional Diagram Types 1283K.1 Introduction 1283K.2 Additional Diagram Types 1283Appendix L: Simple Types 1285Index 1287show more

Rating details

24 ratings
4.08 out of 5 stars
5 46% (11)
4 29% (7)
3 17% (4)
2 4% (1)
1 4% (1)
Book ratings by Goodreads
Goodreads is the world's largest site for readers with over 50 million reviews. We're featuring millions of their reader ratings on our book pages to help you find your new favourite book. Close X