張 燕
(無錫職業(yè)技術(shù)學(xué)院 物聯(lián)網(wǎng)學(xué)院,江蘇 無錫 214121)
高職院校普遍將“C??梢暬绦蛟O(shè)計(jì)”課程定為計(jì)算機(jī)大類專業(yè)的專業(yè)基礎(chǔ)主干課程,也作為電子信息、信息管理類等專業(yè)的專業(yè)基礎(chǔ)課。在教學(xué)中基本安排在學(xué)習(xí)完C++后有了程序控制、類和對(duì)象等概念后,進(jìn)一步學(xué)習(xí)可視化程序設(shè)計(jì)。教師在該課程教學(xué)中一般會(huì)采用項(xiàng)目教學(xué)法教授基本知識(shí)和技術(shù)。教學(xué)實(shí)踐中發(fā)現(xiàn),學(xué)生通過兩門課程已經(jīng)理解了面向?qū)ο蟪绦蛟O(shè)計(jì)、可視化程序設(shè)計(jì)等概念;掌握了常用控件的屬性設(shè)置、方法調(diào)用與常用事件代碼及函數(shù)和過程的編寫方法,能進(jìn)行窗體程序界面設(shè)計(jì);初步掌握了數(shù)據(jù)的讀寫和文件的打開及讀寫等操作,但是當(dāng)給出一個(gè)新的問題,要求學(xué)生給出解決思路和編程實(shí)現(xiàn),仍是無從下手。本文談?wù)勗鯓釉趯W(xué)生初步掌握C#語言的基礎(chǔ)上,通過查資料、學(xué)案例提取有用方法,編寫有使用價(jià)值的應(yīng)用程序,進(jìn)一步培養(yǎng)獨(dú)立編程能力。
系統(tǒng)實(shí)現(xiàn)了按照?qǐng)?bào)名表中的學(xué)生學(xué)號(hào)或身份證號(hào),到照片文件夾中選取對(duì)應(yīng)的報(bào)名者的照片,照片以學(xué)號(hào)或身份證號(hào)命名。程序執(zhí)行后,照片選擇結(jié)果存放在報(bào)名表文件夾下,其中txt文件記錄了沒有拷貝到的照片信息。
我們讓學(xué)生獨(dú)立解決一個(gè)實(shí)際應(yīng)用問題時(shí),實(shí)現(xiàn)可以簡單,但一定要解決實(shí)際問題。通過這個(gè)應(yīng)用項(xiàng)目的實(shí)現(xiàn)調(diào)動(dòng)學(xué)生的學(xué)習(xí)主動(dòng)性、遇到未知部分主動(dòng)尋求解決方法,溫習(xí)基礎(chǔ)知識(shí)。
報(bào)名表文件是以班級(jí)命名的Excel工作簿,其工作表也以班級(jí)命名,所有照片名為學(xué)號(hào)或身份證號(hào)的報(bào)名表Excel文件存放在一個(gè)新建的文件夾中。照片文件夾可以全部放在一個(gè)文件夾下供挑選,也可以分級(jí)放在班級(jí)命名的文件夾下,系統(tǒng)會(huì)全部搜索。程序根據(jù)照片文件名是學(xué)號(hào)還是身份證號(hào)來分開處理。系統(tǒng)讀取excel工作表中報(bào)名信息中學(xué)號(hào)或身份證號(hào),搜索存放所有照片文件的文件夾。
Visual Studio開發(fā)環(huán)境提供的窗體、控件等設(shè)計(jì)圖形化的界面,用運(yùn)行于.NET Framework之上的面向?qū)ο笤O(shè)計(jì)方法的C#語言在控件事件框架中編寫處理程序。引用C#系統(tǒng)的公用類的命名空間 System.Windows.Forms、System.ComponentModel的公用函數(shù)。
在C#.NET窗體應(yīng)用中操作Excel,通過System.Data和System.Data.OleDb數(shù)據(jù)連接方式讀取和寫入Excel數(shù)據(jù)。
使用C#.NET的System.IO類實(shí)現(xiàn)遍歷所有的文件和目錄、創(chuàng)建文件夾、拷貝文件。
基于簡單實(shí)用的理念,程序主要實(shí)現(xiàn)了按照班級(jí)報(bào)名表文件讀取工作表數(shù)據(jù),工作表要求第一行單元格存放表頭信息,如“班級(jí)名、姓名、學(xué)號(hào)、身份證號(hào)、性別等”。照片可以存放在一個(gè)文件夾下,也可以有班級(jí)子文件。
在Visual Studio開發(fā)環(huán)境中創(chuàng)建應(yīng)用程序窗體,通過文本框組件得到用戶輸入的文件夾信息以及照片名對(duì)應(yīng)字段名稱,如圖1所示。
程序用到的組件比較簡單,重點(diǎn)在編寫數(shù)據(jù)表讀取代碼、文件夾及文件的遍歷、創(chuàng)建文件夾和文件、拷貝文件等操作代碼。窗體如圖1所示,用到的組件有標(biāo)簽、文本框、列表框和按鈕。
單擊“須知已讀”按鈕后,方可激活“開始”按鈕,這主要是為了提醒用戶做好數(shù)據(jù)文件和照片文件準(zhǔn)備工作。單擊“開始”按鈕調(diào)用ReadDir函數(shù),逐個(gè)讀取指定文件夾下的Excel文件。然后針對(duì)每個(gè)讀到的Excel文件調(diào)用readexcel函數(shù)讀取工作表中照片文件名稱字段數(shù)據(jù),根據(jù)讀到的數(shù)據(jù)構(gòu)建照片文件名,然后調(diào)用SelectPic函數(shù)實(shí)現(xiàn)遍歷指定存放照片的文件夾,搜索照片,找到就拷貝到報(bào)名表目標(biāo)文件夾下,沒找到就將學(xué)號(hào)或身份證號(hào)信息記錄到班級(jí)文本文件中。
圖1 應(yīng)用程序窗體
2.3.1 讀取指定文件夾下的Excel文件,遍歷所有的文件和目錄,實(shí)現(xiàn)代碼如下:
2.3.2 讀取工作表中照片文件名稱字段數(shù)據(jù),遍歷所有的工作表數(shù)據(jù)行,實(shí)現(xiàn)代碼如下:
2.3.3 遍歷指定存放照片的文件夾,搜索照片,找到就拷貝,否則向文本文件寫入信息,代碼如下:
系統(tǒng)設(shè)計(jì)本著可用、簡單的原則,方便學(xué)生實(shí)現(xiàn)。一旦學(xué)生掌握了基本的實(shí)現(xiàn)方法,就可以在這個(gè)基礎(chǔ)上完善功能,甚至擴(kuò)展應(yīng)用。例如:
(1)照片分類:將全部的根文件夾下的照片文件按照EXL文件中的班級(jí)名工作表建立文件夾并“移動(dòng)”或“拷貝”到子文件夾下,同時(shí)記錄未拷貝到照片文件的學(xué)號(hào)。
(2)除了用“學(xué)號(hào)”或“身份證號(hào)”,也可以用“工號(hào)”或“考試證號(hào)”等作為照片名。
(3)報(bào)名文件可以選擇將所有報(bào)名信息放在一個(gè)工作簿中,以班級(jí)命名工作表,然后在工作簿中遍歷工作表。
(4)設(shè)計(jì)顯示考生信息和照片的窗體,或打印報(bào)名信息表(有照片)。
(5)圖片文件類型可選,如可以是.jpg、.png等常用照片的文件格式名。
(6)在相應(yīng)工作表表格數(shù)據(jù)中增加一列,列名為“照片拷貝(是、否)”。如果讀取到照片文件,則該行的該列值寫入“是”,否則寫入“否”。還可以有更多完善,不一一列舉。以上每個(gè)改進(jìn)都可以比較方便的實(shí)現(xiàn),但要求學(xué)生要有耐心并能自主學(xué)習(xí),激發(fā)學(xué)生興趣和成就感。
設(shè)計(jì)有一定實(shí)用價(jià)值的簡單應(yīng)用系統(tǒng),既有一定的難度,又沒有超出學(xué)生的理解和學(xué)習(xí)能力范圍,可以激發(fā)學(xué)生學(xué)習(xí)主動(dòng)性,發(fā)現(xiàn)問題、解決問題。讓學(xué)生在應(yīng)用實(shí)踐中,掌握職業(yè)技能、鞏固專業(yè)知識(shí),積累實(shí)踐經(jīng)驗(yàn)和完善知識(shí)體系。將知識(shí)的應(yīng)用問題在每個(gè)學(xué)習(xí)階段進(jìn)行強(qiáng)調(diào),而不是脫節(jié)到畢業(yè)設(shè)計(jì)才發(fā)現(xiàn)知識(shí)和實(shí)際應(yīng)用的差距。
[1]明日科技C#典型模塊精解[M].北京:清華大學(xué)出版社,2012.
[2]王國勝,張石磊.C#基礎(chǔ)與案例開發(fā)詳解[M].北京:清華大學(xué)出版社,2014.
[3]MSDN:從 .NET開發(fā)人員的角度理解Excel對(duì)象模型[EB/OL].(2004-10-27)[2015-02-20]http://msdn.microsoft.com/zh-cn/library/aa168292(office.11).aspx.
[4]百度文檔:C#中創(chuàng)建、打開、讀取、寫入、保存Excel的一般性代碼[EB/OL].(2010-11-17)[2015-02-20]http://hi.baidu.com/zhaochenbo/blog/item/f6d70ff7bf32fa2a730eec39.html.
[5]微軟在線幫助:如何使用 ASP.NET、ADO.NET和Visual C# .NET查詢和顯示 Excel數(shù)據(jù)[EB/OL].(2004-06-29)[2015-02-20]http://support.microsoft.com/kb/306572/zh-cn.