Posted on 2009-07-30 14:09
Hero 閱讀(216)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
C#積累
1 // bookstore.cs
2 using System;
3
4 // 用于處理書(shū)店的一組類:
5 namespace Bookstore
6 {
7 using System.Collections;
8
9 // 描述圖書(shū)列表中的一本書(shū):
10 public struct Book
11 {
12 public string Title; // 書(shū)名。
13 public string Author; // 作者。
14 public decimal Price; // 價(jià)格。
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 // 聲明一個(gè)用于處理書(shū)的委托類型:
27 public delegate void ProcessBookDelegate(Book book);
28
29 // 維護(hù)一個(gè)圖書(shū)數(shù)據(jù)庫(kù)。
30 public class BookDB
31 {
32 // 列出數(shù)據(jù)庫(kù)中的所有圖書(shū):
33 ArrayList list = new ArrayList();
34
35 // 向數(shù)據(jù)庫(kù)中添加圖書(shū):
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 // 對(duì)每本平裝圖書(shū)調(diào)用傳入委托來(lái)進(jìn)行處理:
42 public void ProcessPaperbackBooks(ProcessBookDelegate processBook)
43 {
44 foreach (Book b in list)
45 {
46 if (b.Paperback)
47 // 調(diào)用該委托:
48 processBook(b);
49 }
50 }
51 }
52 }
53
54 // 使用 Bookstore 類:
55 namespace BookTestClient
56 {
57 using Bookstore;
58
59 // 計(jì)算圖書(shū)總價(jià)格和平均價(jià)格的類:
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 // 測(cè)試圖書(shū)數(shù)據(jù)庫(kù)的類:
78 class Test
79 {
80 // 打印書(shū)名。
81 static void PrintTitle(Book b)
82 {
83 Console.WriteLine(" {0}", b.Title);
84 }
85
86 // 下面開(kāi)始執(zhí)行。
87 static void Main()
88 {
89 BookDB bookDB = new BookDB();
90
91 // 用一些書(shū)初始化數(shù)據(jù)庫(kù):
92 AddBooks(bookDB);
93
94 // 打印所有平裝本的書(shū)名:
95 Console.WriteLine("Paperback Book Titles:");
96 // 創(chuàng)建一個(gè)與靜態(tài)方法 Test.PrintTitle 關(guān)聯(lián)的
97 // 新委托對(duì)象:
98 bookDB.ProcessPaperbackBooks(new ProcessBookDelegate(PrintTitle));
99
100 // 使用 PriceTotaller 對(duì)象
101 // 獲取平裝本的平均價(jià)格:
102 PriceTotaller totaller = new PriceTotaller();
103 // 創(chuàng)建一個(gè)與對(duì)象 totaller 的非靜態(tài)方法
104 // AddBookToTotal 關(guān)聯(lián)的新委托對(duì)象:
105 bookDB.ProcessPaperbackBooks(new ProcessBookDelegate(totaller.AddBookToTotal));
106 Console.WriteLine("Average Paperback Book Price: ${0:#.##}",
107 totaller.AveragePrice());
108 }
109
110 // 用一些測(cè)試圖書(shū)初始化圖書(shū)數(shù)據(jù)庫(kù):
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