張 燕
(無錫職業技術學院 物聯網學院,江蘇 無錫 214121)
高職院校普遍將“C#可視化程序設計”課程定為計算機大類專業的專業基礎主干課程,也作為電子信息、信息管理類等專業的專業基礎課。在教學中基本安排在學習完C++后有了程序控制、類和對象等概念后,進一步學習可視化程序設計。教師在該課程教學中一般會采用項目教學法教授基本知識和技術。教學實踐中發現,學生通過兩門課程已經理解了面向對象程序設計、可視化程序設計等概念;掌握了常用控件的屬性設置、方法調用與常用事件代碼及函數和過程的編寫方法,能進行窗體程序界面設計;初步掌握了數據的讀寫和文件的打開及讀寫等操作,但是當給出一個新的問題,要求學生給出解決思路和編程實現,仍是無從下手。本文談談怎樣在學生初步掌握C#語言的基礎上,通過查資料、學案例提取有用方法,編寫有使用價值的應用程序,進一步培養獨立編程能力。
系統實現了按照報名表中的學生學號或身份證號,到照片文件夾中選取對應的報名者的照片,照片以學號或身份證號命名。程序執行后,照片選擇結果存放在報名表文件夾下,其中txt文件記錄了沒有拷貝到的照片信息。
我們讓學生獨立解決一個實際應用問題時,實現可以簡單,但一定要解決實際問題。通過這個應用項目的實現調動學生的學習主動性、遇到未知部分主動尋求解決方法,溫習基礎知識。
報名表文件是以班級命名的Excel工作簿,其工作表也以班級命名,所有照片名為學號或身份證號的報名表Excel文件存放在一個新建的文件夾中。照片文件夾可以全部放在一個文件夾下供挑選,也可以分級放在班級命名的文件夾下,系統會全部搜索。程序根據照片文件名是學號還是身份證號來分開處理。系統讀取excel工作表中報名信息中學號或身份證號,搜索存放所有照片文件的文件夾。
Visual Studio開發環境提供的窗體、控件等設計圖形化的界面,用運行于.NET Framework之上的面向對象設計方法的C#語言在控件事件框架中編寫處理程序。引用C#系統的公用類的命名空間 System.Windows.Forms、System.ComponentModel的公用函數。
在C#.NET窗體應用中操作Excel,通過System.Data和System.Data.OleDb數據連接方式讀取和寫入Excel數據。
使用C#.NET的System.IO類實現遍歷所有的文件和目錄、創建文件夾、拷貝文件。
基于簡單實用的理念,程序主要實現了按照班級報名表文件讀取工作表數據,工作表要求第一行單元格存放表頭信息,如“班級名、姓名、學號、身份證號、性別等”。照片可以存放在一個文件夾下,也可以有班級子文件。
在Visual Studio開發環境中創建應用程序窗體,通過文本框組件得到用戶輸入的文件夾信息以及照片名對應字段名稱,如圖1所示。
程序用到的組件比較簡單,重點在編寫數據表讀取代碼、文件夾及文件的遍歷、創建文件夾和文件、拷貝文件等操作代碼。窗體如圖1所示,用到的組件有標簽、文本框、列表框和按鈕。
單擊“須知已讀”按鈕后,方可激活“開始”按鈕,這主要是為了提醒用戶做好數據文件和照片文件準備工作。單擊“開始”按鈕調用ReadDir函數,逐個讀取指定文件夾下的Excel文件。然后針對每個讀到的Excel文件調用readexcel函數讀取工作表中照片文件名稱字段數據,根據讀到的數據構建照片文件名,然后調用SelectPic函數實現遍歷指定存放照片的文件夾,搜索照片,找到就拷貝到報名表目標文件夾下,沒找到就將學號或身份證號信息記錄到班級文本文件中。

圖1 應用程序窗體
2.3.1 讀取指定文件夾下的Excel文件,遍歷所有的文件和目錄,實現代碼如下:

2.3.2 讀取工作表中照片文件名稱字段數據,遍歷所有的工作表數據行,實現代碼如下:


2.3.3 遍歷指定存放照片的文件夾,搜索照片,找到就拷貝,否則向文本文件寫入信息,代碼如下:

系統設計本著可用、簡單的原則,方便學生實現。一旦學生掌握了基本的實現方法,就可以在這個基礎上完善功能,甚至擴展應用。例如:
(1)照片分類:將全部的根文件夾下的照片文件按照EXL文件中的班級名工作表建立文件夾并“移動”或“拷貝”到子文件夾下,同時記錄未拷貝到照片文件的學號。
(2)除了用“學號”或“身份證號”,也可以用“工號”或“考試證號”等作為照片名。
(3)報名文件可以選擇將所有報名信息放在一個工作簿中,以班級命名工作表,然后在工作簿中遍歷工作表。
(4)設計顯示考生信息和照片的窗體,或打印報名信息表(有照片)。
(5)圖片文件類型可選,如可以是.jpg、.png等常用照片的文件格式名。
(6)在相應工作表表格數據中增加一列,列名為“照片拷貝(是、否)”。如果讀取到照片文件,則該行的該列值寫入“是”,否則寫入“否”。還可以有更多完善,不一一列舉。以上每個改進都可以比較方便的實現,但要求學生要有耐心并能自主學習,激發學生興趣和成就感。
設計有一定實用價值的簡單應用系統,既有一定的難度,又沒有超出學生的理解和學習能力范圍,可以激發學生學習主動性,發現問題、解決問題。讓學生在應用實踐中,掌握職業技能、鞏固專業知識,積累實踐經驗和完善知識體系。將知識的應用問題在每個學習階段進行強調,而不是脫節到畢業設計才發現知識和實際應用的差距。
[1]明日科技C#典型模塊精解[M].北京:清華大學出版社,2012.
[2]王國勝,張石磊.C?;A與案例開發詳解[M].北京:清華大學出版社,2014.
[3]MSDN:從 .NET開發人員的角度理解Excel對象模型[EB/OL].(2004-10-27)[2015-02-20]http://msdn.microsoft.com/zh-cn/library/aa168292(office.11).aspx.
[4]百度文檔:C#中創建、打開、讀取、寫入、保存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數據[EB/OL].(2004-06-29)[2015-02-20]http://support.microsoft.com/kb/306572/zh-cn.