AZ-1的第二次博客作業
AZ-1 - 博客園 (cnblogs.com)
前言
題量
- 題目集4題量較小,
- 題目集5題量較小,
- 期中考試題量中等,
難度
- 題目集4雖然只有一道題,但是題目很長,難度很大,讓人在看到的時就心生畏懼,選單4在選單3的基礎上增加了大量的錯誤輸入,大大增加了程式的代碼量,很考驗編程程序中的細心程度,也很考驗對正則運算式的掌握程度,
- 題目集5也只有一道題目,難度相對于選單4來說低了一點,選單5是選單3的另一個分支,在特色菜的基礎上增加了菜的口味度和種類,并且需要計算每張桌子的平均口味度,也為桌增加了電話號碼和人名,總體來講并不簡單,
- 期中考試總共有四道題目,除第四題外題目難度都不高,第一題是創建圓類;第二題是創建點類和矩形類;第三題是從圓類和矩形類中提取出一個共同的父類,實作多型;第四題是實作給定的介面設計,
知識點
- 選單4的知識點主要是正則運算式、對代碼運行程序的優化以及內容的擴充,
- 選單5的知識點主要是正則運算式、對代碼運行程序的優化以及內容的擴充,
- 期中考試的主要知識點主要是程式設計中類的設計、程式設計中類結構設計、程式設計中的繼承與多型和程式設計中的抽象類與介面,
題目集四 7-1 選單計價程式-4
設計與分析
- SourceMonitor生成報表:

- idea生成類圖:

這個程式由7個類組成,分別是Dish類、Menu類、Record類、Order類、Main類、Time類和Table類,
Dish類包含菜的名字、打折后價格、Boolean型數flag(這道菜是否是特色菜的標志)、Dish的構造方法和每道菜的價格計算方法,
Menu類包含一個Dish陣列、整型數i(記錄選單中共有幾道菜)、Menu的構造方法、向Menu中添加菜的方法和查找菜品的方法,
Record類中包含用戶點的菜、每道菜的份量、每道菜的數量、點菜的序號、Boolean數flag(標志用戶點的是不是特色菜)、這條記錄的價格、Record的構造方法和計算這條記錄的價格的方法,
Order類中包含Record陣列、整形數num(記錄訂單中有幾條點菜記錄)、整型數lastOrderNum(記錄該訂單中的上一條點單記錄的點菜序號)、計算總價格的方法、添加點菜記錄的方法和洗掉點菜記錄的方法,
Time類中包含Calendar類物件cal、整型數(year、month、day、hour、minute、second、week)、Time的建構式、judge方法判斷Table物件是否在營業時間,
Table類包含Time類物件time、Order類物件order、anotherOrder(幫別桌點菜的記錄)、String物件num(桌號)、double物件discount(記錄該桌的折扣)、totalPrice(該桌打折后的總價)、originalPrice(該桌的初始價格)、Boolean型物件flag(判斷該桌是否第一次點菜)、flag1判斷特色菜是否打折、judge方法判斷該桌打幾折、searchTable方法根據桌號找桌物件,
踩坑心得
- 我一開始沒有使用正則運算式來規范輸入,而是單純地使用if陳述句判斷輸入是否合規,這導致我的程式不能準確地判斷用戶輸入的情況,相應地輸出各種錯誤輸入的輸出提示,
心得:熟練地使用正則運算式可以準確地篩選出正確的輸入形式,剔除各種各樣奇奇怪怪的錯誤輸入,
- 不能亂加訪問修飾詞
給Dish中的dishName加private修飾詞:
![]()
心得:現在我們的程式只要能夠運行拿滿分就夠了,目前還不會涉及到資料的私密性,沒有必要把資料的訪問權限設定地太高,
- 方法中傳入的引數名字盡量與該類中存在的變數名不同,如果相同,要用this.指代該類中的變數:

心得:雖然我們幾乎可以給變數起無數種名字,但是果然還是同樣的名字方便日后理解,
- 一個錯誤輸入可能同時符合多種錯誤輸出情況,但錯誤輸出有優先級,
正確輸出:

錯誤輸出:

心得:在撰寫程式時要時刻記得題目要求,內心要有一個程式運行的大概的流程,按照要求一步一步地撰寫程式,
改進建議
- 建議1:Order類中的Record陣列可以設計成動態陣列,增加程式靈活性,
- 建議2:去除一些運行程序中沒有必要出現的變數,
題目集五 7-1 選單計價程式-5
設計與分析
- SourceMonitor生成報表:

- idea生成類圖:

