□莊 帥
《使用Java理解程序邏輯》是高職院校計算機應用技術相關專業必修的入門編程課程。它的知識特點是有很強的邏輯性,動手操作實踐性強。《使用Java理解程序邏輯》采用理論和實踐上機操作同時進行的教學模式。這門課程對學生的數學、英語、動手操作和自學能力要求都比較高。通過和學生溝通發現,很多學生認為《使用Java理解程序邏輯》課程中的知識點多,要求動手上機操作多,導致很多學生很難快速入門,不能運用理論知識解決實際問題。本文將通過“采用Java實現網上訂餐系統”項目的開發設計,使學生明白需要掌握什么知識、技能和“1+X”證書對標[1]。從而提高《使用Java理解程序邏輯》課程的教學質量以及教學效果。
(一)證書獲得。“大數據應用開發(Java)職業技能”的“1+X”等級證書一共分為三個等級證書[1],分別對應初級、中級、高級。每個等級的證書考試試題內容分為兩個部分,第一部分為理論知識考試,題型為選擇題,滿分100分,第二部分為上機實踐操作考試,題型為編程題,滿分100分。只有兩部分考試都及格,才能夠取得相應的證書。“大數據應用開發(Java)職業技能證書(初級)”的“1+X”證書對知識和技能的要求如下:學生能夠獨自搭建Java開發環境、掌握和運用基礎語法,包括運算符、流控制語句、數組等,理解和運用Java面向對象的思想、軟件測試、運維基礎等內容。取得“大數據應用開發(Java)職業技能”的“1+X”中的初級證書,可以從事大數據領域中的測試類工作[3]。
(二)人才培養目標。將計算機應用技術專業人才培養方案對學生掌握知識點、培養技能與素質的要求與“大數據應用開發(Java)職業技能證書(初級)”的“1+X”證書中對學生掌握知識點、培養技能與素質的要求進行融合。從知識、能力與素質目標三方面(見表1),重新設計《使用Java理解程序邏輯》上機實踐教學課程內容。引入項目驅動教學方法,采用實際開發應用的項目“采用Java實現網上訂餐系統”,通過對實際項目的學習,培養學生上機操作能力和團隊合作能力[2,4]。

