




已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Visual Basic课 程 设 计 报 告任课教师:张小兵教授学生姓名:黄锡龙学生专业:武器发射工程学生学号:913108320115南京理工大学能源与动力工程学院2014年04月04日目录题目、知识点、题目介绍、功能要求简要 3突破、不足. 4程序代码描述 5途中遇到的代码 6编程的思考过程. 7感悟. 9窗体代码. 10模块代码. 15题目:模拟手机短消息编辑器知识点:读文本文件图片的应用绘图的方法动态数组的使用字符串处理AIP函数的使用题目介绍:移动电话(手机)是当今人们的必备通信工具之一,短消息是手机上的一个重要的功能,其低廉的资费受到年轻人的青睐。因为手机上只有09共10个数字键,所以在手机上输入汉字不能像在计算机上使用双手那么方便,而是成了“拇指的运动”。本题目要求编写一个模拟短消息编辑程序,通过10个按钮用拼音输入法进行短消息的编辑。功能要求简要:(程序界面如下图所示)手机的显示屏分为三个区域,包括:拼音提示区、汉字提示区和编辑区,每个区域均有一光标提示当前位置,单击相应的按键可以实现左右或上下移动光标及在不同区域切换光标。输入汉字时,按照该字的拼音顺序单击相应的数字单击数字“1”,可输入标点符号包括:“,。:、;!?“”。按键用于实现确定、选择的功能。按键用于实现取消、删除的功能。按键用于实现向左和向上移动光标的功能。按键用于实现向右和向下移动光标的功能。按键用于实现退出程序并保存所编辑的短消息的功能。按键用于实现显示程序名及版本信息。拼音提示区和汉字提示区都要有滚动的功能。在拼音提示区内滚动时,汉字提示区自动显示当前拼音的汉字。拼音提示区只列出已输入数字代表的字母可能组成的所有有效的拼音;如果已输入的字母构不成有效拼音,且再输入也不会产生有效的拼音,那么继续输入字母则会开始一个新的拼音。本程序只能使用鼠标鼠标单击按键进行操作,完全模拟手指对手机的操作。突破:实现将本程序的矩形窗口改为手机形状的非矩形窗口(用圆角矩形近似代替)。实现了将所编辑的短消息内容保存为文件。实现了短消息编辑区中的文字滚动显示。 不足:1.只能保存一条短消息。 2.不能选择是否保存,程序结束前必保存短消息 3.手机形状不是完全吻合程序代码描述:本程序由两个模块组成,分别是窗体模块和标准模块。窗体模块中共有三个事件过程,如下Form_Load:为程序的运行做准备,包括改变窗体形状、读入拼音文件、和为部分数组赋值等。ImgButton_MouseDown:加载手机按钮图片,实现按下按钮的动态效果。ImgButton_MouseUp:用index参数返回鼠标所点击的图像框的序号,用select case 语句来执行相应的语句Case10 , 11 用来移动光标Case 12,13 用来确定或取消Case 0 用来打空格Case 1 用于输入标点符号Case 2,3,4,5,6,7,8,9 用于打拼音Case 14 显示程序名及办版本信息Case 15 退出程序并保存短消息标准模块中定义了所有的全局变量及数组,还有十个全局过程,如下:read_pylist :确定拼音文件有多少个拼音,并将拼音与汉字对应起来。get_string :得到当前输入的拼音所对应的汉字如果是部分拼音,则得到第一个相匹配拼音的汉字。isPartofPinyin: 判断一个字母序列是否是一个有效拼音的开头部分。get_PYInput: 得到当前输入的数字序列所能组成的所有有效拼音。Search_py: 得到当前输入的数字序列所能组成的所有的字母组合。show_pinyin: 在拼音提示区显示当前所有的有效拼音。show_wenzi: 在汉字提示区显示当前选中的有效拼音所对应的汉字。show_content: 在编辑区显示编辑的内容。Phoneabout: 显示程序名及版本信息。API 函数:用于建立一个区域,并作用在窗体上。途中遇到的困难: 1.API函数的使用 2.建立区域时各点坐标的确定 3.参数的调用 4.如何在相应位置绘制出光标 5.滚动箭头的显示 6.文字的滚动显示编程的思考过程:在工程中创建一个窗体模块和一个标准模块,标准模块中存放全局变量及通用过程。先建立窗体界面,在窗体上放置手机的图片,然后将十六个图像框数组放置在窗体上相应位置。考虑到要将矩形窗体改为非矩形窗体,故测量出手机图片的长宽,调出系统的API函数,在标准模块中定义CreateRoundRectRgn和SetWindowRgn函数,在窗体form_load 事件中调用,调整各点各点坐标,便可得到近似的手机形状的非矩形窗口。按照要求安放好其余所需的控件,并调整好其属性。至此,程序的窗体界面就做好了。为了实现鼠标按下按键时有动态效果,使用Image图像控件将这些图片重叠在mphone.bmp图片上并产生一个小位移,在这之前先将图片对象赋值到pic数组中并在窗体的imgButton_MouseDown事件中给相应的图像框加载图片即可。由于手机上的29八个数字键代表了不止一个字母,故需要在标准模块中定义一个过程用于判断是否为有效拼音或拼音的开头部分( isPartofpinyin),而在这之前,又需要先得到所按数字序列所能得到的所有字母组合(search_by),通过在标准模块中定义get_PYInput过程,并在该过程中调用上述过程即可达到目的。在标准模块中定义一个自定义数据类型PY_List,其中含有两个成员,分别是pinyin、wenzi分别对应相应的拼音和汉字, 其数据类型均为string。在通用过程中将拼音文件Py.dat打开,用循环语句Do while loop 一行行的读取拼音文件里的内容,并用变量PYNum 记录拼音文件的行数即拼音的个数,用函数EOF来判断拼音文件是否读取完毕。若是结束循环,完成该过程。就此便将程序所需的数据读入到程序中。为了实现在三个图片框显示相应拼音或文字,故在标准模块中定义show_pinyin、show_wenzi、show_content 三个通用过程同时定义PYIndex、PYTopIndex、WZIndex、WZTopIndex、CNTindex、CNTTopindex六个全局变量用于确定当前选定的拼音序号及当前显示的拼音序号、当前选定的文字序号以及最上面的字的序号和当前编辑的位置及当前内容的第一个字序号,通过使用这些变量可以实现相应框中内容的滚动。再在窗体模块中,定义一个imgButton_MouseDown事件,用参数Index带回图像框的序号确定鼠标所按下的按钮,再使用select case index来执行相应的语句,在其中调用标准模块中定义的过程即可实现手机功能。感悟:任何一个程序都是由各个功能单元构成的,一个大的任务可以分解为几个任务,通过将每个功能单元完成编码再将各个功能单元联系起来,便可完成整个程序。编程中问题是不断的,但只要慢慢思考总能解决,在编程过程中网络提供了很多帮助,在尝试将窗体改为手机形状时,我在网络上查找了许多方法,虽说最终没有采取,但期间亦学得了许多知识。当完成基本程序后,我试图改善程序的功能,但稍微改动一点就会在其他地方出现问题,以致我不得不持续的对程序进行修改最终确定了现在的程序。这让我意思到要做得更出色,就必须付出更大的努力,有付出才会有回报。此致! 黄锡龙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) = 将数字与字母相对应 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 首先指定拼音区End SubPrivate Sub imgButton_MouseDown(Index As Integer, Button As Integer, _ Shift As Integer, X As Single, Y As Single) 功能:实现鼠标按下按键时的动态效果 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 -按钮 实现光标向上和向左移动 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 -按钮 实现光标向下和向右移动 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 在拼音区 Call show_pinyin(picPinyin, 0, False) Call show_wenzi(picWenzi, 0, True) focus = focus + 1 Case 2 在文字区 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 文字区 focus = 1 Call show_pinyin(picPinyin, 0, True) Call show_wenzi(picWenzi, 0, False) Case 3 编辑区 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 如果当前在文字提示区,则拼音从头开始 NumList = Index Else NumList = NumList & Index 记下按键 End If Call get_PYInput 每按一次数字键就调用一次 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 自定义数据类型 pinyin As String * 6 拼音 wenzi As String 拼音对应的所有文字End TypePublic PYList() As PY_LIST 记录拼音与汉字的对应关系Public PYNum As Integer 有效的拼音的个数,即拼音文件的行数Public KeyIndex(0 To 9) As String 数字与字母的对应关系Public NumList As String 用于记录当前按下的数字序列Public PYInput() As String 记录当前输入的所有的有效拼音Public PYInputNum As Integer 当前输入的有效拼音个数Public PYIndex As Integer, PYTopIndex As Integer当前选定的拼音序号,以及当前显示的拼音序号Public WZCurrent As String 当前拼音所对应的所有文字Public WZIndex As Integer, WZTopIndex As Integer 当前选定的文字序号以及最上面的字Public strContent As String 当前编辑内容Public CNTindex As Integer 当前编辑的位置Public CNTTopindex As Integer 当前内容的第一个字序号Public pic(0 To 15) As Picture 用于保存按钮图片Public focus As Integer用于记录当前的输入焦点:1.拼音提示区2.文字提示区,3.编辑区Public Sub read_pylist()功能:给动态数组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() 功能:得到当前的输入的数字所对应的有效拼音 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 记录当前的有效的拼音个数 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)功能:得到当前输入的数字所构成的所有字母组合 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) 记录当期按下的数字所对应的字母个数 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 可显示的行数和行高 If PYInputNum = 0 Then picPinyin.Cls frmMain.imgUp.Visible = False 使滚动箭头不可见 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 计算可显示的行数 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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 校园安全教育事例
- 税法安全教育进校园
- 五氧化二钒生产项目工程方案
- 水库信息化管理系统建设方案
- 水电站工程档案管理工作方案
- 农闲资源开发利用实施案
- 雨污管网分流修复及污水厂设备更新工程施工方案
- 供水水源地统筹规划与保护方案
- 给水工程材料采购与管理方案
- 通河空心条板施工方案
- 医院死亡报卡培训课件
- 2025年京东集团招聘笔试指南与面试技巧
- 起重机械定期检查与维护方案
- 国际物流运输合同(标准版)
- 动物样品采集培训课件
- (2025年)医疗机构工作人员廉洁从业九项准则考核试题(+答案)
- 人工智能在幼儿语言教育活动中的应用
- 江苏省如皋市某中学2026届高三上学期一轮复习摸底考试英语试题(解析版)
- 货架清洗施工方案(3篇)
- 口腔医疗纠纷预防与管理要点
- 2025陕西省延安旅游(集团)有限公司招聘16人笔试历年参考题库附带答案详解
评论
0/150
提交评论