這個程式由8個類組成,分別是Dish類、Menu類、Record類、Order類、Main類、Time類、Table類和Customer類,
Dish類包含菜的名字、打折后單價、Boolean物件flag(這道菜是否是特色菜的標志,如果這道菜是特色菜,String物件記錄該特色菜的種類(即川菜、浙菜等))、Dish的構造方法和每道菜的價格計算方法,
Menu類包含一個Dish陣列、整型數i(記錄選單中共有幾道菜)、Menu的構造方法、向Menu中添加菜的方法和查找菜品的方法,
Record類中包含用戶點的菜、每道菜的份量、每道菜的數量、點菜的序號、Boolean物件flag(標志用戶點的是不是特色菜,如果是特色菜,String物件記錄該特色菜的種類(即川菜、浙菜等))、這條記錄的價格、Record的構造方法和計算這條記錄的價格的方法,
Order類中包含Record陣列、整形數num(記錄訂單中有幾條點菜記錄)、計算訂單總價格的方法、添加點菜記錄的方法和洗掉點菜記錄的方法,
Time類中包含Calendar類物件cal、整型數(year、month、day、hour、minute、second、week)、Time的建構式、judge方法判斷Table物件是否在營業時間,
Table類中包含String物件name和phoneNumber、Time類物件time、Order類物件order、anotherOrder(幫別桌點菜的記錄)、String物件num(桌號)、double物件discount(記錄該桌的折扣)、totalPrice(該桌打折后的總價)、originalPrice(該桌的初始價格)、Boolean物件flag1判斷特色菜是否打折、double物件spicy(儲存該桌辣菜的總辣度)、sweetNess(儲存該桌甜菜的總辣度)、acidity(儲存該桌酸菜的總辣度)、int物件spicyAmount(儲存該桌辣菜的總數量)、sweetNessAmount(儲存該桌甜菜的總數量)、acidityAmount(儲存該桌酸菜的總數量)、boolean物件spicyFlag(該桌有沒有點辣菜的標志)、sweetFlag(該桌有沒有點甜菜的標志)、acidityFlag(該桌有沒有點酸菜的標志)、void judge()方法判斷該桌打幾折、searchTable方法根據桌號找桌物件、String judge(String kind,int a)把平均口味度轉化為字符標準、taste方法計算該桌的口味度的總和以及特色菜的總量、tasteCalculation方法計算該桌特色菜的平均口味度、showTaste方法輸出該桌的平均口味度的字符形式以及每種口味的特色菜的總量,
Customer類中包含String物件name、phoneNumber、double物件totalPrice(這個顧客點菜的總價格)、record方法記錄該顧客的名字,電話號碼以及點菜的總價格,
踩坑心得
- 程式有兩種輸入錯誤提示,“** does not exist”和“delete error”,這時需要注意這兩個提示的輸出順序,否則會提示格式錯誤
錯誤的輸出順序:

正確的輸出順序:

心得:答案對固然重要,但是也要格式對才能得分,
- 訂單總價的計算程序是菜的原價在按份量計算一次后進行四舍五入,再在乘以數量以及折扣后進行一次四舍五入,最后再加在一起即為訂單總價格,如果是加在一起后再進行打折會計算出不同的答案,
錯位的價格計算順序:

正確的價格計算順序:
4
心得:在撰寫程式前應該認真地研讀題目要求,思考清楚程式運行程序再進行撰寫,避免出現邏輯錯誤,
- 為別桌點特色菜時被點菜的桌的口味度及特色菜總數量不變(不小心遺漏了在為別桌點菜時給別桌增加口味度總量以及特色菜總數量的程序)
輸入
東坡肉 浙菜 25 T
油淋生菜 9
蜜汁灌藕 浙菜 10 T
刀削面 晉菜 10 T
醋澆羊肉 晉菜 30 T
麻婆豆腐 川菜 12 T
麻辣雞絲 川菜 15 T
table 1 : tom 13605054400 2023/5/6 12/30/00
1 油淋生菜 2 1
table 2 : jerry 18100334566 2023/5/1 12/30/00
1 1 醋澆羊肉 4 1 2
3 麻婆豆腐 2 2 1
4 麻辣雞絲 2 3 3
end
錯誤輸出:

正確輸出:

心得:撰寫程式的程序中要專注,避免遺漏一些簡單的部分,
- 如果某桌沒有點特色菜則要在輸出table *: *** ***后加一個空格
錯誤輸出:

正確輸出:

心得:雖然題目中沒有給出相應的測驗樣例,但我們可以在不斷的試錯中把題目需要的格式測出來
- 如果點了特色菜,但是該桌的平均口味度為零的時候要輸出不辣、不甜或者不酸,
錯誤輸出:

