【名家名著 17】
所有軟體工程師必備的聖經,沒有之一!
廣獲好評的程式設計實務指南,在過去十幾年間,由Steve McConnell所原創的《Code
Complete》已幫助許許多多的開發者,開發出更完善的軟體。本書包含最新的更新與修訂內容,以及數百項全新的程式碼範例,充分闡明軟體建構的科學與藝術。McConnell匯集了來自學術研究與商業實務的各項知識,歸納出最有效的工作技巧、以及最關鍵的實踐原則,轉化成一系列清晰且務實的指引。無論你的知識水準、工作環境或專案規模如何,本書都能提昇你的智慧,幫助你建構出最佳品質的程式碼。
發掘各項歷久彌新的技巧與策略,使你能夠:
l建構出低複雜性,但卻有高可塑性的設計。
l組織健全的協作式開發並從中獲益。
l應用防禦性程式設計技巧,消弭發生錯誤的機會。
l洞察合適的時機,妥善地對程式碼進行重構或演變。
l依專案規模選擇合適的實踐方法。
l快速且有效地進行除錯。
l及早且正確地解決重大的建構問題。
l從一而終保持高品質的軟體專案。
好評推薦
「即便第一版的《Code Complete》已經納入我的軟體工程經典收藏裡,但第二版卻更是青出於藍。」——Ralph Johnson,伊利諾大學,《Design Patterns》合著者
「無論你是新手還是熟手,《Code Complete》第二版都能幫助你透徹瞭解程式設計。」——Jeffrey Richter(www.wintellect.com),《Applied Microsoft® .NET Framework Programming》作者
「關於軟體建構的絕佳指南,也是作為程式設計師的必讀著作。」——Diomidis Spinellis,《Code Reading: The Open Source Perspective》作者
「Steve McConnell是少數真正在知識傳授上做到深入淺出的人士。」——John Vlissides,IBM研究院,《Design Patterns》合著者
「Steve McConnell比任何人都更通曉軟體建構的奧義,我們很幸運能夠藉由這部原創著作,汲取他的豐富經驗與真知灼見。」——Alan Cooper,Visual Basic之父,《About Face》作者
「《Code Complete》是有關程式設計風格和軟體建構的絕佳指引書籍。」——Martin Fowler,《Refactoring》
「Steve McConnell 的《Code Complete》……為程式設計師提供了邁向智慧的捷徑……他的書讀起來富有趣味,要知道他可是有真實的親身經驗的。」——Jon Bentley,《Programming Pearls, 2nd ed.》
「這無疑是我看過的軟體建構方面最好的書籍。每位開發人員都應該手持一本,並且每年都從頭到尾讀一遍。九年來我每年都讀這本書,仍能從中獲得新的收穫。」——John Robbins,《Debugging Applications for Microsoft .NET and Microsoft Windows》
「當今的軟體必須是健全、有彈性的,而安全的程式碼始於規範的建構。第 1 版出版後的十年裡,沒有出現比《Code Complete》更權威的書。」——Michael Howard,《Writing Secure Code》
「《Code Complete》廣泛剖析程式設計工藝的各種實戰話題。McConnell 的著作涵蓋軟體架構、coding 標準、測試、整合及軟體工藝本質等內容。」——Grady Booch,《Object Solutions》
「對軟體開發者而言,終極的百科全書就是Steve McConnell 的《Code Complete》。這本長達 912 頁厚的書籍誠如副標所說的,是一本實用指南。它意圖縮短業界大師與教授(例如 Yourdon
和Pressman)的知識與一般商業實踐之間的距離,幫助讀者用較短的時間、碰觸較少的麻煩去編寫更好的程式……每個開發者都應該擁有這本書,本書的風格和內容是極為實用的。」——Chris Loosley,《High-Performance Client/Server》
「Steve McConnell 的開創性書籍《Code Complete》是詳述軟體開發方面最易懂的一本書……」——Erik Bethke,《Game Development and Production》
「《Code Complete》是個寶藏,收藏了設計與生產優質軟體方面的有用資訊與建議。」——John Dempster,《The Laboratory Computer: A Practical Guide for Physiologists and Neuroscientists》
「如果你有意增進程式設計技術,就該有一本Steve McConnell 的《Code Complete》。」——Jean J. Labrosse,《Embedded Systems Building Blocks: Complete and Ready-To-Use Modules in C》
「Steve McConnell 寫出了一本獨立於電腦環境的軟體開發最好的書籍。」——Kenneth Rosen,《Unix: The Complete Reference》
「每個時代你都會遇到一本書,提供你獲得經驗的捷徑,節省數年痛苦的學習時間……千言萬語都無法說明這本書有多好。標題《Code Complete》尚不足以表達出該作品的全部智慧與內涵。」——Jeff Duntemann,《PC Techniques》
「Microsoft Press 出版了我認為是軟體建構方面很好的書,每位軟體開發人員的書架上都該有這本書。」——Warren Keuffel,《Software Development》
「每個程式設計師都該閱讀這本傑出的書籍。」——T.L. (Frank) Pappas,《Computer》
「假如你期望成為專業的程式設計師,這將是你投資 35 美元能獲得的最好回報。不要只是看看這個書評,趕快衝去買一本回來!McConnell 聲稱此書意在拉近業界大師的知識與一般商業實踐之間的距離……令人稱奇的是,他做到了!」——Richard Mateosian,《IEEE Micro》
「《Code Complete》應該被軟體開發領域中的每個人閱讀。」——Tommy Usher,《C User’s Journal》
「我不遺餘力地為Steve McConnell 的《Code Complete》拍手叫好……這本書取代了 API 參考手冊,成為陪我工作的親密夥伴。」——Jim Kyle,《Windows Tech Journal》
「這本編纂精良的巨著有望成為軟體實現的實踐方面最好的專書。」——Tommy Usher,《Embedded Systems Programming》
「這是我所讀過的軟體工程方面最好的書籍。」——Edward Kenworth,《.Exe Magazine》
「這本書必將成為一部經典、所有開發人員及管理者必備的讀物。」——Peter Wright,《Program Now》
作者介紹
作者簡介
Steve McConnell
Steve McConnell 是 Construx Software 公司的首席軟體工程師,負責監督控管軟體工程的實踐。他是軟體工程知識體(SWEBOK)專案建構知識領域的主管。Steve 曾為微軟、波音及西雅圖地區的其他一些公司工作。Steve McConnell 是以下書籍的作者:1996年的《Rapid Development》、1998年《Software Project Survival Guide 》和2004年的《Professional Software Development》。他的優秀著作兩度獲得當年的《Software Development》雜誌的優秀震撼大獎(Jolt Excellence Award)。
Steve 還曾是 SPC 評估專業版的開發領袖,軟體開發生產力大獎(Software Development Productivity award)的獲得者。1998 年《Software Development》的讀者推選 Steve McConnell 為軟體行業最有影響力的三人之一,與 Bill Gates、Linus Torvalds 齊名。Steve 從 Whitman 大學獲得學士學位,並從西雅圖大學獲軟體工程碩士學位。現居住在華盛頓的 Bellevue。
如果您對此書有任何疑問或評論,請與 Steve 聯繫,他的電子郵件信箱是[email protected],也可透過 www.stevemcconnell.com 與他聯繫。
Steve McConnell
Steve McConnell 是 Construx Software 公司的首席軟體工程師,負責監督控管軟體工程的實踐。他是軟體工程知識體(SWEBOK)專案建構知識領域的主管。Steve 曾為微軟、波音及西雅圖地區的其他一些公司工作。Steve McConnell 是以下書籍的作者:1996年的《Rapid Development》、1998年《Software Project Survival Guide 》和2004年的《Professional Software Development》。他的優秀著作兩度獲得當年的《Software Development》雜誌的優秀震撼大獎(Jolt Excellence Award)。
Steve 還曾是 SPC 評估專業版的開發領袖,軟體開發生產力大獎(Software Development Productivity award)的獲得者。1998 年《Software Development》的讀者推選 Steve McConnell 為軟體行業最有影響力的三人之一,與 Bill Gates、Linus Torvalds 齊名。Steve 從 Whitman 大學獲得學士學位,並從西雅圖大學獲軟體工程碩士學位。現居住在華盛頓的 Bellevue。
如果您對此書有任何疑問或評論,請與 Steve 聯繫,他的電子郵件信箱是[email protected],也可透過 www.stevemcconnell.com 與他聯繫。
目錄
第一部分 打好基礎
第 1 章 歡迎進入軟體建構的世界
1.1 什麼是軟體建構
1.2 軟體建構為何如此重要
1.3 如何閱讀本書
要點
第 2 章 藉由隱喻進一步理解軟體開發
2.1 隱喻的重要性
2.2 如何使用軟體隱喻
2.3 常見的軟體隱喻
更多資源
要點
第 3 章 三思而後行:前期的前置作業
3.1 前置作業的重要性
3.2 確認你所從事的軟體類型
3.3 問題定義的先決條件
3.4 需求的先決條件
3.5 架構的先決條件
3.6 花費在前期的前置作業上的時間長度
更多資源
要點
第 4 章 關鍵的「建構」決策
4.1 程式語言的選擇
4.2 程式設計約定
4.3 你在技術浪潮中的位置
4.4 選擇主要的建構實踐方法
要點
第二部分 建立高品質的程式碼
第 5 章 軟體建構中的設計
5.1 設計中的挑戰
5.2 關鍵的設計概念
5.3 設計構造塊:啟發式方法
5.4 設計實踐
5.5 對流行的設計方法的評論
更多資源
要點
第 6 章 工作類別
6.1 類別的基礎:抽象資料類型(ADTs)
6.2 良好的類別介面
6.3 有關設計和實作的議題
6.4 建立類別的原因
6.5 與具體程式語言相關的問題
6.6 超越類別:套件(Package)
更多資源
要點
第 7 章 高品質的子程式
7.1 建立子程式的正當理由
7.2 在子程式層上設計
7.3 好的子程式名稱
7.4 子程式可以寫多長
7.5 如何使用子程式參數
7.6 使用函式時要特別考慮的問題
7.7 Macro 子程式和行內子程式
要點
第 8 章 防禦性程式設計
8.1 保護程式免遭非法輸入資料的破壞
8.2 斷言
8.3 錯誤處理技術
8.4 例外(Exceptions)
8.5 隔離程式,使之包容由錯誤造成的損害
8.6 輔助除錯的程式碼
8.7 決定在產品程式碼中該保留多少防禦性程式碼
8.8 對防禦性程式設計採取防禦的姿態
更多資源
要點
第 9 章 虛擬碼程式設計流程
9.1 建立類別和子程式的步驟概述
9.2 如何寫好程序的虛擬碼
9.3 透過PPP 建立子程式
9.4 PPP 的替代方案
要點
第三部分 變數
第 10 章 使用變數的一般事項
10.1 資料認知
10.2 輕鬆掌握變數定義
10.3 變數初始化原則
10.4 作用範圍
10.5 持續性
10.6 綁定時間
10.7 資料類型和控制結構之間的關係
10.8 為變數指定單一用途
要點
第 11 章 變數名稱的力量
11.1 選擇好變數名稱的注意事項
11.2 為特定型別的資料命名
11.3 命名規則的力量
11.4 非正式命名規則
11.5 標準前綴
11.6 建立具備可讀性的短名稱
11.7 應該避免的名稱
要點
第 12 章 基本資料型別
12.1 數值概論
12.2 整數
12.3 浮點數
12.4 字元和字串
12.5 布林變數
12.6 列舉型別
12.7 具名常數
12.8 陣列
12.9 建立你自己的型別(型別別名)
要點
第 13 章 不常見的資料型別
13.1 結構體
13.2 指標
13.3 全域資料
更多資源
要點
第四部分 語句
第 14 章 組織直線碼
14.1 必須有明確順序的述句
14.2 順序無關的述句
要點
第 15 章 使用條件述句
15.1 if 述句
15.2 case 述句
要點
第 16 章 控制迴圈
16.1 選擇迴圈的種類
16.2 迴圈控制
16.3 輕鬆建立迴圈——由內而外
16.4 迴圈和陣列的關係
要點
第 17 章 不常見的控制結構
17.1 子程式中的多處返回
17.2 遞迴
17.3 goto
17.4 針對不常見控制結構的觀點
更多資源
要點
第 18 章 表格驅動法
18.1 表格驅動法使用總則
18.2 直接存取表
18.3 索引存取表
18.4 階梯存取表
18.5 表格查詢的其他範例
要點
第 19 章 一般控制問題
19.1 布林運算式
19.2 複合述句(述句區塊)
19.3 空述句
19.4 馴服危險的深層巢狀結構
19.5 程式設計基礎:結構化程式設計
19.6 控制結構與複雜度
要點
第五部分 程式碼改善
第 20 章 軟體品質概述
20.1 軟體品質的特性
20.2 改善軟體品質的技術
20.3 不同品質保障技術的相對效能
20.4 什麼時候進行品質保證工作
20.5 軟體品質的一般原則
更多資源
要點
第 21 章 協同建構
21.1 協同開發實踐概要
21.2 結對程式設計
21.3 正式檢查
21.4 其他類型的協同開發實作
21.5 協同建構技術的比較
更多資源
要點
第 22 章 開發者測試
22.1 開發者測試在軟體品質中的角色
22.2 開發者測試的推薦方法
22.3 測試技巧錦囊
22.4 典型錯誤
22.5 測試支援工具
22.6 改善測試程序
22.7 保留測試記錄
更多資源
要點
第 23 章 除錯
23.1 除錯概述
23.2 尋找缺陷
23.3 修正缺陷
23.4 除錯中的心理因素
23.5 除錯工具——明顯的和不那麼明顯的
更多資源
要點
第 24 章 重構
24.1 軟體演化的類型
24.2 重構簡介
24.3 特定的重構
24.4 安全的重構
24.5 重構策略
更多資源
要點
第 25 章 程式碼調整策略
25.1 效能概述
25.2 程式碼調整簡介
25.3 脂肪和糖漿
25.4 效能測量
25.5 反覆調整
25.6 程式碼調整方法總結
更多資源
要點
第 26 章 程式碼調整技術
26.1 邏輯
26.2 迴圈
26.3 資料變換
26.4 運算式
26.5 子程式
26.6 用低階語言重寫程式碼
26.7 變得越多,事情反而越沒變
更多資源
要點
第六部分 系統考慮
第 27 章 程式規模對建構的影響
27.1 交流和規模
27.2 專案規模的範圍
27.3 專案規模對錯誤的影響
27.4 專案規模對生產率的影響
27.5 專案規模對開發活動的影響
更多資源
要點
第 28 章 管理建構
28.1 鼓勵撰寫良好的程式
28.2 設定管理
28.3 評估建構進度表
28.4 度量
28.5 把程式設計師當人看
28.6 管理你的管理者
28.7 有關管理建構的額外資源
要點
第 29 章 整合
29.1 整合方式的重要性
29.2 整合頻率——階段式整合還是增量整合
29.3 增量整合的策略
29.4 每日組建與冒煙測試
更多資源
要點
第 30 章 程式設計工具
30.1 設計工具
30.2 原始碼工具
30.3 可執行碼工具
30.4 工具導向的環境
30.5 打造你自己的程式設計工具
30.6 工具夢想世界
更多資源
要點
第七部分 軟體工藝
第 31 章 佈局與風格
31.1 佈局基本原則
31.2 佈局技術
31.3 佈局風格
31.4 控制結構的佈局
31.5 單條述句的佈局
31.6 註解的佈局
31.7 子程式的布局
31.8 類別的佈局
更多資源
要點
第 32 章 自我文件化程式碼
32.1 外部文件
32.2 程式設計風格的文件
32.3 註解或不註解
32.4 高效率註解之關鍵
32.5 註解技術
32.6 IEEE 標準
更多資源
要點
第 33 章 個人性格
33.1 個人性格是否和本書話題無關
33.2 聰明和謙虛
33.3 求知慾
33.4 誠實
33.5 交流與合作
33.6 創造力和紀律
33.7 懶惰
33.8 不如你想像中那樣起作用的性格因素
33.9 習慣
更多資源
要點
第 34 章 軟體工藝的話題
34.1 征服複雜性
34.2 挑選開發程序
34.3 首先為人寫程式,其次才是為機器
34.4 用程式去創造適合的語言環境,而不是遷就它
34.5 藉助規範集中注意力
34.6 根據問題領域的術語做程式設計
34.7 注意落石
34.8 迭代,反反覆覆,一次又一次
34.9 汝當分離軟體與信仰
要點
第 35 章 何處尋找更多資訊
35.1 關於軟體建構的資訊
35.2 建構以外的話題
35.3 期刊
35.4 軟體開發者的閱讀計劃
35.5 參加專業組織
參考文獻
第 1 章 歡迎進入軟體建構的世界
1.1 什麼是軟體建構
1.2 軟體建構為何如此重要
1.3 如何閱讀本書
要點
第 2 章 藉由隱喻進一步理解軟體開發
2.1 隱喻的重要性
2.2 如何使用軟體隱喻
2.3 常見的軟體隱喻
更多資源
要點
第 3 章 三思而後行:前期的前置作業
3.1 前置作業的重要性
3.2 確認你所從事的軟體類型
3.3 問題定義的先決條件
3.4 需求的先決條件
3.5 架構的先決條件
3.6 花費在前期的前置作業上的時間長度
更多資源
要點
第 4 章 關鍵的「建構」決策
4.1 程式語言的選擇
4.2 程式設計約定
4.3 你在技術浪潮中的位置
4.4 選擇主要的建構實踐方法
要點
第二部分 建立高品質的程式碼
第 5 章 軟體建構中的設計
5.1 設計中的挑戰
5.2 關鍵的設計概念
5.3 設計構造塊:啟發式方法
5.4 設計實踐
5.5 對流行的設計方法的評論
更多資源
要點
第 6 章 工作類別
6.1 類別的基礎:抽象資料類型(ADTs)
6.2 良好的類別介面
6.3 有關設計和實作的議題
6.4 建立類別的原因
6.5 與具體程式語言相關的問題
6.6 超越類別:套件(Package)
更多資源
要點
第 7 章 高品質的子程式
7.1 建立子程式的正當理由
7.2 在子程式層上設計
7.3 好的子程式名稱
7.4 子程式可以寫多長
7.5 如何使用子程式參數
7.6 使用函式時要特別考慮的問題
7.7 Macro 子程式和行內子程式
要點
第 8 章 防禦性程式設計
8.1 保護程式免遭非法輸入資料的破壞
8.2 斷言
8.3 錯誤處理技術
8.4 例外(Exceptions)
8.5 隔離程式,使之包容由錯誤造成的損害
8.6 輔助除錯的程式碼
8.7 決定在產品程式碼中該保留多少防禦性程式碼
8.8 對防禦性程式設計採取防禦的姿態
更多資源
要點
第 9 章 虛擬碼程式設計流程
9.1 建立類別和子程式的步驟概述
9.2 如何寫好程序的虛擬碼
9.3 透過PPP 建立子程式
9.4 PPP 的替代方案
要點
第三部分 變數
第 10 章 使用變數的一般事項
10.1 資料認知
10.2 輕鬆掌握變數定義
10.3 變數初始化原則
10.4 作用範圍
10.5 持續性
10.6 綁定時間
10.7 資料類型和控制結構之間的關係
10.8 為變數指定單一用途
要點
第 11 章 變數名稱的力量
11.1 選擇好變數名稱的注意事項
11.2 為特定型別的資料命名
11.3 命名規則的力量
11.4 非正式命名規則
11.5 標準前綴
11.6 建立具備可讀性的短名稱
11.7 應該避免的名稱
要點
第 12 章 基本資料型別
12.1 數值概論
12.2 整數
12.3 浮點數
12.4 字元和字串
12.5 布林變數
12.6 列舉型別
12.7 具名常數
12.8 陣列
12.9 建立你自己的型別(型別別名)
要點
第 13 章 不常見的資料型別
13.1 結構體
13.2 指標
13.3 全域資料
更多資源
要點
第四部分 語句
第 14 章 組織直線碼
14.1 必須有明確順序的述句
14.2 順序無關的述句
要點
第 15 章 使用條件述句
15.1 if 述句
15.2 case 述句
要點
第 16 章 控制迴圈
16.1 選擇迴圈的種類
16.2 迴圈控制
16.3 輕鬆建立迴圈——由內而外
16.4 迴圈和陣列的關係
要點
第 17 章 不常見的控制結構
17.1 子程式中的多處返回
17.2 遞迴
17.3 goto
17.4 針對不常見控制結構的觀點
更多資源
要點
第 18 章 表格驅動法
18.1 表格驅動法使用總則
18.2 直接存取表
18.3 索引存取表
18.4 階梯存取表
18.5 表格查詢的其他範例
要點
第 19 章 一般控制問題
19.1 布林運算式
19.2 複合述句(述句區塊)
19.3 空述句
19.4 馴服危險的深層巢狀結構
19.5 程式設計基礎:結構化程式設計
19.6 控制結構與複雜度
要點
第五部分 程式碼改善
第 20 章 軟體品質概述
20.1 軟體品質的特性
20.2 改善軟體品質的技術
20.3 不同品質保障技術的相對效能
20.4 什麼時候進行品質保證工作
20.5 軟體品質的一般原則
更多資源
要點
第 21 章 協同建構
21.1 協同開發實踐概要
21.2 結對程式設計
21.3 正式檢查
21.4 其他類型的協同開發實作
21.5 協同建構技術的比較
更多資源
要點
第 22 章 開發者測試
22.1 開發者測試在軟體品質中的角色
22.2 開發者測試的推薦方法
22.3 測試技巧錦囊
22.4 典型錯誤
22.5 測試支援工具
22.6 改善測試程序
22.7 保留測試記錄
更多資源
要點
第 23 章 除錯
23.1 除錯概述
23.2 尋找缺陷
23.3 修正缺陷
23.4 除錯中的心理因素
23.5 除錯工具——明顯的和不那麼明顯的
更多資源
要點
第 24 章 重構
24.1 軟體演化的類型
24.2 重構簡介
24.3 特定的重構
24.4 安全的重構
24.5 重構策略
更多資源
要點
第 25 章 程式碼調整策略
25.1 效能概述
25.2 程式碼調整簡介
25.3 脂肪和糖漿
25.4 效能測量
25.5 反覆調整
25.6 程式碼調整方法總結
更多資源
要點
第 26 章 程式碼調整技術
26.1 邏輯
26.2 迴圈
26.3 資料變換
26.4 運算式
26.5 子程式
26.6 用低階語言重寫程式碼
26.7 變得越多,事情反而越沒變
更多資源
要點
第六部分 系統考慮
第 27 章 程式規模對建構的影響
27.1 交流和規模
27.2 專案規模的範圍
27.3 專案規模對錯誤的影響
27.4 專案規模對生產率的影響
27.5 專案規模對開發活動的影響
更多資源
要點
第 28 章 管理建構
28.1 鼓勵撰寫良好的程式
28.2 設定管理
28.3 評估建構進度表
28.4 度量
28.5 把程式設計師當人看
28.6 管理你的管理者
28.7 有關管理建構的額外資源
要點
第 29 章 整合
29.1 整合方式的重要性
29.2 整合頻率——階段式整合還是增量整合
29.3 增量整合的策略
29.4 每日組建與冒煙測試
更多資源
要點
第 30 章 程式設計工具
30.1 設計工具
30.2 原始碼工具
30.3 可執行碼工具
30.4 工具導向的環境
30.5 打造你自己的程式設計工具
30.6 工具夢想世界
更多資源
要點
第七部分 軟體工藝
第 31 章 佈局與風格
31.1 佈局基本原則
31.2 佈局技術
31.3 佈局風格
31.4 控制結構的佈局
31.5 單條述句的佈局
31.6 註解的佈局
31.7 子程式的布局
31.8 類別的佈局
更多資源
要點
第 32 章 自我文件化程式碼
32.1 外部文件
32.2 程式設計風格的文件
32.3 註解或不註解
32.4 高效率註解之關鍵
32.5 註解技術
32.6 IEEE 標準
更多資源
要點
第 33 章 個人性格
33.1 個人性格是否和本書話題無關
33.2 聰明和謙虛
33.3 求知慾
33.4 誠實
33.5 交流與合作
33.6 創造力和紀律
33.7 懶惰
33.8 不如你想像中那樣起作用的性格因素
33.9 習慣
更多資源
要點
第 34 章 軟體工藝的話題
34.1 征服複雜性
34.2 挑選開發程序
34.3 首先為人寫程式,其次才是為機器
34.4 用程式去創造適合的語言環境,而不是遷就它
34.5 藉助規範集中注意力
34.6 根據問題領域的術語做程式設計
34.7 注意落石
34.8 迭代,反反覆覆,一次又一次
34.9 汝當分離軟體與信仰
要點
第 35 章 何處尋找更多資訊
35.1 關於軟體建構的資訊
35.2 建構以外的話題
35.3 期刊
35.4 軟體開發者的閱讀計劃
35.5 參加專業組織
參考文獻
網路書店
類別
折扣
價格
-
二手書18折$235
-
新書7折$891
-
新書71折$912
-
新書78折$998
-
新書79折$1011
-
新書79折$1011
-
新書85折$1088
-
新書9折$1152