




已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
Visual Basic課 程 設 計 報 告任課教師:張小兵教授學生姓名:黃錫龍學生專業(yè):武器發(fā)射工程學生學號:913108320115南京理工大學能源與動力工程學院2014年04月04日目錄題目、知識點、題目介紹、功能要求簡要 3突破、不足. 4程序代碼描述 5途中遇到的代碼 6編程的思考過程. 7感悟. 9窗體代碼. 10模塊代碼. 15題目:模擬手機短消息編輯器知識點:讀文本文件圖片的應用繪圖的方法動態(tài)數(shù)組的使用字符串處理AIP函數(shù)的使用題目介紹:移動電話(手機)是當今人們的必備通信工具之一,短消息是手機上的一個重要的功能,其低廉的資費受到年輕人的青睞。因為手機上只有09共10個數(shù)字鍵,所以在手機上輸入漢字不能像在計算機上使用雙手那么方便,而是成了“拇指的運動”。本題目要求編寫一個模擬短消息編輯程序,通過10個按鈕用拼音輸入法進行短消息的編輯。功能要求簡要:(程序界面如下圖所示)手機的顯示屏分為三個區(qū)域,包括:拼音提示區(qū)、漢字提示區(qū)和編輯區(qū),每個區(qū)域均有一光標提示當前位置,單擊相應的按鍵可以實現(xiàn)左右或上下移動光標及在不同區(qū)域切換光標。輸入漢字時,按照該字的拼音順序單擊相應的數(shù)字單擊數(shù)字“1”,可輸入標點符號包括:“,。:、;?。俊啊?。按鍵用于實現(xiàn)確定、選擇的功能。按鍵用于實現(xiàn)取消、刪除的功能。按鍵用于實現(xiàn)向左和向上移動光標的功能。按鍵用于實現(xiàn)向右和向下移動光標的功能。按鍵用于實現(xiàn)退出程序并保存所編輯的短消息的功能。按鍵用于實現(xiàn)顯示程序名及版本信息。拼音提示區(qū)和漢字提示區(qū)都要有滾動的功能。在拼音提示區(qū)內(nèi)滾動時,漢字提示區(qū)自動顯示當前拼音的漢字。拼音提示區(qū)只列出已輸入數(shù)字代表的字母可能組成的所有有效的拼音;如果已輸入的字母構不成有效拼音,且再輸入也不會產(chǎn)生有效的拼音,那么繼續(xù)輸入字母則會開始一個新的拼音。本程序只能使用鼠標鼠標單擊按鍵進行操作,完全模擬手指對手機的操作。突破:實現(xiàn)將本程序的矩形窗口改為手機形狀的非矩形窗口(用圓角矩形近似代替)。實現(xiàn)了將所編輯的短消息內(nèi)容保存為文件。實現(xiàn)了短消息編輯區(qū)中的文字滾動顯示。 不足:1.只能保存一條短消息。 2.不能選擇是否保存,程序結束前必保存短消息 3.手機形狀不是完全吻合程序代碼描述:本程序由兩個模塊組成,分別是窗體模塊和標準模塊。窗體模塊中共有三個事件過程,如下Form_Load:為程序的運行做準備,包括改變窗體形狀、讀入拼音文件、和為部分數(shù)組賦值等。ImgButton_MouseDown:加載手機按鈕圖片,實現(xiàn)按下按鈕的動態(tài)效果。ImgButton_MouseUp:用index參數(shù)返回鼠標所點擊的圖像框的序號,用select case 語句來執(zhí)行相應的語句Case10 , 11 用來移動光標Case 12,13 用來確定或取消Case 0 用來打空格Case 1 用于輸入標點符號Case 2,3,4,5,6,7,8,9 用于打拼音Case 14 顯示程序名及辦版本信息Case 15 退出程序并保存短消息標準模塊中定義了所有的全局變量及數(shù)組,還有十個全局過程,如下:read_pylist :確定拼音文件有多少個拼音,并將拼音與漢字對應起來。get_string :得到當前輸入的拼音所對應的漢字如果是部分拼音,則得到第一個相匹配拼音的漢字。isPartofPinyin: 判斷一個字母序列是否是一個有效拼音的開頭部分。get_PYInput: 得到當前輸入的數(shù)字序列所能組成的所有有效拼音。Search_py: 得到當前輸入的數(shù)字序列所能組成的所有的字母組合。show_pinyin: 在拼音提示區(qū)顯示當前所有的有效拼音。show_wenzi: 在漢字提示區(qū)顯示當前選中的有效拼音所對應的漢字。show_content: 在編輯區(qū)顯示編輯的內(nèi)容。Phoneabout: 顯示程序名及版本信息。API 函數(shù):用于建立一個區(qū)域,并作用在窗體上。途中遇到的困難: 1.API函數(shù)的使用 2.建立區(qū)域時各點坐標的確定 3.參數(shù)的調用 4.如何在相應位置繪制出光標 5.滾動箭頭的顯示 6.文字的滾動顯示編程的思考過程:在工程中創(chuàng)建一個窗體模塊和一個標準模塊,標準模塊中存放全局變量及通用過程。先建立窗體界面,在窗體上放置手機的圖片,然后將十六個圖像框數(shù)組放置在窗體上相應位置??紤]到要將矩形窗體改為非矩形窗體,故測量出手機圖片的長寬,調出系統(tǒng)的API函數(shù),在標準模塊中定義CreateRoundRectRgn和SetWindowRgn函數(shù),在窗體form_load 事件中調用,調整各點各點坐標,便可得到近似的手機形狀的非矩形窗口。按照要求安放好其余所需的控件,并調整好其屬性。至此,程序的窗體界面就做好了。為了實現(xiàn)鼠標按下按鍵時有動態(tài)效果,使用Image圖像控件將這些圖片重疊在mphone.bmp圖片上并產(chǎn)生一個小位移,在這之前先將圖片對象賦值到pic數(shù)組中并在窗體的imgButton_MouseDown事件中給相應的圖像框加載圖片即可。由于手機上的29八個數(shù)字鍵代表了不止一個字母,故需要在標準模塊中定義一個過程用于判斷是否為有效拼音或拼音的開頭部分( isPartofpinyin),而在這之前,又需要先得到所按數(shù)字序列所能得到的所有字母組合(search_by),通過在標準模塊中定義get_PYInput過程,并在該過程中調用上述過程即可達到目的。在標準模塊中定義一個自定義數(shù)據(jù)類型PY_List,其中含有兩個成員,分別是pinyin、wenzi分別對應相應的拼音和漢字, 其數(shù)據(jù)類型均為string。在通用過程中將拼音文件Py.dat打開,用循環(huán)語句Do while loop 一行行的讀取拼音文件里的內(nèi)容,并用變量PYNum 記錄拼音文件的行數(shù)即拼音的個數(shù),用函數(shù)EOF來判斷拼音文件是否讀取完畢。若是結束循環(huán),完成該過程。就此便將程序所需的數(shù)據(jù)讀入到程序中。為了實現(xiàn)在三個圖片框顯示相應拼音或文字,故在標準模塊中定義show_pinyin、show_wenzi、show_content 三個通用過程同時定義PYIndex、PYTopIndex、WZIndex、WZTopIndex、CNTindex、CNTTopindex六個全局變量用于確定當前選定的拼音序號及當前顯示的拼音序號、當前選定的文字序號以及最上面的字的序號和當前編輯的位置及當前內(nèi)容的第一個字序號,通過使用這些變量可以實現(xiàn)相應框中內(nèi)容的滾動。再在窗體模塊中,定義一個imgButton_MouseDown事件,用參數(shù)Index帶回圖像框的序號確定鼠標所按下的按鈕,再使用select case index來執(zhí)行相應的語句,在其中調用標準模塊中定義的過程即可實現(xiàn)手機功能。感悟:任何一個程序都是由各個功能單元構成的,一個大的任務可以分解為幾個任務,通過將每個功能單元完成編碼再將各個功能單元聯(lián)系起來,便可完成整個程序。編程中問題是不斷的,但只要慢慢思考總能解決,在編程過程中網(wǎng)絡提供了很多幫助,在嘗試將窗體改為手機形狀時,我在網(wǎng)絡上查找了許多方法,雖說最終沒有采取,但期間亦學得了許多知識。當完成基本程序后,我試圖改善程序的功能,但稍微改動一點就會在其他地方出現(xiàn)問題,以致我不得不持續(xù)的對程序進行修改最終確定了現(xiàn)在的程序。這讓我意思到要做得更出色,就必須付出更大的努力,有付出才會有回報。此致! 黃錫龍913108320115 2014年04月04日窗體代碼Private Sub Form_Load() Dim hRgn As Long hRgn = CreateRoundRectRgn(9, 2, 200, 520, 150, 150) Call SetWindowRgn(Me.hWnd, hRgn, True) 將窗體形狀改為手機形狀 Dim i As Integer KeyIndex(1) = 將數(shù)字與字母相對應 KeyIndex(2) = abc KeyIndex(3) = def KeyIndex(4) = ghi KeyIndex(5) = jkl KeyIndex(6) = mno KeyIndex(7) = pqrs KeyIndex(8) = tuv KeyIndex(9) = wxyz KeyIndex(0) = For i = 0 To 15 Set pic(i) = LoadPicture(App.Path & buttonpics & i & .bmp) Next Call read_pylist 打開拼音文件 focus = 1 首先指定拼音區(qū)End SubPrivate Sub imgButton_MouseDown(Index As Integer, Button As Integer, _ Shift As Integer, X As Single, Y As Single) 功能:實現(xiàn)鼠標按下按鍵時的動態(tài)效果 If Button = 1 Then 按左鍵,按鈕按下 imgButton(Index).Picture = pic(Index) End IfEnd SubPrivate Sub imgButton_MouseUp(Index As Integer, Button As Integer, _ Shift As Integer, X As Single, Y As Single) Dim i As Integer If Button = 1 Then Select Case Index Case 10 -按鈕 實現(xiàn)光標向上和向左移動 Select Case focus Case 1 Call show_pinyin(picPinyin, -1, True) Call show_wenzi(picWenzi, 0, False) Case 2 Call show_wenzi(picWenzi, -1, True) Case 3 If CNTindex 0 Then Call show_content(picContent, -1) End If End Select Case 11 -按鈕 實現(xiàn)光標向下和向右移動 Select Case focus Case 1 Call show_pinyin(picPinyin, 1, True) Call show_wenzi(picWenzi, 0, False) Case 2 Call show_wenzi(picWenzi, 1, True) Case 3 Call show_content(picContent, 1) End Select Case 12 OK 按鈕 用于確定 Select Case focus Case 1 在拼音區(qū) Call show_pinyin(picPinyin, 0, False) Call show_wenzi(picWenzi, 0, True) focus = focus + 1 Case 2 在文字區(qū) If strContent = Then strContent = Mid(WZCurrent, WZIndex, 1) CNTindex = 1 CNTTopindex = 1 Call show_content(picContent, 0) Else strContent = Left(strContent, CNTindex) & Mid(WZCurrent, WZIndex, 1) & Right(strContent, Len(strContent) - CNTindex) Call show_content(picContent, 1) End If Case 3 End Select Case 13 cancel 按鈕 取消 Select Case focus Case 1 If NumList = Then focus = 3 Erase PYInput PYInputNum = 0 WZCurrent = Call show_pinyin(picPinyin, 0, False) Call show_wenzi(picWenzi, 0, False) Else NumList = Left(NumList, Len(NumList) - 1) If NumList = Then Erase PYInput PYInputNum = 0 Call show_pinyin(picPinyin, 0, False) WZCurrent = Call show_wenzi(picWenzi, 0, False) focus = 3 Else Call get_PYInput If PYInputNum = 0 Then 如果輸入了一個不合法的拼音,則重新開始輸入拼音 NumList = WZCurrent = WZIndex = 1 WZTopIndex = 1 End If PYIndex = 1 PYTopIndex = 1 Call show_pinyin(picPinyin, 0, True) 顯示拼音,第一個拼音為默認 Call show_wenzi(picWenzi, 0, False) End If End If Case 2 文字區(qū) focus = 1 Call show_pinyin(picPinyin, 0, True) Call show_wenzi(picWenzi, 0, False) Case 3 編輯區(qū) If strContent Then If CNTindex 0 Then strContent = Left(strContent, CNTindex - 1) & Right(strContent, Len(strContent) - CNTindex) 刪除當前字符 CNTindex = CNTindex - 1 Call show_content(picContent, 0) End If End If End Select Case 15 保存短消息并推出程序 Open App.Path & 短消息.txt For Output As #1 Print #1, strContent Close End Unload Me Case 14 Call Phoneabout Case 1 輸入標點符號 Erase PYInput PYInputNum = 0 NumList = Call show_pinyin(picPinyin, 0, False) WZCurrent = ,。:、;?。俊啊?WZIndex = 1 WZTopIndex = 1 focus = 2 Call show_wenzi(picWenzi, 0, True) Case 0 strContent = Left(strContent, CNTindex) & & Right(strContent, Len(strContent) - CNTindex) If CNTindex = 0 Then CNTTopindex = 1 Call show_content(picContent, 1) NumList = Case 2 To 9 按字母鍵,檢驗是否顯合法的拼音,如果是則檢索相應的漢字 If focus = 2 Then 如果當前在文字提示區(qū),則拼音從頭開始 NumList = Index Else NumList = NumList & Index 記下按鍵 End If Call get_PYInput 每按一次數(shù)字鍵就調用一次 If PYInputNum = 0 Then 如果輸入了一個不合法的拼音,則立即重新開始輸入拼音 NumList = WZCurrent = NumList = Index get_PYInput End If PYIndex = 1 PYTopIndex = 1 Call show_pinyin(picPinyin, 0, True) 顯示拼音,第一個拼音為默認 WZIndex = 1 WZTopIndex = 1 Call show_wenzi(picWenzi, 0, False) focus = 1 End Select imgButton(Index).Picture = LoadPicture() 卸載圖片 End IfEnd Sub模塊代碼Option Base 1Option ExplicitPublic Declare Function CreateRoundRectRgn Lib gdi32 (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As LongPublic Declare Function SetWindowRgn Lib user32 (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long Type PY_LIST 自定義數(shù)據(jù)類型 pinyin As String * 6 拼音 wenzi As String 拼音對應的所有文字End TypePublic PYList() As PY_LIST 記錄拼音與漢字的對應關系Public PYNum As Integer 有效的拼音的個數(shù),即拼音文件的行數(shù)Public KeyIndex(0 To 9) As String 數(shù)字與字母的對應關系Public NumList As String 用于記錄當前按下的數(shù)字序列Public PYInput() As String 記錄當前輸入的所有的有效拼音Public PYInputNum As Integer 當前輸入的有效拼音個數(shù)Public PYIndex As Integer, PYTopIndex As Integer當前選定的拼音序號,以及當前顯示的拼音序號Public WZCurrent As String 當前拼音所對應的所有文字Public WZIndex As Integer, WZTopIndex As Integer 當前選定的文字序號以及最上面的字Public strContent As String 當前編輯內(nèi)容Public CNTindex As Integer 當前編輯的位置Public CNTTopindex As Integer 當前內(nèi)容的第一個字序號Public pic(0 To 15) As Picture 用于保存按鈕圖片Public focus As Integer用于記錄當前的輸入焦點:1.拼音提示區(qū)2.文字提示區(qū),3.編輯區(qū)Public Sub read_pylist()功能:給動態(tài)數(shù)組PYList賦值,拼音及其相對應的漢字 Dim i As Integer Dim s As String If Dir(App.Path & py.dat) = Then MsgBox 找不到拼音文件py.dat!, vbCritical, sms: End Open App.Path & py.dat For Input As 1 PYNum = 0 Do While Not EOF(1) PYNum = PYNum + 1 用于確定拼音文件有多少行 ReDim Preserve PYList(PYNum) Line Input #1, s i = InStr(s, ) 找到空格位置 PYList(PYNum).pinyin = Left(s, i - 1) 取拼音段 PYList(PYNum).wenzi = Right(s, Len(s) - i) 取文字部分 Loop Close 1End SubPublic Function get_string(pinyin As String) As String 功能:得到當前輸入的拼音相對應的文字,如果是部分拼音,則得到第一個相匹配拼音相應的漢字 Dim i As Integer If pinyin = Then get_string = For i = 1 To PYNum If RTrim(PYList(i).pinyin) = pinyin Then 如果是完整的拼音 get_string = PYList(i).wenzi Exit Function End If Next For i = 1 To PYNum If InStr(RTrim(PYList(i).pinyin), pinyin) Then 如果是部分拼音 get_string = PYList(i).wenzi Exit Function End If Next End FunctionPublic Function isPartofPinyin(pinyin As String) As Boolean功能:測試一個字母序列是否是一個有效拼音的開頭部分 Dim i As Integer If pinyin = Then Exit Function For i = 1 To PYNum If InStr(RTrim(PYList(i).pinyin), pinyin) = 1 Then isPartofPinyin = True Exit Function End If NextEnd FunctionPublic Sub get_PYInput() 功能:得到當前的輸入的數(shù)字所對應的有效拼音 Dim i As Integer Dim num As Integer Dim list() As String Dim s As String Erase PYInput PYInputNum = 0 Call search_py(1, list, num, s) 得到所有字母組合 For i = 1 To num 得到其中是拼音的,或是拼音前半部分的 If isPartofPinyin(list(i) Then 判斷是否是有效拼音的開頭部分 PYInputNum = PYInputNum + 1 記錄當前的有效的拼音個數(shù) ReDim Preserve PYInput(PYInputNum) PYInput(PYInputNum) = list(i) 記錄有效拼音 End If NextEnd SubPublic Sub search_py(i As Integer, list() As String, num As Integer, s As String)功能:得到當前輸入的數(shù)字所構成的所有字母組合 If i Len(NumList) Then num = num + 1 ReDim Preserve list(num) list(num) = s Exit Sub Else Dim j As Integer Dim k As Integer k = Len(KeyIndex(Val(Mid(NumList, i, 1) 記錄當期按下的數(shù)字所對應的字母個數(shù) For j = 1 To k s = s & Mid(KeyIndex(Val(Mid(NumList, i, 1), j, 1) Call search_py(i + 1, list, num, s) s = Left(s, i - 1) Next End IfEnd SubPublic Sub show_pinyin(picPinyin As PictureBox, status As Integer, filled As Boolean)功能:用于顯示當前的有效拼音 status:0 首次顯示 1 向后移動 -1向前移動 Dim i As Integer, j As Integer Dim LineNum As Integer, H As Single 可顯示的行數(shù)和行高 If PYInputNum = 0 Then picPinyin.Cls frmMain.imgUp.Visible = False 使?jié)L動箭頭不可見 frmMain.imgDown.Visible = False Exit Sub End If If status = 1 And PYIndex = PYInputNum Or status = -1 And PYIndex = 1 Then Exit Sub 當前已有第一或最后一個拼音 H = picPinyin.TextHeight(f) LineNum = picPinyin.ScaleHeight H - 1 計算可顯示的行數(shù) Select Case status 得到當前拼音序號 Case 0 PYTopIndex = 1 PYIndex = 1 Case 1 If PYIndex - PYTopIndex + 1 = LineNum Then PYTopIndex = PYTopIndex + 1 End If PYIndex = PYIndex + 1 Case -1 If PYIndex = PYTopIndex Then PYTopIndex = PYTopIndex - 1 End If PYIndex = PYIndex - 1 End Select
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 行政管理經(jīng)濟法概論典型試題解析與試題及答案
- 2025年公共關系學的品牌傳播趨勢與挑戰(zhàn)及試題及答案
- 《2025年續(xù)簽房屋租賃合同模板》
- 2025年山東新人教版第二學期七年級語文期末考試試題(含答案)-3
- 2025店面租賃合同范本下載
- 2025年農(nóng)村住宅用地使用權轉讓合同
- 項目評估指標分析試題及答案
- 2025年市政公路施工規(guī)范試題及答案
- 2025年經(jīng)濟師復習試題及答案
- 2025年經(jīng)濟形勢分析試題及答案
- 2025年4月自考00242民法學試題及答案含評分標準
- 2025年氫化丁晴橡膠發(fā)展現(xiàn)狀及市場前景趨勢分析
- (三模)遵義市2025屆高三年級第三次適應性考試英語試卷(含答案)
- 第18課《井岡翠竹》課件-2024-2025學年統(tǒng)編版語文七年級下冊
- 第16課《有為有不為》公開課一等獎創(chuàng)新教學設計
- 【MOOC】《思想道德與法治》(東南大學)章節(jié)中國大學慕課答案
- 【MOOC】以案說法-中南財經(jīng)政法大學 中國大學慕課MOOC答案
- 卜算子-送鮑浩然之浙東課件
- MOOC 中醫(yī)與辨證-暨南大學 中國大學慕課答案
- 年產(chǎn)10噸功能益生菌凍干粉的工廠設計改
- 國家開放大學《高等數(shù)學基礎》形考任務1-4參考答案
評論
0/150
提交評論