醫(yī)用儀器軟件設(shè)計 課件全套 第1-14章 WinForm 開發(fā)環(huán)境-模式設(shè)置實驗_第1頁
醫(yī)用儀器軟件設(shè)計 課件全套 第1-14章 WinForm 開發(fā)環(huán)境-模式設(shè)置實驗_第2頁
醫(yī)用儀器軟件設(shè)計 課件全套 第1-14章 WinForm 開發(fā)環(huán)境-模式設(shè)置實驗_第3頁
醫(yī)用儀器軟件設(shè)計 課件全套 第1-14章 WinForm 開發(fā)環(huán)境-模式設(shè)置實驗_第4頁
醫(yī)用儀器軟件設(shè)計 課件全套 第1-14章 WinForm 開發(fā)環(huán)境-模式設(shè)置實驗_第5頁
已閱讀5頁,還剩328頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

第一章WinForm開發(fā)環(huán)境工業(yè)和信息化部“十四五”規(guī)劃教材醫(yī)用儀器軟件設(shè)計—基于WinForm01WinForm介紹WinForm介紹WinForm是.NET開發(fā)平臺中對WindowsForm的簡稱。利用MicrosoftVisualStudio可以創(chuàng)建使用WinForm的應(yīng)用程序和用戶界面。WinForm應(yīng)用程序可以顯示信息,從用戶獲取請求輸入后通過網(wǎng)絡(luò)與遠程計算機通信,這種窗體應(yīng)用程序通常稱為桌面應(yīng)用程序,如迅雷、QQ等能夠在Windows上直接運行的程序。02MicrosoftVisualStudio2019平臺介紹MicrosoftVisualStudio(簡稱VisualStudio)是美國微軟公司的開發(fā)工具包系列產(chǎn)品。VisualStudio是一個基本完整的開發(fā)工具集,包含了整個軟件生命周期中所需要的大部分工具,如UML工具、代碼管控工具、集成開發(fā)環(huán)境(IDE)等。MicrosoftVisualStudio2019平臺介紹

03安裝VisualStudioCommunity2019

操作系統(tǒng):Win7及以上版本(本書基于Win10,推薦使用Win10)CPU:主頻不低于2.0GHz

內(nèi)存:4GB或以上,推薦8GB

硬盤:80GB或以上01020304計算機配置要求

雙擊運行本書配套資料包“02.相關(guān)軟件\VisualStudioCommunity2019”文件夾中的“vscommunity408779306.1590572925.exe”軟件,彈出如圖1-1所示的對話框,單擊“繼續(xù)”按鈕。安裝軟件

系統(tǒng)彈出如圖1-2所示的安裝界面,等待準(zhǔn)備就緒。安裝軟件

在彈出的對話框中,在“工作負載”標(biāo)簽頁下勾選“.NET桌面開發(fā)”和“使用C++的桌面開發(fā)”,并在“可選”欄中勾選“適用于最新v142生成工具的C++MFC”,如圖1-3所示。安裝軟件系統(tǒng)彈出如圖1-4所示的界面,表示正在進行下載和安裝。安裝軟件安裝軟件安裝完成,如圖1-5所示。若有帳戶,可以登錄;若沒有,建議創(chuàng)建一個。如圖1-6所示,在“開發(fā)設(shè)置”中選擇VisualC#,選擇合適的顏色主題后,單擊“啟動VisualStudio"按鈕。安裝軟件等待系統(tǒng)配置完成后,彈出如圖1-7所示的對話框,即可正常使用VisualStudio。04第一個WinForm項目新建HelloWorld項目

如圖1-8所示,在“創(chuàng)建新項目”對話框中,語言選擇C#,平臺選擇Windows,項目類型選擇“桌面”,然后選擇“Windows窗體應(yīng)用(.NETFramework)”,最后單擊“下一步”按鈕。新建HelloWorld項目

在彈出的如圖1-9所示的對話框中,設(shè)置“項目名稱”為HelloWorld,“位置”選擇"D:\WinFormTest\",取消勾選“將解決方案和項目放在同一目錄中”,選擇默認(rèn)的最新框架“.NETFramework4.7.2”,然后單擊“創(chuàng)建”按鈕。新建HelloWorld項目

新建項目完成后的界面如圖1-10所示。

如圖1-11所示,在左上角的“工具箱”標(biāo)簽頁中可以看到所有的控件,單擊控件可將其拖拽到界面上進行布局。

如圖1-12所示,單擊選中button1,在“屬性”標(biāo)簽頁中將Text修改為ClickMe,button1按鈕顯示的文本將改變。完善HelloWorld項目

如圖1-13所示,在選中ClickMe按鈕的狀態(tài)下,單擊“屬性”標(biāo)簽頁中的按鈕,然后雙擊Click,進入buttonlClick事件響應(yīng)方法。

在button1Click事件響應(yīng)方法中輸入相應(yīng)代碼,如圖1-14所示。完善HelloWorld項目

完善HelloWorld項目單擊工具欄中的按鈕編譯并運行程序,彈出如圖1-15所示的界面,單擊ClickMe按鈕,即彈出顯示“HelloWorld!”文本的對話框,如圖1-16所示。項目編譯運行一次之后,在項目的“…\bin\Debug”目錄下會生成對應(yīng)的exe應(yīng)用程序,如圖1-17所示,這個生成的exe應(yīng)用程序可以在裝有.NETFramework軟件的計算機上運行。應(yīng)用程序05詳解HelloWorld

Program.cs是在整個項目中起到統(tǒng)籌作用的文件,項目中所有窗口程序都是從Program.cs文件中的Main方法開始執(zhí)行的。該文件是默認(rèn)生成的,入口Main方法中默認(rèn)設(shè)定Form1為項目的啟動窗口,對應(yīng)代碼為“Application.Run(newForm1();”,如圖1-19所示。解決方案資源管理器窗口

屬性窗口默認(rèn)顯示控件屬性設(shè)置界面,對應(yīng)按鈕,如圖1-20所示。

單擊按鈕可顯示控件包含的所有事件,如圖1-21所示。雙擊事件,即可跳轉(zhuǎn)到事件的響應(yīng)方法。解決方案資源管理器窗口

Form1.cs和Form1.Designer.cs兩個文件都用于控制Form1窗體。Form1.cs文件控制窗體及控件的行為,雙擊Form1.cs文件即可看到整個窗體界面。單擊Form1界面,按F7鍵可以進入Forml.cs代碼編輯界面。

Form1.Designer.cs文件用于控制窗體中各個控件的樣式和布局,其代碼由系統(tǒng)自動生成,通常不需要修改該文件。解決方案資源管理器窗口

當(dāng)程序代碼中出現(xiàn)語法錯誤時,錯誤列表窗口會提示錯誤信息。例如,當(dāng)刪除第15行代碼句末的分號時,錯誤提示窗口將提示具體的錯誤信息,如圖1-22所示,此時項目將無法編譯成功。錯誤列表窗口06程序調(diào)試使用WriteLine()方法輸出調(diào)試信息

可以通過以下兩個語句將文本輸出到Output窗口:非中斷模式下的調(diào)試

(1)單擊代碼行編號左側(cè)的側(cè)邊欄,即可為該行添加斷點;或者在光標(biāo)所在的代碼行上,執(zhí)行菜單命令“調(diào)試”→“切換斷點”添加斷點;還可以按F9鍵,在光標(biāo)所在的代碼行上添加斷點。非中斷模式下的調(diào)試20%30%40%50%使用斷點輸出調(diào)試信息(2)單擊斷點右上方的按鈕,勾選“操作”選項,在“在輸出窗口中顯示一條消息”后的文本框中輸入字符串,如果要輸出變量值,則需要將變量名放在“{}”中。最后單擊“關(guān)閉”按鈕。非中斷模式下的調(diào)試

請?zhí)鎿Q文字內(nèi)容,點擊添加相關(guān)內(nèi)容文字,修改文字內(nèi)容,也可以直接復(fù)制你的內(nèi)容到此。20%30%40%50%進入中斷模式

①在程序運行中通過暫停進入中斷模式;②設(shè)置斷點自動進入中斷模式。監(jiān)視變量的內(nèi)容在中斷模式下,使光標(biāo)指向源代碼中的變量名,即可查看該變量的變量值;或者在中斷模式下,右鍵單擊需要查看的變量名,選擇“添加監(jiān)視”,即可在監(jiān)視窗口中查看變量的信息。單步執(zhí)行代碼下面介紹如何在中斷模式下單步執(zhí)行代碼,查看代碼的執(zhí)行結(jié)果。非中斷模式下的調(diào)試