正確輸出:

心得:在撰寫程式前應該認真地研讀題目要求,思考清楚程式運行程序再進行撰寫,避免輸出的答案與題目要求不符合,
改進建議
- 建議1:Menu中的dishes陣列和Order中的records陣列都可以改為動態陣列,增加程式的靈活性,
- 建議2:Table中的name物件和phoneNumber物件可以替換成一個Customer物件,
- 建議3:Table類中的與口味有關的引數可以整合為一個口味類,
- 建議4:創建一個特色菜類作為Dish類的子類,
期中考試 7-1 測驗1-圓類設計
設計與分析
- idea生成類圖:

這個程式由2個類組成,分別是Circle類和Main類,
Ciecle類中包含r(半徑)、getS方法、setR方法和Circle的構造方法,
踩坑心得
- 題目要求當輸入的半徑范圍超過(0,+∞)時輸出Wrong Format不輸出面積,
錯誤輸出:

正確輸出:
![]()
心得:編程時要注意題目的要求,
改進建議
- 建議1:可以在Circle類中增加getR的方法,在getS方法中用getR代替R,
期中考試 7-2 測驗2-類結構設計
設計與分析
- idea生成類圖:

這個程式由3個類組成,分別是Point類、Rectangle類和Main類,
Point類中包含x、y、getY方法、getX方法、setX方法、setY方法和Point的構造方法,
Rectangle類中包含Point類物件lowerRightPoint和toLeftPoint、setLowerRightPoint方法、getLength方法、getToLeftPoint方法、setToLeftPoint方法、getLowerRightPoint方法、getHeight方法、getArea方法和Rectangle的構造方法,
期中考試 7-3 測驗3-繼承與多型
設計與分析
- idea生成類圖:

這個程式由5個類組成,分別是Shape類、Circle類、Point類、Rectangle類和Main類,Shape類是Rectangle類和Circle類的父類,
Point類中包含x、y、getY方法、getX方法、setX方法、setY方法和Point的構造方法,
Rectangle類中包含Point類物件lowerRightPoint和toLeftPoint、setLowerRightPoint方法、getLength方法、getToLeftPoint方法、setToLeftPoint方法、getLowerRightPoint方法、getHeight方法、getArea方法和Rectangle的構造方法,
Ciecle類中包含r(半徑)、getS方法、setR方法和Circle的構造方法,
Shape類中包含getArea方法和Shape的構造方法,
踩坑心得
- 把我前兩題的代碼和第三題中提供的主方法不能順利地實作題目要求的功能,所以我為Circle的半徑賦初值為-1,若Circle的半徑最終的值為-1則輸出Wrong Format,
錯誤輸出:

正確輸出:

心得:為了實作功能可以使用一些不太合適的改動,
改進建議
- 建議1:可以把錯誤輸出寫在Shape的getArea方法中,
期中考試 7-4 測驗4-抽象類與介面
設計與分析
- idea生成類圖:

這個程式由5個類組成,分別是Shape類、Circle類、Point類、Rectangle類和Main類,Shape類是Rectangle類和Circle類的父類,
Point類中包含x、y、getY方法、getX方法、setX方法、setY方法和Point的構造方法,
Rectangle類中包含Point類物件lowerRightPoint和toLeftPoint、setLowerRightPoint方法、getLength方法、getToLeftPoint方法、setToLeftPoint方法、getLowerRightPoint方法、getHeight方法、getArea方法和Rectangle的構造方法,
Ciecle類中包含r(半徑)、getS方法、setR方法和Circle的構造方法,
Shape類中包含getArea方法和Shape的構造方法,Shape類實作了Comparable介面,方法為compareTo(Shape),
踩坑心得
- compareTo方法當傳入的Shape物件的area更大時輸出正值,更小時輸出負值是逆向排序,不符合要求,應該反過來,
錯誤輸出:

正確輸出:

心得:可以通過試錯來理解一些方法,
改進建議
- 建議1:把compareTo方法改為固定輸出1或-1,
總結
- 在6-9周的學習中我加深了對繼承關系的理解,掌握了部分正則運算式的用法,學會了介面的用法,學會了動態陣列的用法,
- 正則運算式的用法、介面的用法以及類與類之間的關系的劃分我還需要更進一步地學習,
- 課上講的一些東西我們不能立刻在作業中得以實踐,會導致我們在課上聽懂了,但是由于沒有課后習題的及時鞏固,最終忘記我們上課所學到的一些知識,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/552678.html
標籤:其他
上一篇:SpringBoot+MyBatis+MySQL電腦商城專案實戰(四)用戶注冊—控制層
下一篇:返回列表
