目 录 数据库课程设计报告 1 1.开发环境和相关技术介绍 5 1.1开发环境 5 1.2相关技术介绍 5 2.需求分析 5 2.1系统需求和功能 5 2.1.2功能需求描述 6 2.1.2.1员工基本信息模块 6 2.1.2.2工资结构设置模块 6 2.1.2.3工资汇总模块 6 2.2数据字典 6 2.2.1数据结构 7 2.2.2数据项 7 2.2.3数据流 8 2.4安全性要求 8 2.5一致性要求 9 2.6完整性要求 9 3 概念结构设计 9 3.1设计方法和步骤 9 3.2概念结构E-R图 9 4.逻辑结构设计 9 4.1具体RDBMS数据模型转换 9 4.2系统结构图 10 5.数据库物理设计 10 5.1索引的选择建立 10 5.2数据存放位置 10 5.3确定系统配置 10 6.数据库实施 10 6.1数据库创建 10 6.1.1各数据表说明 10 6.1.2数据库创建 11 6.2数据库备份和恢复方案 13 6.2.1应用辅助工具进行备份和恢复 13 6.2.2分离数据库法 13 6.3用户界面设计和应用程序编码 13 6.3.1用户界面设计 13 6.3.2类文件功能描述 14 6.3.3主要代码分析 14 }7.系统测试方案和测试报告 21 7.1测试方案 21 7.2测试过程 21 7.2.1登陆测试 21 8.安装和使用说明 25 8.1安装说明 25 8.1.1安装VB6.0E 25 8.1.2安装Microsoft SQL Server 2000 ODBC驱动程序 25 8.1.3升级Microsoft SQL Server 2000数据库管理系统 25 8.1.4附加数据库 25 8.1.5可能出现情况 25 9.完成情况和总结 25 9.1总结 25 1.开发环境和相关技术介绍 1.1开发环境 项目名称: 工资管理系统 开发软件:vb6.0与Access 2000 运行环境:2000/XP/2003 1.2相关技术介绍 Microsoft SQL Server 2000数据库管理系统是微软公司研制开发的关系型数据库管理系统。该系统支持并扩展了SQL语言标准,可以运用标准SQL语句对数据进行操作,也可以使用功能强大的GUI工具进行灵活的数据管理。同时,系统还提供功能完善的API,可以在应用程序中调用这些API来实现与数据库系统的连接以及相关数据的操作。sp3是该系统的一个版本号,只有sp4以上的SQL 2000系统才能够支持纯ODBC连接方式。 Vb6.0功能强大的应用程序开发工具,主要支持基于面向对像化的语言的各种开发项目。 2.需求分析 2.1系统需求和功能 工资管理信息系统对企业加强工资管理有着重要的作用,就一般的大型企业来说,它的设计内容非常复杂而且繁多,比如拥有工资计算功能,工资统计功能,报表输出功能,而且设计的模块也很多,比如工资管理模块,工资统计模块,报表设计模块,打印输出模块,模糊查询模块等。 由于本软件主要是为作者工作的一家科技公司定制开发的。该公司是一家刚刚成立的公司,总体人员比较少,有正式员工20人,人员结构比较简单,学历比较高,基本拥有大专以上学历,部门划分也很清晰,而且人员的流动性不高,所以公司目前对工资管理的要求不高。因此,针对该公司而言,我们经过反复论证,最终确定了工资管理系统的设计方案,该工资管理系统的主要功能如图3.1所示: 2.1.2功能需求描述 2.1.2.1员工基本信息模块 员工基本信息模块具有员工信息输入、员工增删、员工信息查询三个功能,员工基本信息包括员工号、员工姓名、员工性别、所在部门、所在岗位、工龄和工资等级等信息。员工增删实现了对数据库中员工信息的增加和删除。员工可以通过员工号或员工姓名对员工信息进行查询。 2.1.2.2工资结构设置模块 根据该公司的工资管理实际情况,本系统将工资结构分为基础工资、岗位工资、工龄工资三部分。该模块可以对这三个工资类型设置工资等级,并对每个等级设置工资标准。 2.1.2.3工资汇总模块 用户在员工信息管理模块对该员工的工资等级进行输入以后,在工资汇总模块会自动对员工工资进行汇总。用户可以打印出工资汇总表,打印之前可以通过打印预览功能进行打预览。 2.2数据字典 该软件的数据库由下述四张数据表组成: 员工信息表、基础工资设置表、岗位工资设置表 1、 员工信息表 字段 字段名 类型 宽度 说明 1 员工号 字符型 3 数字 2 员工姓名 字符型 10 小于等于5个汉字 3 员工性别 字符型 2 “男”或“女” 4 岗位名称 字符型 14 小于等于7个汉字 5 工龄 数值型 2 1~99之间 6 工资等级 数值型 2 1~99之间 2、 基础工资设置表 字段 字段名 类型 宽度 说明 1 工资等级 数值型 2 1~99之间 2 工资标准 数值型 4 1~9999之间 3、 岗位工资设置表 字段 字段名 类型 宽度 说明 1 岗位名称 字符型 14 小于等于7个汉字 2 工资标准 数值型 4 1~9999之间 4、 工龄工资设置表 字段 字段名 类型 宽度 说明 1 工资等级 数值型 2 1~99之间 2 工资标准 数值型 4 1~9999之间 5、 管理员注册表 字段 字段名 类型 宽度 说明 1 注册名 字符型 10 任意字符 2 口令 字符型 10 英文字母或数字 2.2.1数据结构 工资总=(ID,编号) 管理=(用户名) 员工信息=(ID,编号) 2.2.2数据项 表2.1 数据项表 编号 标识符 类型 长度 所属表名 同义名 1 ID 自动编号 20 工资总 工资编号 2 编号 文本 50 工资总 员工编号 3 基本工资 数字 自动 工资总 员工基本工资 4 津贴 数字 自动 工资总 员工津贴 5 工资扣 数字 自动 工资总 所扣除的工资数 6 洗理 数字 自动 工资总 洗理费 7 书报 数字 自动 工资总 书报费 8 交通 数字 自动 工资总 交通费 9 资金 数字 自动 工资总 本月资金 10 日期 文本 255 工资总 发放资金日期 11 用户名 文本 50 管理 用户名称 12 密码 文本 50 管理 用户密码 13 ID 自动 4 员工信息 员工信息表ID 14 编号 文本 50 员工信息 员工编号 15 科室 文本 255 员工信息 员工所在科室 16 姓名 文本 255 员工信息 员工姓名 17 生日 文本 50 员工信息 员工生日 18 政治面貌 文本 50 员工信息 员工政治面貌 19 职务 文本 50 员工信息 员工职务 20 军烈属 文本 50 员工信息 员工军烈属 21 出勤天数 文本 50 员工信息 员工出勤天数 22 缺勤天数 文本 50 员工信息 员工缺勤天数 2.2.3数据流 表2.2 数据流表 编号 名称 来源 去向 组成 1 身份信息 系统管理员 应用系统 管理员帐户+密码 2 授权信息 应用系统 系统管理员 3 错误身份信息 应用系统 系统管理员 4 查询请求 系统管理员 应用系统 待查询对象识别符(如ID,编号) 5 查询结果 应用系统 系统管理员 被查询对象具体信息 6 管理请求 系统管理员 应用系统 识别符(ID,编号等)+管理类型 7 管理结果信息 应用系统 系统管理员 被管理对象处理结果 8 非法请求 应用系统 系统管理员 非法请求提示信息 2.4安全性要求 访问数据库时需要输入登陆帐号和密码。在数据库内设有管理员表,登陆系统时会要求输入管理员帐号和密码。登陆模块根据输入帐号和密码查管理员表,查到匹配记录则允许其登陆系统。管理员帐号和密码可以在系统中添加和修改。 2.5一致性要求 在管理系统相关的表之间,有较强的关联性。为了实现一致性的需求,各个表之间均建立起了相应的一致性约束。 2.6完整性要求 根据工资管理系统的要求,为保持数据的完整性,采用了数据库的事务机制,防止出现操作故障引起的数据不一致。 3 概念结构设计 3.1设计方法和步骤 采用自底而上的设计方法。先自顶向下地进行需求分析,对工资管理系统的需求进行逐步细化;然后再自底而上地设计概念结构,最终将各个局部应用的概念结构集合成为全局概念结构。 3.2概念结构E-R图 通过对局部应用的选择,逐一设计出分E-R图,并对各个分E-R图进行合并,生成初步E-R图,消除不必要的系统冗余,可以得出以下工资管理系统E-R图。 图3.1 工资管理系统E-R图 4.逻辑结构设计 4.1具体RDBMS数据模型转换 由于Microsoft SQL Server 2000系统支持上述数据模型,所以不用进行特定的转换。 4.2系统结构图 图4.1 系统结构图 5.数据库物理设计 5.1索引的选择建立 由于系统可能要涉及大量数据的操作,所以索引的建立就成为一种必需。本系统采用B+树索引方法,分别在各Customer,Diretory,Order和OrderDetail各个表的主键上建立索引。 5.2数据存放位置 本系统数据和索引存放在磁盘中。 5.3确定系统配置 根据具体需要配置。 6.数据库实施 6.1数据库创建 6.1.1各数据表说明 表6.1 数据表描述表 编号 数据表名称 类型 内容 01 管理 辅助表 记录管理员帐号,密码 02 工资总 主表 记录订员工总工资 03 员工信息 主表 记录员工基本信息 04 基础工资 主表 记录员工基础工资 05 工龄工资 主表 记录员工工龄工资 06 岗位工资 主表 保存员工岗位工资 6.1.2数据库创建 在Microsoft SQL Server 2000的企业管理器中完成数据库和数据表的创建,具体SQL脚本请参见附录gz.sql SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[wage]') AND type in (N'U')) BEGIN CREATE TABLE [dbo].[wage]( [name] [char](10) NOT NULL, [wage] [money] NULL, CONSTRAINT [PK_wage] PRIMARY KEY CLUSTERED ( [name] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] END GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[部门]') AND type in (N'U')) BEGIN CREATE TABLE [dbo].[部门]( [部门编码] [char](10) NOT NULL, [部门名称] [char](10) NULL, CONSTRAINT [PK_部门] PRIMARY KEY CLUSTERED ( [部门编码] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] END GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[员工信息]') AND type in (N'U')) BEGIN CREATE TABLE [dbo].[员工信息]( [工号] [char](10) NOT NULL, [姓名] [char](10) NULL, [部门编号] [char](10) NULL, [性别] [char](10) NULL, [身份证] [char](10) NULL, [帐号] [char](10) NULL, [家庭地址] [char](10) NULL ) ON [PRIMARY] END GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[工资]') AND type in (N'U')) BEGIN CREATE TABLE [dbo].[工资]( [工号] [char](10) NOT NULL, [姓名] [char](10) NULL, [部门编码] [char](10) NULL, [性别] [char](10) NULL, [身份证号码] [char](10) NULL, [银行帐号] [char](10) NULL, [基本工资] [money] NULL, [奖金] [money] NULL, [应扣] [money] NULL, [应扣] [money] NULL, [保险] [money] NULL, [应发工资] [money] NULL, [实发工资] [money] NULL, [发放时间] [smalldatetime] NULL, CONSTRAINT [PK_工资] PRIMARY KEY CLUSTERED ( [工号] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] END GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[测试]') AND type in (N'U')) BEGIN CREATE TABLE [dbo].[测试]( [gz] [money] NULL, [dd] [datetime] NULL, [ss] [money] NULL, [aa] [char](10) NULL ) ON [PRIMARY] END GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[汇总]') AND type in (N'U')) BEGIN CREATE TABLE [dbo].[汇总]( [部门编码] [char](10) NOT NULL, [基本工资] [money] NULL, [奖金] [money] NULL, [应扣工资] [money] NULL, [应发工资] [money] NULL, [保险] [money] NULL, [应发工资] [money] NULL, [实发工资] [money] NULL, CONSTRAINT [PK_汇总] PRIMARY KEY CLUSTERED ( [部门编码] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] END GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[用户信息]') AND type in (N'U')) BEGIN CREATE TABLE [dbo].[用户信息]( [用户名] [char](10) NOT NULL, [密码] [char](10) NULL, CONSTRAINT [PK_用户信息] PRIMARY KEY CLUSTERED ( [用户名] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] END 6.2数据库备份和恢复方案 6.2.1应用辅助工具进行备份和恢复 应用数据库辅助工具(如sqlbackuptools…)进行备份,选择所需要备份的数据库和目标地址即可进行数据备份,恢复数据库只需要指定备份文件和需要恢复的数据库即可进行数据恢复。 6.2.2分离数据库法 在企业管理器中右击需要备份的数据库,选择“所有任务”,“分离数据库”,执行分析操作,拷贝数据库MDF文件和LDF文件。 恢复方案:在企业管理器的控制台树中选择“数据库”节点,右击,“所有任务”,“附加数据库”,找到待恢复数据库的MDF文件,确定。 6.3用户界面设计和应用程序编码 6.3.1用户界面设计 本系统的用户界面用vb编写,主要由1个主界面和10个辅助对话框组成。主界面集合系统主要基本功能按键,辅助对话框负责采集用户输入信息和做基本的信息处理。 图10 用户界面 6.3.2类文件功能描述 NO. 类名 类型 功能 01 Main Frame 主窗口类,提供系统主要功能的调用接口 02 Database 辅助类 封装系统主要数据和方法,为其它类提供信息处理功能 03 About Dialog 关于对话框,主要显示系统信息和作者信息 04 AddDeleteUser Dialog 删除和新增管理员 05 AmendPassword Dialog 修改管理员密码 06 BookReturn Dialog 获得当前所选中 07 BookSubscribe Dialog 主要是完成员工信息的录入,包括新增、删除、修改及验收 08 Booktsjy Dialog 主要完成员工基本信息的录入 09 Land Dialog 登陆窗口 10 SelectBook Dialog 选择当前所选中的员工 11 Setdzda Dialog 设置员工信息 12 Setdzlb Dialog 设置工资的类别信息 13 Settsda Dialog 设置员工的档案信息 14 Settslb Dialog 设置员工的类别信息 15 Calculator Dialog 计算器 表4 类文件描述表 6.3.3主要代码分析 ============================================================================== Dim rs As ADODB.Recordset Dim con As New ADODB.Connection Dim mysql As String Dim gzxx, jj, kk, bf, hz As Node '声明TreeView1节点 Dim i, s As Integer 's用来记录数据库的字段数,I用来作为循环变量 Private Sub Command1_Click() prtfg1.打印 DataGrid1 End Sub Private Sub Command2_Click() Me.Hide Command1.Enabled = False End Sub Private Sub Form_Load() Set con = New ADODB.Connection con.ConnectionString = "provider=Microsoft.jet.oledb.4.0;data source=gzgl.mdb;persist security info=false" con.CursorLocation = adUseClient con.Open mysql = "select 姓名,科室,职务,基本工资,津贴,奖金,洗理,书报,交通,工资扣 from 员工信息,工资总 where 员工信息.编号=工资总.编号" Set rs = con.Execute(mysql) '设置TreeView1中所要显示的节点名称 Set gzxx = TreeView1.Nodes.Add(, , "gzxx", "工资信息") Set jj = TreeView1.Nodes.Add(, , "jj", "奖金汇总") Set kk = TreeView1.Nodes.Add(, , "kk", "扣款汇总") Set bf = TreeView1.Nodes.Add(, , "bf", "补助汇总") Set hz = TreeView1.Nodes.Add(, , "hz", "工资条信息") Set DataGrid1.DataSource = rs '设置DataGrid1数据源 s = rs.Fields.Count For i = 0 To s - 1 '循环设置DataGrid1中各列宽度 DataGrid1.Columns(i).Width = 1300 Next i Command1.Enabled = False '只有当显示了工资条信息后"打印"按钮才可以使用 End Sub Private Sub Form_Resize() '窗口位置和大小布局 TreeView1.Height = Me.Height - Toolbar1.Height DataGrid1.Width = Me.Width - TreeView1.Width DataGrid1.Height = Me.Height - Toolbar1.Height Toolbar1.Top = DataGrid1.Height Toolbar1.Width = Me.Width Command1.Left = Me.Width / 2 - (Command1.Width + Command2.Width) / 2 Command2.Left = Me.Width / 2 End Sub Private Sub TreeView1_Click() Select Case TreeView1.SelectedItem.Index Case 1 '单击"工资信息"节点 mysql = "select 姓名,科室,职务,基本工资,津贴,奖金,洗理,书报,交通,工资扣 from 员工信息,工资总 where 员工信息.编号=工资总.编号" Set rs = con.Execute(mysql) Set DataGrid1.DataSource = rs s = rs.Fields.Count For i = 0 To s - 1 DataGrid1.Columns(i).Width = 1300 Next i Case 2 '单击"奖金汇总"节点 mysql = "select 姓名,科室,职务,奖金 from 员工信息,工资总 where 员工信息.编号=工资总.编号" Set rs = con.Execute(mysql) Set DataGrid1.DataSource = rs s = rs.Fields.Count For i = 0 To s - 1 DataGrid1.Columns(i).Width = 3200 Next i Case 3 '单击"扣款汇总"节点 mysql = "select 姓名,科室,职务,工资扣 from 员工信息,工资总 where 员工信息.编号=工资总.编号" Set rs = con.Execute(mysql) Set DataGrid1.DataSource = rs s = rs.Fields.Count For i = 0 To s - 1 DataGrid1.Columns(i).Width = 3200 Next i Case 4 '单击"补助汇总"节点 mysql = "select 姓名,科室,职务,津贴 + 洗理 + 书报 + 交通 as 补助汇总 from 员工信息,工资总 where 员工信息.编号=工资总.编号" Set rs = con.Execute(mysql) Set DataGrid1.DataSource = rs s = rs.Fields.Count For i = 0 To s - 1 DataGrid1.Columns(i).Width = 3200 Next i Case 5 '单击"工资条信息"节点 mysql = "select 姓名,科室,职务,基本工资,奖金,津贴 + 洗理 + 书报 + 交通 as 补助,基本工资 + 奖金 + 津贴 + 洗理 + 书报 + 交通 as 应发工资,工资扣 as 应扣工资, 应发工资-应扣工资 as 实发工资 from 员工信息,工资总 where 员工信息.编号=工资总.编号" Set rs = con.Execute(mysql) Set DataGrid1.DataSource = rs s = rs.Fields.Count For i = 0 To s - 1 DataGrid1.Columns(i).Width = 1445 Next i Command1.Enabled = True End Select End Sub =================================================================================== Dim Flag As Boolean Private Sub Command1_Click() diskname = Year(Now) & "-" & Month(Now) & ".xls" Flag = FloppyDrive("A:") If Flag = False Then MsgBox "A:驱没有准备好,请将磁盘插入驱动器!", 48, "警告" '------------------------------- '函数:检查软驱中是否有盘的存在 '------------------------------- Else ExporToExcel ("select 员工信息.编号 as 编号,姓名,科室,职务,基本工资,津贴,工资扣,洗理,书报,交通,奖金,日期 from 工资总,员工信息 where 员工信息.编号=工资总.编号") MsgBox "恭喜你,数据导出成功", 48, "祝贺" Me.Hide End If End Sub Private Sub Command2_Click() Me.Hide End Sub Private Sub Form_Load() Set con = New ADODB.Connection con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=gzgl.mdb;Persist Security Info=false" con.CursorLocation = adUseClient con.Open Label1.Caption = "生成Excel格式上报盘" + "请确认软驱中已插入软盘" End Sub ============================================================================================================================================== Dim con As New ADODB.Connection Dim rst As New ADODB.Recordset Dim mysql As String Dim a, i, msg, j, m As Integer Private Sub Command2_Click(Index As Integer) Select Case Index Case 0 '第一条记录 rst.MoveFirst Command2(0).Enabled = False Command2(1).Enabled = False Command2(2).Enabled = True Command2(3).Enabled = True Case 1 '上一条记录 rst.MovePrevious '上一条 If rst.BOF Then MsgBox "已经没有上一条记录了", 48, "警告" rst.MoveFirst Command2(0).Enabled = False Command2(1).Enabled = False Command2(2).Enabled = True Command2(3).Enabled = True End If Command2(2).Enabled = True Command2(3).Enabled = True Case 2 '下一条记录 rst.MoveNext If rst.EOF Then MsgBox "已经没有最后一条记录了", 48, "警告" Command2_Click (3) rst.MoveLast Command2(2).Enabled = False Command2(3).Enabled = False Command2(1).Enabled = True Command2(0).Enabled = True End If Command2(1).Enabled = True Command2(0).Enabled = True Case 3 '末尾一条记录 rst.MoveLast Command2(2).Enabled = False Command2(3).Enabled = False Command2(1).Enabled = True Command2(0).Enabled = True Case 4 For i = 0 To a - 1 Text1(i).Enabled = True Next i Case 5 Form9.Show 1 Case 6 Me.Hide '关闭 Case 7 msg = MsgBox("您确定删除该员工信息吗?", vbOKCancel, "警告") If msg = 1 Then rst.Delete rst.MoveNext End If End Select Text1(0).Text = IIf(IsNull(rst.Fields("姓名").Value), "", rst.Fields("姓名").Value) '填充记录 Text1(1).Text = IIf(IsNull(rst.Fields("政治面貌").Value), "", rst.Fields("政治面貌").Value) '填充记录 Text1(2).Text = IIf(IsNull(rst.Fields("职务").Value), "", rst.Fields("职务").Value) '填充记录 Text1(3).Text = IIf(IsNull(rst.Fields("科室").Value), "", rst.Fields("科室").Value) '填充记录 Text1(4).Text = IIf(IsNull(rst.Fields("生日").Value), "", rst.Fields("生日").Value) '填充记录 Text1(5).Text = IIf(IsNull(rst.Fields("军烈属").Value), "", rst.Fields("军烈属").Value) '填充记录 Text1(6).Text = IIf(IsNull(rst.Fields("出勤天数").Value), "", rst.Fields("出勤天数").Value) '填充记录 Text1(7).Text = IIf(IsNull(rst.Fields("缺勤天数").Value), "", rst.Fields("缺勤天数").Value) '填充记录 Text1(8).Text = IIf(IsNull(rst.Fields("基本工资").Value), "", rst.Fields("基本工资").Value) '填充记录 Text1(9).Text = IIf(IsNull(rst.Fields("奖金").Value), "", rst.Fields("奖金").Value) '填充记录 Text1(10).Text = IIf(IsNull(rst.Fields("津贴").Value), "", rst.Fields("津贴").Value) '填充记录 Text1(11).Text = IIf(IsNull(rst.Fields("洗理").Value), "", rst.Fields("洗理").Value) '填充记录 Text1(12).Text = IIf(IsNull(rst.Fields("书报").Value), "", rst.Fields("书报").Value) '填充记录 Text1(13).Text = IIf(IsNull(rst.Fields("交通").Value), "", rst.Fields("交通").Value) '填充记录 Text1(14).Text = IIf(IsNull(rst.Fields("工资扣").Value), "", rst.Fields("工资扣").Value) '填充记录 Text1(15).Text = Val(Text1(8).Text) + Val(Text1(9).Text) + Val(Text1(10).Text) + Val(Text1(11).Text) + Val(Text1(12).Text) + Val(Text1(13).Text) Text1(16).Text = Text1(14).Text Text1(17).Text = Val(Text1(15).Text) - Val(Text1(16).Text) End Sub Private Sub Form_Load() Set con = New ADODB.Connection a = Text1.Count con.ConnectionString = "provider=microsoft.jet.oledb.4.0;data source=gzgl.mdb;persist security info=false" con.CursorLocation = adUseClient con.Open rst.Open "select * from 员工信息,工资总 where 员工信息.ID=工资总.ID", con, adOpenKeyset, adLockOptimistic If rst.BOF = True Or rst.EOF Then MsgBox "数据库是空的!" Else Text1(0).Text = rst.Fields("姓名").Value Text1(1).Text = rst.Fields("政治面貌").Value Text1(2).Text = rst.Fields("职务").Value Text1(3).Text = rst.Fields("科室").Value Text1(4).Text = rst.Fields("生日").Value Text1(5).Text = rst.Fields("军烈属").Value Text1(6).Text = rst.Fields("出勤天数").Value Text1(7).Text = rst.Fields("缺勤天数").Value Text1(8).Text = rst.Fields("基本工资").Value Text1(9).Text = rst.Fields("奖金").Value Text1(10).Text = rst.Fields("津贴").Value Text1(11).Text = rst.Fields("洗理").Value Text1(12).Text = rst.Fields("书报").Value Text1(13).Text = rst.Fields("交通").Value Text1(14).Text = rst.Fields("工资扣").Value Text1(15).Text = Val(Text1(8).Text) + Val(Text1(9).Text) + Val(Text1(10).Text) + Val(Text1(11).Text) + Val(Text1(12).Text) + Val(Text1(13).Text) Text1(16).Text = Text1(14).Text Text1(17).Text = Val(Text1(15).Text) - Val(Text1(16).Text) End If For i = 0 To a - 1 Text1(i).Enabled = False Next i End Sub Private Sub Text1_KeyPress(Index As Integer, KeyAscii As Integer) If KeyAscii = 13 Then msg = MsgBox("您确定修改该员工的信息吗?", vbOKCancel, "提示") If msg = 1 Then If Not (rst.EOF) Then rst.Fields("姓名").Value = CStr(Text1(0).Text) rst.Fields("政治面貌").Value = CStr(Text1(1).Text) rst.Fields("职务").Value = CStr(Text1(2).Text) rst.Fields("科室").Value = CStr(Text1(3).Text) rst.Fields("生日").Value = CStr(Text1(4).Text) rst.Fields("军烈属").Value = CStr(Text1(5).Text) rst.Fields("出勤天数").Value = CStr(Text1(6).Text) rst.Fields("缺勤天数").Value = CStr(Text1(7).Text) rst.Fields("基本工资").Value = CStr(Text1(8).Text) rst.Fields("奖金").Value = CStr(Text1(9).Text) rst.Fields("津贴").Value = CStr(Text1(10).Text) rst.Fields("洗理").Value = CStr(Text1(11).Text) rst.Fields("书报").Value = CStr(Text1(12).Text) rst.Fields("交通").Value = CStr(Text1(13).Text) rst.Fields("工资扣").Value = CStr(Text1(14).Text) Text1(15).Text = Val(Text1(8).Text) + Val(Text1(9).Text) + Val(Text1(10).Text) + Val(Text1(11).Text) + Val(Text1(12).Text) + Val(Text1(13).Text) Text1(16).Text = Text1(14).Text Text1(17).Text = Val(Text1(15).Text) - Val(Text1(16).Text) End If End If End If End Sub }7.系统测试方案和测试报告 7.1测试方案 由于系统规模较小,所以没有安排单独的白盒测试,而是相应地将这部分测试归并到系统编码过程中。整个测试过程基于自顶向下测试的组装模块的方法,先对主模块进行基本测试,然后在按深度优先策略逐一将子模块组装到主模块上进行测试,最后再对系统进行全面的整体测试。 7.2测试过程 (白盒测试过程略(参考代码),以下是系统黑盒测试过程:) 7.2.1登陆测试 双击可执行文件gzglzc1.exe打开应用系统,可见登陆界面: 图11 系统界面 上图为工资管理系统的主界面,由菜单和工具栏组成.当单击菜单栏中”其它””更改密码”即可打开如下图所示的密码更改窗口. 密码更改 在这个窗口里,用户可以更改自己的登陆密码,但不能更改其它用户的登陆密码.如果要更改其它用户的登陆密码,只有管理员才能权限进行更改. 员工基本信息 如上图所示为员工信息管理窗口,在这个窗口里,用户或管理员可以添加、修改和删除员工的基本信息,同时还可以查询员工信息。比如工资信息等。 查询条件 上图为查询条件的选择窗口,在这个窗口中用户可以选择三种查询方式,分别是姓名、部门、日期。当选择按部门来查询并按下“确定”时会打开下图所示的窗口。在这个窗口中用户可以按员工所在的部门信息来查询。 按部门查询 报表打印 上图为报表打印窗口,在这个窗口中,用户可以按工资信息、资金汇总、扣款汇总、补助汇总、工资条信息来打印。 工资报表生成 这个窗口主要是生成工资报表以Execl格式存放到软盘。 8.安装和使用说明 8.1安装说明 8.1.1安装VB6.0 8.1.2安装Microsoft SQL Server 2000 ODBC驱动程序 该驱动程序可以实现ODBC与MS SQL的连接,使ODBC可以灵活地与数据库系统进行数据通信。(安装文件见附录) 8.1.3升级Microsoft SQL Server 2000数据库管理系统 JDBC连接方式需要sp3版本的Microsoft SQL Server 2000数据库管理系统才能够支持,如果数据库管理系统版本低于sp3可以使用升级补丁进行升级。(补丁文件见附录) 8.1.4附加数据库 将本系统数据库附加到Microsoft SQL Server 2000系统中。具体方式为:打开“企业管理器”打开目录数直到“数据库”结点 右击“数据库”选择“所有任务”选择“附加数据库”找到数据库MDF文件(见附录)“确定”。 8.1.5可能出现情况 完成以上配置后就可以运行本系统,如果无法运行则可能是由于以下原因: a.数据库系统登陆问题,本系统登陆2000数据库系统的用户名为:sa,密码为空,如果目标机器的Microsoft SQL Server 2000数据库系统不存在sa用户,或者该用户密码不为空则无法进行正常数据库连接。解决方法有:方法1.修改数据库管理系统用户名和密码(用户名:sa,密码为空); b.登陆方式问题,在“企业管理器”的“属性”中的“安全”选项卡下将登陆方式修改为SQL Server和Windows混合登陆。 8.2使用说明 参考测试过程。 9.完成情况和总结 9.1总结 通过独立完成本次课程设计,我对数据库这门课程有了更加深刻的理解。在对系统数据库的分析、设计中,碰到很多概念上很模糊的问题,通过查阅相关资料,问题得到了解决,设计工作也顺利进行。另外,通过运用ODBC数据库连接技术,我对vb数据库编程技术也有了一定的了解和认识,希望通过以后的学习继续加深这方面知识的掌握。 参考文献 [1]王汝传.计算机图形学[M].北京:人民邮电出版社,1999:123-130. [2]刘榴娣,刘明奇,党长民.实用数字图像处理[M].北京:北京理工大学出版,2000:12 25.. [3]丁兆海.Delphi基础教程[M].北京:电子工业出版社,1999. [4]王小华.Delphi 5程序设计与控件参考[M].北京:电子工业出版社,1999:70-120. [5]赵子江.多媒体技术基础[M].北京:机械工业出版社,2001:118-130. [6]段来盛,郑城荣,曹恒.Delphi实战演练[M].北京:人民邮政出版社,2002:80-95.


























































- 1
- 2
- 3
- 4
- 5
- 6
- 11





- 粉丝: 0
- 资源: 6

我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
已下载
下载帮助


- 1
- 2
前往页