第二章C#語言基礎(chǔ)工業(yè)和信息化部“十四五”規(guī)劃教材醫(yī)用儀器軟件設(shè)計—基于WinForm01簡單的秒值-時間值轉(zhuǎn)換實驗實驗內(nèi)容一天有24小時、一小時有60分鐘,一分鐘有60秒,因此,一天就有24×60×60=86400秒,如果從0開始計算,每天按秒計數(shù),則范圍為0~86399。通過鍵盤輸入一個0~86399之間的值(本書不特別說明,均指整數(shù)),包括0和86399,將其轉(zhuǎn)換為小時值、分鐘值和秒值,并通過控制臺應(yīng)用程序輸出??刂婆_應(yīng)用程序控制臺應(yīng)用程序編程是純應(yīng)用程序接口下的編程,類似于操作DOS系統(tǒng),需要通過輸入命令和參數(shù)對軟件進行操作??刂婆_應(yīng)用程序主要適用于對界面(UserInterface,UI)設(shè)計沒有太多需求的情景,不需要過多地考慮用戶體驗,實用、簡潔且方便。通常用于開發(fā)一些簡單的小工具。實驗原理

變量和數(shù)據(jù)類型是緊密關(guān)聯(lián)的。實驗原理變量和類型實驗原理實驗原理算術(shù)運算符按操作數(shù)個數(shù)可分為單目運算符(含一個操作數(shù))和雙目運算符(含兩個操作數(shù)),如表2-2和表2-3所示。單目運算符的優(yōu)先級高于雙目運算符。運算符

賦值操作是程序設(shè)計中最常用的操作之一,共有11個賦值運算符,均為雙目運算符,其中只有“=”為基本賦值運算符,其余10個均為復(fù)合賦值運算符,如表2-4所示。實驗原理運算符計算表達式時,并不一定會從左到右按順序執(zhí)行這些運算符,而是按照運算符的優(yōu)先級順序進行計算。先計算優(yōu)先級高的運算符,優(yōu)先級相同的運算符按照從左到右的順序計算。運算符的優(yōu)先級如表2-5所示。實驗原理運算符20%30%40%50%控制臺應(yīng)用程序的Main入口方法

Main方法的默認(rèn)修飾符為static,默認(rèn)返回值為void,方法中默認(rèn)包含了命令行參數(shù)stringl]args。Main方法的返回值還可以是int類型,參數(shù)可以為空,但必須由static修飾。Console.WriteLine()、Console.ReadLine()、Console.ReadKey()方法這三種方法都包含在外部命名空間System的Console類中,因此,在代碼開頭需要引用該命名空間。onvert.Tolnt32()方法Convert類同樣位于外部命名空間System。利用該類可以進行顯式類型轉(zhuǎn)換,主要用于將一種基本數(shù)據(jù)類型轉(zhuǎn)換為另一種基本數(shù)據(jù)類型。實驗原理實驗步驟新建控制臺應(yīng)用程序與新建WinForm項目的不同在于選擇創(chuàng)建的項目類型時,應(yīng)選擇“控制臺應(yīng)用(.NETFramework)”,如圖2-2所示。

如圖2-3所示,設(shè)置“項目名稱”為ConvertTime,"位置"選擇“D:\WinFormTest\1.簡單的秒值-時間值轉(zhuǎn)換實驗"文件夾,然后單擊“創(chuàng)建”按鈕。實驗步驟2020年有366天,將2020年1月1日作為計數(shù)起點,即計數(shù)1,2020年12月31日作為計數(shù)終點,即計數(shù)366。計數(shù)1代表“2020年1月1日-星期三”,計數(shù)10代表“2020年1月10日-星期五”。參考本節(jié)實驗,通過鍵盤輸入一個1~366之間的值,包括1和366,將其轉(zhuǎn)換為年、月、日、星期,并輸出轉(zhuǎn)換結(jié)果。本節(jié)任務(wù)02基于數(shù)組的秒值-時間值轉(zhuǎn)換實驗實驗內(nèi)容通過鍵盤輸入一個0~86399之間的值,包括0和86399,將其轉(zhuǎn)換為小時值、分鐘值和秒值,而小時值、分鐘值和秒值為數(shù)組arrTimeVal的元素,即arrTimeVal[2]為小時值、arrTimeVal[1]為分鐘值、arrTimeVal[0]為秒值,并輸出轉(zhuǎn)換結(jié)果。

一維數(shù)組的創(chuàng)建有兩種方式。第一種方式是先聲明,第二種創(chuàng)建方式是在聲明的同時為數(shù)組分配內(nèi)存。

數(shù)組的初始化有兩種方式,一種是為單個數(shù)組元素賦值,另一種是同時為整個數(shù)組賦值。為單個數(shù)組元素賦值。實驗原理

初始化一維數(shù)組創(chuàng)建一維數(shù)組實驗步驟首先,新建一個控制臺應(yīng)用程序,設(shè)置“項目名稱”為ConvertTime,保存至“D:\WinFormTestl2.基于數(shù)組的秒值-時間值轉(zhuǎn)換實驗”文件夾中。然后,將程序清單2-2中的代碼輸入Program.cs文件中。03基于方法的秒值-時間值轉(zhuǎn)換實驗實驗內(nèi)容通過鍵盤輸入一個0~86399之間的值,包括0和86399,用calcHour()方法計算小時值,用calcMin()方法計算分鐘值,用calcSec()方法計算秒值,在主方法中通過調(diào)用上述三個方法實現(xiàn)秒值-時間值轉(zhuǎn)換,并輸出轉(zhuǎn)換結(jié)果。20%30%40%50%

在C#語言中,方法相當(dāng)于C語言中的函數(shù),但是它與傳統(tǒng)的函數(shù)又有明顯的不同:①在結(jié)構(gòu)化的語言中,函數(shù)是一等公民,整個程序是由一個個函數(shù)組成的;②在面向?qū)ο蟮恼Z言中,類是一等公民,整個程序是由一個個類組成的。

其中,修飾符是可選的,用于定義該方法的訪問類型,如public、private。返回值類型是方法返回值的數(shù)據(jù)類型,如int、float。有些方法執(zhí)行所需的操作,但沒有返回值,在這種情況下,返回值類型是關(guān)鍵字void。方法名是方法的實際名稱,方法命名采用第一個單詞首字母小寫,后續(xù)單詞的首字母大寫,其余字母小寫格式,如calcHeartRate、playWave。實驗原理

函數(shù)與方法方法的定義格式實驗步驟首先,新建一個控制臺應(yīng)用程序,設(shè)置“項目名稱”為ConvertTime,保存至“D:\WinFormTest\4.基于枚舉的秒值-時間值轉(zhuǎn)換實驗”文件夾中。然后,將程序清單2-4中的代碼輸入Program.cs文件中。04基于枚舉的秒值-時間值轉(zhuǎn)換實驗實驗內(nèi)容通過鍵盤輸入一個0~86399之間的值,包括0和86399,使用calcTimeVal()方法計算時間值(包括小時值、分鐘值和秒值),通過枚舉區(qū)分具體是哪一種時間值,返回值為這種時間值對應(yīng)的轉(zhuǎn)換結(jié)果,在Main(方法中通過調(diào)用calcTimeVal()實現(xiàn)秒值-時間值轉(zhuǎn)換,并輸出轉(zhuǎn)換結(jié)果。

枚舉類型是值類型的一種特殊形式,它繼承自System.Enum,為基礎(chǔ)類型的值提供替代名稱?;A(chǔ)類型可以是除char類型外的任何整型(如Byte、Int32或UInt64)。也可以說,枚舉類型是一組常量的集合。

switch…case….語句用于判斷一個變量與一系列值中某個值是否相等。實驗原理

switch.1.case...語句

枚舉類型實驗步驟首先,新建一個控制臺應(yīng)用程序,設(shè)置“項目名稱”為ConvertTime,保存至“D:\WinFormTest\4.基于枚舉的秒值-時間值轉(zhuǎn)換實驗”文件夾中。然后,將程序清單2-4中的代碼輸入Program.cs文件中。下面按照順序?qū)Σ糠终Z句進行解釋。05基于結(jié)構(gòu)體的秒值-時間值轉(zhuǎn)換實驗實驗內(nèi)容通過鍵盤輸入一個0~86399之間的值,包括0和86399,使用calcTimeVal()方法計算時間值(包括小時值、分鐘值和秒值),通過結(jié)構(gòu)體區(qū)分具體是哪一種時間值,返回值為這種時間值對應(yīng)的轉(zhuǎn)換結(jié)果,在Main()方法中通過調(diào)用calcTimeVal()實現(xiàn)秒值-時間值轉(zhuǎn)換,并輸出轉(zhuǎn)換結(jié)果。

結(jié)構(gòu)體類型是另一種復(fù)雜的變量類型,是由多個數(shù)據(jù)組成的數(shù)據(jù)結(jié)構(gòu),與枚舉類型不同的是,這些數(shù)據(jù)可能是不同的類型。

從結(jié)構(gòu)體和枚舉的例子中可以看出,枚舉針對的是單一類型(整型),結(jié)構(gòu)體針對的是多種類型。可以將結(jié)構(gòu)體類型看成幾個類型組成的一個新類型,而枚舉的單一數(shù)據(jù)類型限制很多,它相當(dāng)于助記符,幫助程序員記憶。實驗原理

