毕业员工信息管理
摘要
本文通过用VB6.0编写员工信息管理系统,利用软件工程原理,采用面向对象的编程方法,其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面,实现了员工信息管理的自动化和信息化.
本文还简单介绍了VB6.0软件的界面及操作方法。简要介绍了窗体的制作过程,程序的编写,添加,最后的编译过程。并且叙述了作者在软件开发过程中的心得体会。
关键词:员工信息管理数据库统计
目录
第一章引言3
第二章系统分析4
2.1开发背景4
2.2需求分析4
2.3概要5
2.4系统要求5
第三章开发方法8
3.1系统开发方法概述8
3.2结构化生命周期法简介8
3.3快速原型法简介9
3.4本系统开发方法的选择10
第四章开发平台和工具11
4.1开发平台的选择11
4.2开发工具的选择11
4.2.1开发语言介绍11
第五章系统规划和分析12
5.1系统的可行性分析12
5.2系统的详细调查12
5.3系统逻辑模型的提出13
第六章系统设计13
6.1系统流程图16
6.2数据库设计16
6.3系统主界面设计.......…………………………………………….19
6.4登陆窗体设计.......……………………………………………….19
6.5各主要模块设计.19
6.5.1基础设置模块设计.......................................................24
6.5.2员工管理模块设计……………………………………….27
6.5.3请假管理模块设计……………………………………….29
6.5.4系统帮助模块设计……………………………….………31
第七章编译生成应用程序.…………………………………………...37
设计小结………………………………………………………..39参考文献………………………………………………………...40
第一章引言
本软件使用MicrosoftBasic6.0进行编写。数据库技术的产生与发展源于对于数据的组织和管理。数据库技术是数据管理的技术,它随着数据管理任务的需要而产生于20世纪60年代中期。这是一门综合性技术,涉及操作系统,数据结构,算法设计和程序设计等知识。数据库技术的基本思想是对数据实行集中,统一,独立的管理,用户可以最大限度的共享数据资源。
数据库系统实际上是一个应用系统,它是在计算机硬,软件系统支持下,由用户,数据库管理系统,存储在存储设备上的数据和数据库应用程序构成的数据处理系统。数据库系统是由数据,数据库管理系统,应用程序,用户组成。
数据库的特点:1.实现数据共享2.实现数据独立3.减少了数据冗余度4.避免了数据不一致性5.加强了对数据的保护。
数据库应用系统(DATABASEAPPLICATIONSYSTEMSDBAS)
1.管理信息系统
2.开放式信息服务系统
一个数据库应用系统通常是由数据库和应用程序两部分组成,它们是在数据库管理系统支持下设计和开发出来的。
第二章系统分析
2.1开发背景
随着我国市场经济的快速发展和信息化水平的不断提高,如何利用先进的管理手段,提高企业员工信息管理的水平,是当今社会所面临的一个课题。提高企业管理水平,必须全方位地提高企业管理意识。只有高标准、高质量的管理才能满足企业的发展需求。面对信息时代的挑战,利用高科技手段来提高企业员工信息管理无疑是一条行之有效的途径。在某种意义上,信息与科技在企业管理与现代化建设中显现出越来越重要的地位。员工管理方面的信息化与科学化,已成为现代化生活水平步入高台阶的重要标志。
2.2需求分析
利用计算机实现员工信息管理势在必行。对于企业来说,利用计算机支持企业高效率完成员工信息管理的日常事务,是适应现代企业制度要求、推动企业劳动型管理走向科学化、规范化的必要条件;而员工信息管理是一项琐碎、复杂而又十分细致的工作,员工信息录入,员工信息管理,信息查询,请假等管理,一般不允许出错,如果实行手工操作,须手工填制大量的表格,这就会耗费工作人员大量的时间和精力,计算机进行这项工作的管理,不仅能够保证各项信息准确无误、快速输出,同时计算机具有手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高企业管理的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。
2.3概要
VisualBasic是美国微软公司的第一个编程工具和系统开发的第一个产品,VisualBasic以优良的性能、较强的系统开发功能、完美的视觉界面和简单易学的特点,已经赢得了全世界广大用户的偏爱。VisualBasic的编程环境包含了快速有效的开发功能,尤其是数据窗口这一方便而简洁操纵数据库的智能化对象,使系统的开发更人性化,操作更简便。
作为管理信息系统的开发,VisualBasic是一个非常理想选择。VisualBasic是一种可视化的、面对对象和条用事件驱动方式的结构化高级程序设计,可用于开发Windows环境下的种类应用程序。它简单易学、效率高,且功能强大,可以与Windows的专业开发工具SDK相媲美,而且程序开发人员不必具有C/C++编程基础。在VisualBasic环境下,利用事件驱动的编程机制、新颖易用的可视化设计工具,使用Windows内部的应用程序接口(API)函数,以及动态链接库(DLL)、动态数据交换(DDE)、对象的链接与嵌入(OLE)、开放式数据访问(ODBC)等技术,可以高效、快速地开发出Windows环境下功能强大、图形界面丰富的应用软件系统。
2.4系统要求
一、硬件要求:
1486/DX66Mhz以上CPU
2内存16M以上(使用WindowsNT需要32M以上内存)
3硬盘容量1GB以上(典型安装需要128MB硬盘空间,完全安装须要147MB硬盘空间,外加Microsoft开发者文档67MB硬盘空间)
4EGA以上分辨率的显示器.
5一个CD-ROM驱动器
6鼠标或其它定点设备
二、软件要求
1操作系统应使用MicrosoftWindows95及以上版本,或者使用MicrosoftWindowsNT3.51或者更高版本.
2安装有IE4.0或以上版本的浏览器.
第三章系统开发方法
3.1系统开发方法概述
建立一个管理信息系统,是一项复杂的软件工程的实施。近30多年来,软件工程发展成为新科学,至今已经成为IT产业的重要支柱。一开始,人们往往使用手工作坊式的软件开发方法,靠个人的力量编写各种小型程序;但是随着计算机硬件技术的飞速发展,计算机软件在各个领域中的作用日益突出,那种多年来被人们沿用的手工作坊式的开发方法,已经在软件产品的质量、成本及开发时间等方面无法满足需求。
3.2结构化生命周期法简介
结构化生命周期法是一种传统的管理信息系统开发方法,其基本思想是把整个系统开发过程分成若干个阶段,每个阶段进行若干活动,每项活动应用一系列标准、规范、方法和技术,完成一个或多个任务,形成符合给定规范的产品。
采用结构化生命周期法开发管理信息系统时,应遵循的主要原则:
(一)用户参与的原则
(二)“先逻辑后物理”的原则
(三)“自顶向下”的原则
(四)工作成果描述(主要指文档)标准化的原则
其具体开发步骤可分为以下四步:
(一)系统规划
(二)系统开发
1、系统分析
.系统初步调查
.系统可行性研究
.现行系统的详细调查
.新系统逻辑方案的提出
2、系统设计
.系统总体结构设计
.系统总体功能设计
.系统总体物理结构设计
.系统详细设计
.数据库设计
.代码设计
.输入输出设计
3、系统实施
.程序设计
.系统测试
(三)系统的运行及维护
(四)系统评价
3.3快速原型法简介
快速原型法是80年展起来的,旨在缩短开发周期,提高开发效率和用户对系统的满意程度。其基本思想是在系统开发的初期,尽快构造出系统的原型,使用户能及早地运行这个系统原型,通过使用它、熟悉它,受到启发并取得经验,然后对系统的目标和功能提出更精确、具体的要求,研制人员据此逐渐修改和完善原型,使它满足用户的需求,最后完成系统的开发。该方法大大提高了系统开发效率,弥补了结构化生命周期法开发时间长的缺陷。
通常采用原型法需以下四个阶段:
(一)明确用户的基本要求
(二)研制系统的原型
(三)使用、评价系统原型
(四)修改和完善原型
3.4本系统开发方法的选择
基于以上开发方法的优劣和本系统的实际情况,本系统总体上采用结构化生命周期法进行系统规则、系统分析和系统设计,但在系统实施阶段采用原型法。
第四章开发平台和开发工具
开发平台的选择
考虑到本系统的性能要求,和现有的条件,我们选择了WINDOWS2000中文版作为开发、测试和运行的平台。因为WINDOWS操作系统是目前应用最广的操作系统,它以全新的图形界面,简单快捷的操作方式,支持多媒体功能等特点而成为软件发展的流行趋势,选用它作为开发平台,易于功能的扩展和软件升级。
4.2开发工具的选择
针对目前世界上流行的大量软件和开发工具,经过认真分析其优缺点,结合员工信息管理系统的需要和目前的硬件环境,我们选用微软WINDOWS平台下的VisualBasic6.0(简写为VB6.0)作为软件开发工具。
4.2.1开发语言介绍
现在,市场上可以选购的应用开发产品很多,流行的也有数十种。目前在我国市场上最为流行、使用最多、最为先进的可用作做作企业级开发工具的产品有:
Microsoft公司的VisualBasic
Microsoft公司的VisualC
Borland公司的Delphi
Powersoft公司的PowerBulider
Java等等
在目前市场上这些众多的程序开发工具中,有些强调编程语言的弹性与执行效率;有些则偏重于可视化程序开发工具所带来的便利性与效率的得高,各有各的优点和特色,也满足了不同用户的需求。然而,语言的弹性和工具的便利性是密不可分的,只有便利的工具,却没有弹性的语言作支持,许多特殊化的处理动作必需要耗费数倍的工夫来处理,使得原来所标榜的效率提高的优点失去了作用;相反,如果只强调编程语言的弹性,却没有便利的工具作配合,会使一些即使非常简单的界面处理动作,也会严重地浪费程序设计师的宝贵时间。
作为数据库系统的开发,VisualBasic是一个非常理想选择。数据库是MIS中的重要支持技术,在MIS开发过程中,如何选择数据库管理是一个重要的问题,目前,数据库产品较多,每种产品都具有各自的特点和适用范围,因此,在选择数据库时,应考虑数据库应用的特点及适用范围,本系统选用的数据库语言VisualBasic语言,该开发工具具有很多长处:
VisualBasic是一种可视化的、面对对象和条用事件驱动方式的结构化高级程序设计,可用于开发Windows环境下的种类应用程序。它简单易学、效率高,且功能强大,可以与Windows的专业开发工具SDK相媲美,而且程序开发人员不必具有C/C++编程基础。在VisualBasic环境下,利用事件驱动的编程机制、新颖易用的可视化设计工具,使用Windows内部的应用程序接口(API)函数,以及动态链接库(DLL)、动态数据交换(DDE)、对象的链接与嵌入(OLE)、开放式数据访问(ODBC)等技术,可以高效、快速地开发出Windows环境下功能强大、图形界面丰富的应用软件系统。
总的来说,VisualBasic具有以下特点:
可视化编程:
用传统程序设计语言设计程序时,都是通过编写程序代码来设计用户界面,在设计过程中看不到界面的实际显示效果,必须编译后运行程序才能观察。如果对界面的效果不满意,还要回到程序中修改。有时候,这种编程-编译-修改的操作可能要反复多次,大大影响了软件开发效率。VisualBasic提供了可视化设计工具,把Windows界面设计的复杂性“封装”起来,开发人员不必为界面设计而编写大量程序代码。只需要按设计要求的屏幕布局,用系统提供的工具,在屏幕上画出各种“部件”,即图形对象,并设置这些图形对象的属性。VisualBasic自动产生界面设计代码,程序设计人员只需要编写实现程序功能的那部分代码,从而可以大大提高程序设计的效率。
面向对象的程序设计
4.0版以后的VisualBasic支持面向对象的程序设计,但它与一般的面向对象的程序设计语言(C++)不完全相同。在一般的面向对象程序设计语言中,对象由程序代码和数据组成,是抽象的概念;而VisualBasic则是应用面向对象的程序设计方法(OOP),把程序和数据封装起来作为一个对象,并为每个对象赋予应有的属性,使对象成为实在的东西。在设计对象时,不必编写建立和描述每个对象的程序代码,而是用工具画在界面上,VisualBasic自动生成对象的程序代码并封装起来。每个对象以图形方式显示在界面上,都是可视的。
结构化程序设计语言
VisualBasic是在BASIC语言的基础上发展起来的,具有高级程序设计语言的语句结构,接近于自然语言和人类的逻辑思维方式。VisualBasic语句简单易懂,其编辑器支持彩色代码,可自动进行语法错误检查,同时具有功能强大且使用灵活的调试器和编译器。
VisualBasic是解释型语言,在输入代码的同时,解释系统将高级语言分解翻译成计算机可以识别的机器指令,并判断每个语句的语法错误。在设计VisualBasic程序的过程中,随时可以运行程序,而在整个程序设计好之后,可以编译生成可执行文件(.EXE),脱离VisualBasic环境,直接在Windows环境下运行。
事件驱动编程机制
VisualBasic通过事件来执行对象的操作。一个对象可能会产生多个事件,每个事件都可以通过一段程序来响应。例如,命令按钮是一个对象,当用户单击该按钮时,将产生一个“单击”(CLICK)事件,而在产生该事件时将执行一段程序,用来实现指定的操作。
在用VisualBasic设计大型应用软件时,不必建立具有明显开始和结束的程序,而是编写若干个微小的子程序,即过程。这些过程分别面向不同的对象,由用户操作引发某个事件来驱动完成某种特定的功能,或者由事件驱动程序调用通用过程来执行指定的操作,这样可以方便编程人员,提高效率。
访问数据库
VisualBasic具有强大的数据库管理功能,利用数据控件和数据库管理窗口,可以直接建立或处理MicrosoftAccess格式的数据库,并提供了强大的数据存储和检索功能。同时,VisualBasic还能直接编辑和访问其他外部数据库,如dBASE,FoxPro,Paradox等,这些数据库格式都可以用VisualBasic编辑和处理。
VisualBasic提供开放式数据连接,即ODBC功能,可通过直接访问或建立连接的方式使用并操作后台大型网络数据库,如SQLServer,Oracle等。在应用程序中,可以使用结构化查询语言SQL数据标准,直接访问服务器上的数据库,并提供了简单的面向对象的库操作指令和多用户数据库访问的加锁机制和网络数据库的SQL的编程技术,为单机上运行的数据库提供了SQL网络接口,以便在分布式环境中快速而有效地实现客户/服务器(client/server)方案。
动态数据交换(DDE)
利用动态数据交换(DynamicDataExchange)技术,可以把一种应用程序中的数据动态地链接到另一种应用程序中,使两种完全不同的应用程序建立起一条动态数据链路。当原始数据变化时,可以自动更新链接的数据。VisualBasic提供了动态数据交换的编程技术,可以在应用程序中与其他Windows应用程序建立动态数据交换,在不同的应用程序之间进行通信。
对象的链接与嵌入(OLE)
对象的链接与嵌入(OLE)将每个应用程序都看作是一个对象(object),将不同的对象链接(link)起来,再嵌入(embed)某个应用程序中,从而可以得到具有声音、影像、图像、动画、文字等各种信息的集合式的文件。OLE技术是Microsoft公司对象技术的战略,它把多个应用程序合为一体,将每个应用程序看作是一个对象进行链接和嵌入,是一种应用程序一体化的技术。利用OLE技术,可以方便地建立复合式文档(compounddocument),这种文档由来自多个不同应用程序的对象组成,文档中的每个对象都与原来的应用程序相联系,并可执行与原来应用程序完全相同的操作。
动态链接库(DLL)
VisualBasic是一种高级程序设计语言,不具备低级语言的功能,对访问机器硬件的操作不太容易实现。但它可以通过动态链接库技术将C/C++或汇编语言编写的程序加入到VisualBasic应用程序中,可以像调用内部函数一样调用其他语言编写的函数。此外,通过动态链接库,还可以调用Windows应用程序接口(API)函数,实现SDK所具有的功能
第五章系统的规划与分析
5.1系统的可行性分析
经济可行性分析
本系统开发简单但要耗去一定的时间,所用的开发工具和软件都差不多是免费的。而且,由于系统能够在未来较长的一段时期内稳定地发挥作用,这对于企业的办公自动化管理,节省企业的人力、物力资源等都有很大的帮助。由此可见在,开发此系统在经济上是完全可行的。
2.1.2操作可行性分析
如今的计算机已经走进千家万户,硬件成本的下降,导致计算机购买成本的降低.我的这套系统是利用自己的计算机加微软的集成开发环境MicrosoftVisualBasic6.0作为软件的开发平台,使开发出来的系统有友好的用户界面、有良好的安全性设置、有详细的操作说明书,这样更使各类用户很快地掌握系统的使用方法,操作友好因此在操作上是可行的.
2.1.3技术可行性分析
从目前IT业界比较流行的数据库开发、管理软件来看,对于比较简单的中小型数据库,VB和Windows2000Server以及MicrosoftACCESS2000的结合无疑是在实际应用中较为成功的一种解决方案。为用户提供了业界软件开发一直坚持的非常友好、操作简单的用户界面、完善强大的数据库操作功能和简洁明了的数据库接口。所以技术实行起来相对会容易。
2.2现有系统的分析
有关员工管理系统的软件市面上有不少,企业的员工也试用过一些,但总觉得不是很好用,不能完全满足我们的要求,所以都放弃用这些软件了,改为每次输入数据后,用手工更改数据库,随着企业的发展,员工数据量越来越大,用手工操作就很麻烦了,所以,迫切希望有一套完全适合企业员工信息管理应用的软件,以减轻公司员工的工作负担。
另一方面由于这类软件大多数是单机版的,现在也有不少是网络版的,但大部份都是在本地网络上运行的。而管理业务人员是在外面跑业务,想知道某员工的最新情况,都要打电话回公司问,这就造成很大的不便。因此系统的开发方向应当是面向网络版的员工信息管理系统开发.这点在今后的学习中将不断完善.
2.3系统的安全性分析
安全系统的需求定义:
1)系统提供用户登录功能(进行用户身份验证),并且用户名和用户编号是唯一的。用户在登录界面上填写任意的用户名和用户密码(中文或英文);系统提供登录过程中的出错处理机制和操作成功处理机制。
2)系统对非法用户具有警告功能,例:一用户表中不存在的用户企图登录系统,系统应该要求用户输入合法用户名和用户密码,并警告用户的操作。
5.2系统的详细调查
我选择做《员工信息管理系统》的目标是:应用于某企业进行员工信息管理,使其拥有一个可操作的业务平台,提高员工管理水平,挖掘潜在资源(如客户资源,降低费用,节约成本等)。当然,如果稍加改动,也许还会适合其他行业使用。
具体为:
1、要用户界面要友好,使用方便,容错能力强,适应各种水平的用户。
2、系统安全性要高,需要有密码保护
3、能大量减少不必要的资源,善用现有资源来开发。
5.3系统逻辑模型的提出
为了实现管理信息系统的计算机化,仅仅用文字来描述信息的流动和存储还远远不够,还要进一步调查分析舍去物质流,抽象出信息流,绘制出数据流程图,并对各种数据的属性和各项处理功能进行详细分析。系统分析的主要成果是系统的逻辑模型。本系统主要是以数据流图、数据字典和E-R图为主要描述工具来勾画系统的概貌。
数据流图(DFD,dataflowdiagram)是描述数据处理过程的有力工具。数据流图从数据传递和加工的角度,以图形的方式刻画数据流从输入到输出的移动变换过程。
数据流图的基本图形元素有4种:
为了使数据流图便于在计算机上输入和输出,免去画曲线、斜线和圆的因难,现在将会用另一种比较合理及更清晰的方法进行分析。
5.3.1数据词典
数据词典(DataDictionary,DD)是结构化分析方法的另一个工具,它与数据流图配合,能清楚地表达数据处理的要求。数据流图给出系统组成及其内部各元素相互间的关系,但未说明数据元素的具体含意。数据词典的任务是对于数据流图中出现的所有命名元素,包括数据流、加工、数据文件,以及数据的源、汇点等,在数据词典中作为一个词条加以定义,使得每一个图形元素的名字都有一个确切的解释。
首先说明各符号的代表的意义:
⊿=被定义为;
⊿+与;(如,x=a+b,表示x由a和b组成)
⊿[...|...]或;(如,x=[a,b],x=[a|b],表示x由a或由b组成)
⊿{...}重复;(如,x={a},表示x由0个或多个a组成)
如列举用户登录模块的定义如下:
用户登录模块
◎用户登录的定义格式:
用户名=[{字母},{数字}]
用户=管理员
密码=[{字母},{数字}]
用户验证表=用户名+密码
另一种方式是以E-R图来描述数据之间的关联.
如系统用户表的E-R图如下:
系统用户表E-R图
第六章系统的设计
6.1系统流程图
6.2数据库的设计
通过对该系统的研究,将系统数据Employeemanage分为以下几个表.DepartList,Edulevel,Employees,JobList,LeavelList,LeavelStatus,LeavelType,MarrageStatus,OperatorList,Plitics,TitalList等几个表.各表的具体设计结构如下:
DepartList表
Edulevel表:
Employees表:
JobList表:
LeavelList表:
LeavelStatus表
LeavelType表:
MarrageStatus表:
OperatorList表
Plitics表
TitalList表
6.3系统主界面的设计
其系统主界面设计运行效果图如下:
6.4登录窗体的设计
其运行效果图如下:
其具体的设计如下:
新建一个窗体.在窗体上放上二个label控件,一个TextBox控件,一个Combo1控件,二个CommandButton控件.其属性的设置比较简单,请参照上面的窗体中的文字显视.我们具体分析一下确定按钮的源码,如下:
PrivateSubcmdOK_Click()
DimstrSqlAsString
strSql="Oper_ID="&"''''"&dcmbOperName.BoundText&"''''"
IfNot(rctOperatorList.EOFAndrctOperatorList.BOF)Then
rctOperatorList.Find(strSql)
IfNot(rctOperatorList.EOFOrrctOperatorList.BOF)Then
IfTrim(rctOperatorList.Fields("Oper_Pass"))=Trim(txtOperPass.Text)Then
OperaterName=Trim(dcmbOperName.Text)''''记录当前用户
frmMain.Show''''显示主窗体
UnloadMe
ExitSub
Else
logintestCount=logintestCount+1
IflogintestCount>=3Then
MsgBox"您已经登录三次都失败,系统关闭",vbInformation+vbOKOnly,"非法用户"
UnloadMe
ExitSub
Else
txtOperPass.SetFocus
EndIf
EndIf
Else
logintestCount=logintestCount+1
IflogintestCount>=3Then
MsgBox"您已经登录三次都失败,系统关闭",vbInformation+vbOKOnly,"非法用户"
UnloadMe
ExitSub
Else
txtOperPass.SetFocus
EndIf
EndIf
Else
MsgBox"数据库中没有操作用户数据",vbCritical+vbOKOnly,"系统错误"
UnloadMe
ExitSub
EndIf
EndSub
6.5各主要模块的设计
基础设置模块的设计
1.基础单元设置
其窗体的命令按钮源码实现如下:
增加按钮的源码:
PrivateSubtblTitel_ButtonClick(ByValButtonAsMSComctlLib.Button)
SelectCaseButton.Key
Case"add"
flexTitel.Row=flexTitel.Rows-1''''移到最后一行
flexTitel.Col=0''''称到最后一行的第一列
flexTitel.RowSel=flexTitel.Rows-1''''选定一行
flexTitel.ColSel=flexTitel.Cols-1''''选定所有列
IfflexTitel.Rows>7Then
flexTitel.TopRow=flexTitel.Rows-7
EndIf
tblTitel.Buttons("delete").Enabled=False
tblTitel.Buttons("add").Enabled=False
rctTitelList.AddNew
flexTitel.Enabled=False
txtTitelId.SetFocus
保存按钮的源码如下:
PrivateSubIniGrid(ByValflexGridAsMSHFlexGrid)
flexGrid.Clear
WithflexGrid
.Cols=3
.Rows=2
.FixedCols=0
.FixedRows=1
.SelectionMode=flexSelectionByRow
.TextMatrix(0,1)="编号"
SelectCase.Name
Case"flexDepart"
.TextMatrix(0,2)="部门名称"
Case"flexEdu"
.TextMatrix(0,2)="学历名称"
Case"flexJob"
.TextMatrix(0,2)="职务名称"
Case"flexTitel"
.TextMatrix(0,2)="职称名称"
Case"flexPli"
.TextMatrix(0,2)="政治面貌"
Case"flexLt"
.TextMatrix(0,2)="请假类型"
Case"flexLs"
.TextMatrix(0,2)="销假标志"
Case"flexMs"
.TextMatrix(0,2)="婚姻状况"
EndSelect
.ScrollBars=flexScrollBarVertical
.GridLines=flexGridNone
.GridLinesFixed=flexGridNone
''''.AllowBigSelection=True
.AllowUserResizing=flexResizeNone.ColWidth(0)=1
.ColWidth(1)=1000
.ColWidth(2)=5410
.ColAlignment(1)=3
.ColAlignment(2)=0
.ColAlignmentFixed(1)=3
.FillStyle=flexFillSingle
.ScrollTrack=True
.Row=1
.Col=0
.RowSel=1
.ColSel=.Cols-1EndWith
EndSub
PrivateSubshowdata(ByValRecordsetAsADODB.Recordset,ByValflexGridAsMSHFlexGrid)
DimiAsInteger
DimjAsInteger
IfRecordset.RecordCount>0Then
Recordset.MoveFirst
WithflexGrid.Row=1
WhileNotRecordset.EOF
.Rows=.Rows+1
Fori=1ToRecordset.Fields.Count
.Col=i
If(.RowMod2)=0Then
.CellBackColor=&HF4D3A6
Else
.CellBackColor=vbWhite
EndIf
.Text=Recordset.Fields(i-1)Nexti
.Row=.Row+1
Recordset.MoveNext
Wend
''''.Col=1.Row=1
.Col=0
.RowSel=1
.ColSel=.Cols-1
''''.Row=1EndWith
EndIf
EndSub
PrivateSubIniGridstyle()
EndSub
PrivateSubGetRecordIdName(ByValflexAsMSHFlexGrid,lngRecordIdAsVariant,strRecordNameAsString)
Ifflex.Row<>0Then
Ifflex.TextMatrix(flex.Row,1)<>EmptyThen
lngRecordId=flex.TextMatrix(flex.Row,1)
strRecordName=flex.TextMatrix(flex.Row,2)
Else
lngRecordId=-1
strRecordName=Empty
EndIf
EndIf
EndSub
PrivateSubPicture1_Click()
EndSub
PrivateFunctionSavetoRecords(ByValrctSaveAsADODB.Recordset,ByValfirstField_valueAsVariant,ByValsecondField_valueAsString)AsBoolean
OnErrorGoToSave_Error
rctSave.Fields(0).Value=firstField_value
rctSave.Fields(1).Value=secondField_value
rctSave.Update
SavetoRecords=True
ExitFunction
Save_Error:
IfErr.Number<>0Then
rctSave.CancelUpdate
SavetoRecords=False
MsgBox"错误代码:"&Err.Number&vbCrLf&_
"错误描述:"&Err.Description,vbCritical+vbOKOnly,"保存记录失败"
Else
SavetoRecords=True
EndIf
EndFunction
删除按钮的代码描述:
PublicFunctionRecordDelete(ByValrstDeleteAsADODB.Recordset,ByValstrOptionAsLong)AsBoolean
If(rstDelete.EOF=True)Or(rstDelete.BOF=True)Then
RecordDelete=False
ExitFunction
EndIf
OnErrorGoToDelete_error
rstDelete.DeletestrOption
rstDelete.Update
RecordDelete=True
rstDelete.Update
Delete_error:
IfErr.Number<>0Then
rstDelete.CancelUpdate
RecordDelete=False
MsgBox"错误代码:"&Err.Number&vbCrLf&_
"错误描述:"&Err.Description,vbCritical+vbOKOnly,"删除错误"
Else
RecordDelete=True
rstDelete.Update
EndIf
EndFunction
操作员管理窗体运行如下:
其工具栏铵钮的设计参考基础单元设置
6.5.2员工管理模块的设计
其员工管理窗体的运行界面如下:
增加记录源码分析如下:
PrivateSubtblEmployees_ButtonClick(ByValButtonAsMSComctlLib.Button)
SelectCaseButton.Key
Case"add"
''''rctEmployees.AddNew
IfflexEmployees.Rows>2Then
flexEmployees.Row=flexEmployees.Rows-1
flexEmployees.Col=0
flexEmployees.RowSel=flexEmployees.Rows-1
flexEmployees.ColSel=flexEmployees.Cols-1
IfflexEmployees.Rows>15Then
flexEmployees.TopRow=flexEmployees.Rows-15
EndIf
EndIf
frmEmpAdd.Caption="新增记录"
frmEmpAdd.cmdPrevious.Visible=False
frmEmpAdd.cmdNext.Visible=False
frmEmpAdd.cmdAdd.Visible=False
frmEmpAdd.ShowvbModal
Case"delete"
IfstrEmpFirstFieldValue<>EmptyThen
IfMsgBox("您确定要删除此条记录吗?",vbQuestion+vbYesNo,"删除记录")=vbYesThen
IffrmUnit.RecordDelete(rctEmployees,adAffectCurrent)=TrueThen
frmEmployees.flexEmployees.Redraw=False
CallIniGrid(flexEmployees)
Callshowdata(rctEmployees,flexEmployees)
frmEmployees.flexEmployees.Redraw=True
EndIf
EndIf
EndIf
Case"modify"
IfstrEmpFirstFieldValue<>EmptyThen
frmEmpAdd.Caption="修改记录"
CallfrmEmpAdd.IniFromAdd(rctEmployees)
frmEmpAdd.cmdAdd.Visible=False
frmEmpAdd.cmdCancel.Visible=False
frmEmpAdd.ShowvbModal
EndIf
Case"exit"
UnloadMe
EndSelect
EndSub
打印按钮的源码如下:
PrivateSubtlbPrint_ButtonClick(ByValButtonAsMSComctlLib.Button)
IfExcuteSql(rctQueryEmployeesWithID,"select*fromQueryEmployeesWithID")=TrueThen
rctQueryEmployeesWithID.Filter=rctEmployees.Filter
SetdrptEmployees.DataSource=rctQueryEmployeesWithID
EndIf
IfrctQueryEmployeesWithID.RecordCount<=0Then
MsgBox"没有合适的记录",vbInformation+vbOKOnly,"打印信息"
ExitSub
EndIf
SelectCaseButton.Key
Case"Preview"
drptEmployees.ShowvbModal
Case"print"
OnErrorGoToError_on_print
drptEmployees.PrintReportFalse''''不显示窗口
ExitSub
Error_on_print:
MsgBox"错误代码:"&Err.Number&_
"错误描述:"&Err.Description,vbCritical+vbOKOnly,"打印错误"
EndSelect
EndSub
员工查询窗运行如下:
其中查询按钮的源码分析如下:
PrivateSubcmdOK_Click()
SelectCasestbQuery.Tab
Case0
IfcmbQueryItem.ListIndex<>3And_
cmbQueryItem.ListIndex<>4And_
cmbQueryItem.ListIndex<>5And_
cmbQueryItem.ListIndex<>6And_
cmbQueryItem.ListIndex<>7Then
IfTrim(txtQueryValue.Text)=EmptyThen
MsgBox"查询内容不能为空",vbInformation+vbOKOnly,"查询数据"
ExitSub
Else
FieldValue=Trim(txtQueryValue.Text)
IfcmbQueryItem.ListIndex=2Then
IfTrim(txtQueryValue.Text)="男"Then
FieldValue=1
Else
IfTrim(txtQueryValue.Text)="女"Then
FieldValue=0
Else
MsgBox"输入错误!",vbCritical+vbOKOnly,"查询数据"
ExitSub
EndIf
EndIf
strFilter=FieldName&"="&FieldValue
Else
IfchkLike.Value=1ThenstrFilter=FieldName&"like"&"''''"&"%"&FieldValue&"%"&"''''"
Else
strFilter=FieldName&"="&"''''"&FieldValue&"''''"
EndIf
EndIf
EndIf''''endifTrim(txtQueryValue.Text)=Empty
Else
FieldValue=dcmbItemValue.BoundText
IfcmbQueryItem.ListIndex=7Then
strFilter=FieldName&"="&FieldValue
Else
strFilter=FieldName&"="&"''''"&FieldValue&"''''"
EndIf
EndIf
Case1
Operater=Combo1.List(Combo1.ListIndex)
strFilter=FieldName&""&Operater&""&"''''"&dtpDateValue.Value&"''''"
EndSelect
''''MsgBoxstrFilter
rctEmployees.Filter=strFilter
frmEmployees.flexEmployees.Redraw=False
CallfrmEmployees.IniGrid(frmEmployees.flexEmployees)
CallfrmEmployees.showdata(rctEmployees,frmEmployees.flexEmployees)
frmEmployees.flexEmployees.Redraw=True
EndSub
6.5.3请假管理模块的设计
其中请假管理中的修改记录窗体运行如下:
其中保存按钮的源码如下:
PrivateSubcmdSave_Click()
DimEmp_IDAsVariant
DimEmp_NameAsVariant
DimEmp_SexAsVariant
DimDepart_IDAsVariant
DimJob_IDAsVariant
DimTitel_IDAsVariant
DimE_IDAsVariant
DimP_IDAsVariant
DimMS_IDAsVariant
DimEmp_ID_cordAsVariant
DimEmp_birthdayAsVariant
DimEmp_Attend_timeAsVariant
DimEmp_Join_timeAsVariant
DimEmp_mobile_numAsVariant
DimEmp_Tel_numAsVariant
DimEmp_AddressAsVariant
DimEmp_MemoAsVariant
DimEmp_name_charAsVariant
DimvtempdataAsString
IftxtEmpID.Text=EmptyThen
MsgBox"工作证号不能为空!",vbInformation,"数据不完整"
txtEmpID.SetFocus
ExitSub
Else
IftxtEmpName.Text=EmptyThen
MsgBox"员工姓名不能为空!",vbInformation,"数据不完整"
txtEmpName.SetFocus
ExitSub
Else
IfLeft(mskEmpBirth.Text,1)<>""Then
IfInStr(mskEmpBirth.Text,"")>0Then
MsgBox"日期格式填写不完整!",vbInformation,"数据不完整"
mskEmpBirth.SetFocus
ExitSub
Else
Emp_birthday=CDate(mskEmpBirth.Text)
EndIf
EndIf
IfLeft(mskEmpAttendTime.Text,1)<>""Then
IfInStr(mskEmpAttendTime.Text,"")>0Then
MsgBox"日期格式填写不完整!",vbInformation,"数据不完整"
mskEmpAttendTime.SetFocus
ExitSub
Else
IfLeft(mskEmpBirth.Text,1)<>""Then
IfCDate(mskEmpAttendTime.Text)<=CDate(mskEmpBirth.Text)Then
MsgBox"员工参加工作日期不能小于或等于员工的出生日期",vbInformation,"输入日期错误"
mskEmpAttendTime.SetFocus
ExitSub
Else
Emp_Attend_time=CDate(mskEmpBirth.Text)
EndIf
EndIf
EndIf
EndIf
IfLeft(mskJOinTime.Text,1)<>""Then
IfInStr(mskJOinTime.Text,"")>0Then
MsgBox"日期格式填写不完整!",vbInformation,"数据不完整"
mskJOinTime.SetFocus
ExitSub
Else
IfLeft(mskEmpBirth.Text,1)<>""Then
IfCDate(mskJOinTime.Text)<=CDate(mskEmpBirth.Text)Then
MsgBox"员工加入本单位日期不能小于或等于员工的出生日期",vbInformation,"输入日期错误"
mskJOinTime.SetFocus
ExitSub
EndIf
EndIf
IfLeft(mskEmpAttendTime.Text,1)<>""Then
IfCDate(mskJOinTime.Text)<CDate(mskEmpAttendTime.Text)Then
MsgBox"员工加入本单位日期不能小于员工的参加工作日期",vbInformation,"输入日期错误"
mskJOinTime.SetFocus
ExitSub
EndIf
EndIf
Emp_Join_time=CDate(mskJOinTime.Text)
EndIf
EndIf
EndIf
EndIf
IftxtEmpChr.Text=EmptyThen
MsgBox"员工字首拼音十分重要,不能为空!",vbInformation,"数据不完整"
txtEmpChr.SetFocus
ExitSub
EndIf
IftxtEmp_ID_cord.Text<>EmptyAndLen(txtEmp_ID_cord.Text)<15Then
MsgBox"身份证号必须是大于或等于15位,小于18位!",vbInformation,"无效的身份证号"
txtEmp_ID_cord.SetFocus
ExitSub
EndIf
Emp_ID=Trim(txtEmpID.Text)
Emp_Name=Trim(txtEmpName.Text)
Emp_Sex=cmbEmpSex.ListIndex
IfTrim(txtEmp_ID_cord.Text)<>EmptyThen
Emp_ID_cord=Trim(txtEmp_ID_cord.Text)
EndIf
IfTrim(txtEmpMobil.Text)<>EmptyThen
Emp_mobile_num=Trim(txtEmpMobil.Text)
EndIf
IfTrim(txtEmpTel.Text)<>EmptyThen
Emp_Tel_num=Trim(txtEmpTel.Text)
EndIf
IfTrim(txtEmpAddr.Text)<>EmptyThen
Emp_Address=Trim(txtEmpAddr.Text)
EndIf
IfTrim(txtEmpMemo.Text)<>EmptyThen
Emp_Memo=Trim(txtEmpMemo.Text)
EndIf
Emp_name_char=Trim(txtEmpChr.Text)
IfTrim(cmbDepartID.Text)<>EmptyThen
vtempdata=Trim(cmbDepartID.Text)
Depart_ID=frmEmployees.RecordSetFindItem(rctDepartList,"Depart_Name",vtempdata,0)
EndIf
IfTrim(cmbEmpMs.Text)<>EmptyThen
vtempdata=Trim(cmbEmpMs.Text)
MS_ID=frmEmployees.RecordSetFindItem(rctMarriageStatus,"MS_Name",vtempdata,0)
EndIf
IfTrim(cmbEmpPs.Text)<>EmptyThen
vtempdata=Trim(cmbEmpPs.Text)
P_ID=Trim(frmEmployees.RecordSetFindItem(rctPlitics,"P_Name",vtempdata,0))
EndIf
IfTrim(cmbEmpEdu.Text)<>EmptyThen
vtempdata=Trim(cmbEmpEdu.Text)
E_ID=Trim(frmEmployees.RecordSetFindItem(rctEdulevel,"E_Name",vtempdata,0))
EndIf
IfTrim(cmbEmpJob.Text)<>EmptyThen
vtempdata=Trim(cmbEmpJob.Text)
Job_ID=Trim(frmEmployees.RecordSetFindItem(rctJobList,"Job_Name",vtempdata,0))
EndIf
IfTrim(cmbEmpTitel.Text)<>EmptyThen
vtempdata=Trim(cmbEmpTitel.Text)
Titel_ID=Trim(frmEmployees.RecordSetFindItem(rctTitelList,"Titel_Name",vtempdata,0))
EndIf
''''下面是写入数据库
''''MsgBox"noerror"
IffrmEmpAdd.Caption="新增记录"Then
rctEmployees.AddNew
EndIf
IfSaveEmployeesRecords(rctEmployees,Emp_ID,Emp_Name,Emp_Sex,Depart_ID,Job_ID,Titel_ID,E_ID,P_ID,MS_ID,Emp_ID_cord,Emp_birthday,Emp_Attend_time,Emp_Join_time,Emp_mobile_num,Emp_Tel_num,Emp_Address,Emp_Memo,Emp_name_char)=TrueThen
IffrmEmpAdd.Caption="新增记录"Then
CallfrmEmpAddClear
EndIf
''''frmEmployees.flexEmployees.Redraw=False
''''CallfrmEmployees.IniGrid(frmEmployees.flexEmployees)
''''CallfrmEmployees.showdata(rctEmployees,frmEmployees.flexEmployees)
''''frmEmployees.flexEmployees.Redraw=True
MsgBox"保存记录成功",vbInformation,"保存记录"
EndIf
EndSub
请假查询窗体运行如下:
窗体源码如下:
PrivateSubmnuLeavelQuery_Click()
frmLeavel.tblEmployees.Buttons("add").Visible=False
frmLeavel.tblEmployees.Buttons("delete").Visible=False
frmLeavel.tblEmployees.Buttons("modify").Visible=False
frmLeavel.tlbPrint.Left=30
frmLeavel.tlbExit.Left=frmLeavel.tlbPrint.Width
frmLeavel.Caption="请假查询"
frmLeavel.ShowvbModal,Me
EndSub
6.5.4帮助管理模块的设计
该模块不涉及到代码的编写故不作描述
第七章主菜单的设计与系统的编译发行
1系统主菜单的设计
在实际的系统设计中,菜单可分为两种类型,即下拉式菜单和弹出式菜单,下拉式菜单系统中,一般有一个主菜单,其中包括若干个选择项.主菜单单的每一项又可下拉出下一级子菜单.这样用一个个的窗口的形式弹出在屏幕上,它是通过菜单编辑器建立,其步骤如下:
1)选取要建立菜单的窗体
2)从“工具”菜单中,选取“菜单编辑器”建立如下图所示的系统主菜单:
可以看出菜单系统的建立比较直观,因此不作重点描述
一个典型的数据库应用程序由数据结构,操作界面,查询选项和报表打印等组成。在设计应用程序时,应仔细考虑每个组件提供的功能以及与其他组件之间的关系。设计好的功能模块制作完毕后,单击全编译执行在确认无误后,单击文件菜单下的生成工程得到一个.EXE的可执行程序.到此一个完整的系统设计完成.
结论
在刚刚开始学习数据库的时候,对很多细节很没有概念。特别是对窗体的作用还有过程的概念的掌握,理解不准确。通过老师的帮助才慢慢的有了一点体会。对书本的学习完成以后,开始着手对数据库系统开始制作,开始对系统的需求分析不足,造成多次重做。在对表单的制作过程中,对窗体的尺寸的把握,对各个控件尺寸的把握是比较困难的,各个控件在表单中的布局也非常重要。在本系统中,程序主界面和登陆界面的制作是比较困难的。表单制作完成后就是对控件编程,其中要注意程序编写时的细节,格式,命令的拼写,运用的合理性等等都要进行分析。
总的来说,做完一个数据库的收获不仅仅是技术上的,对事情的宏观的控制有了更深的看法。
致谢
感谢老师在设计中的指导和关怀,并且感谢所有同学对我的支持。
参考文献
参考文献:
1、马力VisualBasic6.0简明教程机械工业出版社2001年8月
2、刘韬骆娟何旭洪VisualBasic6.0数据库系统开发实例导航人民邮电出版社2004.4月
3、程序员杂志2002年合订本电子工业出版社
4、王小平,曹立明.遗传算法-理论、应用与软件实现.西安:西安交通大学出版社,
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 yyfangchan@163.com (举报时请带上具体的网址) 举报,一经查实,本站将立刻删除