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