結(jié)構(gòu)體類型和枚舉類型的區(qū)別

結(jié)構(gòu)體類型實驗步驟首先,新建一個控制臺應(yīng)用程序,設(shè)置“項目名稱”為ConvertTime,保存至“D:\WinFormTest\5.基于結(jié)構(gòu)體的秒值-時間值轉(zhuǎn)換實驗”文件夾中。然后,將程序清單2-5中的代碼輸入Program.cs文件中。下面按照順序?qū)Σ糠终Z句進行解釋。第三章基于C#的面向?qū)ο蟪绦蛟O(shè)計工業(yè)和信息化部“十四五”規(guī)劃教材醫(yī)用儀器軟件設(shè)計—基于WinForm01類的封裝實驗實驗內(nèi)容創(chuàng)建ConvertTime類,在類中定義一個CalcTime類,進一步在CalcTime類中依次定義用于指定小時值、分鐘值和秒值的常量TIMEVALHOUR、TIMEVALMIN和TIMVALSEC;用于保存小時值、分鐘值和秒值的成員變量mHour、mMin和mSec;用于計算小時值、分鐘值和秒值的calcHour()、calcMin()和calcSec()方法;用于計算三個時間值的calcTimeVal()方法;用于獲取三個時間值的getTimeVal()方法。面向過程和面向?qū)ο笤诿嫦驅(qū)ο蟪霈F(xiàn)之前,廣泛采用的是面向過程。面向過程是一種以過程為中心的編程思想,以什么正在發(fā)生為目標(biāo)進行編程。即程序是一步一步地按照一定的順序從頭到尾執(zhí)行一系列的函數(shù)。面向?qū)ο笫且环N以事物為中心的編程思想。即當(dāng)解決一個問題時,面向?qū)ο髸倪@些問題中抽象出一系列對象,再抽象出這些對象的屬性和方法,讓每個對象去執(zhí)行自己的方法。面向?qū)ο笾械姆椒ㄏ喈?dāng)于面向過程中的函數(shù)。實驗原理類與對象類與對象是整個面向?qū)ο笾凶罨镜慕M成單元。其中,類是抽象的概念集合,表示一個共性的產(chǎn)物,類中定義的是屬性和行為(方法);對象是一種個性的表示,表示一個獨立而具體的個體??梢杂靡痪湓拋砜偨Y(jié)類和對象的區(qū)別:類是對象的模板,對象是類的實例。類只有通過對象才可以使用,在開發(fā)中先產(chǎn)生類,再產(chǎn)生對象。類不能直接使用,對象是可以直接使用的。實驗原理

實驗原理變量和類型類與對象20%30%40%50%成員變量成員變量是定義在類體中、方法體之外的變量。成員變量在創(chuàng)建對象的時候?qū)嵗?。成員變量可以被類中方法、構(gòu)造方法和特定類的語句塊訪問。局部變量在方法(包含構(gòu)造方法)和語句塊中定義的變量稱為局部變量。這種變量的聲明和初始化都是在方法中進行的,方法結(jié)束后,變量自動銷毀。類變量類變量也聲明在類體中、方法體之外,但必須聲明為static類型。類變量也稱為靜態(tài)變量。實驗原理

成員方法對應(yīng)類的行為,如漢堡店類中的selectBurger()、publicvoidpay()、privatevoidmakeBurger()和publicvoiddeliverBurger()方法。一個成員方法可以不帶參數(shù),也可以帶一個或若干參數(shù),這些參數(shù)可以是對象也可以是基本數(shù)據(jù)類型的變量。

C#中常見的訪問修飾符包括private、public、protected和internal,這些修飾符控制著對類、類的成員變量及成員方法的訪問,修飾符權(quán)限如表3-1所示。實驗原理

訪問修飾符類的成員方法和構(gòu)造方法實驗原理對象是根據(jù)類創(chuàng)建的。在C#中,使用關(guān)鍵字new來創(chuàng)建一個新的對象。創(chuàng)建對象需要以下3步。①聲明:聲明一個對象,包括對象名稱和對象類型;②實例化:使用關(guān)鍵字new來創(chuàng)建一個對象;③初始化:使用關(guān)鍵字new創(chuàng)建對象時,會調(diào)用構(gòu)造方法初始化對象。實驗原理對象的創(chuàng)建、操作和銷毀在面向?qū)ο蟪绦蛟O(shè)計中,封裝是指一種將抽象性方法接口的實現(xiàn)細節(jié)部分包裝、隱藏起來的方法。封裝可以被認(rèn)為是一個保護屏障,防止該類的代碼和數(shù)據(jù)被外部類定義的代碼隨機訪問。類的封裝實驗原理類的封裝實驗原理圖如圖3-2所示。本節(jié)實驗剖析實驗步驟首先,新建一個控制臺應(yīng)用程序,設(shè)置“項目名稱”為ConvertTime,保存至“D:\WinFormTest\OOP01.類的封裝實驗”文件夾中。然后,將程序清單3-1中的代碼輸入Program.cs文件中。下面按照順序?qū)Σ糠终Z句進行解釋。2020年有366天,將2020年1月1日作為計數(shù)起點,即計數(shù)1,2020年12月31日作為計數(shù)終點,即計數(shù)366。計數(shù)1代表“2020年1月1日-星期三”,計數(shù)10代表“2020年1月10日-星期五”。參考本節(jié)實驗,通過鍵盤輸入一個1~366之間的值,包括1和366,將其轉(zhuǎn)換為年、月、日、星期,并輸出轉(zhuǎn)換結(jié)果。本節(jié)任務(wù)02基于數(shù)組的秒值-時間值轉(zhuǎn)換實驗實驗內(nèi)容創(chuàng)建ConvertTime類,在類中定義一個父類CalcTime,在父類中依次定義用于指定小時值、分鐘值的常量TIMEVALHOUR和TIMEVALMIN;用于保存小時值和分鐘值的成員變量mHour和mMin;用于計算小時值和分鐘值的calcHour()和calcMin()。然后定義一個繼承父類的CalcAllTime子類,在子類中定義用于指定秒值類型的常量TIMEVALSEC;用于保存秒值的成員變量mSec;用于計算秒值的calcSec()方法。

繼承是一種新建類的方式,新建的類稱為子類,被繼承的類稱為父類。繼承是類與類之間的關(guān)系,使用繼承可以減少代碼的冗余。實驗原理類的繼承在C#中使用“:”來實現(xiàn)子類對父類的繼承,而且所有的類都繼承自System.Object,如果一個類的定義沒有使用“:”,則默認(rèn)繼承Object祖先類。注意,C#中的對象僅能直接派生于一個基類,當(dāng)然基類也可以有自己的基類。實驗原理繼承的實現(xiàn)繼承的優(yōu)點有:①代碼冗余度低,開發(fā)時間短;②代碼擴展性高,系統(tǒng)開發(fā)靈活性強;③代碼重用性高,系統(tǒng)出錯概率低。類也有相應(yīng)的缺點:①繼承是侵入性的,只要繼承,就必須擁有父類的所有屬性和方法;②子類擁有父類的屬性和方法,增加了子類代碼的約束,降低了代碼的靈活性;③當(dāng)父類的常量、變量和方法被修改時,需要考慮子類的修改,而且在缺乏規(guī)范的環(huán)境下,這種修改可能帶來大段代碼需要重構(gòu)的后果,增強了代碼的耦合性。繼承的優(yōu)點和缺點實驗原理通過調(diào)用該對象的dispTime()方法計算和顯示時間,如圖3-4所示。本節(jié)實驗剖析實驗步驟首先,新建一個控制臺應(yīng)用程序,設(shè)置“項目名稱”為ConvertTime,保存至“D:\WinFormTest\OOPO2.類的繼承實驗”文件夾中。然后,將程序清單3-2中的代碼輸入Program.cs文件中。下面按照順序?qū)Σ糠终Z句進行解釋。03類的多態(tài)實驗實驗內(nèi)容創(chuàng)建ConvertTime類,在類中定義一個DispTime類,之后在DispTime類中定義一個虛方法dispTime()。然后創(chuàng)建一個繼承DispTime類的CalcTime子類,進一步在CalcTime類中依次定義用于保存小時值、分鐘值和秒值的成員變量mHour、mMin和mSec;用于計算小時值、分鐘值和秒值的calcHour()、calcMin()和calcSec()方法,并重寫dispTime()方法。20%30%40%50%類的多態(tài)性多態(tài)性是指在父類中定義的屬性和方法被子類繼承后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為,這使得同一個屬性或方法在父類及其各個子類中具有不同的含義。重載與重寫的區(qū)別如果同一個類中包含兩個或兩個以上方法名相同、參數(shù)列表不同(與返回值類型無關(guān))的方法,則稱為方法重載。實驗剖析本節(jié)實現(xiàn)類的多態(tài),主要體現(xiàn)在方法的重寫及父類引用指向子類的對象。首先創(chuàng)建一個父類DispTime,在類中定義一個虛方法dispTime()。然后繼承父類創(chuàng)建一個CalcTime子類,在該類中重寫dispTime()方法。實驗原理實驗步驟首先,新建一個控制臺應(yīng)用程序,設(shè)置“項目名稱”為ConvertTime,保存至“D:\WinFormTest\OOP03.類的多態(tài)實驗”文件夾中。然后,將程序清單3-3中的代碼輸入Program.cs文件中。下面按照順序?qū)Σ糠终Z句進行解釋。04抽象類實驗實驗內(nèi)容創(chuàng)建ConvertTime類,在類中定義一個Time抽象類,在抽象類中依次定義用于保存小時值、分鐘值和秒值的成員變量mHour、mMin和mSec,以及用于顯示時間的dispTime()方法,該方法為抽象方法。然后定義一個繼承抽象類的CalcTime子類,在子類中定義用于計算小時值的calcHour()方法,用于計算分鐘值的calcMin()方法,用于計算秒值的calcSec(方法,最后,重寫用于顯示時間的dispTime()方法。抽象類也是類,只是抽象類具備一些特殊的性質(zhì)。通常編寫一個類時,會為這個類定義具體的屬性和方法,但某些情況下只知道一個類需要哪些屬性和方法,不知道這些方法具體是什么,這時就需要用到抽象類。實驗原理抽象類如果一個類中的方法的具體實現(xiàn)由它的子類確定,那么可以在父類中聲明該方法為抽象方法。定義抽象方法時,同樣需要使用abstract關(guān)鍵字,定義抽象方法的語法如下:[權(quán)限修飾符]abstract返回值類型方法名(參數(shù)列表);抽象方法繼承抽象類定義繼承抽象類的子類時,需要使用“:”,語法如下:實驗剖析無論是需要顯示時間的場合,還是需要計算和顯示時間的場合,都有一個共同點,就是需要有保存時間的三個變量,以及顯示時間的方法。實驗原理05接口實驗實驗內(nèi)容定義一個實現(xiàn)接口ITime的CalcTime類,在該類中定義用于保存小時值、分鐘值和秒值的成員變量mHour、mMin和mSec;用于計算小時值、分鐘值和秒值的calcHour()、calcMin()和calcSec()方法;最后,重寫用于顯示時間的dispTime()方法。

