第一篇:C#實訓日志9
1月3日(星期五):
(一)繼續實現“StudentForm”的代碼:
今天我們在完成了實體層和數據訪問層的代碼編寫后,繼續編寫界面層的代碼,來事實現各個按鈕的單擊事件。為了連接各個層,所以要調用“Entity”和“DAL”類庫,使用“using”語句。
首先我們設計了一個“DataBind”方法,用來刷新數據綁定。有了這段代碼后,就不需要再使用保存按鈕了,當執行某些操作后只要執行這段代碼就可以更新數據綁定。
然后我們依舊是先定義了一個“雙擊表頭事件”,使用“StudentID”定位列,調用“SelectAllStudentByStudentID”來查找對應的數據,如果存在,則將查找到的數據提取到文本框中。在這里需要特殊注意的是我們判斷性別是男性還是女性的方法是使用“if-else”語句,判斷是否為男性,如果是,則執行“rbtnMale.Checked = true;”語句,控件“rbtnMale”被選中,否則則為女性,控件“rbtnFemale”被選中。
(二)在基本設計完成后,我們又設計了其他子窗體:
在完成老師教的“學生信息管理”窗體后,我們又分別完成了“班級信息管理”、“課程信息管理”、“成績信息管理”等子窗體。其中在設計“成績信息管理”子窗體時老師特殊強調成績是不可以修改的,日志是不可以修改個添加的,這是一個正常的程序應該有的功能。我們有根據之前講的“雇員信息管理系統”對“學生信息管理系統”進行了簡單的完善。比如最小化圖標,右鍵點擊出現菜單,各個子窗體的水平、垂直、層階顯示功能以及登錄注銷等功能。
(三)最后我們進行了答辯和總結實訓感受:
今天是實訓的最后一天,在今天,老師找了幾名同學進行了答辯,并對答辯的PPT、內容等方面做了評價和指導。
老師提出,實訓的PPT不應該千篇一律,應該每個人做的都有自己的添加,同時應該有規范的內容要求。
在提綱部分中,應該寫出自己設計了什么功能,不能只是簡單的寫“功能設計”四個字。而且需求分析也應該詳細的寫出是什么系統的需求分析,比如我們組做的是“學生信息管理系統”,則應該寫清楚。技術點處也應該寫清“
一、二”。
在需求分析中,我們應該用十分簡單易懂的文字表明設計的基本目的、意義和功能,因為在以后的工作中并不一定是計算機專業的人員來看我們的需求分析,我們必須要用最簡單明了的語言來表達自己的思路。
在概要設計頁,我們要寫明C/S設計的優缺點等信息,同時畫出功能結構圖,以方便答辯時講解。
在詳細設計頁中,我們要展示出各個功能的流程圖,同時配以文字講解。
最重要的是功能設計界面,在這個界面中,我們要詳細的寫出自己的功能設計方法,實現方式等,老師說,希望的效果是“是個程序員看到這個PPT以后,十個程序員會做出十個相同的程序”。
最后在項目總結中我們要寫出自己對這次實訓課的理解,以及對團隊合作的體會。
第二篇:C#實訓日志3
12月25日(星期三):
(一)今天首先實現了“修改”按鈕的功能:
在實現“修改”功能之前,首先我們需要做的是將右側的數據顯示到左側的文本框中,然后我們才能方便進行修改和刪除。我們希望做到的效果是在雙擊右側數據條頭部時,可以將數據提取出來然后顯示在左側,所以我們創建了一個“dgvJobs_RowHeaderMouseDoubleClick”事件,提取了數據庫中的數據。
然后我們通過定義局部變量來判斷想要修改成的工作編號格式是否符合要求,用“if”語句判斷是否有此工作編號,然后實現了修改功能。
(二)在測試中出現了一個問題:
在我準備執行時出現了“sa登錄失敗”的錯誤,我在“JobsForm_Load”事件中添加了“this.jobsTableAdapter.Connection.ConnectionString = “ server =.;user = sa;password = 123456;database = pubs”;”語句后就解決了問題,其他同學也有遇到這個問題的,他們提供了另一種方法給我參考,就是重新綁定數據源,在登錄數據庫時使用“Windows驗證”登錄。
(三)然后我們實現了“刪除”功能:
刪除功能和修改功能類似,很多代碼可以公用,只需要簡單的復制粘貼,然后在修改一些值就可以直接使用,在此我也了解到有得時候編程序不需要一行一行的重復編寫,有的時候只要你記住以前自己編寫過的代碼,并理解其中的道理就可以直接使用。在這里我們就用來同樣的代碼對工作編號的格式和是否存在該工作編號進行了判斷,如果判斷后沒有異常則刪除。
(四)實現“保存”功能:
在實現了基本的增刪改功能之后,我們經過測試基本沒有錯誤,但是此處的功能實現只是局限于左側文本框與右側數據顯示區的交互,并沒有真正的實現于數據庫中,所以每次我們執行完操作以后,一旦關閉了窗體,再次運行窗體時,之前添加或修改的數據并沒有顯示出來。所以
我們需要完成一個保存功能,來將修改的結果同步到數據庫中。我們編寫了“btnSave_Click”事件來實現保存功能。定義變量“count”來計數,實現更新數據庫中數據。
在這個地方老師又特殊強調了一個“pubsDataSet.RejectChanges();”,也就是回滾功能,這個語句在判斷是否保存成功的語句中實現。我們進行的設計是,如果保存成功,顯示“保存成功”,并顯示受影響的記錄的條數,條數的計數就是通過“count”來實現的。如果保存不成功,我們會將右側數據還原到點擊“添加”或“修改”按鈕之前的狀態,以方便用戶重新操作。
(五)實現“查找”和“取消查找”功能:
查找功能我們使用“jobsBindingSource.Filter”語句實現,“Filter”用于獲取或設置用于篩選查看哪些行的表達式。我們使用SQL語句進行模糊查詢。
取消查詢的功能實現起來也很簡單,只需要將查詢文本框中的文本內容清空,然后將“jobsBindingSource.Filter”也清空即可。
第三篇:C#實訓日志1
12月23日(星期一):
(一)在今天我們學習了如何創建Windows應用程序:
單擊“文件”——選擇“新建”——選擇“項目”——選擇“Windows應用程序”,在此界面中可以設置項目名稱、存儲位置等,然后單擊“添加”,項目新建成功。
創建Windows應用程序后會自動生成一個名為Form1的窗體,一般情況下我們將它刪除,自行新建新窗體。
(二)然后我們學習了如何在已經創建好的項目中創建窗體:
右鍵單擊項目——單擊“添加”——選擇“新建項”——在此窗口中選擇“Windows”窗體,添加的默認名字為Form2,Form3等,我們最好將名稱改為“數據庫表名+Form”方便記憶,然后單擊“添加”,窗體新建成功。
實踐后我們了解到在一個項目中我們可以創建多個窗體,如果想運行哪個窗體,則需要總在該項目的“Program.cs”文件中,將“Application.Run(new MainForm());”中的“MainForm()”改成對應的窗體名稱。
(三)我們在了解了項目需求后實現了父窗體以及子窗體的設定:
由于我們需要建立的是一個有菜單,有多項功能,能打開多個窗體的項目,所以我們需要一個主窗體,以及多個下屬功能窗體,也就是一個父窗體,以及多個子窗體。
我們需要一個窗體作為容器成為基類或父窗體,另一個窗體作為模板,也叫子窗體。在父窗體中可以打開多個文檔,每個文檔都是由一個單獨的子窗體顯示,所有的子窗體都是類似的,可以使用窗體的模板來創建,從類的角度來看所有的子窗體都是一個類的不同實例。創建父窗體的方法非常簡單,即為將想要設定的窗體的“IsMdiContainer”屬性值設為“True”,此時窗體的背景變為灰色,該窗體就變為父窗體。然后就可以在此窗體中添加菜單從而實現調用其他窗體的功能。
(四)我們在創建好窗體后熟悉了環境中的幾項比較重要的工具窗口:
在創建好窗體之后我們開始在子窗體中進行界面設計,首先是熟悉環境的屬性界面,在軟件右側有兩個工具欄,分別是“解決方案資源管理器”和“屬性”窗口。
這兩項窗口都可以在視圖中找到后調出。在“解決方案資源管理器”中我們可以查看當前打開的項目的文件,雙擊即可打開對應文件。在“屬性”中我們可以查看選中的窗體或者選中的各個控件的各項屬性值,同時可以對各項屬性進行調整。我們可以在“屬性”欄中將屬性名按照字母順序排序以方便查找,我們還可以查找對應事件并進行修改。
而在界面左側則有一個“工具箱”,在工具箱中我們可以找到幾乎所有我們所需要的控件、容器、工具欄等。只要單擊工具箱中需要的控件,再單擊窗體就可以添加控件成功。我們也可以用容器中控件來規劃窗體,如我們可以使用“SplitContainer”空間來將窗體分割成兩部分,在兩部分中分別添加其他空間,進行不同的內容的添加。
(五)在今天下午的課程中我們學習了如何調整窗體的各項基本屬性:
首先我們學習了如何為窗體的標題欄修改文字內容,在屬性窗口中,我們找到“Text”屬性,然后輸入想顯示的內容,如我們首先設計了工作信息窗體,所以在“Text”屬性右側框中輸入“工作信息管理”字樣。
然后我們了解了確定窗體的初賽可視狀態屬性,在屬性欄中找到“WindowsState”屬性,在此我們可以選擇“Minimized”也就是打開時最小化顯示,“Maximized”打開時最大化顯示以及“Normal”標準話顯示。
第四篇:C#實訓日志7
12月31日(星期二):
(一)項目總結:
在之前的項目設計中,我們發現,雖然可以實現各個功能,但是對于某些細微的要求想要實現就很困難,比如在輸入密碼時要區分大小寫等等細節功能的實現反而非常復雜。所以在設計下一個系統的時候,老師準備教我們使用另一種設計方法設計下一個“學生信息管理系統”。
(二)設計方式:
在“學生信息管理系統”的設計中,我們采用C/S的設計方法設計,設計分為界面層和數據訪問層,界面層提供給用戶一個視覺上的界面,通過界面層,用戶輸入數據、獲取數據,并傳給數據訪問層。數據層定義、維護數據的完整性、安全性,它響應邏輯層的請求,訪問數據。這一層通常由大型的數據庫服務器實現,如“Oracle”、“Sybase”、“MS SQl Server”等。
C/S 結構,即大家熟知的客戶機和服務器結構。它是軟件系統體系結構,通過它可以充分利用兩端硬件環境的優勢,將任務合理分配到Client端和Server端來實現,降低了系統的通訊開銷。目前大多數應用軟件系統都是Client/Server形式的兩層結構,由于現在的軟件應用系統正在向分布式的Web應用發展,Web和Client/Server 應用都可以進行同樣的業務處理,應用不同的模塊共享邏輯組件;因此,內部的和外部的用戶都可以訪問新的和現有的應用系統,通過現有應用系統中的邏輯可以擴展出新的應用系統。這也就是目前應用系統的發展方向。
Client/Server是建立在局域網的基礎上的,Browser/Server是建立在廣域網的基礎上的。
(三)主窗體界面設計:
主窗體的總體設計與“雇員管理系統”的主窗體大概一致,只是將菜單名改變,同樣有“快捷鍵”、“窗口”、等功能,也同樣是將主窗體設置成為一個父窗體。
(四)關于界面設計:
值得一提的是,在幫助菜單下拉列表中我們添加了“關于”功能,這項功能可以實現顯示此程序的版本號、設計人員名稱、LOGO、設計日期等相關信息。
具體的設計方法與普通窗體設計略有不同,在“Microsoft Visual Studio”軟件中,系統為我們提供了已經設計好的“關于”窗體,只要右鍵單擊項目名——點擊“添加”——選擇“新建項”——選中“‘關于’框”就可以自動生成“關于”界面。只需要適當的修改圖標、文本框內容等屬性即可。
(五)“學生信息管理”界面設計:
我們在設計完主窗體后,就開始對“學生信息管理”進行基本的設計,也就是界面層的設計。
在這里我們基本使用的都是與之前的“工作信息管理”基本一致的界面,所以設計基本界面的時候十分的方便,只要打開之前的“工作信息管理”然后進行簡單的改名等操作即可完成。在這里我們深深的發現有得時候如果懂得利用以前的資源,就可以節省很多時間,減少編寫代碼的量。
在這個界面上與之前稍有不同的地方是添加了性別。性別錄入使用了“RadioButton”控件。這個控件的具體使用方法是當與其他單選按鈕成對出現時,允許用戶從一組選項中選擇單個選項,其中“一組”的意思是,所有在同一容器內的這個控件,都稱為一組,也就是只能選擇其中一項,因為人的性別只能是男性或女性其中一種,所以選擇了“RadioButton”單選按鈕控件。
第五篇:C#實訓日志8
1月2日(星期四):
(一)繼續完成“學生信息管理”窗體的界面設計:
由于我們在學生表中有密碼項,為了符合大眾軟件的習慣,也為用戶的信息安全性著想,所以我們將密碼輸入文本框的“PasswordCard”屬性設置為“*”,設置此屬性后,當用戶在輸入密碼文本的時候,文本信息不會顯示在密碼文本框中,輸入的值將以“*”的形式展現出來。
(二)“學生信息管理”界面層其他方面設計:
在設計中我們在加入新的學生信息的時候我們為輸入的密碼設計了密碼驗證功能 if(txtStuPassword.Text.Equals(txtVPassword.Text)== true){ stu.Password = txtStuPassword.Text;}else{ MessageBox.Show(“兩次密碼輸入不一致,請確認!”);return;}
使用“Equals”判斷,如果輸入的密碼與輸入在驗證密碼中的字符一致,則將密碼賦值給數據庫,否則提示“兩次密碼輸入不一致,請確認!”這項功能的判斷是為了使用戶如果偶然輸入錯誤密碼,系統可以自動判斷識別,提示用戶,進行重新輸入。
(三)“學生信息管理”“Entity”設計:
因為是C/S結構設計,所以我們新建了兩個類庫,只需單擊“文件”——選擇“新建”——選中“項目”,然后在“模版”模塊下選擇“類庫”,這里需要注意的是我們不再是“創建新解決方案”而是選擇“添入解決方案”將新建的類庫加入已經創建的“StudentsApp”項目中。我們新建了“Entity”實體層和“DAL”數據訪問層,其中實體層負責承載數據。
(四)“學生信息管理”“DAL”設計
在此層中我們分別實現與數據庫連接的的各項功能。
如根據班級編號查詢學生信息的方法中,首先我們需要實例化一個SQL數據庫連接,然后實例化一個SQL命令,還需要實例化一個數據讀取器。然后我們為各個對象賦值,以達到連接數據庫,并對其下達命令的功能。在打開數據庫連接后,我們讀取一個數據庫中的數據,并賦值給之前實例化的數據讀取器。然后使用“while”循環語句判斷數據庫中的數據是否已經讀取完畢,如果“dr.Read()”中沒有數據,則結束此循環。最后用“return”語句將表單返回。
其他功能與數據庫的連接與查詢的代碼相似,存在區別是使用了“ExecuteNonQuery()”語句,通過返回受影響行數來判斷是否添加或刪除成功。
在此,我們需要用“try-catch”判斷數據是否提取成功。如果不成功,我們需要提示用戶異常原因,我們需要將異常拋出,返回到界面層,由于操作層無法顯示異常,所以我們要“new”一個異常,把異常原因放入此對象中,再將此對象拋出。
為了防止有人惡意篡改代碼,在輸入的文本中添加惡意代碼,防止注入攻擊,我們使用SQL參數,以保證安全。
在此我們著重實現了登錄的功能,在“LoginByStudentIDAndPassword”方法中,我們使用“string sql = “select StudentID,Password from Students where StudentID = @StudentID and Password = @Password ”;”語句判斷是否存在一條數據的登錄名和登錄密碼與輸入的登錄名和登錄密碼一致。使用“ExecuteScalar()”語句,如果返回查詢所返回的結果集中的第一行的第一列不為空,則返回“真”否則返回“假”。