Posted on 2009-07-30 14:09
Hero 閱讀(197)
評論(0) 編輯 收藏 引用 所屬分類:
C#積累
1 // bookstore.cs
2 using System;
3
4 // 用于處理書店的一組類:
5 namespace Bookstore
6 {
7 using System.Collections;
8
9 // 描述圖書列表中的一本書:
10 public struct Book
11 {
12 public string Title; // 書名。
13 public string Author; // 作者。
14 public decimal Price; // 價格。
15 public bool Paperback; // 是平裝本嗎?
16
17 public Book(string title, string author, decimal price, bool paperBack)
18 {
19 Title = title;
20 Author = author;
21 Price = price;
22 Paperback = paperBack;
23 }
24 }
25
26 // 聲明一個用于處理書的委托類型:
27 public delegate void ProcessBookDelegate(Book book);
28
29 // 維護一個圖書數據庫。
30 public class BookDB
31 {
32 // 列出數據庫中的所有圖書:
33 ArrayList list = new ArrayList();
34
35 // 向數據庫中添加圖書:
36 public void AddBook(string title, string author, decimal price, bool paperBack)
37 {
38 list.Add(new Book(title, author, price, paperBack));
39 }
40
41 // 對每本平裝圖書調用傳入委托來進行處理:
42 public void ProcessPaperbackBooks(ProcessBookDelegate processBook)
43 {
44 foreach (Book b in list)
45 {
46 if (b.Paperback)
47 // 調用該委托:
48 processBook(b);
49 }
50 }
51 }
52 }
53
54 // 使用 Bookstore 類:
55 namespace BookTestClient
56 {
57 using Bookstore;
58
59 // 計算圖書總價格和平均價格的類:
60 class PriceTotaller
61 {
62 int countBooks = 0;
63 decimal priceBooks = 0.0m;
64
65 internal void AddBookToTotal(Book book)
66 {
67 countBooks += 1;
68 priceBooks += book.Price;
69 }
70
71 internal decimal AveragePrice()
72 {
73 return priceBooks / countBooks;
74 }
75 }
76
77 // 測試圖書數據庫的類:
78 class Test
79 {
80 // 打印書名。
81 static void PrintTitle(Book b)
82 {
83 Console.WriteLine(" {0}", b.Title);
84 }
85
86 // 下面開始執行。
87 static void Main()
88 {
89 BookDB bookDB = new BookDB();
90
91 // 用一些書初始化數據庫:
92 AddBooks(bookDB);
93
94 // 打印所有平裝本的書名:
95 Console.WriteLine("Paperback Book Titles:");
96 // 創建一個與靜態方法 Test.PrintTitle 關聯的
97 // 新委托對象:
98 bookDB.ProcessPaperbackBooks(new ProcessBookDelegate(PrintTitle));
99
100 // 使用 PriceTotaller 對象
101 // 獲取平裝本的平均價格:
102 PriceTotaller totaller = new PriceTotaller();
103 // 創建一個與對象 totaller 的非靜態方法
104 // AddBookToTotal 關聯的新委托對象:
105 bookDB.ProcessPaperbackBooks(new ProcessBookDelegate(totaller.AddBookToTotal));
106 Console.WriteLine("Average Paperback Book Price: ${0:#.##}",
107 totaller.AveragePrice());
108 }
109
110 // 用一些測試圖書初始化圖書數據庫:
111 static void AddBooks(BookDB bookDB)
112 {
113 bookDB.AddBook("The C Programming Language",
114 "Brian W. Kernighan and Dennis M. Ritchie", 19.95m, true);
115 bookDB.AddBook("The Unicode Standard 2.0",
116 "The Unicode Consortium", 39.95m, true);
117 bookDB.AddBook("The MS-DOS Encyclopedia",
118 "Ray Duncan", 129.95m, false);
119 bookDB.AddBook("Dogbert's Clues for the Clueless",
120 "Scott Adams", 12.00m, true);
121 }
122 }
123 }
124
125