接口是抽象類的延伸,通常用interface來聲明。抽象類是對一種事物的抽象,即對類抽象;接口是對行為的抽象。

接口中可以含有變量和方法。

需要有保存時間的三個變量,以及顯示時間的方法。01020304實驗原理

首先,新建一個控制臺應(yīng)用程序,設(shè)置“項目名稱”為ConvertTime,保存至“D:\WinFormTest\OOP05.1.接口實驗”文件夾中。然后,將程序清單3-5中的代碼輸入Program.cs文件中。下面按照順序?qū)Σ糠终Z句進行解釋。實驗步驟06命名空間實驗實驗內(nèi)容創(chuàng)建CalcTime類,該類位于命名空間ConvertT.leyutek.calc中,在CalcTime類中依次定義用于指定小時值、分鐘值和秒值的常量TIMEVALHOUR、TIMEVALMIN和TIMVALSEC;用于保存小時值、分鐘值和秒值的成員變量mHour、mMin和mSec;用于計算小時值、分鐘值和秒值的calcHour()、calcMin()和calcSec()方法;用于計算三個時間值的calcTimeVal()方法;用于獲取三個時間值的getTimeVal(方法。20%30%40%50%C#命名空間命名空間提供了一種能夠有效解決命名沖突的方式。創(chuàng)建命名空間在代碼中,通過使用關(guān)鍵字namespace來定義命名空間,使用關(guān)鍵字using可以導(dǎo)入命名空間。具體的語法已在1.5.4節(jié)中介紹。實驗剖析本節(jié)實現(xiàn)類的多態(tài),主要體現(xiàn)在方法的重寫及父類引用指向子類的對象。首先創(chuàng)建一個父類DispTime,在類中定義一個虛方法dispTime()。然后繼承父類創(chuàng)建一個CalcTime子類,在該類中重寫dispTime()方法。實驗原理首先,新建一個控制臺應(yīng)用程序,設(shè)置“項目名稱”為ConvertTime,保存至“D:\WinFormTestOOP06.命名空間實驗”文件夾中。在“解決方案資源管理器”中右鍵單擊ConvertTime,在快捷菜單中依次選擇“添加”→“新建文件夾”,將文件夾命名為com。用同樣的方法在com文件夾中新建leyutek文件夾,再在leyutek文件夾中新建calc文件夾。右鍵單擊calc,在快捷菜單中依次選擇“添加”→“新建項”,在彈出的對話框中選擇“類”,并命名為CalcTime.cs,單擊“添加”按鈕。實驗步驟07異常處理實驗實驗內(nèi)容創(chuàng)建TickException自定義異常類,實現(xiàn)構(gòu)造方法。然后創(chuàng)建ConvertTime類,在該類中依次定義用于保存小時值、分鐘值和秒值的成員變量mHour、mMin和mSec;用于計算和顯示時間值的calcTimeVal()方法,如果tick值小于0或大于86399,則通過throw實例化TickException自定義異常類。C#異常處理當(dāng)預(yù)先知道有可能會出現(xiàn)錯誤,但是不能百分百肯定會出現(xiàn)時,可以在可能出現(xiàn)錯誤的地方,編寫完善的代碼來處理錯誤和異常,從而避免中斷程序的執(zhí)行。C#異常類型C#中所有的異常類都是System.Exception的直接或間接子類,這些異常類包含了異常的相關(guān)信息。C#捕獲異常在C#中,捕獲異常使用try…catch.finally語句。實驗原理實驗原理

throw關(guān)鍵字通常在方法體中使用,并且常常用于拋出一個用戶自定義的異常對象。當(dāng)程序執(zhí)行到throw語句時立即終止,throw后面的語句將不再執(zhí)行。

按照異常處理的思想,在計算小時值、分鐘值和秒值實驗中,如果用戶輸入一個小于0或大于86399的值,則應(yīng)該拋出異常,并處理異常。實驗原理

本節(jié)實驗剖析通過throw關(guān)鍵字拋出異常首先,新建一個控制臺應(yīng)用程序,設(shè)置“項目名稱”為ConvertTime,保存至“D:\WinFormTest\OOP07.異常處理實驗”文件夾中。然后,將程序清單3-9中的代碼輸入Program.cs文件中。下面按照順序?qū)Σ糠终Z句進行解釋。實驗步驟本節(jié)任務(wù)2020年有366天,將2020年1月1日作為計數(shù)起點,即計數(shù)1,2020年12月31日作為計數(shù)終點,即計數(shù)366。計數(shù)1代表“2020年1月1日-星期三”,計數(shù)10代表“2020年1月10日-星期五”。參考本節(jié)實驗,通過鍵盤輸入一個值,如果該值在1~366之間(包括1和366),將其轉(zhuǎn)換為年、月、日、星期,并輸出轉(zhuǎn)換結(jié)果;否則,通過異常處理機制,輸出異常信息。第四章WinForm程序設(shè)計工業(yè)和信息化部“十四五”規(guī)劃教材醫(yī)用儀器軟件設(shè)計—基于WinForm01多線程實驗實驗內(nèi)容本實驗主要對比有無lock死鎖對程序結(jié)果的影響。首先,新建一個控制臺應(yīng)用程序,在Program類中定義一個ticket()方法,用于顯示剩余預(yù)約號大于0時各個線程的調(diào)用情況(剩余預(yù)約號的初始值設(shè)為5)。在Main()方法中實例化Program類,新建4個線程,分別命名為“線程一”“線程二”"線程三”和“線程四”,線程入口都調(diào)用ticket()方法,然后打開線程,顯示每個線程的調(diào)用情況。

線程容易與進程混淆,在介紹線程之前,先了解進程。進程是系統(tǒng)中資源分配和資源調(diào)度的基本單位。

線程是進程中的基本執(zhí)行單元,是操作系統(tǒng)分配CPU時間的基本單元。一個進程可以包含若干線程,各線程同時運行且互不干擾,這是如何做到的?實驗原理

