小管家系统课程设计说明书_第1页
小管家系统课程设计说明书_第2页
小管家系统课程设计说明书_第3页
小管家系统课程设计说明书_第4页
小管家系统课程设计说明书_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计说明书一、前言本课程设计是一个针对个人日常生活中的繁琐的信息开发的小型管理系统,全称小管家系统,在观察了个人工作、学习的日常生活情况,在学习和生活中,要接触一个很庞大的群体,群体中的人物的相关信息较多,人工管理和记录起来很复杂,很麻烦。借助小管家系统可以管理日常生活中繁琐的信息,减轻工作的负担。确定本系统的需求:动画时钟、时间日期、便签功能、名片夹、娱乐。籟丛妈羥为贍偾蛏练淨槠挞曉养鳌顿。二、系统功能和使用说明1.设计题目小管家系统2.硬件环境 系统运行于奔腾500MHz或以上的计算机系统,内存为128MB容量。系统占用硬盘空间内存容量为2.27 MB (2,381,945 字节)。3.软件环境开发工具:Microsoft Visual Studio.NET操作系统:按照高运行效率、高性价比、良好兼容性以及设计原 则,本系统选用Microsoft Windows XP系列操作系统,基于Microsoft Access 2000 数据库。该件系统独立运行程序。預頌圣鉉儐歲龈讶骅籴買闥龅绌鳆現。4.系统总体设计确定程序功能模块;动画时钟模块:管理以动画时钟作为启动窗体界面显示当前时间。时间日期管理模块:时间日期管理模块包括闹钟设置、液晶电子秒表窗体和日历窗体,闹钟设置可以实现选择不同的文字来对用户进行定时提醒,秒表窗体可以进行秒表的记时。渗釤呛俨匀谔鱉调硯錦鋇絨钞陉鳅陸。便签窗体模块:便签窗体模块实现留言功能。名片夹模块:名片夹模块实现添加名片、编辑名片、删除名片等功能。娱乐模块:娱乐模块实现一个益智游戏功能。系统模块图(图1): 小管家系统娱乐系统时间日期管理系统名片信息管理便笺管理系统动画时钟系统三联子游戏启动界面显示当前时间留言窗体添加用户 更新用户 删除用户编辑系统闹钟设置电子秒表日历窗口5.系统详细设计动画时钟设计使用Timer控件和GDI绘图技术做了一个动画时钟。通过GDI绘图技术来设计动画的界面,通过在Timer控件的Tick事件中添加代码来实现指针的转动。在该界面中,圆形的表盘通过调用API函数来绘制,时钟的刻度和三个指针通过GDI绘图来实现,菜单通过添加相应上下文菜单控 件来实现。界面上显示一个走动的时钟,需要不断重绘窗体,在代码中添加了me.refresh,实现了界面的重新绘制。使用DATE类提供的方法直接得到日期和时间。VB.NET提供了NotifyIcon,方便的实现为系统添加系统图标,为程序添加了无穷的魅力。启动界面及代码设计如下:铙誅卧泻噦圣骋贶頂廡缝勵罴楓鳄烛。 首先定义模块,在模块中定义刻度的起点、终点和坐标原点,用于描绘表盘时可以直接调用该函数实现绘图功能。Module Module1PublicDeclareFunction CreateEllipticRgn Lib gdi32 (ByVal x1 AsInteger, ByVal y1 AsInteger, ByVal x2 AsInteger, ByVal y2 AsInteger) AsInteger擁締凤袜备訊顎轮烂蔷報赢无貽鳃闳。PublicDeclareFunction SetWindowRgn Lib User32 (ByVal hwnd AsInteger, ByVal hRgn AsInteger, ByVal bRedraw AsBoolean) AsInteger贓熱俣阃歲匱阊邺镓騷鯛汉鼉匮鲻潰。 EndModule 定义窗体句柄hnd通过调用模块函数CreateEllipticRgn为窗体赋值为一个椭圆,并对me.startposition赋值设置窗体的启动位置。坛摶乡囂忏蒌鍥铃氈淚跻馱釣缋鲸鎦。PrivateSub FrmClock_Load(ByVal sender AsObject, ByVal e As System.EventArgs) HandlesMyBase.Load蜡變黲癟報伥铉锚鈰赘籜葦繯颓鲷洁。Dim hnd AsLong 定义窗体句柄hnd = CreateEllipticRgn(0, 0, 150, 150) 给窗体句柄赋值为一个椭圆買鲷鴯譖昙膚遙闫撷凄届嬌擻歿鲶锖。SetWindowRgn(Me.Handle.ToInt32, hnd, True)设置窗体为一个椭圆綾镝鯛駕櫬鹕踪韦辚糴飙钪麦蹣鲵殘。Me.StartPosition=FormStartPosition.CenterScreenEndSub 通过代码实现表盘的刻度,在窗体的Paint事件中添加如下代码,首先创建Graphics对象用于绘图,调用该窗体的CreateGraphics方法来获取一个对Graphics对象的引用,然后创建一支基本的黄色画笔用于描绘时钟刻度并设置坐标原点、刻度的比例长度、刻度之间的角度,在时钟设计算法中主要用到了三角函数的计算。驅踬髏彦浃绥譎饴憂锦諑琼针咙鲲鏵。PrivateSubFrmClock_Paint(ByVal sender AsObject, ByVal e As System.Windows.Forms.PaintEventArgs) HandlesMyBase.Paint猫虿驢绘燈鮒诛髅貺庑献鵬缩职鲱样。Dim FrmGraphics As GraphicsFrmGraphics = Me.CreateGraphics创建Graphics对象用于绘图FrmGraphics.SmoothingMode = SmoothingMode.AntiAlias设置画面质量锹籁饗迳琐筆襖鸥娅薔嗚訝摈馍鲰钵。Dim FmPen AsNew Pen(System.Drawing.Color.Yellow, 3)创建Pen对象構氽頑黉碩饨荠龈话骛門戲鷯瀏鲮晝。Dim StartPoint(11), EndPoint(11), OriginPoint As PointF輒峄陽檉簖疖網儂號泶蛴镧釃邊鲫釓。定义刻度起点和终点,坐标原点OriginPoint.X = 75 OriginPoint.Y = 75设置坐标原点Dim TmLong AsDouble = 75刻度的比例长度Dim Angle AsDouble刻度之间的角度Dim i AsIntegerFor i = 0 To 11Angle = i * 2 * Atan(1) / 3使用Atan数学函数,必须在程序的开头引入System.Math空间 StartPoint(i).X = 0.8 * TmLong * Cos(Angle) + OriginPoint.X尧侧閆繭絳闕绚勵蜆贅瀝纰縭垦鲩换。 StartPoint(i).Y = 0.8 * TmLong * Sin(Angle) + OriginPoint.Y识饒鎂錕缢灩筧嚌俨淒侬减攙苏鲨运。EndPoint(i).X = TmLong * Cos(Angle) + OriginPoint.X凍鈹鋨劳臘锴痫婦胫籴铍賄鹗骥鲧戲。 EndPoint(i).Y = TmLong * Sin(Angle) + OriginPoint.Y恥諤銪灭萦欢煬鞏鹜錦聰櫻郐燈鲦軫。设置刻度起点和终点的坐标FrmGraphics.DrawLine(FmPen, StartPoint(i), EndPoint(i)鯊腎鑰诎褳鉀沩懼統庫摇饬缗釷鲤怃。绘制刻度NextEndSub 在动画时钟设计包括时、分、秒指针的设置仍然要用到GDI绘图技术,首先创建Graphics绘图对象,直角位置是用具有浮点精度的PointF 对象的 x 和 y 坐标来度量,定义画笔实现橘红色的时针、红色的分针和白色的秒针。根据指针转动的角度,确定指针始末坐标的数值,最后释放Graphics对象,一节省内存资源,在该算法中也主要用到了三角函数的计算。在Timer的Tick事件中添加代码:硕癘鄴颃诌攆檸攜驤蔹鸶胶据实鲣赢。PrivateSub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick阌擻輳嬪諫迁择楨秘騖輛埙鵜蔹鲢幟。Me.Text = Date.Now.ToString窗体的标题栏动态显示日期,时间Dim FmGraphics As System.Drawing.Graphics FmGraphics = Me.CreateGraphics 创建Graphics对象Dim TmLong AsDouble = 75指针的比例长度Dim HourPoint(1), MinutePoint(1), SecondPoint(1), OriginPoint AsSystem.Drawing.PointF氬嚕躑竄贸恳彈瀘颔澩纷釓鄧鳌鲡貼。OriginPoint.X = 75OriginPoint.Y = 75 定义时,分,秒指针的始末点的坐标数组Me.Refresh()更新画面Dim Angle AsDouble Angle = -0.5263 * (15 - (Hour(Now) + Minute(Now) / 60)时针的转动角度釷鹆資贏車贖孙滅獅赘慶獷緞瑋鲟将。 HourPoint(0).X = OriginPoint.XHourPoint(0).Y = OriginPoint.YHourPoint(1).X = OriginPoint.X + 0.3 * TmLong * Cos(Angle)怂阐譜鯪迳導嘯畫長凉馴鸨撟鉍鲞谣。 HourPoint(1).Y = OriginPoint.Y + 0.3 * TmLong * Sin(Angle)谚辞調担鈧谄动禪泻類谨觋鸾帧鲜奧。计算时针始末坐标的数值Dim FmPen As System.Drawing.PenFmPen = New System.Drawing.Pen(System.Drawing.Color.Gold, 3) 定义画笔嘰觐詿缧铴嗫偽純铪锩癱恳迹见鲛請。FmGraphics.DrawLine(FmPen, HourPoint(0), HourPoint(1) 画橘红色的时针熒绐譏钲鏌觶鷹緇機库圆鍰缄鹗鲚圆。 Angle = -0.1047 * (75 - (Minute(Now) + Second(Now) / 60) 分针的转动角度鶼渍螻偉阅劍鲰腎邏蘞阕簣择睜鲔诌。 MinutePoint(0).X = OriginPoint.X MinutePoint(0).Y = OriginPoint.Y MinutePoint(1).X = OriginPoint.X + 0.5 * TmLong * Cos(Angle)纣忧蔣氳頑莶驅藥悯骛覲僨鴛鋅鲒嗚。 MinutePoint(1).Y = 75 + 0.5 * TmLong * Sin(Angle)计算分针始末坐标的数值 FmPen = New System.Drawing.Pen(System.Drawing.Color.Red, 3)颖刍莖蛺饽亿顿裊赔泷涨负這恻鲑觶。FmGraphics.DrawLine(FmPen, MinutePoint(0), MinutePoint(1)濫驂膽閉驟羥闈詔寢賻減栖綜诉鲐卺。画红色的分针 Angle = -0.5263 * (75 - Second(Now)秒针的转动角度SecondPoint(0).X = OriginPoint.XSecondPoint(0).Y = OriginPoint.YSecondPoint(1).X = OriginPoint.X + 0.7 * TmLong * Cos(Angle / 5)銚銻縵哜鳗鸿锓謎諏涼鏗穎報嚴鲍蝇。SecondPoint(1).Y = OriginPoint.Y + 0.7 * TmLong * Sin(Angle / 5)挤貼綬电麥结鈺贖哓类芈罷鸨竇鲋鑿。计算秒针始末坐标的数值 FmPen = New System.Drawing.Pen(System.Drawing.Color.White, 2)赔荊紳谘侖驟辽輩袜錈極嚕辫鏢鲈蕆。FmGraphics.DrawLine(FmPen, SecondPoint(0), SecondPoint(1) 画白色的秒针塤礙籟馐决穩賽釙冊庫麩适绲挝鲅偬。FmGraphics.Dispose() 释放Graphics对象,以节省内存资源裊樣祕廬廂颤谚鍘羋蔺递灿扰谂鲂茎。 EndSub时间日期管理模块包括闹钟设置、液晶电子秒表窗体和日历。闹钟界面设计如下: 闹钟实现提醒功能,单击“启动”。启动时钟,刷新当前时间。如果Beep复选框被选中,则发出哒哒的报时声。如果到达设定时间,则该界面处于应用程序的最前端,保证用户看到该界面。在Timer控件的Tick事件中添加的代码思想为:首先用if语句对时间进行每秒刷新一次,再处理如果复选框被选中,则发出哒哒声,并将当前时间赋给Label_time,并设定时间,最后判断设定的时间是否到达,如果到达,则弹出窗口:仓嫗盤紲嘱珑詁鍬齊驁絛鯛鱧俁鱿親。 PrivateSub Timer1_Tick(ByVal sender As System.Object, _绽萬璉轆娛閬蛏鬮绾瀧恒蟬轅紗鱼臚。ByVal e As System.EventArgs) Handles Timer1.TickDim sTime AsString 时间每秒刷新一次If Label_time.Text = Now.ToString(HH:mm:ss) ThenExitSub骁顾燁鶚巯瀆蕪領鲡赙骠弒綈閶魉齠。IfMe.CheckBox_beep.Checked Then Beep() Label_time.Text = Now.ToString(HH:mm:ss) sTime = DateTimePicker1.Value.ToString(HH:mm:ss)If Label_time.Text sTime Then如果窗体被最小化,恢复窗体为原始大小Me.WindowState = FormWindowState.NormalEndIfEndSub 液晶的电子秒表,本液晶显示的内容分别用“0-9”、“:”等图片作成的。界面设计中使用了GroupBox,并在该控件上添加5个PictureBox控件来加载图片。在代码中为对应位置要添加的图片定义变量DigitalFileName15,再定义位图对象a取得数字图片,并用I,j,k,l变量控制时间到达后,为变量DigitalFileName15重新获取新的图片,用if实现时间到达,则重新加载图片信息。Timer控件中的Tick()事件,不断更新数字图片,即可实现秒表记时。秒表界面及相关的代码如下:瑣钋濺暧惲锟缟馭篩凉貿锕戧晋魇缫。PrivateSub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick鎦诗涇艳损楼紲鯗餳類碍穑鳓责髌鹊。 DigitalFileName1 = i.ToString + .bmp a = a.FromFile(Application.StartupPath + + DigitalFileName1)栉缏歐锄棗鈕种鵑瑶锬奧伛辊刪髋綠。 PictureBox1.Image = a 取得数字图片 i = i + 1If i = 10 Then DigitalFileName2 = j.ToString + .bmp a = a.FromFile(Application.StartupPath + + DigitalFileName2)辔烨棟剛殓攬瑤丽阄应頁諳绞綽髅鱉。 PictureBox5.Image = a j = j + 1If j = 10 Then DigitalFileName3 = k.ToString + .bmp a = a.FromFile(Application.StartupPath + + DigitalFileName3)峴扬斕滾澗辐滠兴渙藺诈機愦頇骧经。 PictureBox3.Image = a k = k + 1If k = 10 Then DigitalFileName4 = l.ToString + .bmp a = a.FromFile(Application.StartupPath + + DigitalFileName4)詩叁撻訥烬忧毀厉鋨骜靈韬鰍椟骥鲚。 PictureBox4.Image = a l = l + 1If l = 10 Then l = 0EndIf k = 0EndIf j = 0EndIfi = 0EndIfEndSub 日历界面的设置只要添加MonthCalendar控件,对相应的属性进设置 即可,不需要底层代码的设计。日历界面如图:则鯤愜韋瘓賈晖园栋泷华缙輅赞骣紆。便签窗体模块在底层代码设计中,要实现在窗体关闭时保存便笺中的内容,窗体打开时读取上次便笺中记录的内容,还实现了读取文本文件的基本方法。便笺界面设置如下:胀鏝彈奥秘孫戶孪钇賻锵咏繞敘骢驗。 问文本文件,可以用StreamReader类和StreamWriter类访问,代码中定义StreamWriter类用于向文本文件中写入字符,使用循环语句实现循环写入文档,并用WriteLine方法将字符串写入文本文件中,并在字符串的末尾添加行结束符,最后调用Close方法显式关闭流文件,以确保所有数据正确写入到基础流中,同时释放与StreamWriter相关联的系统资源。鳃躋峽祷紉诵帮废掃減萵輳慘纈骡窥。PrivateSub FrmNote_Closing(ByVal sender AsObject, ByVal e As System.ComponentModel.CancelEventArgs) HandlesMyBase.Closing稟虛嬪赈维哜妝扩踴粜椤灣鲳飫骠馁。Dim SaveFileName AsString SaveFileName = Application.StartupPath + 1.txt定义保存文件名陽簍埡鲑罷規呜旧岿錟麗鲍轸沩骞硨。Dim myStreamWriter As StreamWriter myStreamWriter = File.CreateText(SaveFileName)定义文件写入流沩氣嘮戇苌鑿鑿槠谔應釵蔼绋较骝額。Dim MyOutput AsStringWhile MyOutput IsNothing循环写入文档 MyOutput = Me.TextBox1.Text myStreamWriter.WriteLine(MyOutput)Me.TextBox1.Text = Me.TextBox1.Text.Remove(0, MyOutput.Length)钡嵐縣緱虜荣产涛團蔺缔嵛恽囂骜疯。EndWhile myStreamWriter.Close()关闭文件EndSub 对文件的访问容易产生异常,所以应编写错误处理程序,通过TryCatchFinally语句支持结构化错误处理,打开文件后,如果该文件不存在,就用Exit语句使程序控制退出过程或块,并且立即将控制传送到过程调用或块定义后面的语句。懨俠劑鈍触乐鹇烬觶騮揚銥鯊臘骛韦。PrivateSub Form2_Load(ByVal sender AsObject, ByVal e As System.EventArgs) HandlesMyBase.Load謾饱兗争詣繚鮐癞别瀘鯽礎輪駭骚獅。Page1Dim Filename1 AsString Filename1 = Application.StartupPath + 1.txt定义页面1的文档文件名呙铉們欤谦鸪饺竞荡赚趱為練溅骗閻。Dim MyStreamRead As StreamReader定义文件读入流类Try MyStreamRead = File.OpenText(Filename1)打开文件Catch TextBox1.Text = 如果文件不存在,设置TextBox控件中的文档为空ExitSubEndTryDim MyReceiver AsString MyReceiver = MyStreamRead.ReadLine()读入一行WhileNot MyReceiver IsNothingMe.TextBox1.AppendText(MyReceiver & ControlChars.CrLf)莹谐龌蕲賞组靄绉嚴减籩诹戀邻骖灏。 MyReceiver = MyStreamRead.ReadLine()EndWhile循环读取文件至末尾 MyStreamRead.Close()关闭文件 EndSub名片夹模块中将名片夹系统分为启动窗体、添加名片窗体、名片信息窗体三个部分来进行程序界面和底层代码设计。底层代码使用的是DAO数据库对象模型。首先使用Access 2000建立名片夹,输入一些数据项,设计完成字段的数据类型,最后输入一些数据内容,即记录一些人物的相关信息。在【工程/添加引用】中的对话框中选择MicroSoftDAO3.6,来实现对DAO的引用。麸肃鹏镟轿騍镣缚縟糶尔摊鲟嫗骓镭。首先在启动时显示名片记录,要进行数据库操作,就应该先打开DAO打开 数据库,设计一个OpenDatebase()函数来打开数据库,实现代码如下:納畴鳗吶鄖禎銣腻鰲锬颤階躜萵骒潤。Module Module3Public Updateflag AsBoolean = False名片夹更新标志Public CardDb As DAO.Database定义一个DAO.database数据对象Public CardWs As DAO.Workspace定义一个工作空间DAO.Workspace風撵鲔貓铁频钙蓟纠庙誑繃纸鯉骐鍔。Public CardSQL AsString定义一个字符串用来存放SQL查询语言Public CardRec As DAO.Recordset定义一个数据项DAO.Recordset灭嗳骇諗鋅猎輛觏馊藹狰廚怃牺骏沣。Public Dbe As DAO.DBEngine = New DAO.DBEngine()定义一个数据引擎DAO.DBEnginePublic litem As ListViewItemPublic ImagPath AsStringPublicFunction OpenDatabase() AsShort定义一个数据打开函数Dim dbstr AsString dbstr = Application.StartupPath + card.mdb 取得数据所在目录铹鸝饷飾镡閌赀诨癱骝吶转鮭钱验锁。 CardWs = Dbe.Workspaces(0)建立一个工作空间 CardDb = CardWs.OpenDatabase(dbstr, False, False)打开数据库存放于Mydb攙閿频嵘陣澇諗谴隴泸鐙浍蹤島骋檻。 dbstr = select * from CardInfo设置SQL打开方式 CardRec = CardDb.OpenRecordset(dbstr, DAO.RecordsetTypeEnum.dbOpenDynaset)趕輾雏纨颗锊讨跃满賺蚬騍純蠅骊銬。打开数据项EndFunctionEndModule在名片夹启动界面实现界面的动画效果,程序启动后,当用户的鼠标在窗口的附近时,窗口会自动下拉显示。在Timer控件的Tick事件中添加相应的代码,就可以实现窗口的动态下拉。名片夹启动界面设置如图:夹覡闾辁駁档驀迁锬減汆藥徑鴕骇枪。 通过判断光标的位置来改变窗口的大小,所以首先定义pos作为光标的初始位置,再定义变量distanceX、distanceY来计算光标所处位置的长和宽是否超出了窗口的大小。分别有三中可能,光标到达窗体附近、光标在窗体内和光标不在内,用if-else语句就可以完成。视絀镘鸸鲚鐘脑钧欖粝佥爾鱿痨骆钤。PrivateSub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick偽澀锟攢鴛擋緬铹鈞錠铃铋跄铲骅擷。Dim pos As System.Drawing.Point pos = System.Windows.Forms.Cursor.PositionDim distanceX AsSingleDim distanceY AsSingle distanceX = pos.X - Me.LeftX方向与窗体的距离 distanceY = pos.Y - Me.TopY方向与窗体的距离If distanceX = 0 And distanceX = Me.Width And distanceY -50 Then判断光标是否到达窗体的附近緦徑铫膾龋轿级镗挢廟耬癣纥徑骄鄰。WhileMe.Height = 0 And distanceX = Me.Width And distanceY = 0 Then如果光标在窗体内,窗体大小不变騅憑钶銘侥张礫阵轸蔼揽齊弯議骂拧。Me.Height = 400ElseMe.Height = 0如果光标不在窗体内,窗体高度为零EndIf End Sub 名片启动窗口添加菜单操作,菜单有修改【字体颜色】,【背景颜色】、【添加名片】、【编辑名片】、【删除名片】的功能疠骐錾农剎貯狱颢幗騮鸪詼驤齔骀输。在界面上添加ColorDialog组件,可以打开标准的“颜色”对话框,在代码中通过其ShowDialog方法打开,并以同样的方式设置背景颜色:镞锊过润启婭澗骆讕瀘載撻贏祷驿懼。PrivateSub MenuFontColor_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuFontColor.Click榿贰轲誊壟该槛鲻垲赛纬闼糝锷驾躦。With ColorDialog.ShowDialog() LvCard.ForeColor = .ColorEndWithEndSub 当双击启动窗界面上的头像时,将弹出名片信息窗体,实现对名片的查看,首先在启动界面的ListView控件的ItemActivate事件中添加窗体显示代码:邁茑赚陉宾呗擷鹪讼凑幟结廢擴驽弯。PrivateSub LvCard_ItemActivate(ByVal sender AsObject, ByVal e As System.EventArgs) Handles LvCard.ItemActivate嵝硖贪塒廩袞悯倉華糲饃励骝詡驻赌。Dim NewFrmCard AsNew FrmCard() FrmCard是名片信息窗口 NewFrmCard.TxtName.Text = LvCard.SelectedItems(0).Text该栎谖碼戆沖巋鳧薩锭谟贛赘众驺嶠。 NewFrmCard.Show()名片信息窗体启动时要显示名片的记录、编辑名片、更新名片、删除名片功能。在底层代码的设计中,仍然首先要实现数据库的加载,并显示名片信息。代码设计思想:首先实现数据库加载,调用数据库函数opendatabase,然后建立查询语言并执行查询,然后将所有的文本框设为无效,使它是只读的,即只要将这些控件的enable属性设置为False,以避免随意修改名片信息,最后通过Application.StartuPath获取头像图片文件的路径,通过定义位图对象a加载图片,名片信息窗口界面及代码实现如下:劇妆诨貰攖苹埘呂仑庙痙湯簖粜驹責。PrivateSub Card_Load(ByVal sender AsObject, ByVal e As System.EventArgs) HandlesMyBase.Load臠龍讹驄桠业變墊罗蘄嚣驮广闰驸孙。 OpenDatabase() 调用OpenDatabase函数打开数据库 CardSQL = select * from CardInFo where (姓名= & TxtName.Text & )”鰻順褛悦漚縫冁屜鸭骞阋苈騍擯驷谑。建立SQL查询 CardRec = CardDb.OpenRecordset(CardSQL,DAO.RecordsetTypeEnum.dbOpenDynaset) 执行SQL查询穑釓虚绺滟鳗絲懷紓泺視娇賭謗驵墮。If CardRec.Fields(1).Value.ToString = 男 Then RbtMale.Checked = TrueElse RbtFemale.Checked = TrueEndIf RbtFemale.Enabled = False RbtMale.Enabled = False TxtName.Enabled = False TxtEmail.Enabled = False TxtAddress.Enabled = False TxtPostCode.Enabled = False TxtFax.Enabled = False TxtPhone.Enabled = False TxtCell.Enabled = False TxtCorp.Enabled = False文本框设为无效,使它是只读的 TxtEmail.Text = CardRec.Fields(3).Value.ToString给TxtEmail.Text赋值为数据项的字段3的中的内容 TxtAddress.Text = CardRec.Fields(4).Value.ToString给TxtEmail.Text赋值为数据项的字段4的中的内容 TxtPostCode.Text = CardRec.Fields(5).Value.ToString隶誆荧鉴獫纲鴣攣駘賽涝鈧籜军驴該。给TxtPostCode.Text赋值为数据项的字段5的中的内容 TxtFax.Text = CardRec.Fields(6).Value.ToString给TxtFax.Text赋值为数据项的字段6的中的内容 TxtPhone.Text = CardRec.Fields(7).Value.ToString TxtCell.Text = CardRec.Fields(8).Value.ToString TxtCorp.Text = CardRec.Fields(9).Value.ToString ImagPath = Application.StartupPath + face + CardRec.Fields(2).Value.ToString + .bmp浹繢腻叢着駕骠構砀湊農瑤帳结驳喷。取得头像文件路径()Dim a As System.Drawing.Bitmap a = a.FromFile(ImagPath) 定义Bitmap图形对象 PbFace.Image = aMe.Text = 这是 + TxtName.Text + 的名片 设置标题栏标题EndSub 实现名片的编辑功能是对个人名片重新编辑,除了“名字”作为关键字不能改变,其他的信息可以进行修改,在代码中只要对除名字控件外的所有控件enable属性设True即可。实现简单,则省略代码。鈀燭罚櫝箋礱颼畢韫粝銨鹏骆隶驱讹。 实现名片的更新功能是在编辑完成后实现将更新信息的信息加入数据库,所以首先就必须用到数据库功能,所以在代码设计中首先建立SQL查询,然后执行SQL查询,对除名字字段的所有字段实现信息的更新,更新完成后就将所有控件的enable属性设为为false,表示更新完成后,所有的信息为只读状态。其中数据库的操作和字段的赋值与名片信息窗口的代码相同。代码实现简单。惬執缉蘿绅颀阳灣熗鍵舣讷赃棧驯嘆。 删除名片时,首先弹出消息框,确认删除信息,然后调用数据库操作,删除信息,并更新界面,然后自动关闭当前界面,实现的代码如下:贞廈给鏌綞牵鎮獵鎦龐朮戗笾賂驮見。PrivateSub Btdelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtDelete.Click嚌鲭级厨胀鑲铟礦毁蕲鷯鑭嵝卢驭劳。If MsgBox(确定删除信息吗?, MsgBoxStyle.OKCancel, 信息框) = DialogResult.OKThen薊镔竖牍熒浹醬籬铃騫违紗駑缓马蚀。 CardRec.Delete() 删除记录 Updateflag = True主窗体界面更新EndIfMe.Dispose()EndSub添加名片窗口界面与名片信息窗口的设计一样,只是少了编辑、更新、删除这几个按钮,增加了【添加】按钮,设计过程完全一样。首先实现数据库加载,调用数据库函数opendatabase,然后建立查询语言并执行查询,如果发现该记录不存在,则添加记录,并判断添加的记录中名字不能为空,然后为各个字段赋值,然后更新主界面,在【添加】按钮的Click事件中添加代码完成这项工作。此处的代码与名片信息窗口的代码相似,则省略详细代码。齡践砚语蜗铸转絹攤濼絡減貽颜馔農。娱乐窗体界面娱乐窗体中设计的是“三联子游戏”。游戏主要内容是:只要任何一方的三个棋子连在一起,就判该方胜利。在娱乐窗体中实现的算法是直接对比法:就是将人们玩游戏的经验输入计算机,如果对弈过程中发生相同盘面时,直接将位置数据取出来。窗体设计如下图:绅薮疮颧訝标販繯轅赛怃贿豎毆馑蒞。 代码设计中用一个chessboard的一维数组来存储盘面上每个格子的状态面。如果盘面上没有下任何棋子,则该数组的相对位置的值就设为0;如果用户下了棋子,则chessboard值为1,而计算机下了棋子值为-1。程序所表达的意思是:若位置1是-1,而且位置2也是-1,那么计算机下一个选择必是位置3,依次类推,可穷举设计计算机的所有决策(没有列出所有的代码),可以参照下面的代码来编写余下的代码。饪箩狞屬诺釙诬苧径凛骗橥峽軋馐侠。Module Module1Public chessboard(9) AsIntegerFunction computerdecide() AsInteger 计算机决策If chessboard(1) = -1 And chessboard(2) = -1 And chessboard(3) = 0 Thencomputerdecide = 3 : ExitFunction烴毙潜籬賢擔視蠶贲粵貫飭驴哕馏艰。If chessboard(1) = -1 And chessboard(3) = -1 And chessboard(2) = 0 Then computerdecide = 2 : ExitFunction鋝岂涛軌跃轮莳講嫗键砺脈贲肤馍麗。If chessboard(7) = 0 And chessboard(8) = 1 And chessboard(9) = 0 Then撷伪氢鱧轍幂聹諛詼庞復堝穷驭馊職。computerdecide = 7 : ExitFunctionIf chessboard(5) = 0 Then computerdecide = 5 : ExitFunction踪飯梦掺钓貞绫賁发蘄韃钆岖淶馈麩。Do Randomize() 随机函数种子Dim r AsInteger r = Int(Rnd() * 9) + 1If chessboard(r) = 0 Then computerdecide = r : ExitDo婭鑠机职銦夾簣軒蚀骞设犹饌還馆缙。LoopEndFunctionEndModule根据上述算法的设置,胜负判断的算法为:如果3个连续的位置加起来为3,则用户胜了,如果连续3个位置加起来为-3,则表示计算机胜了,否则表示平手。则在代码中定义w1w8代表八种可能的连续对弈的位置的总和,如果w1w8中任何一个值为3表示玩家胜利;否则如果值为-3,表示计算机胜利。代码中采用winorloss函数判断对弈的胜负,代码如下:譽諶掺铒锭试监鄺儕泻濰鴇貪埚馅鸶。Function winorloss() AsInteger 判断胜负Dim w1 AsInteger, w2 AsInteger, w3 AsInteger, w4 AsInteger, _俦聹执償閏号燴鈿膽賾劳覡祕茧馄綾。 w5 AsInteger, w6 AsInteger, w7 AsInteger, w8 AsInteger缜電怅淺靓蠐浅錒鵬凜锩惡層魉馀鯛。Dim yn AsInteger, i AsInteger, j AsInteger w1 = chessboard(1) + chessboard(2) + chessboard(3) w2 = chessboard(3) + chessboard(6) + chessboard(9) w3 = chessboard(7) + chessboard(8) + chessboard(9) w4 = chessboard(1) + chessboard(4) + chessboard(7) w5 = chessboard(2) + chessboard(5) + chessboard(8) w6 = chessboard(4) + chessboard(5) + chessboard(6) w7 = chessboard(1) + chessboard(5) + chessboard(9) w8 = chessboard(3) + chessboard(5) + chessboard(7)If w1 = 3 Or w2 = 3 Or w3 = 3 Or w4 = 3 Or w5 = 3 Or w6 = 3 Or w7 = 3 Or w8 = 3 Then用户胜利骥擯帜褸饜兗椏長

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论