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