線程的定義多線程的優(yōu)缺點使用多線程有以下優(yōu)點:(1)多線程使程序的響應(yīng)速度更快,在進行后臺復(fù)雜計算時,也能使用戶界面處于活躍狀態(tài);(2)多線程可以提高CPU的利用率,因為在處理耗時任務(wù)時可以定期將處理器時間讓給其他任務(wù):(3)多線程可以分別設(shè)置優(yōu)先級優(yōu)化性能。實驗原理多線程的優(yōu)缺點使用多線程有好處,但過多地使用也存在弊端:(1)線程也需要占用內(nèi)存,線程越多,占用的內(nèi)存就越多;(2)跟蹤線程需要占用大量的CPU時間,線程過多,會使線程的進度變緩;(3)線程過多會導(dǎo)致控制復(fù)雜,造成很多程序缺陷;(4)線程之間對共享資源的訪問會互相影響,解決不當(dāng)會影響執(zhí)行效果。實驗原理在C#中,線程可以使用Thread類處理,該類位于System.Threading命名空間中,主要用于創(chuàng)建并控制線程、設(shè)置線程優(yōu)先級并控制其狀態(tài)。實驗原理創(chuàng)建線程lock關(guān)鍵字用來確保代碼塊完整運行,不會被其他線程中斷。使用lock關(guān)鍵字實現(xiàn)線程同步實驗步驟首先,新建一個控制臺應(yīng)用程序,設(shè)置“項目名稱”為DemoThread,保存至“D:\WinFormTest\WinForm1.多線程實驗"文件夾中。然后,將程序清單4-1中的代碼輸入Program.cs文件中。下面按照順序?qū)Σ糠终Z句進行解釋。02委托和事件實驗實驗內(nèi)容本實驗主要通過委托實現(xiàn)參數(shù)在不同界面中傳輸?shù)墓δ?。項目包含兩個界面:主界面和子界面。主界面顯示當(dāng)前的病人類型和“修改類型”按鈕,單擊該按鈕進入子界面。子界面包含下拉列表和“確定”按鈕,通過下拉列表可以選擇“成人”“兒童”或“新生兒”病人類型,單擊“確定”按鈕,選中的病人類型將顯示在主界面中。20%30%40%50%委托的本質(zhì)程序設(shè)計中經(jīng)常會將數(shù)據(jù)作為參數(shù)傳遞給方法,是否可以將方法傳遞給其他方法?在C#中,通過委托可以實現(xiàn)對方法的引用。聲明委托類型委托是類型安全的類,它定義了返回類型和參數(shù)的類型,相當(dāng)于將要傳遞的方法的細節(jié)封裝在委托中。事件事件基于委托。委托在Windows應(yīng)用程序中很常見,如Button提供了Click事件,這類事件就是委托。實驗原理實驗步驟首先,參考1.4節(jié)新建一個WinForm項目,命名為DemoDelegate,保存至“D:WinFormTest\WinForm2.委托和事件實驗”文件夾中。本實驗用到兩個用戶界面,新建WinForm項目時會默認(rèn)生成界面Form1。再創(chuàng)建一個界面Form2,右鍵單擊DemoDelegate,在快捷菜單中選擇“添加”→“新建項”,在彈出的對話框中選擇“窗體(Windows窗體)”,如圖4-3所示,單擊“添加”按鈕便生成一個空的界面Form2。實驗步驟實驗內(nèi)容創(chuàng)建ConvertTime類,在類中定義一個父類CalcTime,在父類中依次定義用于指定小時值、分鐘值的常量TIMEVALHOUR和TIMEVALMIN;用于保存小時值和分鐘值的成員變量mHour和mMin;用于計算小時值和分鐘值的calcHour()和calcMin()。然后定義一個繼承父類的CalcAllTime子類,在子類中定義用于指定秒值類型的常量TIMEVALSEC;用于保存秒值的成員變量mSec;用于計算秒值的calcSec()方法。實驗步驟切換到Form1的窗體設(shè)計界面,根據(jù)需求拉伸窗體的大小,然后從“工具箱”中拖出2個Label和1個Button控件,如圖4-4所示。實驗步驟右鍵單擊label1,在快捷菜單中選擇“屬性”,如圖4-5所示。實驗步驟在“屬性”標(biāo)簽頁中,單擊Font屬性后面的□按鈕,在彈出的“字體”對話框中,設(shè)置字體為“宋體,常規(guī),12號”,完成后單擊“確定”按鈕;再將Text屬性設(shè)置為“病人類型:”,如圖4-6所示。

同樣將label2的(Name)屬性設(shè)置為labelType,Font屬性設(shè)置為“宋體,常規(guī),12號”,Text屬性設(shè)置為“成人”,如圖4-7所示。實驗步驟

最后將buton1控件的(Name)屬性設(shè)置為buttonChangeType,Font屬性設(shè)置為“宋體,常規(guī),12號”,Text屬性設(shè)置為“修改類型”,然后調(diào)整控件的效果如圖4-8所示。實驗步驟實驗步驟完成Form1界面設(shè)計后,為“修改類型”按鈕添加響應(yīng)方法。打開“修改類型”按鈕的“屬性”標(biāo)簽頁,單擊按鈕,然后雙擊事件列表的Click事件,生成“修改類型”按鈕的響應(yīng)方法,如圖4-9所示。實驗步驟切換到Form2窗體設(shè)計界面,參考設(shè)置Form1界面的操作和表4-1,設(shè)置Form2界面。Form2界面最終效果如圖4-10所示。03畫圖實驗實驗內(nèi)容本實驗主要實現(xiàn)在界面上連續(xù)畫正弦波。在數(shù)組中存儲波形數(shù)據(jù),通過定時器使用畫筆畫波形。20%30%40%50%GDI+概述GDI+提供了圖形圖像操作的應(yīng)用程序編程接口(API),就像一個繪圖儀,可以將圖形繪制在指定的模板中,并對圖形的顏色、線條粗細和位置等進行設(shè)置。Graphics繪圖類Graphics繪圖類是GDI+的核心,用于創(chuàng)建圖形圖像的對象,提供了將對象繪制到顯示設(shè)備的方法。設(shè)置畫刷并填充圖形設(shè)置畫刷用到Brush類,主要用于填充幾何圖形的顏色。實驗原理設(shè)置畫筆并繪制圖形Pen類主要用于設(shè)置畫筆。Timer組件Timer組件即計時器組件,可以定期引發(fā)事件,時間間隔由Interval屬性定義,其屬性以ms為單位。DataGridView控件DataGridView控件主要用于繪制數(shù)據(jù)表格,本書將其作為畫布來繪制波形。實驗原理實驗步驟首先,新建一個WinForm項目,命名為DemoDraw,保存至“D:\WinFormTest\WinForm3.畫圖實驗”文件夾中。設(shè)置好的波形顯示界面如圖4-18所示。

