Posted on 2009-07-30 14:09
Hero 阅读(182)
评论(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