表1
(三)實踐學時安排。實踐項目教學實施至少安排10學時,其中教師用3學時講解項目需求與整體設計思路,學生至少需7學時上機編碼完成項目中的類設計、實體類設計、測試類設計等。
以“采用Java實現網上訂餐系統”為例,對《使用Java理解程序邏輯》課程的實踐教學進行設計和探索。
(一)需求概述。網上訂餐越來越受到年輕人的青睞。現在要求開發一個網上訂餐系統,需要實現我要訂餐、查看餐袋、簽收訂單、刪除訂單、我要點贊和退出系統六個功能。
(二)問題分析。
1.使用數組對象保存訂單信息。根據本項目的需求分析可知,每條訂單的信息都包括訂餐人姓名、選擇菜品及份數、送餐時間、送餐地址、訂單狀態、總金額,并包括多條訂單信息,可以使用數組來保存多個相同類型的信息。創建OderingSet類,并在類中定義六個數組分別保存訂單的訂餐人姓名、選擇菜品及份數、送餐時間、送餐地址、訂單狀態、總金額,各數組中下標相同的元素組成一條訂單信息。
2.訪問訂單信息。創建OderingSet類的對象oSet后,對于該對象中的第i+1條訂單信息采用如下方式訪問:訂餐人名稱:oSet.name[i]、所選菜品信息:oSet.dishMegs[i]、送餐時間:oSet.times[i]、送餐地址:oSet.addresses[i]、訂單狀態:oSet.states[i]、訂單的總金額:oSet.sumPrinces[i]。
3.刪除訂單信息。若數組下標為delId的元素需要刪除,后面的元素依次前移一位,即后一位的數據覆蓋前一位的數據,采用如下方式實現。
for(int j=delId-1;j oSet.name[j]= oSet.name[j+1]; oSet.dishMegs[j]= oSet.dishMegs[j+1]; oSet.times[j]= oSet.times[j+1]; oSet.addresses[j]= oSet.addresses[j+1]; oSet.states[j]= oSet.states[j+1]; oSet.sumPrinces[j]= oSet.sumPrinces[j+1]; }依次實現后,將最后一個元素置為空。 4.計算訂單總金額。本項目中,在接受到訂單的菜品編號和份數后,通過菜品編號得到該菜品單價的保存位置,利用單價*份數公式計算出預定菜品的總金額。同時,按“菜品名+份數”格式,使用“+”運算符將菜品名稱和預定份數用字符串保存,如“紅燒鯉魚2份”。 利用三元運算符“?:”判斷訂單的總金額是否滿50元。如果訂單金額滿50元,免送餐費5元;否則加收5元送餐費。//計算送餐費double deliCharge=(sumPrice>=50)?0:50。 (三)項目需求。 1.數據初始化。 (1)創建項目OrderingM,創建類OderingSet,添加六個屬性:訂餐人姓名(name)、選擇菜品信息(dishMegs)、送餐時間(times)、送餐地址(addresses)、訂餐狀態(states)、總金額(sumPrices)。 (2)創建類OrderingUtil,生成供選擇的三種菜品名稱、單價和點贊數等信息。 (3)類OrderingUtil中,創建OrderingUtil類對象oSet,實現初始化數據的方法initial()。 初始化兩條訂單的信息,如表2所示。 表2 2.實現菜單切換。執行程序,輸出系統主菜單。用戶根據顯示的主菜單,輸入功能編號實現菜單顯示和菜單的切換。 (1)當輸入1~5時,輸出相關的菜單項信息。 (2)顯示“輸入0返回”。輸入0,則返回主菜單;否則,退出系統,終止程序的運行,輸出提示信息“謝謝使用,歡迎下次光臨!”。 3.實現查看餐袋。遍歷系統中已有的訂單,并逐條顯示輸出,內容包括序號、訂餐人姓名、訂餐信息(菜品名和份數)、送餐時間、送餐地址、狀態(已預定或已完成)、總金額。 4.實現我要訂餐。為用戶顯示系統中提供的菜肴信息,獲得訂餐人信息,形成訂單。每條訂單包含如下信息: (1)訂餐人姓名:要求用戶輸入。 (2)選擇菜品及份數:顯示三個供選擇的菜品序號、名稱、單價、點贊數,提示用戶輸入要選擇的菜品序號及份數。 (3)送餐時間:要求當天10到20點間整點送餐,要求用戶輸入10~20的整數,輸入錯誤,重復輸入。 (4)送餐地址:要求用戶輸入。 (5)狀態:訂單的當前狀態,有兩種狀態:0位已預定(默認狀態),1為已完成(訂單已簽收)。 (6)總金額,訂單總金額。總金額=菜品單價*份數+送餐費。其中,當單筆訂單金額到達50元時,免收送餐費;否則,需要繳納5元送餐費。 訂單成功后,顯示訂單信息。 5.實現簽收訂單。送餐完成后,要將用戶簽收訂單的狀態由“已預訂”修改為“已完成”。 (1)如果訂單的當前狀態為“已預定”,數組下標為用戶輸入的訂單序號減1,就簽收。 (2)如果訂單的當前狀態為“已完成”,數組下標為用戶輸入的訂單序號減1,不可簽收。 編寫方法sign(),接受要簽收的訂單序號。利用for循環結構遍歷全部訂單,通過if選擇結構判斷names數組中訂餐人姓名是否為null,訂單狀態是否為已預訂,且數組下標是指定訂單序號減1。如果條件成立,該訂單的狀態值修改為1(即已完成)。 6.實現刪除訂單。可以刪除系統中處于“已完成”狀態的訂單,具體要求如下。 (1)接受要刪除的訂單序號。 (2)如果指定的訂單的狀態為已完成且數組下標值為用戶輸入的訂單序號減1,執行刪除操作。 (3)如果指定訂單的狀態為已預訂且數組下標值為用戶輸入的訂單序號減1,不能刪除。 執行刪除操作,其他情況給出相應提示信息。 編寫方法delete(),分步實現以下功能:第一,根據用戶刪除的訂單序號,遍歷oSet對象的names數組,states數組,進行查找并刪除。第二,刪除oSet對象每個數組中對應的元素后,其后面的元素依次前移一位。 通過真實案例的項目教學實踐,學生全程參與了項目的需求分析、功能設計、實體類設計、實體操作類設計編碼等,對項目的開發流程有了一定的了解,在理論課上所學的《使用Java理解程序邏輯》課程的章節知識點通過項目實踐得到綜合運用,學生的學習積極性和自信心也得到相應的提高,進而增強了就業的內動力和競爭力。
三、教學效果