控件說明如表4-2所示,添加響應(yīng)方法timerOneMSTick(的操作可參考4.2.2節(jié)。實驗步驟第五章打包解包小工具設(shè)計實驗工業(yè)和信息化部“十四五”規(guī)劃教材醫(yī)用儀器軟件設(shè)計—基于WinForm01實驗內(nèi)容實驗內(nèi)容學(xué)習(xí)PCT通信協(xié)議及C#中的部分控件,如標(biāo)簽控件(Label)、文本框控件(TextBox)和按鈕控件(Button)等。設(shè)計一個打包解包小工具,在文本框中輸入模塊ID、二級ID及6字節(jié)數(shù)據(jù)后,通過“打包”按鈕實現(xiàn)打包操作,并將打包結(jié)果顯示在打包結(jié)果顯示區(qū)。另外,還可以根據(jù)用戶輸入的10字節(jié)待解包數(shù)據(jù),通過“解包”按鈕實現(xiàn)解包操作,并將解包結(jié)果顯示在解包結(jié)果顯示區(qū)。02實驗原理

從機常作為執(zhí)行單元,用于處理一些具體的事務(wù),而主機(如Windows、Linux、Android和emWin平臺等)常用于與從機進行交互,向從機發(fā)送命令,或處理來自從機的數(shù)據(jù)。PCT通信協(xié)議PCT通信協(xié)議格式在主機與從機的通信過程中,主機和從機有一個共同的模塊,即打包解包模塊(PackUnpack),該模塊遵循某種通信協(xié)議。通信協(xié)議有很多種,本實驗采用的PCT通信協(xié)議由本書作者設(shè)計,該協(xié)議可由C、C++、C#、Java等編程語言實現(xiàn)。打包后的PCT通信協(xié)議的數(shù)據(jù)包格式如圖5-3所示。PCT通信協(xié)議格式PCT通信協(xié)議規(guī)定:(1)數(shù)據(jù)包由1字節(jié)模塊ID+1字節(jié)數(shù)據(jù)頭+1字節(jié)二級ID+6字節(jié)數(shù)據(jù)+1字節(jié)校驗和構(gòu)成,共10字節(jié)。(2)數(shù)據(jù)包中有6個數(shù)據(jù),每個數(shù)據(jù)為1字節(jié)。(3)模塊ID的最高位bit7固定為0。(4)模塊ID的取值范圍為0x00~0x7F,最多有128種類型。PCT通信協(xié)議格式(5)數(shù)據(jù)頭的最高位bit7固定為1,數(shù)據(jù)頭的低7位按照從低位到高位的順序,依次存放二級ID的最高位bit7、數(shù)據(jù)1~數(shù)據(jù)6的最高位bit7。(6)校驗和的低7位為模塊ID+數(shù)據(jù)頭+二級ID+數(shù)據(jù)1+數(shù)據(jù)2+…+數(shù)據(jù)6求和的結(jié)果(取低7位)。(7)二級I、數(shù)據(jù)1~數(shù)據(jù)6及校驗和的最高位bit7固定為1。注意,并不是說二級ID、數(shù)據(jù)1~數(shù)據(jù)6和校驗和只有7位,而是在打包后,它們的低7位位置不變,最高位均位于數(shù)據(jù)頭中,因此,依然還是8位。

第1步,準(zhǔn)備原始數(shù)據(jù),原始數(shù)據(jù)由模塊ID(0x00~0x7F)、二級ID、數(shù)據(jù)1~數(shù)據(jù)6組成,如圖5-4所示。

如圖1-12所示,單擊選中button1,在“屬性”標(biāo)簽頁第2步,依次取出二級ID、數(shù)據(jù)1~數(shù)據(jù)6的最高位bit7,將其存放于數(shù)據(jù)頭的低7位。中將Text修改為ClickMe,button1按鈕顯示的文本將改變。PCT通信協(xié)議打包過程

第3步,對模塊ID、數(shù)據(jù)頭、二級ID、數(shù)據(jù)1~數(shù)據(jù)6的低7位求和,取求和結(jié)果的低7位,將其存放于校驗和的低7位,如圖5-6所示。

第4步,將數(shù)據(jù)頭、二級ID、數(shù)據(jù)1~數(shù)據(jù)6及校驗和的最高位置1,如圖5-7所示。PCT通信協(xié)議打包過程

PCT通信協(xié)議解包過程第1步,準(zhǔn)備解包前的數(shù)據(jù)包,原始數(shù)據(jù)包由模塊ID、數(shù)據(jù)頭、二級ID、數(shù)據(jù)1~數(shù)據(jù)6、校驗和組成,如圖5-8所示。

第2步,對模塊ID、數(shù)據(jù)頭、二級ID、數(shù)據(jù)1~數(shù)據(jù)6的低7位求和,如圖5-9所示,取求和結(jié)果的低7位與數(shù)據(jù)包的校驗和低7位對比,如果兩個值的結(jié)果相等,則說明校驗正確。PCT通信協(xié)議解包過程PCT通信協(xié)議解包過程數(shù)據(jù)頭的最低位bitO與二級ID的低7位拼接之后作為最終的二級ID,數(shù)據(jù)頭的bit1與數(shù)據(jù)1的低7位拼接之后作為最終的數(shù)據(jù)1,數(shù)據(jù)頭的bit2與數(shù)據(jù)2的低7位拼接之后作為最終的數(shù)據(jù)2,以此類推,如圖5-10所示。

圖5-11所示即為解包后的結(jié)果,由模塊ID、二級ID、數(shù)據(jù)1~數(shù)據(jù)6組成。其中,模塊ID的取值范圍為0x00~0x7F,二級ID和數(shù)據(jù)的取值范圍為0x00~0xFF。PCT通信協(xié)議解包過程打包解包小工具設(shè)計框圖如圖5-12所示。設(shè)計框圖PackUnpack.cs文件介紹本書資料包提供的PackUnpack.cs文件中包含PCT通信協(xié)議的C#語言實現(xiàn)代碼,其中包含了4個API方法,分別為構(gòu)造方法PackUnpack()、打包方法packData()、解包方法unpackData()及獲得解包后的數(shù)據(jù)包方法getUnpackRslt(),如表5-1所示。

PackUnpackDemo項目的最終布局界面如圖5-13所示。該界面主要用到3種控件,分別為Button、TextBox和Label。界面介紹

PackUnpackDemo項目的最終布局界面如圖5-13所示。該界面主要用到3種控件,分別為Button、TextBox和Label。界面介紹03實驗步驟首先,將本書配套資料包中的“Material\01.PackUnpackDemo\01.PackUnpackDemo”文件夾復(fù)制到“D:\WinFormTest”目錄下。實驗步驟復(fù)制基準(zhǔn)項目將本書配套資料包中的“Material\01.PackUnpackDemo\StepByStep\PackUnpack.cs”文件復(fù)制到“D:\WinFormTest\01.PackUnpackDemo\PackUnpackDemo\PackUnpackDemo”目錄下。添加PackUnpack.cs文件實驗步驟雙擊打開MainForm.cs文件,PackUnpackDemo項目界面如圖5-14所示,按照表5-3所示的控件說明為控件添加響應(yīng)方法。添加控件的響應(yīng)方法

雙擊打開MainForm.cs文件,PackUnpackDemo項目界面如圖5-14所示,按照表5-3所示的控件說明為控件添加響應(yīng)方法。實驗步驟添加控件的響應(yīng)方法在MainForm.cs文件的PackUnpackDemo類中,添加第3行代碼實例化PackUnpack類。實驗步驟完善MainForm.cs文件按F5鍵編譯并運行程序,修改輸入的裸數(shù)據(jù),單擊“打包”按鈕。再將打包好的數(shù)據(jù)復(fù)制到待解包數(shù)據(jù)輸入?yún)^(qū),單擊“解包”按鈕,驗證是否能還原為裸數(shù)據(jù)。編譯運行驗證程序第六章串口通信小工具設(shè)計實驗工業(yè)和信息化部“十四五”規(guī)劃教材醫(yī)用儀器軟件設(shè)計—基于WinForm01實驗內(nèi)容實驗內(nèi)容學(xué)習(xí)串口通信相關(guān)知識點,了解串口通信的過程,然后通過WinForm完成串口通信小工具的界面布局,設(shè)計出一個可實現(xiàn)串口通信的應(yīng)用程序。02實驗原理

串口是串行接口的簡稱,通常指COM接口。串口將數(shù)據(jù)一位一位地順序傳送,其特點是通信線路簡單、成本低。串口通信的基本流程如圖6-1所示。實驗原理

動態(tài)鏈接庫(DynamicLinkLibrary,DLL)是微軟公司在Windows操作系統(tǒng)中實現(xiàn)共享函數(shù)庫的一種方式,本實驗用到的動態(tài)鏈接庫的常用擴展名是.dll。Windows提供的DLL文件中包含了允許基于Windows程序在Windows環(huán)境下操作的許多函數(shù),通常存放于計算機的“C:\Windows\System32”目錄下。

SerialPort控件是.NET提供的對串口通信的支持功能,有關(guān)類放在命名空間System.IO.Ports中,其中最常用的是SerialPort類。通過創(chuàng)建一個SerialPort對象,就可以在程序中控制串口通信的全過程。實驗原理

動態(tài)鏈接庫SerialPort控件實驗原理4.2節(jié)介紹了委托的一種用法。委托的另一種用法是在serialPort串口接收數(shù)據(jù)的過程中,利用this.invok解決多線程中跨線程調(diào)用主界面的問題。對于C#,默認(rèn)不能在其他線程中訪問非本線程創(chuàng)建的控件。在本實驗中,需要將串口接收到的數(shù)據(jù)更新到主界面,主界面在主線程中實現(xiàn),串口接收數(shù)據(jù)的功能在串口接收事件子線程中實現(xiàn)。這涉及跨線程調(diào)用的問題,需要使用委托,否則在運行時會報錯,原因是不能跨線程直接訪問主界面的控件。委托的另一種用法實驗原理雙擊本書配套資料包“02.相關(guān)軟件\VSPD”文件夾中的vspd.exe文件,在彈出的如圖6-2所示的對話框中,單擊OK按鈕。虛擬串口實驗原理如圖6-3所示,單擊Next按鈕。如圖6-4所示,選擇Iaccepttheagreement,然后單擊Next按鈕。虛擬串口

在彈出的對話框中,設(shè)置安裝路徑,然后單擊Next按鈕,如圖6-5所示。如圖6-6所示,單擊Next按鈕。實驗原理虛擬串口實驗原理如圖6-7所示,單擊Next按鈕。如圖6-8所示,單擊Install按鈕。虛擬串口實驗原理如圖6-9所示,單擊Finish按鈕。虛擬串口

