1、OA办公自动化系统学 院专 业班 级学 号姓 名指导老师老师职称年月日摘要【摘要】系统针对企业机关办公中存在信息不畅、效率底下、操作不规范等一系列问题。用信息化手段和新一代规范等一系列问题。用信息化手段和新一代管理思想提供了强有力网络化、电子化支持。把协同办公理念、知识管理思想带入了现代社会办公生活,从而提升了现代企业信息化程度,改变了大家生活。【关键词】 OA 办公自动化目录摘要1目录1引言11 系统分析21.1 需求分析21.2 可行性分析22 总体设计22.1 项目计划22.2 系统工作原理网络结构图22.3 系统功效结构图33 具体设计33.1 公共模块设计33.2 系统登录设计43.
2、3 主界面设计63.4 新闻管理93.5 传送文件133.6 文件接收153.7 投票活动管理18附录A 参考文件21附录B 数据表结构22附录C 文件架构图25引言在市场竞争过程中,对于一个企业而言,对信息掌握程度、信息获取是否立即、信息能否得到充足利用、对信息反应是否敏感正确,也越来越成为衡量一个企业市场竞争能力关键原因。商场如战场,新一代战争是信息化战争,怎样使企业信息化建设完善起来?在这种情况下,开发OA办公自动化系统是当务之急事了。本系统是以新闻公布、文件传送为关键办公自动化系统,是一套集新闻管理、文件传送管理、信息公布、人事管理、局域网短消息快速传送等5部分为一体办公自动化系统。该
3、系统除了必需满足目前应用要求外,在整套系统设计过程中,还专门强调了其优异性及可扩展性。目前信息技术日新月异,假如这套系统只着眼于目前需求,而忽略了对系统技术前瞻性,能够在很快未来,系统必将不能满足用户日益增加需求,造成系统生命周期缩短,从而增加用户在信息化建设上投资。1 系统分析1.1 需求分析经过调查,要求系统需要有以下功效:q 因为操作人员计算机知识普遍较差,那么就要求有良好人机界面。q 因为该系统使用对象多,要求有很好权限管理。q 原始数据修改简单方便,支持多条件修改。q 方便数据查询,支持多条件查询。q 信息公布和文件传送速度快。q 经过计算机,能够直接“透视”企业各项工作及活动安排。
4、q 图表分析活动投票管理。q 在对应权限下,删除数据方便简单,数据稳定性好。1.2 可行性分析开发任何一个基于计算机系统,全部会受到时间和资源上限制。所以,在接收任何一个项目开发任务之前,必需依据用户可能提供时间和资源条件进行可行性分析,以降低项目开发风险,避免人力、物力和财力浪费。本系统数据库采取现在比较流行Microsoft SQL Server,该数据库系统在安全性、正确性、运行速度方面有绝正确优势,而且处理数据库量大,效率高;前台采取Microsoft企业Visual Basic 6.0作为关键开发工具,其可和SQL Server 数据库无缝链接。2 总体设计2.1 项目计划OA办公自
5、动化系统是一个经典网络办公开发应用程序,包含通知管理模块、新闻管理模块、文件传送管理模块、交流管理模块、系统维护管理模块5部分组成,计划系统功效模块以下:q 通知管理模块该模块关键负责信息公布、接收等。q 新闻管理模块该模块关键负责新闻公布、接收等。q 文件传送管理模块该模块关键负责文件传送和接收等。q 交流管理模块该模块关键实现意见反馈、活动投票、短消息服务(局域网)。q 系统维护管理模块部门信息基础设置、职员信息基础设置、投票活动管理设置、系统操作员及权限设置。2.2 系统工作原理网络结构图系统工作原理网络结构图图1所表示。图1 系统工作原理网络结构图2.3 系统功效结构图图2 系统功效结
6、构图3 具体设计3.1 公共模块设计为了节省系统资源,实现代码重用,能够在系统中新建一个Modulel模块。就本系统而言,该模块关键实现数据库安装和共享数据库连接。系统第一次使用时,依据用户设置DataBase.ini配置文件,将数据库文件(db_OA_Data.MDF)和数据库日志文件(db_OA_Log.LDF)自动安装到指定SQL Server数据库服务器上。为了优化ADO+SQL数据库连接,在公共模块(Module1)中建立数据库连接共享字符串。在以后编程中,假如使用对象访问数据库或ADO Data控件访问数据库,则能够直接将数据库共享连接字符串(PublicStr)值赋值给对应Con
7、nectionString属性,从而避免了反复建立数据库连接麻烦,而失去了ADO+SQL优越性能。模块中代码以下:Public PublicStr As StringDim con As New ADODB.Connection, rs As New ADODB.RecordsetDim Str As String, Server As String, uid As String, Dim pwd As StringPublic Sub main() 读取数据库配置文件 Open (App.Path & DataBase.ini) For Input As #1 Line Input #1,
8、Intext Server = Mid(Intext, 10, Len(Trim(Intext) - 9) Line Input #1, Intext uid = Mid(Intext, 7, Len(Trim(Intext) - 6) Line Input #1, Intext pwd = Mid(Intext, 7, Len(Trim(Intext) - 6) Close #1附加数据库 On Error Resume Next con.ConnectionString = Provider=SQLOLEDB.1;Persist Security Info=False;User ID= &
9、 uid & ;PWD= & pwd & ;Initial Catalog=db_OA;Data Source= & Server & con.Open 打开数据库连接 Set rs = New ADODB.Recordset 开始附加数据库 Str = EXEC sp_attach_db dbname = Ndb_SSS, filename1 = N + App.Path + DataBasedb_OA_Data.MDF + , filename2 = N + App.Path + DataBasedb_OA_Log.LDF + rs.Open str, con, 1, adLockOpti
10、mistic Set rs = con.Execute(Str) con.Close 关闭数据库连接 共享连接字符串 PublicStr = Provider=SQLOLEDB.1;Persist Security Info=False;User ID= & uid & ;PWD= & pwd & ;Initial Catalog=db_OA;Data Source= & Server & frm_login.ShowEnd Sub3.2 系统登录设计本系统属于OA办公自动化系统,用户权限分为两种:系统管理员和一般用户。系统登录验证操作员及其密码,关键经过统计集结果(RecordSet)结合I
11、f语句,判定用户输入操作员及密码是否符合数据库中操作员和密码,假如符合则许可登录,并给对应权限,不然提醒用户非法登录。1窗体设计(1)新建一个窗体,将窗体“名称”属性设置为frm_login,BorderStyle属性设置为0-None,设置Picture属性,为窗体添加背景图片。(2)添加Adodc控件,设置名称为adoLogin,Visible属性为False,因为该控件属于ActiveX控件,在使用之前必需从“部件”对话框将其添加到工具箱中。添加方法为:在“工程”/“部件”对话框中勾选“Microsoft Ado Data Controls 6.0(SP4)”列表项。(3)添加2个Tex
12、tBox控件,分别设置名称(Name属性)为Text1和Text2,设置BorderStyle属性为0-None。(4)添加2个Label控件,将名称设置为labLogin和labEnd,BackStyle属性为0-Transparent。系统登录窗体设计结果图3所表示。图3 系统登录窗体设计2代码设计单击名称为labLoginLabel控件用来进行用户安全性检验,假如用户名称和密码正确,则进入系统并分配对应权限。在Label控件名称为labLoginClick事件下,添加代码以下:Private Sub labLogin_Click() adoLogin.ConnectionString =
13、 PublicStr adoLogin.RecordSource = select * from tbOA_user where username= + Text1.Text + and userpwd= + Text2.Text + adoLogin.Refresh If adoLogin.Recordset.RecordCount 0 Then If adoLogin.Recordset.Fields(2).Value = 0 Then frm_mainBefore.Show frm_mainBefore.System.Enabled = False 权限约束 frm_mainBefore
14、.StatusBar1.Panels(1).Text = 操作职员: & Text1.Text 设置控件TreeView树状菜单 Set n1 = frm_mainBefore.TreeView1.Nodes.Add(, tvwChild, 通知管理, 通知管理, 1) Set node1 = frm_mainBefore.TreeView1.Nodes.Add(n1.Index, tvwChild, 公布通知, 公布通知, 1) Set node1 = frm_mainBefore.TreeView1.Nodes.Add(n1.Index, tvwChild, 接收通知, 接收通知, 1)
15、Set node1 = frm_mainBefore.TreeView1.Nodes.Add(n1.Index, tvwChild, 已发通知, 已发通知, 1) Set n2 = frm_mainBefore.TreeView1.Nodes.Add(, tvwChild, 新闻管理, 新闻管理, 1) Set nnode2 = frm_mainBefore.TreeView1.Nodes.Add(n2.Index, tvwChild, 新闻公布, 新闻公布, 1) Set node2 = frm_mainBefore.TreeView1.Nodes.Add(n2.Index, tvwChil
16、d, 接收新闻, 接收新闻, 1) Set node2 = frm_mainBefore.TreeView1.Nodes.Add(n2.Index, tvwChild, 已发新闻, 已发新闻, 1) Set n4 = frm_mainBefore.TreeView1.Nodes.Add(, tvwChild, 文件传送, 文件传送, 1) Set nnode4 = frm_mainBefore.TreeView1.Nodes.Add(n4.Index, tvwChild, 传送文件, 传送文件, 1) Set node4 = frm_mainBefore.TreeView1.Nodes.Add
17、(n4.Index, tvwChild, 接收文件, 接收文件, 1) Set node4 = frm_mainBefore.TreeView1.Nodes.Add(n4.Index, tvwChild, 已发文件, 已发文件, 1) Set n3 = frm_mainBefore.TreeView1.Nodes.Add(, tvwChild, 交流管理, 交流管理, 1) Set node3 = frm_mainBefore.TreeView1.Nodes.Add(n3.Index, tvwChild, 意见箱, 意见箱, 1) Set node3 = frm_mainBefore.Tree
18、View1.Nodes.Add(n3.Index, tvwChild, 投票活动, 投票活动, 1) Set node3 = frm_mainBefore.TreeView1.Nodes.Add(n3.Index, tvwChild, 短消息服务, 短消息服务, 1) Else frm_mainBefore.Show frm_mainBefore.StatusBar1.Panels(1).Text = 操作职员: & Text1.Text 设置控件TreeView树状菜单 Set n1 = frm_mainBefore.TreeView1.Nodes.Add(, tvwChild, 通知管理,
19、 通知管理, 1) Set node1 = frm_mainBefore.TreeView1.Nodes.Add(n1.Index, tvwChild, 公布通知, 公布通知, 1) Set node1 = frm_mainBefore.TreeView1.Nodes.Add(n1.Index, tvwChild, 接收通知, 接收通知, 1) Set node1 = frm_mainBefore.TreeView1.Nodes.Add(n1.Index, tvwChild, 已发通知, 已发通知, 1) Set n2 = frm_mainBefore.TreeView1.Nodes.Add(
20、, tvwChild, 新闻管理, 新闻管理, 1) Set nnode2 = frm_mainBefore.TreeView1.Nodes.Add(n2.Index, tvwChild, 新闻公布, 新闻公布, 1) Set node2 = frm_mainBefore.TreeView1.Nodes.Add(n2.Index, tvwChild, 接收新闻, 接收新闻, 1) Set node2 = frm_mainBefore.TreeView1.Nodes.Add(n2.Index, tvwChild, 已发新闻, 已发新闻, 1) Set n4 = frm_mainBefore.Tr
21、eeView1.Nodes.Add(, tvwChild, 文件传送, 文件传送, 1) Set nnode4 = frm_mainBefore.TreeView1.Nodes.Add(n4.Index, tvwChild, 传送文件, 传送文件, 1) Set node4 = frm_mainBefore.TreeView1.Nodes.Add(n4.Index, tvwChild, 接收文件, 接收文件, 1) Set node4 = frm_mainBefore.TreeView1.Nodes.Add(n4.Index, tvwChild, 已发文件, 已发文件, 1) Set n3 =
22、 frm_mainBefore.TreeView1.Nodes.Add(, tvwChild, 交流管理, 交流管理, 1) Set node3 = frm_mainBefore.TreeView1.Nodes.Add(n3.Index, tvwChild, 意见箱, 意见箱, 1) Set node3 = frm_mainBefore.TreeView1.Nodes.Add(n3.Index, tvwChild, 投票活动, 投票活动, 1) Set node3 = frm_mainBefore.TreeView1.Nodes.Add(n3.Index, tvwChild, 短消息服务, 短
23、消息服务, 1) Set n5 = frm_mainBefore.TreeView1.Nodes.Add(, tvwChild, 系统维护管理, 系统维护管理, 1) Set node5 = frm_mainBefore.TreeView1.Nodes.Add(n5.Index, tvwChild, 人事管理, 人事管理, 1) Set node5 = frm_mainBefore.TreeView1.Nodes.Add(n5.Index, tvwChild, 投票管理, 投票管理, 1) Set node5 = frm_mainBefore.TreeView1.Nodes.Add(n5.In
24、dex, tvwChild, 意见箱管理, 意见箱管理, 1) Set node5 = frm_mainBefore.TreeView1.Nodes.Add(n5.Index, tvwChild, 系统设置, 系统设置, 1) End If Unload Me End IfEnd Sub3.3 主界面设计主界面关键包含菜单、树状菜单(TreeView控件实现)、状态栏和显示OA办公系统最新新闻和最新通知。界面设计简单明了,为用户提供便捷访问路径,把部分含有共性命令集中于一个简单菜单之下。状态栏将显示系统运行时间、企业信息和操作员信息,其中状态栏上操作员信息关键经过“系统登录窗体”中“登录操作员
25、”项传输而得到。主界面运行结果图4所表示。图4 主界面1窗体设计(1)新建1个窗体,将窗体“名称”属性设置为frm_mainBefore,Caption属性为“OA办公自动化系统”,MaxButton属性为False,设置Picture属性,为窗体添加背景图片。(2)为窗体设计菜单。(3)添加ImageList控件,使用默认名称,该控件属于ActiveX控件,在使用之前必需从“部件”对话框将其添加到工具箱中。添加方法为:在“工程”/“部件”对话框中勾选“Microsoft Windows Common Controls 6.0(SP6)”列表项。(4)添加MSHFlexGrid控件,该控件属于
26、ActiveX控件,使用之前必需将MSHFlexGrid控件添加到工具箱中,添加方法为:在“工程”/“部件”对话框中勾选“Microsoft Hierarchical FlexGrid Control 6.0”列表,添加2个MSHFlexGrid控件,名称分别为MSHFlexGrid1和MSHFlexGrid2,二者属性完全相同,关键设置控件背景色、前景色及表格颜色,方法为:在控件上单击鼠标右键选择“属性”菜单,弹出“属性页”选择“颜色”选项卡设置控件相关颜色,图5所表示。图5 设置MSHFlexGrid控件颜色属性(5)添加StatusBar(状态栏)控件,关键用来显示系统操作员信息、系统时
27、间及企业名称和网站。该控件属于ActiveX控件,添加ImageList控件时已经将该控件添加到工具箱中。StatusBar控件名称为默认名,单击鼠标右键打开“属性页”,为StatusBar控件添加3个窗格,第1个窗格显示系统操作员、第2个窗格显示系统日期、第3个窗格显示企业名称和网址,该控件属性设置方法在前面章节中已经具体讲解过了,这里就不做介绍了。2程序代码设计当窗体激活时,将TreeView控件中全部节点展开。在Form窗体Activate事件下添加以下代码:Private Sub Form_Activate() For i = 1 To TreeView1.Nodes.Count 展开
28、全部节点 TreeView1.Nodes(i).Expanded = True Next iEnd Sub单击树状菜单中菜单,依据所选择菜单显示对应窗体。在TreeView控件NodeClick事件下添加代码以下:Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node) If TreeView1.SelectedItem.Key = 公布通知 Then frmNotice_issue.Show If TreeView1.SelectedItem.Key = 接收通知 Then frmNotice_incept.Show If
29、 TreeView1.SelectedItem.Key = 已发通知 Then frmNotice_toVoice.Show If TreeView1.SelectedItem.Key = 新闻公布 Then frmNews_issue.Show If TreeView1.SelectedItem.Key = 接收新闻 Then frmNews_incept.Show If TreeView1.SelectedItem.Key = 已发新闻 Then frmNews_toNews.Show If TreeView1.SelectedItem.Key = 新闻公布 Then frmNews_is
30、sue.Show If TreeView1.SelectedItem.Key = 接收新闻 Then frmNews_incept.Show If TreeView1.SelectedItem.Key = 已发新闻 Then frmNews_toNews.Show If TreeView1.SelectedItem.Key = 传送文件 Then frmFile.Show If TreeView1.SelectedItem.Key = 接收文件 Then frmFile_incept.Show If TreeView1.SelectedItem.Key = 已发文件 Then frmFile_
31、toFile.Show If TreeView1.SelectedItem.Key = 意见箱 Then frmAC_idear.Show If TreeView1.SelectedItem.Key = 投票活动 Then frmAC_vote.Show If TreeView1.SelectedItem.Key = 短消息服务 Then frmAC_QQ.Show If TreeView1.SelectedItem.Key = 人事管理 Then frmSys_person.Show If TreeView1.SelectedItem.Key = 投票管理 Then frmSys_vote.
32、Show If TreeView1.SelectedItem.Key = 意见箱管理 Then frmSys_idear.Show If TreeView1.SelectedItem.Key = 系统设置 Then frmSys_sys.ShowEnd Sub在Form窗体装载过程中,将最新新闻和通知显示在MSHFlexGrid表格中。Private Sub Form_Load()/设置 NEWS adoNews.ConnectionString = PublicStr adoNews.RecordSource = SELECT news_date,news_text FROM tbOA_ne
33、ws WHERE (news_acceptPerson = & frm_login.Text1 & ) ORDER BY news_date DESC adoNews.Refresh Set MSHFlexGrid2.DataSource = adoNews Call setNewsDataGrid_Caption /设置通知 adoNotice.ConnectionString = PublicStr adoNotice.RecordSource = SELECT notice_date,notice_person,notice_acceptDept,notice_acceptPerson,
34、notice_text FROM tbOA_notice WHERE (notice_acceptPerson = & frm_login.Text1 & ) ORDER BY notice_date DESC adoNotice.Refresh Set MSHFlexGrid1.DataSource = adoNotice Call setNoticeDataGrid_CaptionEnd Sub每隔一分多钟就更新一次最新新闻和最新通知。在Timer控件Timer事件下添加以下代码:Private Sub Timer1_Timer()/设置 NEWS adoNews.RecordSource
35、 = SELECT news_date,news_text FROM tbOA_news WHERE (news_acceptPerson = & Mid(StatusBar1.Panels(1).Text, 6, Len(StatusBar1.Panels(1).Text) - 5) & ) ORDER BY news_date DESC adoNews.Refresh Call setNewsDataGrid_Caption /设置通知adoNotice.RecordSource = SELECT notice_date,notice_person,notice_acceptDept,no
36、tice_acceptPerson,notice_text FROM tbOA_notice WHERE (notice_acceptPerson = & Mid(StatusBar1.Panels(1).Text, 6, Len(StatusBar1.Panels(1).Text) - 5) & ) ORDER BY notice_date DESC adoNotice.Refresh Call setNoticeDataGrid_Caption 调用自定义过程End Sub自定义过程setNewsDataGrid_Caption()用来初始化新闻MSHFlexGrid2控件列标题和表格宽度
37、。Sub setNewsDataGrid_Caption()初始化行序号 For i = 1 To adoNews.Recordset.RecordCount MSHFlexGrid2.TextMatrix(i, 0) = iNext初始化表格标题和列宽 MSHFlexGrid2.TextMatrix(0, 0) = 序号: MSHFlexGrid2.TextMatrix(0, 1) = 公布日期 MSHFlexGrid2.TextMatrix(0, 2) = 新闻内容: MSHFlexGrid2.ColWidth(0) = 400 MSHFlexGrid2.ColWidth(1) = 100
38、0: MSHFlexGrid2.ColWidth(2) = 6700End Sub3.4 新闻管理新闻管理包含3个部分:新闻公布、新闻接收、已发新闻。其中新闻公布用来将新闻公布给某部门中某人;新闻接收用来接收其它职员公布新闻;已发新闻用来浏览将新闻公布给其它职员新闻。下面笔者分别讲解新闻公布、新闻接收和已发新闻开发过程。1新闻公布新闻管理窗体设计结果图6所表示。图6 新闻公布设计图(1)新建1个窗体,设置窗体“名称”属性为frmNews_issue、Caption属性为“新闻公布”,MaxButton属性为False。(2)在窗体中添加4个Label控件、2个Combo控件、3个ADO控件、2
39、个TextBox控件和2个CommandButton控件。(3)添加DTPicker控件,该控件属于ActiveX控件,在使用之前必需从“部件”对话框中添加到工具箱中。添加方法为:在“工程”/“部件”对话框中勾选“Microsoft Windows Common Controls 2.6.0”列表项,添加DTPicker控件后,其名称为默认DTPicker1。(4)程序代码。新闻公布就是将要公布新闻按部门、职员和新闻数据存放到tbOA_news数据表中。在【公布新闻】按钮Click事件下添加以下代码:Private Sub cmdSave_Click() adoNews.Recordset.A
40、ddNew adoNews.Recordset.Fields(1).Value = DTPicker1.ValueadoNews.Recordset.Fields(2).Value = Text2.Text adoNews.Recordset.Fields(3).Value = Combo1.Text adoNews.Recordset.Fields(4).Value = Combo2.Text adoNews.Recordset.Fields(5).Value = 0 adoNews.Recordset.Fields(6).Value = Text1.Text adoNews.Records
41、et.Update MsgBox 通知公布成功!, vbInformationEnd SubForm窗体载入时,关键实现以下功效:(1)建立adoNews控件和adoDept控件数据库连接。(2)为Combo1控件中添加部门名称数据。(3)获取系统操作职员姓名,并经过Text2控件显示出来。(4)使DTPicker1控件显示系统目前日期。Form窗体Load事件过程中代码以下:Private Sub Form_Load() adoNews.ConnectionString = PublicStr 建立数据库连接 adoNews.RecordSource = select * from tbOA
42、_news 检索数据表数据 adoNews.Refresh adoDept.ConnectionString = PublicStr adoDept.RecordSource = select * from tbOA_dept adoDept.Refresh For i = 0 To adoDept.Recordset.RecordCount 1 将全部部门名称添加到Combo1中 Combo1.AddItem adoDept.Recordset.Fields(1).Value adoDept.Recordset.MoveNext Next i Text2.Text = Mid(frm_mai
43、nBefore.StatusBar1.Panels(1).Text, 6, Len(frm_mainBefore.StatusBar1.Panels(1).Text) - 5) 获取操作员姓名 DTPicker1.Value = Date 显示系统目前日期End Sub在Combo1控件中选择不一样部门,检索该部门全部职员并将其添加到Combo2控件中。Combo1控件Click事件代码以下:Private Sub Combo1_Click() Combo2.Clear adoEmployee.ConnectionString = PublicStr adoEmployee.RecordSou
44、rce = select * from tbOA_employee adoEmployee.Refresh For i = 0 To adoEmployee.Recordset.RecordCount - 1 Combo2.AddItem adoEmployee.Recordset.Fields(1).Value adoEmployee.Recordset.MoveNext Next iEnd Sub2新闻接收新闻接收窗体设计结果图7所表示。图7 新闻接收设计图(1)新建一个窗体,设置窗体“名称”属性为frmNews_incept、Caption属性为“新闻接收”、MaxButton属性为False。(2)添加4个ComandButton控件和1个Adodc控件。(3)添加2个DTPicker控件,名称分别为DTPicker1和DTPicker2。(4)添加DataGrid控件,使用默认名称。(5)程序代码。在窗体装载过程中,将adoNews控件查询数据经过DataGrid控件显示,代码以下:Private Su