• 1.55 MB
  • 2022-04-22 13:31:53 发布

OA办公自动化系统毕业论文.doc

  • 27页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'吉林省明日科技有限公司监制OA办公自动化系统毕业论文目录摘要1目录1引言11系统分析21.1需求分析21.2可行性分析22总体设计22.1项目规划22.2系统工作原理网络结构图22.3系统功能结构图33详细设计33.1公共模块设计33.2系统登录设计43.3主界面设计63.4新闻管理93.5传送文件133.6文件接收153.7投票活动管理18附录A参考文献21附录B数据表结构22附录C文件架构图25–39– 1系统分析1.1需求分析通过调查,要求系统需要有以下功能:q由于操作人员的计算机知识普遍较差,那么就要求有良好的人机界面。q由于该系统的使用对象多,要求有较好的权限管理。q原始数据修改简单方便,支持多条件修改。q方便的数据查询,支持多条件查询。q信息发布与文件传送速度快。q通过计算机,能够直接“透视”公司的各项工作及活动安排。q图表分析活动投票管理。q在相应的权限下,删除数据方便简单,数据稳定性好。1.2可行性分析开发任何一个基于计算机的系统,都会受到时间和资源上的限制。因此,在接受任何一个项目开发任务之前,必须根据客户可能提供的时间和资源条件进行可行性分析,以减少项目开发风险,避免人力、物力和财力的浪费。本系统数据库采用目前比较流行的MicrosoftSQLServer,该数据库系统在安全性、准确性、运行速度方面有绝对的优势,并且处理数据库量大,效率高;前台采用Microsoft公司的VisualBasic6.0作为主要的开发工具,其可与SQLServer2000数据库无缝链接。2总体设计2.1项目规划OA办公自动化系统是一个典型的网络办公开发应用程序,包含通知管理模块、新闻管理模块、文件传送管理模块、交流管理模块、系统维护管理模块5部分组成,规划系统功能模块如下:q通知管理模块该模块主要负责信息的发布、接收等。q新闻管理模块该模块的主要负责新闻的发布、接收等。q文件传送管理模块该模块主要负责文件的传送与接收等。q交流管理模块该模块主要实现意见反馈、活动投票、短消息服务(局域网)。q系统维护管理模块部门信息的基础设置、职员信息的基础设置、投票活动管理设置、系统操作员及权限设置。2.2系统工作原理网络结构图系统工作原理网络结构图如图1所示。–25– 图1系统工作原理网络结构图2.3系统功能结构图图2系统功能结构图3详细设计3.1公共模块设计为了节省系统资源,实现代码重用,可以在系统中新建一个Modulel模块。就本系统而言,该模块主要实现数据库安装和共享数据库连接。系统第一次使用时,根据用户设置的DataBase.ini配置文件,将数据库文件(db_OA_Data.MDF)和数据库日志文件(db_OA_Log.LDF)自动安装到指定的SQLServer数据库服务器上。为了优化ADO+SQL数据库的连接,在公共模块(Module1)中建立数据库连接共享字符串。在以后的编程中,如果使用对象访问数据库或ADOData–25– 控件访问数据库,则可以直接将数据库共享连接字符串(PublicStr)值赋值给相应的ConnectionString属性,从而避免了重复建立数据库连接的麻烦,而失去了ADO+SQL的优越性能。模块中代码如下:PublicPublicStrAsStringDimconAsNewADODB.Connection,rsAsNewADODB.RecordsetDimStrAsString,ServerAsString,uidAsString,DimpwdAsStringPublicSubmain()"读取数据库配置文件Open(App.Path&"DataBase.ini")ForInputAs#1LineInput#1,IntextServer=Mid(Intext,10,Len(Trim(Intext))-9)LineInput#1,Intextuid=Mid(Intext,7,Len(Trim(Intext))-6)LineInput#1,Intextpwd=Mid(Intext,7,Len(Trim(Intext))-6)Close#1"附加数据库OnErrorResumeNextcon.ConnectionString="Provider=SQLOLEDB.1;PersistSecurityInfo=False;UserID="&uid&";PWD="&pwd&";InitialCatalog=db_OA;DataSource="&Server&""con.Open"打开数据库连接Setrs=NewADODB.Recordset"开始附加数据库Str="EXECsp_attach_db@dbname=N"db_SSS",@filename1=N""+App.Path+"DataBasedb_OA_Data.MDF"+"",@filename2=N""+App.Path+"DataBasedb_OA_Log.LDF"+""""rs.Openstr,con,1,adLockOptimisticSetrs=con.Execute(Str)con.Close"关闭数据库连接"共享连接字符串PublicStr="Provider=SQLOLEDB.1;PersistSecurityInfo=False;UserID="&uid&";PWD="&pwd&";InitialCatalog=db_OA;DataSource="&Server&""frm_login.ShowEndSub3.2系统登录设计本系统属于OA办公自动化系统,用户权限分为两种:系统管理员和普通用户。系统登录验证操作员及其密码,主要通过记录集结果(RecordSet)结合If语句,判断用户输入的操作员及密码是否符合数据库中的操作员和密码,如果符合则允许登录,并给予相应的权限,否则提示用户非法登录。1.窗体设计(1)新建一个窗体,将窗体的“名称”属性设置为frm_login,BorderStyle属性设置为0-None,设置Picture属性,为窗体添加背景图片。(2)添加Adodc控件,设置名称为adoLogin,Visible属性为False,由于该控件属于ActiveX控件,在使用之前必须从“部件”对话框将其添加到工具箱中。添加方法为:在“工程”/“部件”对话框中勾选“MicrosoftAdoDataControls6.0(SP4)”列表项。(3)添加2个TextBox控件,分别设置名称(Name属性)为Text1和Text2,设置BorderStyle–25– 属性为0-None。(4)添加2个Label控件,将名称设置为labLogin和labEnd,BackStyle属性为0-Transparent。系统登录窗体的设计结果如图3所示。图3系统登录窗体设计2.代码设计单击名称为labLogin的Label控件用来进行用户安全性检查,如果用户名称和密码正确,则进入系统并分配相应的权限。在Label控件名称为labLogin的Click事件下,添加代码如下:PrivateSublabLogin_Click()adoLogin.ConnectionString=PublicStradoLogin.RecordSource="select*fromtbOA_userwhereusername=""+Text1.Text+""anduserpwd=""+Text2.Text+"""adoLogin.RefreshIfadoLogin.Recordset.RecordCount>0ThenIfadoLogin.Recordset.Fields(2).Value=0Thenfrm_mainBefore.Showfrm_mainBefore.System.Enabled=False"权限约束frm_mainBefore.StatusBar1.Panels(1).Text="操作职员:"&Text1.Text"设置控件TreeView树状菜单Setn1=frm_mainBefore.TreeView1.Nodes.Add(,tvwChild,"通知管理","通知管理",1)Setnode1=frm_mainBefore.TreeView1.Nodes.Add(n1.Index,tvwChild,"发布通知","发布通知",1)Setnode1=frm_mainBefore.TreeView1.Nodes.Add(n1.Index,tvwChild,"接收通知","接收通知",1)Setnode1=frm_mainBefore.TreeView1.Nodes.Add(n1.Index,tvwChild,"已发通知","已发通知",1)Setn2=frm_mainBefore.TreeView1.Nodes.Add(,tvwChild,"新闻管理","新闻管理",1)Setnnode2=frm_mainBefore.TreeView1.Nodes.Add(n2.Index,tvwChild,"新闻发布","新闻发布",1)Setnode2=frm_mainBefore.TreeView1.Nodes.Add(n2.Index,tvwChild,"接收新闻","接收新闻",1)Setnode2=frm_mainBefore.TreeView1.Nodes.Add(n2.Index,tvwChild,"已发新闻","已发新闻",1)Setn4=frm_mainBefore.TreeView1.Nodes.Add(,tvwChild,"文件传送","文件传送",1)Setnnode4=frm_mainBefore.TreeView1.Nodes.Add(n4.Index,tvwChild,"传送文件","传送文件",1)Setnode4=frm_mainBefore.TreeView1.Nodes.Add(n4.Index,tvwChild,"接收文件","接收文件",1)Setnode4=frm_mainBefore.TreeView1.Nodes.Add(n4.Index,tvwChild,"已发文件","已发文件",1)Setn3=frm_mainBefore.TreeView1.Nodes.Add(,tvwChild,"交流管理","交流管理",1)Setnode3=frm_mainBefore.TreeView1.Nodes.Add(n3.Index,tvwChild,"意见箱","意见箱",1)Setnode3=frm_mainBefore.TreeView1.Nodes.Add(n3.Index,tvwChild,"投票活动","投票活动",1)–25– Setnode3=frm_mainBefore.TreeView1.Nodes.Add(n3.Index,tvwChild,"短消息服务","短消息服务",1)Elsefrm_mainBefore.Showfrm_mainBefore.StatusBar1.Panels(1).Text="操作职员:"&Text1.Text"设置控件TreeView树状菜单Setn1=frm_mainBefore.TreeView1.Nodes.Add(,tvwChild,"通知管理","通知管理",1)Setnode1=frm_mainBefore.TreeView1.Nodes.Add(n1.Index,tvwChild,"发布通知","发布通知",1)Setnode1=frm_mainBefore.TreeView1.Nodes.Add(n1.Index,tvwChild,"接收通知","接收通知",1)Setnode1=frm_mainBefore.TreeView1.Nodes.Add(n1.Index,tvwChild,"已发通知","已发通知",1)Setn2=frm_mainBefore.TreeView1.Nodes.Add(,tvwChild,"新闻管理","新闻管理",1)Setnnode2=frm_mainBefore.TreeView1.Nodes.Add(n2.Index,tvwChild,"新闻发布","新闻发布",1)Setnode2=frm_mainBefore.TreeView1.Nodes.Add(n2.Index,tvwChild,"接收新闻","接收新闻",1)Setnode2=frm_mainBefore.TreeView1.Nodes.Add(n2.Index,tvwChild,"已发新闻","已发新闻",1)Setn4=frm_mainBefore.TreeView1.Nodes.Add(,tvwChild,"文件传送","文件传送",1)Setnnode4=frm_mainBefore.TreeView1.Nodes.Add(n4.Index,tvwChild,"传送文件","传送文件",1)Setnode4=frm_mainBefore.TreeView1.Nodes.Add(n4.Index,tvwChild,"接收文件","接收文件",1)Setnode4=frm_mainBefore.TreeView1.Nodes.Add(n4.Index,tvwChild,"已发文件","已发文件",1)Setn3=frm_mainBefore.TreeView1.Nodes.Add(,tvwChild,"交流管理","交流管理",1)Setnode3=frm_mainBefore.TreeView1.Nodes.Add(n3.Index,tvwChild,"意见箱","意见箱",1)Setnode3=frm_mainBefore.TreeView1.Nodes.Add(n3.Index,tvwChild,"投票活动","投票活动",1)Setnode3=frm_mainBefore.TreeView1.Nodes.Add(n3.Index,tvwChild,"短消息服务","短消息服务",1)Setn5=frm_mainBefore.TreeView1.Nodes.Add(,tvwChild,"系统维护管理","系统维护管理",1)Setnode5=frm_mainBefore.TreeView1.Nodes.Add(n5.Index,tvwChild,"人事管理","人事管理",1)Setnode5=frm_mainBefore.TreeView1.Nodes.Add(n5.Index,tvwChild,"投票管理","投票管理",1)Setnode5=frm_mainBefore.TreeView1.Nodes.Add(n5.Index,tvwChild,"意见箱管理","意见箱管理",1)Setnode5=frm_mainBefore.TreeView1.Nodes.Add(n5.Index,tvwChild,"系统设置","系统设置",1)EndIfUnloadMeEndIfEndSub3.3主界面设计主界面主要包括菜单、树状菜单(TreeView控件实现)、状态栏以及显示OA办公系统的最新新闻和最新通知。界面设计简单明了,为用户提供便捷的访问途径,把一些具有共性的命令集中于一个简单的菜单之下。状态栏将显示系统运行时间、公司信息和操作员信息,其中状态栏上的操作员信息主要通过“系统登录窗体”中“登录操作员”项传递而得到的。主界面运行结果如图4所示。–25– 图4主界面1.窗体设计(1)新建1个窗体,将窗体的“名称”属性设置为frm_mainBefore,Caption属性为“★OA办公自动化系统★”,MaxButton属性为False,设置Picture属性,为窗体添加背景图片。(2)为窗体设计菜单。(3)添加ImageList控件,使用默认名称,该控件属于ActiveX控件,在使用之前必须从“部件”对话框将其添加到工具箱中。添加方法为:在“工程”/“部件”对话框中勾选“MicrosoftWindowsCommonControls6.0(SP6)”列表项。(4)添加MSHFlexGrid控件,该控件属于ActiveX控件,使用之前必须将MSHFlexGrid控件添加到工具箱中,添加方法为:在“工程”/“部件”对话框中勾选“MicrosoftHierarchicalFlexGridControl6.0”列表,添加2个MSHFlexGrid控件,名称分别为MSHFlexGrid1和MSHFlexGrid2,二者的属性完全相同,主要设置控件的背景色、前景色及表格颜色,方法为:在控件上单击鼠标右键选择“属性”菜单,弹出“属性页”选择“颜色”选项卡设置控件的相关颜色,如图5所示。–25– 图5设置MSHFlexGrid控件颜色属性(5)添加StatusBar(状态栏)控件,主要用来显示系统操作员信息、系统时间及公司名称和网站。该控件属于ActiveX控件,添加ImageList控件时已经将该控件添加到工具箱中。StatusBar控件的名称为默认名,单击鼠标右键打开“属性页”,为StatusBar控件添加3个窗格,第1个窗格显示系统操作员、第2个窗格显示系统日期、第3个窗格显示公司名称和网址,该控件的属性设置方法在前面的章节中已经详细讲解过了,这里就不做介绍了。2.程序代码设计当窗体激活时,将TreeView控件中所有的节点展开。在Form窗体的Activate事件下添加如下代码:PrivateSubForm_Activate()Fori=1ToTreeView1.Nodes.Count"展开全部节点TreeView1.Nodes(i).Expanded=TrueNextiEndSub单击树状菜单中的菜单,根据所选择的菜单显示相应的窗体。在TreeView控件的NodeClick事件下添加代码如下:PrivateSubTreeView1_NodeClick(ByValNodeAsMSComctlLib.Node)IfTreeView1.SelectedItem.Key="发布通知"ThenfrmNotice_issue.ShowIfTreeView1.SelectedItem.Key="接收通知"ThenfrmNotice_incept.ShowIfTreeView1.SelectedItem.Key="已发通知"ThenfrmNotice_toVoice.ShowIfTreeView1.SelectedItem.Key="新闻发布"ThenfrmNews_issue.ShowIfTreeView1.SelectedItem.Key="接收新闻"ThenfrmNews_incept.ShowIfTreeView1.SelectedItem.Key="已发新闻"ThenfrmNews_toNews.ShowIfTreeView1.SelectedItem.Key="新闻发布"ThenfrmNews_issue.ShowIfTreeView1.SelectedItem.Key="接收新闻"ThenfrmNews_incept.ShowIfTreeView1.SelectedItem.Key="已发新闻"ThenfrmNews_toNews.ShowIfTreeView1.SelectedItem.Key="传送文件"ThenfrmFile.ShowIfTreeView1.SelectedItem.Key="接收文件"ThenfrmFile_incept.ShowIfTreeView1.SelectedItem.Key="已发文件"ThenfrmFile_toFile.ShowIfTreeView1.SelectedItem.Key="意见箱"ThenfrmAC_idear.ShowIfTreeView1.SelectedItem.Key="投票活动"ThenfrmAC_vote.ShowIfTreeView1.SelectedItem.Key="短消息服务"ThenfrmAC_QQ.ShowIfTreeView1.SelectedItem.Key="人事管理"ThenfrmSys_person.ShowIfTreeView1.SelectedItem.Key="投票管理"ThenfrmSys_vote.ShowIfTreeView1.SelectedItem.Key="意见箱管理"ThenfrmSys_idear.ShowIfTreeView1.SelectedItem.Key="系统设置"ThenfrmSys_sys.ShowEndSub在Form窗体的装载过程中,将最新的新闻和通知显示在MSHFlexGrid表格中。PrivateSubForm_Load()"////设置NEWSadoNews.ConnectionString=PublicStradoNews.RecordSource="SELECTnews_date,news_textFROMtbOA_newsWHERE(news_acceptPerson=""&frm_login.Text1&"")ORDERBYnews_dateDESC"adoNews.RefreshSetMSHFlexGrid2.DataSource=adoNews–25– CallsetNewsDataGrid_Caption"/////设置通知adoNotice.ConnectionString=PublicStradoNotice.RecordSource="SELECTnotice_date,notice_person,notice_acceptDept,notice_acceptPerson,notice_textFROMtbOA_noticeWHERE(notice_acceptPerson=""&frm_login.Text1&"")ORDERBYnotice_dateDESC"adoNotice.RefreshSetMSHFlexGrid1.DataSource=adoNoticeCallsetNoticeDataGrid_CaptionEndSub每隔一分多钟就更新一次最新新闻和最新通知。在Timer控件的Timer事件下添加如下代码:PrivateSubTimer1_Timer()"////设置NEWSadoNews.RecordSource="SELECTnews_date,news_textFROMtbOA_newsWHERE(news_acceptPerson=""&Mid(StatusBar1.Panels(1).Text,6,Len(StatusBar1.Panels(1).Text)-5)&"")ORDERBYnews_dateDESC"adoNews.RefreshCallsetNewsDataGrid_Caption"//////设置通知adoNotice.RecordSource="SELECTnotice_date,notice_person,notice_acceptDept,notice_acceptPerson,notice_textFROMtbOA_noticeWHERE(notice_acceptPerson=""&Mid(StatusBar1.Panels(1).Text,6,Len(StatusBar1.Panels(1).Text)-5)&"")ORDERBYnotice_dateDESC"adoNotice.RefreshCallsetNoticeDataGrid_Caption"调用自定义过程EndSub自定义过程setNewsDataGrid_Caption()用来初始化新闻MSHFlexGrid2控件的列标题和表格宽度。SubsetNewsDataGrid_Caption()‘初始化行序号Fori=1ToadoNews.Recordset.RecordCountMSHFlexGrid2.TextMatrix(i,0)=iNext‘初始化表格标题和列宽MSHFlexGrid2.TextMatrix(0,0)="序号":MSHFlexGrid2.TextMatrix(0,1)="发布日期"MSHFlexGrid2.TextMatrix(0,2)="新闻内容":MSHFlexGrid2.ColWidth(0)=400MSHFlexGrid2.ColWidth(1)=1000:MSHFlexGrid2.ColWidth(2)=6700EndSub3.4新闻管理新闻管理包含3个部分:新闻发布、新闻接收、已发新闻。其中新闻发布用来将新闻发布给某部门中某人;新闻接收用来接收其他职员发布新闻;已发新闻用来浏览将新闻发布给其他职员的新闻。下面笔者分别讲解新闻发布、新闻接收和已发新闻的开发过程。1.新闻发布新闻管理窗体的设计结果如图6所示。–25– 图6新闻发布设计图(1)新建1个窗体,设置窗体的“名称”属性为frmNews_issue、Caption属性为“新闻发布”,MaxButton属性为False。(2)在窗体中添加4个Label控件、2个Combo控件、3个ADO控件、2个TextBox控件和2个CommandButton控件。(3)添加DTPicker控件,该控件属于ActiveX控件,在使用之前必须从“部件”对话框中添加到工具箱中。添加方法为:在“工程”/“部件”对话框中勾选“MicrosoftWindowsCommonControls2.6.0”列表项,添加DTPicker控件后,其名称为默认的DTPicker1。(4)程序代码。新闻发布就是将要发布的新闻按部门、职员和新闻数据存储到tbOA_news数据表中。在【发布新闻】按钮的Click事件下添加如下代码:PrivateSubcmdSave_Click()adoNews.Recordset.AddNewadoNews.Recordset.Fields(1).Value=DTPicker1.ValueadoNews.Recordset.Fields(2).Value=Text2.TextadoNews.Recordset.Fields(3).Value=Combo1.TextadoNews.Recordset.Fields(4).Value=Combo2.TextadoNews.Recordset.Fields(5).Value=0adoNews.Recordset.Fields(6).Value=Text1.TextadoNews.Recordset.UpdateMsgBox"通知发布成功!",vbInformationEndSubForm窗体载入时,主要实现以下功能:(1)建立adoNews控件和adoDept控件数据库连接。(2)为Combo1控件中添加部门名称数据。(3)获取系统操作职员姓名,并通过Text2控件显示出来。(4)使DTPicker1控件显示系统当前日期。Form窗体的Load事件过程中的代码如下:PrivateSubForm_Load()adoNews.ConnectionString=PublicStr‘建立数据库连接adoNews.RecordSource="select*fromtbOA_news"‘检索数据表数据adoNews.RefreshadoDept.ConnectionString=PublicStradoDept.RecordSource="select*fromtbOA_dept"–25– adoDept.RefreshFori=0ToadoDept.Recordset.RecordCount–1‘将所有部门名称添加到Combo1中Combo1.AddItemadoDept.Recordset.Fields(1).ValueadoDept.Recordset.MoveNextNextiText2.Text=Mid(frm_mainBefore.StatusBar1.Panels(1).Text,6,Len(frm_mainBefore.StatusBar1.Panels(1).Text)-5)‘获取操作员姓名DTPicker1.Value=Date‘显示系统当前日期EndSub在Combo1控件中选择不同的部门,检索该部门的所有员工并将其添加到Combo2控件中。Combo1控件Click事件的代码如下:PrivateSubCombo1_Click()Combo2.ClearadoEmployee.ConnectionString=PublicStradoEmployee.RecordSource="select*fromtbOA_employee"adoEmployee.RefreshFori=0ToadoEmployee.Recordset.RecordCount-1Combo2.AddItemadoEmployee.Recordset.Fields(1).ValueadoEmployee.Recordset.MoveNextNextiEndSub2.新闻接收新闻接收窗体的设计结果如图7所示。图7新闻接收设计图(1)新建一个窗体,设置窗体的“名称”属性为frmNews_incept、Caption属性为“新闻接收”、MaxButton属性为False。(2)添加4个ComandButton控件和1个Adodc控件。(3)添加2个DTPicker控件,名称分别为DTPicker1和DTPicker2。(4)添加DataGrid控件,使用默认名称。(5)程序代码。在窗体装载过程中,将adoNews控件查询的数据通过DataGrid控件显示,代码如下:PrivateSubForm_Load()adoNews.ConnectionString=PublicStr‘建立数据库连接–25– ‘数据库查询(以日期为标准降序查询)adoNews.RecordSource="select*fromtbOA_newswherenews_acceptPerson=""+Mid(frm_mainBefore.StatusBar1.Panels(1).Text,6,Len(frm_mainBefore.StatusBar1.Panels(1).Text)-5)+""orderbynews_datedesc"adoNews.RefreshSetDataGrid1.DataSource=adoNews‘将数据源绑定到DataGrid表格中CallsetDataGrid_CaptionEndSub通过鼠标选择DataGrid表格中数据,然后单击【删除】按钮,将选中的数据删除,代码如下:PrivateSubcmdDel_Click()OnErrorResumeNextadoNews.Recordset.DeleteEndSub在日期输入框输入开始日期和截止日期后,单击【查询】按钮,将在DataGrid控件中显示相应查询结果,代码如下:PrivateSubcmdFind_Click()adoNews.ConnectionString=PublicStradoNews.RecordSource="select*fromtbOA_newswherenews_datebetween""&DTPicker1.Value&""and""&DTPicker2.Value&""andnews_acceptPerson=""+Mid(frm_mainBefore.StatusBar1.Panels(1).Text,6,Len(frm_mainBefore.StatusBar1.Panels(1).Text)-5)+""orderbynews_datedesc"adoNews.RefreshSetDataGrid1.DataSource=adoNewsCallsetDataGrid_Caption‘调用自定义过程EndSub单击【显示所有新闻】按钮后,显示系统操作职员接收到的所有新闻,代码如下:PrivateSubCommand1_Click()adoNews.ConnectionString=PublicStradoNews.RecordSource="select*fromtbOA_newswherenews_acceptPerson=""+Mid(frm_mainBefore.StatusBar1.Panels(1).Text,6,Len(frm_mainBefore.StatusBar1.Panels(1).Text)-5)+""orderbynews_datedesc"adoNews.RefreshSetDataGrid1.DataSource=adoNewsCallsetDataGrid_CaptionEndSub由于本系统数据表中的字段都是英文字段,因此将ADOData控件绑定到DataGrid控件后,DataGrid控件的列标题都为英文字段名称,为方便用户使用,笔者在此建立了setDataGrid_Caption()过程,该过程主要用于设置DataGrid控件的列标题和列宽,代码如下:SubsetDataGrid_Caption()DataGrid1.Columns(0).Caption="序号"DataGrid1.Columns(1).Caption="通日期"DataGrid1.Columns(2).Caption="发布新闻人"DataGrid1.Columns(3).Caption="接收部门"DataGrid1.Columns(4).Caption="接收人"DataGrid1.Columns(5).Visible=FalseDataGrid1.Columns(6).Caption="新闻内容"DataGrid1.Columns(0).Width=600DataGrid1.Columns(1).Width=1000DataGrid1.Columns(2).Width=1000–25– DataGrid1.Columns(3).Width=2000DataGrid1.Columns(4).Width=1000DataGrid1.Columns(6).Width=4000EndSub3.已发新闻已发新闻窗体的设计结果如图8所示。图8已发新闻窗体设计图(1)新建1个窗体,将窗体的“名称”属性设置为frmNews_toNews,设置Caption属性为“已发布新闻”,设置MaxButton属性为False。(2)添加ADO控件,设置“名称”属性为adoNews,设置Visible属性为False;添加DataGrid控件“名称”属性为默认名称DataGrid1;添加CommandButton控件名称为默认名称、其Caption属性为“退出”。(3)程序代码。在窗体装载过程中,将adoNews控件查询的数据通过DataGrid控件显示,代码如下:PrivateSubForm_Load()adoNews.ConnectionString=PublicStradoNews.RecordSource="select*fromtbOA_newswherenews_person=""+Mid(frm_mainBefore.StatusBar1.Panels(1).Text,6,Len(frm_mainBefore.StatusBar1.Panels(1).Text)-5)+"""adoNews.RefreshSetDataGrid1.DataSource=adoNewsCallsetDataGrid_CaptionEndSub"此处代码,请参见光盘3.5传送文件文件传送在OA办公自动化系统中占据很重要的位置,本系统文件传送可以传送多种类型的文件(如EXE,BAT,RAR,FRM,DOC等等)。传送文件窗体的设计结果如图9所示。–25– 图9传送文件窗体设计结果1.窗体设计(1)新建1个窗体,设置窗体“名称”属性为frmFile、Caption属性为“文件传送”、MaxButton属性为False。(2)添加2个Combo控件、4个TextBox控件、3个CommandButton控件,其属性设置如图8.21所示。(3)添加2个ADO控件,名称分别为adoDept和adoEmployee,其Visible属性均为False。(4)添加1个DTPicker控件,默认名称为DTPicker1。(5)添加CommonDialog控件,默认名称CommonDialog1。CommonDialog控件为ActiveX控件,在使用之前必须从“部件”对话框中添加到工具箱中。添加方法为:在“工程”/“部件”对话框中勾选“MicrosoftCommonDialog6.0”列表项。2.程序代码设计在Form窗体装载中,主要实现以下功能:(1)建立adoDept控件数据库连接。(2)为Combo1控件中添加部门名称数据。(3)获取系统操作职员姓名,并通过txtName控件显示出来。(4)使DTPicker1控件显示系统当前日期。在Form窗体的Load事件添加如下代码:PrivateSubForm_Load()adoDept.ConnectionString=PublicStradoDept.RecordSource="select*fromtbOA_dept"adoDept.RefreshFori=0ToadoDept.Recordset.RecordCount-1Combo1.AddItemadoDept.Recordset.Fields(1).ValueadoDept.Recordset.MoveNextNextitxtName.Text=Mid(frm_mainBefore.StatusBar1.Panels(1).Text,6,Len(frm_mainBefore.StatusBar1.Panels(1).Text)-5)DTPicker1.Value=DateEndSub单击【传送文件】按钮,将相应的文件数据保存到数据库中,代码如下:PrivateSubcmdSave_Click()DimcnAsADODB.Connection,rsAsADODB.Recordset,mstAsADODB.StreamMe.MousePointer=11–25– Setcn=NewADODB.Connectioncn.ConnectionString="Provider=SQLOLEDB.1;PersistSecurityInfo=False;UserID=sa;InitialCatalog=db_OA;DataSource=MRZYT"cn.OpenSetrs=NewADODB.Recordsetrs.Open"select*fromtbOA_file",cn,adOpenStatic,adLockOptimisticSetmst=NewADODB.Streammst.Type=adTypeBinarymst.Openmst.LoadFromFiletxtFile.Textrs.AddNewrs.Fields(1).Value=txtSubject.Text:rs.Fields(2).Value=txtMemo.Textrs.Fields(3).Value=txtName.Text:rs.Fields(4).Value=Combo1.Textrs.Fields(5).Value=Combo2.Text:rs.Fields(6).Value=DTPicker1.Valuers.Fields(7).Value=mst.Read:rs.Fields(8).Value=fileNamers.Updaters.Close:cn.CloseMe.MousePointer=0MsgBox"文件传送成功!",vbInformationEndSub在Combo1控件中选择部门,将检索该部门的所有员工,并将其添加到Combo2控件中。Combo1控件的Click事件下代码如下:PrivateSubCombo1_Click()Combo2.ClearadoEmployee.ConnectionString=PublicStradoEmployee.RecordSource="select*fromtbOA_employeewheree_dept=""&Combo1.Text&"""adoEmployee.RefreshFori=0ToadoEmployee.Recordset.RecordCount-1Combo2.AddItemadoEmployee.Recordset.Fields(1).ValueadoEmployee.Recordset.MoveNextNextiEndSub单击【浏览文件】按钮,选择将要传送的文件,代码如下:PrivateSubcmdFile_Click()CommonDialog1.ShowOpentxtFile.Text=CommonDialog1.fileName:fileName=CommonDialog1.FileTitleEndSub3.6文件接收文件接收窗体主要用来接收其他员工传送来的文件,并且将文件下载保存到本机器中。本窗体主要实现的功能为:以日期为标准查询接收文件、下载接收文件、删除接收文件、显示所有接收文件。文件接收窗体的设计结果如图10所示。–25– 图10文件接收窗体设计结果1.窗体设计(1)新建一个窗体,设置窗体“名称”属性为frmFile_incept,Caption属性为“文件接收”,MaxButton属性为False。(2)添加4个CommandButton按钮控件,名称分别为cmdFind、cmdDel、Command1、Command2,其Caption属性为“查询”、“删除文件记录”、“显示所有文件”和“退出”。(3)添加ADO控件和DataGrid控件,设置名称分别为adoFile和DataGrid1。(4)添加2个DTPicker控件名称分别为DTPicker1和DTPicker2。2.程序代码设计在本窗体中声明变量,代码如下:PublicfilePathAsStringDimcnAsADODB.Connection,rsAsADODB.Recordset,mstAsADODB.Stream在窗体的装载过程中,查询系统操作职员接收的所有文件,并通过DataGrid控件显示,代码如下:PrivateSubForm_Load()adoFile.ConnectionString=PublicStradoFile.RecordSource="select*fromtbOA_filewherefile_name=""+Mid(frm_mainBefore.StatusBar1.Panels(1).Text,6,Len(frm_mainBefore.StatusBar1.Panels(1).Text)-5)+""orderbyfile_datedesc"adoFile.RefreshSetDataGrid1.DataSource=adoFile‘将数据源绑定到DataGrid表格上CallsetDataGrid_CaptionEndSub通过鼠标选择DataGrid表格中数据,然后单击【删除文件记录】按钮,将选中的文件数据删除。下面是【删除】按钮的Click事件代码:PrivateSubcmdDel_Click()OnErrorResumeNext‘当数据表中没有数据时,进行错误处理adoFile.Recordset.DeleteEndSub在日期输入框输入开始日期和截止日期后,单击【查询】按钮,将查询结果显示在DataGrid控件中,代码如下:PrivateSubcmdFind_Click()adoFile.RecordSource="select*fromtbOA_filewherefile_name=""+–25– Mid(frm_mainBefore.StatusBar1.Panels(1).Text,6,Len(frm_mainBefore.StatusBar1.Panels(1).Text)-5)+""andfile_datebetween""&DTPicker1.Value&""and""&DTPicker2.Value&"""adoFile.RefreshCallsetDataGrid_CaptionEndSubPrivateSubCommand1_Click()adoFile.ConnectionString=PublicStradoFile.RecordSource="select*fromtbOA_filewherefile_name=""+Mid(frm_mainBefore.StatusBar1.Panels(1).Text,6,Len(frm_mainBefore.StatusBar1.Panels(1).Text)-5)+""orderbyfile_datedesc"adoFile.RefreshSetDataGrid1.DataSource=adoFileCallsetDataGrid_CaptionEndSub"在DataGrid控件中选择文件记录,然后双击鼠标左键,下载接收文件PrivateSubDataGrid1_DblClick()IfMsgBox("是否接收【"&DataGrid1.Columns(3).Text&"】传送来的『"&DataGrid1.Columns(1).Text&"』吗?",vbQuestion+vbYesNo)=vbYesThenCommonDialog1.fileName=DataGrid1.Columns(8).TextCommonDialog1.ShowSavefilePath=CommonDialog1.fileNameMe.MousePointer=11Setcn=NewADODB.Connectioncn.ConnectionString=PublicStrcn.OpenSetrs=NewADODB.Recordsetrs.Open"select*fromtbOA_filewherefile_id=""&frmFile_incept.adoFile.Recordset.Fields(0).Value&""",cn,adOpenStatic,adLockOptimisticSetmst=NewADODB.Streammst.Type=adTypeBinarymst.Openmst.Writers.Fields(7).Valuemst.SaveToFilefilePath,adSaveCreateOverWrite"保存文件,adSaveCreateOverWrite为覆盖以存在文件rs.Closecn.CloseMe.MousePointer=0MsgBox"现在成功!"&"文件保存在:"&frmFile_incept.filePath,vbInformation,"文件下载"EndIfEndSub由于本系统数据表中的字段都是英文字段,因此将ADOData控件绑定到DataGrid控件后,DataGrid控件的列标题都为英文字段名称,为方便用户使用,笔者在此建立了setDataGrid_Caption()过程,该过程主要用于设置DataGrid控件的列标题和列宽,代码如下:SubsetDataGrid_Caption()DataGrid1.Columns(0).Caption="序号":DataGrid1.Columns(1).Caption="主题"DataGrid1.Columns(2).Caption="文件备注":DataGrid1.Columns(3).Caption="传送人"DataGrid1.Columns(4).Caption="接收部门":DataGrid1.Columns(5).Caption="接收人"DataGrid1.Columns(6).Caption="传送日期":DataGrid1.Columns(7).Visible=False–25– DataGrid1.Columns(8).Caption="文件标题":DataGrid1.Columns(0).Width=500DataGrid1.Columns(1).Width=2000:DataGrid1.Columns(2).Width=3000DataGrid1.Columns(3).Width=1000:DataGrid1.Columns(4).Width=1000DataGrid1.Columns(5).Width=1000:DataGrid1.Columns(6).Width=1000DataGrid1.Columns(8).Width=2000EndSub3.7投票活动管理投票活动管理主要添加投票活动、删除投票活动、清除投票记录,列表形式统计票数及图表统计票数。投票活动管理窗体的设计结果如图11所示。图11活动投票管理窗体设计图1.窗体设计(1)新建一个窗体,将窗体的“名称”属性设置为frmSys_vote,设置Caption属性为“活动投票管理”,设置MaxButton属性为False。(2)添加2个Label标签控件、2个TextBox文本框控件及4个CommandButton按钮控件。(3)添加Ado控件和DataGrid控件,设置其名称为adoVote和DataGrid2。(4)添加MSChart图表控件,其名称为默认名称。由于MSChart控件为ActiveX控件,在使用之前必须从“部件”对话框中添加到工具箱中。添加方法为:在“工程”/“部件”对话框中勾选“MicrosoftChartControls6.0(OLEDB)”列表项。2.程序代码设计在窗体装载过程中,根据投票数量进行投票排行,并通过表格或图表显示出来。窗体的Load事件代码如下:PrivateSubForm_Load()"///投票活动设置adoVote.ConnectionString=PublicStradoVote.RecordSource="select*fromtbOA_voteorderbyvote_qtydesc"adoVote.RefreshSetDataGrid2.DataSource=adoVoteDataGrid2.Columns(0).Caption="序号":DataGrid2.Columns(1).Caption="活动名称"DataGrid2.Columns(2).Caption="活动描述":DataGrid2.Columns(3).Caption="活动票数"–25– EndSub单击【显示图表】按钮,可以切换通过图表显示投票结果或列表显示投票结果。【显示图表】按钮的Click事件下添加代码如下:PrivateSubcmdChar_Click()IfcmdChar.Caption="显示图表"ThencmdChar.Caption="显示列表"MSChart1.Visible=TrueDataGrid2.Visible=FalseadoVote.RecordSource="selectvote_subjectas活动名称,vote_qtyas投票数量fromtbOA_vote"adoVote.RefreshSetMSChart1.DataSource=adoVoteElseIfcmdChar.Caption="显示列表"ThencmdChar.Caption="显示图表"MSChart1.Visible=False:DataGrid2.Visible=TrueadoVote.RecordSource="select*fromtbOA_voteorderbyvote_qtydesc"adoVote.RefreshDataGrid2.Columns(0).Caption="序号":DataGrid2.Columns(1).Caption="活动名称"DataGrid2.Columns(2).Caption="活动描述":DataGrid2.Columns(3).Caption="活动票数"EndIfEndSub单击【添加】按钮,添加相关投票活动。【添加】按钮的Click下代码如下:PrivateSubcmdVoteAdd_Click()adoVote.RecordSource="select*fromtbOA_voteorderbyvote_qtydesc"adoVote.RefreshIftxtVote.Text=""ThenMsgBox"活动名称不能为空!",vbInformation:txtVote.SetFocus:ExitSubadoVote.Recordset.AddNewadoVote.Recordset.Fields(1).Value=txtVote.TextadoVote.Recordset.Fields(2).Value=txtVoteMemo.TextadoVote.Recordset.UpdateMsgBox"添加成功",vbInformationDataGrid2.Columns(0).Caption="序号":DataGrid2.Columns(1).Caption="活动名称"DataGrid2.Columns(2).Caption="活动描述":DataGrid2.Columns(3).Caption="活动票数"EndSub通过鼠标选择DataGrid表格中数据,然后单击【删除】按钮,将选中的数据删除。下面是【删除】按钮的Click事件代码:PrivateSubcmdVoteDel_Click()OnErrorResumeNext‘数据表没有数据时,进行错误处理adoVote.Recordset.DeleteDataGrid2.Columns(0).Caption="序号":DataGrid2.Columns(1).Caption="活动名称"DataGrid2.Columns(2).Caption="活动描述":DataGrid2.Columns(3).Caption="活动票数"EndSub单击【清除投票记录】按钮,将活动的所有投票结果删除。下面是【清除投票记录】按钮的Click事件代码:PrivateSubcmdClear_Click()adoVote.RecordSource="select*fromtbOA_vote"adoVote.RefreshIfadoVote.Recordset.RecordCount>0ThenFori=0ToadoVote.Recordset.RecordCount-1–25– adoVote.Recordset.Fields(3).Value=0"将投票数量设置为0adoVote.Recordset.MoveNextNextiEndIfDimconAsADODB.ConnectionDimrsAsADODB.RecordsetSetcon=NewADODB.Connectioncon.ConnectionString=PublicStrcon.OpenSetrs=NewADODB.RecordsetSetrs=con.Execute("DELETEFROMtbOA_voteRecord")"清楚投票人记录con.CloseMsgBox"数据清除成功!",vbInformationDataGrid2.Columns(0).Caption="序号":DataGrid2.Columns(1).Caption="活动名称"DataGrid2.Columns(2).Caption="活动描述":DataGrid2.Columns(3).Caption="活动票数"EndSub–25– 附录A参考文献1.Visualbasic数据库开发关键技术与实例应用人民邮电出版社2004年5月2.VisualBasic管理信息系统完整项目实例剖析人民邮电出版社2005年7月3.VisualBasic精彩编程200例机械工业出版社赛奎春、高春艳等2003年1月4.VisualBasic数据库开发实例解析机械工业出版社刘志铭、高春艳等2003年8月5.Delphi数据库开发实例解析机械工业出版社赛奎春、郑骁鹏等2004年2月6.PowerBuilder精彩编程200例机械工业出版社张振坤、李文立等2004年9月7.VisualFoxPro精彩编程200例机械工业出版社王国辉、董韶华等2004年9月8.ASP数据库开发实例解析机械工业出版社李严、于亚芳、王国辉2004年12月9.Delphi工程应用与项目实践机械工业出版社宋坤、赵智勇等2005年1月10.VisualBasic工程应用与项目实践机械工业出版社高春艳、李俊民等2005年1月11.VisualC++工程应用与项目实践机械工业出版社张雨、阮伟良等5005年1月12.JSP工程应用与项目实践机械工业出版社陈威、白伟明、李楠2005年2月13.ASP工程应用与项目实践机械工业出版社王国辉、牛强、李南南2005年4月14.VisualBasic信息系统开发实例精选机械工业出版社高春艳、李俊民、张耀庭等2005年7月15.ASP信息系统开发实例精选机械工业出版社王国辉、牛强、李南南等2005年7月16.Delphi信息系统开发实例精选机械工业出版社宋坤、赵智勇、刘强等2005年7月17.Visualfoxpro数据库开发关键技术与实例应用人民邮电出版社周桓、张雨、王国辉2004年5月18.PoweBuilder数据库开发关键技术与实例应用人民邮电出版社刘志铭张振坤冯文萃2004年5月19.Delphi数据库开发关键技术与实例应用人民邮电出版社赛奎春陈紫鸿宋昆2004年5月20.VisualFoxPro数据库开发实例解析机械工业出版社王晶莹、王国辉等2003年9月21.VisualC++管理信息系统完整项目实例剖析人民邮电出版社明日科技2005年7月22.PowerBuilder数据库开发实例解析机械工业出版社华传铭、张振坤等2003年9月23.PowerBuilder管理信息系统完整项目实例剖析人民邮电出版社明日科技2005年7月24.VisualFoxPro管理信息系统完整项目实例剖析人民邮电出版社明日科技2005年7月25.SQLServer数据库开发实例解析机械工业出版社宋昆、李严等2006年1月26.Access数据库开发实例解析机械工业出版社李俊民、高春燕等2006年1月–25– 附录B数据表结构表B.1文件数据表的结构字段名数据类型长度主键否描述file_idint主键IDfile_subjectvarchar30文件主题file_textvarchar50文件描述file_personvarchar16传送人file_deptvarchar30接收部门file_namevarchar16接收人file_datedatetime8传送日期file_fileimage16文件file_typevarchar20文件类型表B.2意见表的结构字段名数据类型长度主键否描述idear_idint主键意见IDidear_subjectvarchar30意见主题idear_textvarchar50意见内容表B.3新闻表的结构字段名数据类型长度主键否描述news_idint主键新闻IDnews_datedatetime新闻发布时间news_personvarchar12发布人news_acceptDeptvarchar50新闻接收部门news_acceptPersonvarchar12接收人news_bitbit标记new_textvarchar50备注表B.4办公通知表的结构字段名数据类型长度主键否描述notice_idint主键通知IDnotice_datedatetime通知时间notice_personvarchar12发布通知人notice_acceptDeptvarchar30通知部门–25– notice_acceptPersonvarchar12通知人notice_bitbit1标记notice_textvarchar500备注表B.5系统用户表的结构字段名数据类型长度主键否描述usernamevarchar20主键用户名userpwdvarchar20密码userbitbit权限标记表B.6公司活动表的结构字段名数据类型长度主键否描述vote_idint主键活动IDvote_subjectvarchar30活动主题vote_memovarchar50活动备注vote_qtyfloat投票数量表B.7活动投票记录表的结构字段名数据类型长度主键否描述voteRecord_idint主键IDvoteRecord_namevarchar16投票人表B.8部门信息表字段名数据类型长度主键否描述dept_idint主键部门编号dept_namevarchar30部门名称dept_describeText16描述信息表B.9员工信息表字段名数据类型长度主键否描述e_idvarchar10主键员工编号e_namevarchar20员工姓名e_sexvarchar6性别e_birthvarchar16出生日期e_deptvarchar30所属部门e_dutyvarchar16职务e_studyvarchar16学历–25– e_govvarchar16政治面貌e_phonevarchar20联系电话e_memotext16备注–25– 附录C文件架构图文件架构如图C.1所示。图C.1系统主文件架构图通知管理和新闻管理文件架构如图C.2所示。图C.2通知管理和新闻管理文件架构图文件传送和交流管理文件架构如图C.3所示。图C.3文件传送和交流管理文件架构图系统维护管理文件架构如图C.4所示。–25– 图C.4系统维护管理文件架构–25–'