VirtualSerialPortDriver軟件的用法如圖6-10所示。先選擇兩個串口號,然后單擊Addpair按鈕,即可將這兩個串口配置為一對虛擬串口。實驗原理虛擬串口實驗原理如圖6-11所示,已成功創(chuàng)建一對虛擬串口。虛擬串口實驗原理串口通信小工具的設(shè)計框圖如圖6-12所示。設(shè)計框圖03實驗步驟首先,將本書配套資料包中的“Material\02.SerialPortDemo\02.SerialPortDemo”文件夾復(fù)制到“D:\WinFormTest”目錄下,然后雙擊SerialPortDemo.sln文件打開項目。實驗步驟復(fù)制基準(zhǔn)項目雙擊打開MainForm.cs文件,串口通信小工具界面如圖6-15所示,按照表6-2所示的控件說明為控件添加響應(yīng)方法。添加控件的響應(yīng)方法實驗步驟在MainForm.cs文件的SerialPortDemo類中添加如程序清單6-1所示的第3至22行代碼,下面按照順序?qū)Σ糠终Z句進行解釋。實驗步驟完善MainForm.cs文件首先,通過虛擬串口軟件生成兩個虛擬串口COM2和COM3。同時打開SSCOM串口工具,串口號選擇COM2,調(diào)整串口配置參數(shù)為“波特率115200,數(shù)據(jù)位8,停止位1,校驗位NONE”。單擊“打開串口”按鈕,打開串口后,便已準(zhǔn)備好需要的環(huán)境。編譯運行驗證程序第七章人體生理參數(shù)監(jiān)測系統(tǒng)軟件平臺布局實驗工業(yè)和信息化部“十四五”規(guī)劃教材醫(yī)用儀器軟件設(shè)計—基于WinForm01實驗內(nèi)容實驗內(nèi)容VisualStudio通過可視化的界面編輯工具進行程序界面設(shè)計,使用拖拽控件的方式來編寫布局,并修改控件的屬性。由于人體生理參數(shù)監(jiān)測系統(tǒng)涉及的控件種類和數(shù)量眾多,因此本實驗僅介紹界面布局中的一些關(guān)鍵步驟。但為了便于后續(xù)一系列生理參數(shù)監(jiān)測實驗的開展,本章提供了已經(jīng)完成布局的基準(zhǔn)項目,可以直接基于基準(zhǔn)項目開展實驗,也可以參考基準(zhǔn)項目自行布局。02實驗原理

菜單欄是一種樹形結(jié)構(gòu),為軟件的大多數(shù)功能提供功能入口。C#的菜單欄默認(rèn)位于窗口的上方、標(biāo)題欄的下方。通過工具欄中的菜單控件MenuStrip可以自定義菜單,對菜單進行布局。

狀態(tài)欄用于顯示消息或狀態(tài),通常位于窗口或程序操作界面的最底端。C#中通過工具欄中的狀態(tài)欄控件StatusStrip可以自定義狀態(tài)欄。實驗原理

菜單欄狀態(tài)欄實驗原理在Windows窗體應(yīng)用程序中顯示圖片時需要使用圖片控件PictureBox,將需要的圖片通過控件PictureBox的Image屬性導(dǎo)入,調(diào)整大小即可。另外,圖片控件中的圖片設(shè)置除可以直接使用Image屬性指定具體外,還可以通過Image.FromFile方法來設(shè)置,實現(xiàn)的代碼如下:圖片控件的名稱.Image=Image.FromFile(圖像的路徑);PictureBox實驗原理人體生理參數(shù)監(jiān)測系統(tǒng)軟件平臺布局設(shè)計框圖如圖7-1所示。設(shè)計框圖

本實驗的界面布局主要在窗體設(shè)計器中進行,不需要編寫代碼。通過將“工具箱”中的控件拖到初始界面中,然后對控件的屬性進行修改以達到最終的界面效果。最終的人體生理參數(shù)監(jiān)測系統(tǒng)軟件平臺界面布局效果如圖7-2所示。實驗原理界面設(shè)計03實驗步驟首先,新建一個WinForm窗體應(yīng)用,命名為ParamMonitor,保存至“D:\WinFormTest\03.MainWindowLayout"文件夾中。然后,將解決方案資源管理器中的Forml.cs文件重新命名為MainForm.cs。實驗步驟在MainForm.c新建ParamMonitor項目將本書配套資料包中的“04.例程資料Material\03.MainWindowLayoutStepByStep\圖片”文件夾復(fù)制到“D:\WinFormTest03.MainWindowLayoutParamMonitor'ParamMonitorbin\Debug”目錄下。復(fù)制圖片文件夾在MainForm窗體設(shè)計界面中,選中整個界面,然后單擊Icon屬性右側(cè)的■按鈕,在“D:\WinFormTest\03.MainWindowLayout\ParamMonitor\ParamMonitor'bin\Debug\圖片”中找到圖標(biāo)“monitor128×128”,選中并添加,添加圖標(biāo)后標(biāo)題欄中的窗口圖標(biāo)相應(yīng)地改變。實驗步驟修改主界面圖標(biāo)將“工具箱”中的MenuStrip菜單欄控件拖到MainForm窗體設(shè)計界面中,界面外側(cè)下方便會顯示對應(yīng)的控件。添加菜單欄實驗步驟

人體生理參數(shù)監(jiān)測系統(tǒng)軟件平臺界面的菜單欄對應(yīng)的控件屬性設(shè)置如表7-2所示。實驗步驟實驗步驟畫圖區(qū)域共分為4個(2個心電畫圖模塊、1個血氧畫圖模塊、1個呼吸畫圖模塊),每個區(qū)域分別由一個按鈕控件Button和一個數(shù)據(jù)表格控件DataGridView組成。畫圖區(qū)域布局實驗步驟布局完的第一個畫圖區(qū)域效果如圖7-7所示。畫圖區(qū)域布局實驗步驟選中已經(jīng)完成屬性設(shè)置的兩個控件,按快捷鍵Ctrl+C復(fù)制,再按快捷鍵Ctrl+V粘貼三次,分別整體拖動控件進行對齊設(shè)置,完成后的畫圖區(qū)域布局效果如圖7-8所示。畫圖區(qū)域布局實驗步驟下面對控件文字、命名和文字顏色進行設(shè)置,具體設(shè)置如表7-5所示。畫圖區(qū)域布局

參數(shù)顯示區(qū)域主要包括五大參數(shù):心電、無創(chuàng)血壓、血氧、呼吸和體溫。涉及的控件有Button控件、Label控件和PictureBox控件,由于心電參數(shù)顯示區(qū)域同時涉及這三種控件,下面以心電參數(shù)顯示區(qū)域的布局為例介紹,如圖7-9所示。實驗步驟參數(shù)顯示區(qū)域布局實驗步驟開始導(dǎo)入的圖片可能不匹配控件框,單擊控件右上角的三角符號,在彈出的對話框中,將大小模式設(shè)置為StretchImage,如圖7-10所示,圖片就會按照PictureBox控件框的大小進行拉伸,可調(diào)整控件的大小和比例,圖片的大小和比例也會同步改變。參數(shù)顯示區(qū)域布局實驗步驟心電參數(shù)顯示區(qū)域的控件屬性如表7-6所示。參數(shù)顯示區(qū)域布局

參考上述方法完成其他四大參數(shù)顯示區(qū)域的界面布局,無創(chuàng)血壓參數(shù)顯示區(qū)域的布局如圖7-11所示,無創(chuàng)血壓參數(shù)顯示區(qū)域的控件屬性如表7-7所示。實驗步驟參數(shù)顯示區(qū)域布局實驗步驟血氧參數(shù)顯示區(qū)域布局如圖7-12所示,血氧參數(shù)顯示區(qū)域的控件屬性如表7-8所示。參數(shù)顯示區(qū)域布局實驗步驟呼吸和體溫參數(shù)顯示區(qū)域布局如圖7-13所示,呼吸參數(shù)顯示區(qū)域的控件屬性如表7-9所示,體溫參數(shù)顯示區(qū)域的控件屬性如表7-10所示。參數(shù)顯示區(qū)域布局第八章體溫監(jiān)測與顯示實驗工業(yè)和信息化部“十四五”規(guī)劃教材醫(yī)用儀器軟件設(shè)計—基于WinForm01實驗內(nèi)容實驗內(nèi)容本實驗主要需要編寫和完善以下功能的代碼:①單擊主界面的“串口設(shè)置”按鈕,彈出串口設(shè)置窗口,并可在窗口中進行串口設(shè)置;②在體溫顯示區(qū)域顯示體溫值和導(dǎo)聯(lián)狀態(tài),雙擊該區(qū)域彈出體溫設(shè)置窗口,可在窗口中改變體溫探頭的類型。02實驗原理實驗原理體溫指人體內(nèi)部的溫度,是物質(zhì)代謝轉(zhuǎn)化為熱能的產(chǎn)物。人體的一切生命活動都是以新陳代謝為基礎(chǔ)的,而恒定的體溫是保證新陳代謝和生命活動正常進行的必要條件。體溫過高或過低,都會影響酶的活性,從而影響新陳代謝的正常運行,使人體的各種細胞、組織和器官的功能發(fā)生紊亂,嚴(yán)重時還會導(dǎo)致死亡??梢姡w溫的相對穩(wěn)定,是維持機體內(nèi)環(huán)境穩(wěn)定,保證新陳代謝等生命活動正常進行的必要條件。體溫測量原理實驗原理體溫監(jiān)測與顯示實驗的設(shè)計框圖如圖8-1所示。設(shè)計框圖

開始程序設(shè)計之前,先通過一個應(yīng)用程序來了解體溫監(jiān)測與顯示的效果。打開本書配套資料包中的“03.WinForm應(yīng)用程序\04.TempMonitor”目錄,雙擊運行TempMonitor.exe。

