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

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