李 峰
(湖南工程學院 計算機與通信學院,湖南 湘潭 411104 )
面向對象C++課程的實訓應用
——以進銷存系統(tǒng)為例
李 峰
(湖南工程學院 計算機與通信學院,湖南 湘潭 411104 )
因為學生需要掌握很多復雜的技術,比如面向對象軟件的編程、團隊合作的技巧,所以對在校大學生系統(tǒng)地教授面向對象程序開發(fā)比較困難。但學生可以通過學習項目課程獲得軟件開發(fā)的實踐經(jīng)驗。因為需要學生能在規(guī)定時間內完成,設計這樣的項目課程有一定的挑戰(zhàn)性。項目設計課程應該靈活地適應學生多老師少的情況。為了避免抄襲,為不同的學生團隊布置不同的任務,這樣的設計使得項目具有可比性。2009年以來,我們使用進銷存系統(tǒng),一款基于C++的商業(yè)應用程序進行實訓,對進銷存系統(tǒng)的功能和教學效果進行了分析對比。
面向對象;C++;進銷存
項目軟件開發(fā)在C++中有很重要的作用。實際上學生需要大量的開發(fā)技巧和編程經(jīng)驗,學生不只是編寫一些能在一個小時內完成的小程序,更應該開發(fā)大型應用系統(tǒng)。
國際上ACM(國際計算計學會)、IEEE(電氣和電子工程師協(xié)會)倡導的大學生軟件工程課程要求學生不但能完成個人任務而且能勝任團隊協(xié)作,學生在強調團隊紀律的重要性的基礎上應能清楚團隊精神和團隊角色定位。團隊紀律必須建立在項目截止日期、項目進展,團隊交流基礎之上。
就軟件發(fā)展本身來說,設計一款好的項目課程是很困難的,學生不得不面對多種挑戰(zhàn),比如,面向對象編程的技術,團隊合作,項目最后截止日期,對于學生團隊來說,這是一項嚴峻的挑戰(zhàn)。為了保證C++課程質量,我們應用了一套基于C++的應用項目軟件——進銷存系統(tǒng)。從2009年以來我們使用這套系統(tǒng)作為面向對象程序課程的實訓系統(tǒng)。
(1)無論是理論學習還是實踐學習,學生們往往一開始就加入項目團隊,為了完成項目,學生不得不在項目中間找出足夠的信息,然后學習怎么去運用這些信息。
(2)對于教師來說,很容易找到大量的難度不一的項目,由于這些項目是在相同的框架下面,所以在這些項目下進行實訓,結果是可比的。
(3)對學生來說擴展項目比單純地去設計它更容易,而且項目的框架提供了許多立馬可用的部分。
(4)初學的學生可以養(yǎng)成很好的學習習慣,比如,修改已經(jīng)設計好的框架進行編程,因此,授課模式可以很靈活。為了提高教學效果,我們提出了框架的重復使用,我們教學的目的就是讓學生在編寫程序時重復使用框架,鍛煉出面向對象的能力。
雖然我們在2009年開始就使用這個程序,進銷存系統(tǒng)依然是實驗軟件。通過學生對軟件的使用,我們獲得了學習效果的反饋。正如我們預期的那樣,當學生擴展或者加強框架的時候,學生們獲得了提高。同時,我們也不斷升級該程序保證了程序的時效性。
面向對象的軟件開發(fā)是面向對象教學中的核心。[1,2]
在這塊領域眾所周知的問題是需要相對來說比較長的時間讓學生適應用面向對象的思想來思考解決,而且學生需要做到團隊協(xié)作。
我們反復利用現(xiàn)有的進銷存系統(tǒng),沒有開發(fā)新版本,這是為了讓學生自己發(fā)現(xiàn)如何重復利用框架。學生需要靈活地思考軟件開發(fā)的過程,要認識到軟件有生命周期,要認識到軟件需求分析[3-5]的重要性,要能理解并能夠使用軟件框架模式。
在教學中,我們將教學分為2個部分,包括15周的課程學習和12周的項目實踐,接下來,我們給出所授課程的主要內容和時間節(jié)點。[6]
基于C++的程序設計課程教授速度快、強度大,[7-8]課程以C程序設計課程為基礎,項目實踐課程為其后續(xù)課程(見圖1),課程覆蓋了學生們在大學里面的計算機的所有課程和知識,例如學生會學到web設計,GUI圖形設計,系統(tǒng)軟件設計和開發(fā)。
表一 項目課程內容和時間節(jié)點表
理論課程只提供學生完成整個項目所需要的基礎知識,但實訓課程可以提供給學生更多的實踐機會。學生如果想學得更深,可以在課程之后再繼續(xù)學習。
在項目課程里,我們組織同學分成四到六組,每個組都設有主程序員、輔助程序員、秘書、系統(tǒng)測試員、管理者的角色,除了擔任這些角色之外,每個學生還要承擔編程的任務。團隊中由高年級學生擔任助教,助教同時也被項目領導所考察。助教有雙層角色,首先是學生的顧問,其次是項目軟件的客戶。實訓中學生不但可以面對面的交流技術問題,而且可以在論壇中展示項目成果。
為了提高教學效果,課程開通了網(wǎng)上交流平臺,并嚴格執(zhí)行項目進度。
網(wǎng)上交流意味所有信息都在線發(fā)布。包括框架、文檔、指導書、定制的個人項目、學生團隊要求。在項目的初始階段,項目團隊必須在線發(fā)布他們的項目解決方法;在項目的末尾階段,項目團隊必須以口頭形式向老師或者助教匯報,并且在網(wǎng)頁上發(fā)布項目結果。這種監(jiān)管方式行之有效,然而,我們無法精確預測項目進程。因此,也無法在初學學生的第一個項目中給予精確的指導。
嚴格執(zhí)行項目進度必須保證項目會按時完成。項目過程被嚴格執(zhí)行,在表一中列出關鍵階段的時間節(jié)點。項目團隊允許增加開發(fā)工作量,但仍然要嚴格執(zhí)行項目進度。
項目最后的結果包括展示程序代碼、回答提出的問題,所有答辯都需要助教或者課程老師來參與。實踐證明項目能夠激起大多數(shù)組員的興趣。
進銷存程序提供貨物或者服務。軟件包括買賣商品、租用設備、接受訂單、處理售后、維修清理等模塊。管理員的責任包括會計、按時檢驗庫存、現(xiàn)金結算、按時訂貨、增加新貨物、從碟片銷售到餐飲管理服務到航空訂票系統(tǒng)都可以應用這個軟件,但軟件的容量不是很大,現(xiàn)在的版本只適合教學。如果要深入開發(fā)適合商用的版本,則需要更多的知識背景,比如分布式的數(shù)據(jù)庫系統(tǒng)。對學生來說,這樣的項目實訓課程要求學生所具備知識背景顯然超出了學生知識范疇。
軟件能應用于實際而且提供了必要的升級功能,的實際商用軟件不具備這些功能,增加這些功能是為了提高我們的教學的效果。而且升級功能模塊不需要花很多時間就能夠檢測出學生程序的靈活性,而且能讓學生集中更多的時間在程序開發(fā)上面。
程序的核心功能如下:
系統(tǒng)要求實現(xiàn)基本資料管理、進貨管理、銷售管理、庫存管理、財務管理、自動編制記帳憑證、營業(yè)員的提成查詢、各分機的銷售情況匯總、數(shù)據(jù)庫管理、數(shù)據(jù)庫備份、恢復、期初建賬等管理功能,支持如下要求:
(1)支持單倉/多倉或總店/分店管理體系,可以管理任意分倉或分店、任意品種的庫存。
(2)支持條形碼功能。您可以自定義條形碼,設計、打印各種規(guī)格的條碼標簽,省去了購買條碼打印機的開支。
(3)員工提成方式多樣,可針對每個商品設置提成三種提成方式:數(shù)量提成率、銷售額提成率及銷售毛利提成率,員工的業(yè)績及提成一目了然。
(4)操作權限設置功能強大。既可以設置各種菜單級別的操作權限,也可以設置“成本管理權”“會員管理權”“單據(jù)刪除權”“銷售退貨權”“售價調整權” 及“銷售反確認權”等權限。
(5)訂貨功能大。軟件可根據(jù)商品資料中設置的最高庫存、最低庫存及當前庫存自動升級定貨清單,也可以通過提取補貨數(shù)據(jù)生成定貨清單,讓訂貨工作輕松、方便。
(6)獨創(chuàng)的單據(jù)確認與反確認功能,方便用戶對單據(jù)輸入、修改。
(7)批發(fā)價、零售價可自動生成,減輕了定價的工作量。
(8)功能強大的各類統(tǒng)計報表,能提供詳盡的營業(yè)報告,能對商品進、銷、存及利潤等財務狀況了如指掌。
(9)所有單據(jù)、報表均可以在打印前預覽,并且可以導出為Excel文件,然后根據(jù)實際需要進行特別編排處理。所有單據(jù)的打印格式均可以重新設計。
(10)有專業(yè)的前臺POS銷售功能。
(11)“傻瓜化、人性化”設計的財務管理,簡單易用,不懂會計、計算機也能輕松應對編制記帳憑證、登記記帳憑證、記帳憑證查詢、會計帳冊查詢、損益表查詢、資產(chǎn)負債表查詢等操作。
(12)常用工具軟件豐富。迷你計算器、帳套數(shù)據(jù)的導入導出、帳套初始化及帳套壓縮或修復等為維護系統(tǒng)的正常運行提供了強有力的保障。
為了平衡項目設計和實現(xiàn)之間的矛盾,我們讓學生用系統(tǒng)的方法來進行設計,而不是拷貝代碼。整個過程我們努力讓學生感到從設計到完成是件很輕松的事,例如,為了完成項目我們使用的一種清晰的項目結構,這些結構從模型的使用到應用的完成都提供給學生清晰的思路。
在項目中,我們強調重復使用的設計模式和框架,我們的目的就是讓學生可以重復使用設計模式和框架。學生從前面的課程中可能熟悉了其中的一些模式和框架,但對于其余的模式和框架,他們在實訓中可能首次遇到。
我們鼓勵學生使用這些模式和框架。比如,適配器模型、橋接模型,[8]或者反轉控制模型。[9]實際我們使用修改后的模式和框架以便于和學生和助教討論。
設計的關鍵就是使學生能夠重復使用現(xiàn)有的模式和框架。早期的進銷存版本因為設計缺陷讓學生覺得實驗很難,所以現(xiàn)在的版本被簡化很多。但實際上有缺陷的設計版本能夠讓學生從中學習到更多的經(jīng)驗。
每次實訓以后,我們收集了實驗數(shù)據(jù),通過這些實驗數(shù)據(jù)和學生們的反映,我們有了第一手的反饋資料。通過這些反饋資料我們得出以下經(jīng)驗。
1.使用框架教學有效地學習,常常要花很長的時間,而且是一項艱巨的任務,有研究員已經(jīng)給出了他們的研究結果。[10,11]我們的研究表明學習項目的時間只占整個項目時間的30%,項目中學生往往會花費大量時間在桌面開發(fā)和網(wǎng)頁開發(fā)中。這是由于桌面開發(fā)和網(wǎng)頁開發(fā)只是基于學生的主觀認識,桌面開發(fā)花費大量的時間是由于很多學生不了解如何使用復雜的lib-Phenom框架。進銷存應用程序提供GUI的交互界面,在基于lib-Phenom桌面編寫程序時候,用GUI的交互界面要容易得多,而學生們常常認為他們能夠編寫出更好的GUI。
2.學生們編程就意味著教他們如何重復使用面相對象程序中的框架。學生們常常由于團隊中新加入的學生而感到驚奇,因此他們試圖回避框架的開發(fā),由此退出比賽[12,13]。研究發(fā)現(xiàn)助教的態(tài)度強烈地影響了框架的重復使用率,假如助教強調框架的重復使用,學生團隊會照做,若助教不重視重復使用,那么即使有些方法已經(jīng)被框架開發(fā)出來了學生也會使用他們自己的方法來開發(fā)程序(見表二)。
表二 學生在實訓中使用C++框架對比 單位:人
3.在項目初始階段,學生們要求根據(jù)前面的原始設計來編制程序,然后在項目分析階段和設計階段用UML編程??蚣苁褂玫臅r機很重要。根據(jù)我們的經(jīng)驗,這是一個開放研究課題。在課程里,我們要求學生在項目分析的時候,不要考慮框架的概念,只有在設計程序的時候再考慮它,然而并不是所有學生會按照我們的要求做。我們需要更多的研究來找到最有效的方法使應用框架的編程融入到程序開發(fā)中。
4.軟件編程開始時很多學生都不理解為什么一定要建模。[14]但最后幾乎所有學生能理解如果沒有建模,就運行不了復雜的程序。
從2009年以來,我們使用進銷存系統(tǒng)在大約420個學生中間成功地進行教學。總之,學生反映良好,但是也有反應工作量有點大。學生們普遍喜歡利用課外時間團隊工作,研究發(fā)現(xiàn)每個學生每周大約花費17.9小時進行項目開發(fā)。絕大多數(shù)學生認為在實驗軟件中學習真實軟件的開發(fā)是必要的。
我們在2013年到2015年中對實訓中使用C++框架編程人數(shù)進行統(tǒng)計,得出數(shù)據(jù)如表二所示。從表中可以發(fā)現(xiàn)。(1)從事桌面開發(fā)的學生一般也會從事網(wǎng)頁開發(fā),桌面開發(fā)和從事網(wǎng)頁開發(fā)的學生人數(shù)正相關;(2)從2013到2015年學生沒有使用C++框架進行開發(fā)的平均人數(shù)是下降的(網(wǎng)頁開發(fā)2014年比2013年多3個)使用C++框架的學生平均人數(shù)在上升。這說明由于我們反復強調框架的重復利用可以減少編寫程序的復雜性,所以使用框架的學生逐年上升。學生在編程過程中由于使用C++模式框架開發(fā),使得編程更加簡單、容易、高效。
[1] Demuth,H.Hu?mann,L.Schmitz,S.Zschaler.Teaching to Using a Frame Work and Both Direct and Net-Based Tutoring[C]. Proc. World Conf.On Educational Multimedia,Hypermedia & Tele-communications,Ed-Media2001,2001:145-156.
[2] Demuth, M.Fischer, H.Hu?mann. Experience Inearlyand Late Software Engineering Project Courses[C].Proc.15thconf.On Software Engineering Education&Training,Csee&T2002, Ieeecomputersociety,2002:106-116.
[3] Wirfs-Brock,B.Wilkerson,L.Wiener,Designing Object-Oriented Software [J]. Prentice-Hall,Engle Wood Cliffs,Nj,2010:45-50.
[4] Wilkinson,Using Crc Cards.An Informal Approach to Object-Oriented Development[J].Sigs,Newyork,Ny,2005:78-86.
[5] J.Rumbaugh,G.Booch,I.Jacobson. Unified Modeling Language Reference Guide [J].Addison-Wesley,Reading,2007(11):34-38.
[6] Leblanc,A.Sobel,et al.Software Engineering 2004 (Se2004) [M]. Curriculum Guidelinesfor Undergraduate Degree Programs in Software Engineering, 2004:23-26.
[7] F.J.Hoover,L.Liu,P.Sorenson,Designing Object-Oriented Frame works [C]. Handbook of Object Technology,Crc Pre-ss ,2008.
[8] Gamma,R.Helm,R.Johnson,J.Vlissides. Design Patterns: Elem-ents of Reusable Object-Oriented Software [M]. Professional Computing Series,Addison Wesley professional,2005:34-44.
[9] Matthew. Examining The Validityof Inversion of Control. Examining[J] .The Validity of Inversion of Control,Feb.2015:(11):123-133.
[10] Shull,F.Lanubile,V.R.Basili.Investigating Reading Techni-ques for Object-Oriented Framework Learning [C]. Ieee trans. Softw.Eng, 2000 (26):1101-1118.
[11] Zeid,M.Elswidi. Apeer-Review Based Approach to Teaching Object-Oriented Frame work Development [C]. Software Eng ineering Education and Training, Ieeecomputer Society,2005: 51-58.
[12] 黃華軍.C++程序設計教學改革探索[J].計算機教育,2014(1):38-41.
[13] 肖 明.案例教學法在“C++語言程序設計”教學中的應用[J].計算機教育,2010(6):83-86.
[12] 朱曉風.C++教學改革[J].信息與電腦,2015(20):168-169.
APracticalApplicationoftheObject-OrientedC++Course——TakeSalesSystemasanExample
LI Feng
(Department of Computer and Communication, Hunan Institute of Engineering, Xiangtan 411104,China)
Teaching students the systematic object-oriented software development is difficult because they need to develop a lot of complex skills. including technical skills in object-oriented software development, and collaboration with other developers. To acquire these skills, students need pralttial experiences, through team-oriented project courses. Designing such project courses is a challenge in itself. They must be both sufficiently challenging and achievable within the limited time in the situation of large numbers of students supervised by small numbers of staff. Different projects should be easily comparable while assigning different tasks for different teams to reduce the risk of plagiarism. since 2009, we have had a practical application of the object-oriented of C++ course, and we howe done a comparative analysis of the functions and teaching effeits of the sales sgslem.
object-oriented; C++; sales system
G642.0
A
1671-1181(2017)03-0109-04
2016-12-12
2012年湖南工程學院教改項目“C++面向對象程序設計課程的實踐教學研究”(校教字〔2012〕69號);2013年湖南工程學院校教改項目“基于問題的學習(PBL)教學模式在面向對象課程中的應用研究”(校教字〔2013〕20號)
李 峰(1975-),男,湖南湘潭人,碩士,講師,研究方向:計算機應用。