將人體生理參數(shù)監(jiān)測系統(tǒng)硬件平臺通過USB線連接到計算機,打開硬件平臺,并在設(shè)備管理器中查看對應(yīng)的串口號(本機是COM17),將硬件平臺設(shè)置為演示模式、USB連接及輸出體溫數(shù)據(jù)。人體生理參數(shù)監(jiān)測系統(tǒng)硬件平臺的具體使用方法可參考附錄A。實驗原理

體溫監(jiān)測與顯示應(yīng)用程序運行效果

單擊項目界面菜單欄的“串口設(shè)置”選項,在彈出的窗口中完成串口的配置,如圖8-2。完成串口的配置后,單擊“打開串口”按鈕開始接收數(shù)據(jù),即可看到體溫值和導(dǎo)聯(lián)狀態(tài),如圖8-3所示。實驗原理體溫監(jiān)測與顯示應(yīng)用程序運行效果03實驗步驟將本書配套資料包中的“04.例程資料\MateriaN04.TempMonitor\04.TempMonitor”文件夾復(fù)制到“D:\WinFormTest”目錄下。實驗步驟復(fù)制基準(zhǔn)項目將本書配套資料包“04.例程資料\Material\04.TempMonitor\StepByStep”文件夾中的所有文件復(fù)制到“D:\WinFormTest\04.TempMonitor\ParamMonitor\ParamMonitor”目錄下。復(fù)制并添加文件

添加串口控件和定時器控件雙擊打開MainForm.cs窗體的設(shè)計界面,將“工具箱”中的SerialPort控件拖到界面下方,將該控件的(Name)屬性修改為serialPortMonitor。同樣,將“工具箱”中的Timer控件拖到界面下方,將該控件的(Name)屬性修改為timerOneSec,Enabled屬性改為True(啟用定時器),Interval屬性改為30(定時器定時間隔為30ms)。實驗步驟實驗步驟雙擊打開FormUARTSet.cs窗體的設(shè)計界面,串口設(shè)置界面如圖8-5所示。下面為“打開串口”按鈕添加響應(yīng)方法,打開“打開串口”按鈕的“屬性”標(biāo)簽頁,單擊按鈕,然后雙擊事件列表的Click事件,生成“打開串口”按鈕的響應(yīng)方法。添加控件的響應(yīng)方法實驗步驟雙擊打開FormTEMPSet.cs窗體的設(shè)計界面,體溫參數(shù)設(shè)置界面如圖8-6所示,對照表8-1所示的控件說明為控件添加響應(yīng)方法。添加控件的響應(yīng)方法實驗步驟雙擊打開FormTEMPSet.cs窗體的設(shè)計界面,體溫參數(shù)設(shè)置界面如圖8-6所示,對照表8-1所示的控件說明為控件添加響應(yīng)方法。添加控件的響應(yīng)方法

主窗體設(shè)計界面如圖8-7所示,對照表8-2所示的控件說明為控件添加響應(yīng)方法。實驗步驟添加控件的響應(yīng)方法

主窗體設(shè)計界面如圖8-7所示,對照表8-2所示的控件說明為控件添加響應(yīng)方法。實驗步驟添加控件的響應(yīng)方法在FormUARTSet.cs文件中添加第3至19行和第23至27行代碼,將原代碼的第29行修改為當(dāng)前第29行代碼后,再添加第33至65行代碼,如程序清單8-1所示,下面按照順序?qū)Σ糠终Z句進行解釋。實驗步驟完善FormUARTSet.cs文件實驗步驟在SendData.cs文件的SendData類中添加第3至6行和第10行代碼,如程序清單8-3所示,下面按照順序?qū)@些語句進行解釋。(1)第3至6行代碼:定義SerialPort類變量,實例化PackUnpack類對象。(2)第10行代碼:將SendData類中的串口號變量與主界面的串口號同步。完善SendData.cs文件在FormTEMPSet.cs文件中添加第3至4行、第8至12行和第18至20行代碼,如程序清單8-5所示,下面按照順序?qū)@些語句進行解釋。(1)第4行代碼:聲明一個設(shè)置體溫探頭的委托。(2)第8至9行代碼:聲明串口和體溫探頭類型變量。(3)第12行代碼:聲明設(shè)置體溫探頭委托變量。(2)第19行代碼:將構(gòu)造方法的參數(shù)sendData的值賦值給mSendData變量。(3)第20行代碼:將構(gòu)造方法的參數(shù)prbType的值賦值給mPrbType變量。實驗步驟完善FormTEMPSet.cs文件實驗步驟在MainForm.cs文件中添加第3至37行和第43至49行代碼,如程序清單8-8所示,下面按照順序?qū)Σ糠终Z句進行解釋。(1)第3行代碼:定義緩沖長度為2000。(2)第5行代碼:定義體溫探頭類型變量,并初始化為YSI。(3)第8至10行代碼:引入動態(tài)鏈接庫的寫INI配置文件方法。(4)第12至14行代碼:引入動態(tài)鏈接庫的讀INI配置文件方法。(5)第17行代碼:定義保存串口配置的文件名稱。完善MainForm.cs文件實驗步驟(6)第20至21行代碼:引入動態(tài)鏈接庫的GetTickCount方法。(7)第25行代碼:實例化串口配置信息結(jié)構(gòu)體變量。(8)第27行代碼:實例化PackUnpack類對象。(9)第28行代碼:實例化線性鏈表對象。(10)第34行代碼:實例化object對象。(11)第35行代碼:定義一個字節(jié)二維數(shù)組,作為接收數(shù)據(jù)的緩沖。(12)第44至47行代碼:使用for循環(huán),使緩沖數(shù)組每個數(shù)據(jù)皆為0。完善MainForm.cs文件第九章血壓監(jiān)測與顯示實驗工業(yè)和信息化部“十四五”規(guī)劃教材醫(yī)用儀器軟件設(shè)計—基于WinForm01實驗內(nèi)容實驗內(nèi)容本章實驗主要需要編寫和完善實現(xiàn)以下功能的代碼:①在無創(chuàng)血壓顯示區(qū)域顯示壓力值、平均壓、舒張壓、收縮壓、脈率和測量模式;②雙擊無創(chuàng)血壓顯示區(qū)域,彈出無創(chuàng)血壓設(shè)置窗口,其中,“測量模式”下拉列表可選手動、1分鐘、2分鐘、3分鐘、4分鐘、5分鐘、10分鐘、15分鐘、30分鐘、60分鐘、90分鐘、120分鐘、180分鐘、240分鐘、480分鐘,表示每多少分鐘自動測量一次。02實驗原理實驗原理血壓是指血液在血管內(nèi)流動時作用于血管壁單位面積的側(cè)壓力,它是推動血液在血管內(nèi)流動的動力,通常所說的血壓是指體循環(huán)的動脈血壓。心臟泵出血液時形成的血壓為收縮壓,也稱為高壓;血液在流回心臟的過程中產(chǎn)生的血壓為舒張壓,也稱為低壓。收縮壓與舒張壓是判斷人體血壓正常與否的兩個重要生理參數(shù)。血壓測量原理

直接測量法采用插管技術(shù),通過外科手術(shù)把帶壓力傳感器的探頭插入動脈血管或靜脈血管。這種方法具有創(chuàng)傷性,一般只用于重危病人。

間接測量法又稱為無創(chuàng)測量法,它從體外間接測量動脈血管中的壓力,更多地用于臨床。目前常見的無創(chuàng)自動血壓測量方法有多種,如柯氏音法、示波法和光電法等。與其他方法相比,示波法有較強的抗干擾能力,能較可靠地測定血壓。實驗原理

血壓測量原理

示波法又稱為測振法,充氣時利用充氣袖帶阻斷動脈血流;在放氣過程中,袖帶內(nèi)氣壓跟隨動脈內(nèi)壓力波動而出現(xiàn)脈搏波,這種脈搏波隨袖帶氣壓的減小而呈現(xiàn)由弱變強后再逐漸減弱的趨勢,如圖9-1所示。實驗原理血壓測量原理實驗原理血壓監(jiān)測與顯示實驗的設(shè)計框圖如圖9-2所示。設(shè)計框圖實驗原理開始程序設(shè)計之前,先通過一個應(yīng)用程序來了解血壓監(jiān)測的效果。打開本書配套資料包中的“03.WinForm應(yīng)用程序\05.NIBPMonitor”目錄,雙擊運行NIBPMonitor.exe。血壓監(jiān)測與顯示應(yīng)用程序運行效果03實驗步驟首先,將本書配套資料包中的“04.例程資料MateriaNO5.NIBPMonitor\05.NIBPMonitor”文件夾復(fù)制到“D:\WinFormTest”目錄下。實驗步驟復(fù)制基準(zhǔn)項目將本書配套資料包“04.例程資料MaterialN05.NIBPMonitorlStepByStep”文件夾中的所有文件復(fù)制到“D:

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論