1、 工资管理系统的设计与实现摘 要 本系统主要是解决数据库的建立和优化过程。工资管理系统中不同的企业和单位所需要的数据库的关系模式和功能是有差别的,本系统主要是设计一个小型的工资管理系统。在设计过程中要对实际情况进行需求分析得出实体关系模型,接着进行概念结构设计,设计出概念模型和总体的E-R图。逻辑结构设计阶段对关系模型进行优化处理形成3NF或BCNF。接着按数据库最终关系模型进行功能设计,建立数据库且编写应用程序实现工资管理系统功能模块。关键词 工资管理系统;JAVA语言;SQL Server 2000Dormitory Management System Design and Impleme
2、ntationAbstract This system is mainly to solve database creation and optimization process. Wage management systems of different enterprises and units need to pattern of relationships and functions of the database is a difference, and this system is mainly designed for a small wage management system.
3、 In the design process, we need the actual situation needs analysis derived entity-relationship model, followed by the conceptual structural design, design a conceptual model and the overall ER diagram. Logical structure of the design phase of the relational model to optimize the formation of 3NF or
4、 BCNF. Then design the relational model database and write an application.Key words Dormitory Management System; JAVA language; SQL Server 20001 引 言员工工资管理问题,一直是企业内的一个大问题。工资问题的有效解决将有利于管理者更好的管理企业,也有利于员工安心工作,所以对于一个企事业单位来说有一个好的工资管理系统是必不可少的。工资管理系统应包括员工的基本工资的浏览查询等功能。并且有一个方便易操作的界面对管理者来说是很必要的。本系统基于这些原因以精简的界
5、面和方便易操作的设计思想设计了该小型的工资管理系统。1.1 课程设计背景随着市场竞争的日趋激烈,人才已成为实现企业自身战略目标的一个非常关键的因素。企业中人心的向背和员工对工作的投入程度在很大程度上决定了该企业的兴衰与成败。如何能保持本企业员工的工作责任感,激励他们的工作热情 ,减少人才的流失,已成为困扰企业主管的一个日益尖锐的问题,可以说企业管理从根本上来讲就是对人的管理 。现在“公平、公正、合理”的企业管理原则已为不少企业所采纳。但是要实现“公平、公正、合理”绝非易事,它不是光靠规章制度和政策就可以解决的。通过建立透明、相容、一致、易查和全面的工资管理系统,将与人相关的信息统一地管理起来,
6、才有可能为“公平、公正、合理”原则的实现,以及企业在运作和劳资纠纷等方面的风险规避等建立一套科学的保障体系。1.2 课程设计内容工资管理系统是基于先进的软件和高速、大容量的硬件基础上的新的工资管理模式,通过集中式的信息库、自动处理信息、员工自助服务、外协以及服务共享,达到降低成本、提高效率、改进员工服务模式的目的。本课题将要完成的工作有:(1) 数据库需求分析通过对实际的调查和自己的实际经验来全放为分析本课题需要完成和实现的功能,并通过多方面了解来完善客户对该系统的需求。建立实体模型和关系,形成最终的需求分析表和数据流图。(2) 概念结构设计 构造数据字典和数据结构,分析系统的实体和实体属性,
7、构建实体模型和E-R图。(3) 逻辑结构设计优化关系模型,对上面建立的关系模型进行优化达到3NF或BCNF,再构造各个实体的数据表和关系模型,并在关系模型中体现彼此之间的联系。(4) 实现系统功能 在前面分析的基础上创建数据库1 salary。通过SQL Server 20002的查询分析器建立该数据库。并在企业管理器中建立与该数据库对应的关系模型的表,体现表间关系。用JAVA语言编写源代码实现对数据库1的查询、修改、删除等操作并且测试截图。2 本系统关键技术简介2.1 JAVA语言特点(1) 平台无关性 平台无关性是指Java能运行于不同的平台。Java引进虚拟机原理,并运行于虚拟机,实现不
8、同平台的Java接口之间。使用Java编写的程序能在世界范围内共享。Java的数据类型与机器无关,Java虚拟机(JavaVirtualMachine)是建立在硬件和操作系统之上,实现Java二进制代码的解释执行功能,提供于不同平台的接口的。(2) 安全性Java的编程类似C+,学习过C+的读者将很快掌握Java的精髓。Java舍弃了C+的指针对存储器地址的直接操作,程序运行时,内存由操作系统分配,这样可以避免病毒通过指针侵入系统。Java对程序提供了安全管理器,防止程序的非法访问。(3) 面向对象Java吸取了C+面向对象的概念,将数据封装于类中,利用类的优点,实现了程序的简洁性和便于维护性
9、。类的封装性、继承性等有关对象的特性,使程序代码只需一次编译,然后通过上述特性反复利用。程序员只需把主要精力用在类和接口的设计和应用上。Java提供了众多的一般对象的类,通过继承即可使用父类的方法。在Java中,类的继承关系是单一的非多重的,一个子类只有一个父类,子类的父类又有一个父类。Java提供的Object类及其子类的继承关系如同一棵倒立的树形,根类为Object类,Object类功能强大,经常会使用到它及其它派生的子类。(4) 分布式 Java建立在扩展TCP/IP网络平台上。库函数提供了用HTTP和FTP协议传送和接受信息的方法。这使得程序员使用网络上的文件和使用本机文件一样容易。(
10、5) 键壮性Java致力于检查程序在编译和运行时的错误。类型检查帮助检查出许多开发早期出现的错误。Java操纵内存减少了内存出错的可能性。Java还实现了真数组,避免了覆盖数据的可能。这些功能特征大大提高了开发Java应用程序的周期。Java提供:Null指针检测、数组边界检测、异常出口、Bytecode校验。(6) Java与C/C+语言的比较Java提供了一个功能强大语言的所有功能,但几乎没有一点含混特征。C+安全性不好,但C和C+被大家接受,所以Java设计成C+形式,让大家很容易学习。Java去掉了C+语言的许多功能,让Java的语言功能很精炼,并增加了一些很有用的功能,如自动收集碎片
11、。Java去掉了以下几个C和C+功能:指针运算结构、Typedefs、#define、需要释放内存。2.2 SQL Server 2000介绍Microsoft SQL Server 2000是美国微软公司推出的使用相当广泛的数据库管理系统,包含一套图形工具,如服务器管理(用于启动和关闭数据库服务)、企业管理器(用于创建和修改数据库及备份数据库等)和查询分析器(用于交互执行Transact-SQL 语句和过程并提供图形查询分析功能)等。SQL Server 20005按照设计可以为部署和维护强大的、易于管理、支持商务活动的 Web 站点提供最好的性能,这些站点可以从事商家和商家之间或商家与客户
12、之间的交易。在寻求一个支持您的电子商务解决方案的数据库时,需要考虑的项目包括:可用性、性能、可管理性和价格。高效的数据分析性能:通过利用Microsoft SQL Server 2000 Analysis Service多维数据集的数据压缩、支持处理过程中聚合的部分聚合、以及分区等功能,提供了一个高效的数据操作机制。由于对数据的组织形式和业务视角密切联系,这样在回答经营分析问题的时候,对数据的查询,分类,汇总是直接进行的,提供了其他方式所无法比拟的查询效率。灵活的业务扩展性:数据仓库技术直接回答的是业务问题,其实现方式也是以解决一个个业务需求的形式组织的。随着新业务的出 业务需求建设新的模型,
13、这种堆叠形式的建设方式为整个系统随业务的发展而平稳发展提供了良好的条件。操作系统集成的安全性:Microsoft SQL Server 2000 Analysis Services为管理员和最终用户都提供了强大的安全性。管理员的安全性可以通过使用 “OLAP管理器”的 Microsoft Windows NT4.0和 Windows 2000组来控制。最终用户安全性指定了哪些最终用户可以访问数据,以及最终用户可以执行的操作类型,其中包括用户是否有读取和读/写访问权利。Microsoft SQL Server 2000 Analysis Service提供了丰富的安全性设置选项。管理员可以在不同
14、的级别上定义最终用户安全属性,从而对安全管理进行进一步的加强。从高级到低级,这些级别包括:服务器(Analysis服务器)、数据库、多维数据集/挖掘模型、维度成员以及单元。这些丰富的不同粒度级别的安全控制使得管理员能够根据业务需求的灵活定义系统的安全性。客户及管理工具的易用性:使用办公中最常使用的Office XP产品作为客户前端的展现工具,用户对于系统使用的熟悉程度和认知程度都能大大提高,并有效的降低了用户培训和维护的费用。管理端则使用和其他管理工作相似的界面MMC,使管理人员也在一个操作经验和操作方式相似的环境下进行所有的管理工作。同时,SQL Server 20006的动态优化机制使得数
15、据库系统总是能够根据当前的工作负载,自动调节在最优的参数设置下工作,最大化的减少了管理员的负担。SQL Server 20008还提供了包括多种向导和编辑器,使得管理员能够根据系统的提示逐步完成任务,这些工具将极大的简化DBA和其他IT管理人员的系统使用。由于利用了报表模板技术,在本系统中增加新的报表时,不需要在客户端安装新的程序,仅需要下载新的报表模板,这降低了系统部署的难度。管理工作的简化,提高了管理工作的效率,降低了系统运行维护的成本。3 数据库需求分析本系统主要是用来对企事业单位的员工工资进行管理,所以所设计的数据库应该是面向工资管理的。针对系统的功能和所面向的对象可以确定该数据库7中
16、应该包括员工的基本信息、员工工资发放信息及历史记录。另外由于企业内有许多岗位和不同的职务,所以还应该有一个职称表用来记录各个员工的职务信息。现在的单位由于为了增加经济效益,对员工应该采取考勤政策,所以数据库中应该有考勤表。由于数据库系统是要用来对员工工资进行管理,所以应该对各个用户设置访问权限和访问密码增加数据库的安全性,应在数据库中设置了一个管理员登录账号的信息表用来记录管理员的账号和密码。分析中生成的实体及描述如表3-1表3-1 实体表实体描述employee_info员工,记录与一个员工相关的信息salary工资,记录一个员工某一个月的工资信息post职称,记录职称的相关信息check_
17、attend考勤,记录一个员工某个月的考勤信息manage管理员登录,记录管理员账号和密码数据库中的实体之间应有一定的联系,通过对各实体的分析不难发现他们之间的联系如表3-2表3-2 实体关系表关系employee_infosalarypostcheck_attendmanageemployee_info拥有包括salary被拥有包括post被包括check_attend被包括manage根据前面的需求分析和各个实体间的关系,最终形成数据流图,如图3.1输入是否登录框管理员账号员工账号判断用户名和密码是否正确查询自己的工资发放情况查询所有员工的工资发放情况更改基本工资删除员工增加员工修改员工信
18、息员工管理员图3.1 数据流图4 概念结构设计4.1 数据字典经过分析和考察,得出下面的数据字典:employee_info表(职工信息表)e_num=e_num,员工编号,varchar(20),主键name= name,员工姓名,varchar(40),非空password=password,员工密码,varchar(20),非空 post=post,员工职称,nvarchar(20),非空,外键sex=sex,员工性别,char(2),非空tel_number=tel_number,联系电话,varchar(50) stu_degree=stu_degree,文化程度,varchar(5
19、0)dept=dept,所在部门,varchar(50)post表(职称表)posttitle=posttitle,职称名,nvarchar(20),主键basic_salary=basic_salary,基本工资,money(8),非空check_attend表(考勤表)c_num=c_num,员工号,varchar(20)workday=workday,工作天数,char(4) absentdayabsentday,缺席天数,char(4) month=month,月份,varchar(2)主键(c_num,month)salary表(工资表)s_num=s_num,员工号,varchar
20、(20),外键 bonus=bonus,奖金,money(8)deduct=deduct,扣除,money(8)s_basicsalary=s_basicsalary,基本工资,money(8),非空fact_saraly=fact_saraly,实发工资,money(8)month=month,月份,varchar(2),外键主键(s_num,month)manage表(管理员登录信息表)m_num=m_num,管理员账号,char(40),主键m_password=m_password,管理员密码,varchar(50)4.2 数据结构employee_info表:员工信息表,包括员工编号
21、+员工姓名+员工登录密码+员工职称+员工性别+联系电话+文化程度+所在部门,其结构图如图4.1所示employee_infotel_numberstu_degreepasswordenumnamepostsexdept图4.1 员工表结构图post表:职称表,包括职称名+基本工资,其结构图如图4.2所示postbasic_salaryposttitle图4.2 职称表结构图check_attend表:考勤表,包括员工号+工作天数+缺勤天数+月份,其结构图如图4.3所示monthworkdayabsentdaycheck_attendc_num图4.3 考勤表结构图salary表:工资表,包括员
22、工号,奖金,扣除,基本工资,实发工资,月份,其结构图如图4.4所示salaryfact_salarys_numbonusdeductmonths_basicsalary图4.4 工资表结构图manage表:管理员登录信息表,包括管理员账号,管理员密码,其结构图如图4.5 managem_passwordm_num图4.5 管理员结构图4.3 E-R图的生成通过对分析和对实际的企业的考察得知:员工和工资之间是一对多的关系,即一个员工可以拥有多个工资记录,一个工资记录只能被一个员工所拥有;员工还和职称有联系,它们之间是多对一的联系,一个员工只能有一个职称而一个职称可以被多个员工所拥有,这也体现了企
23、业中一个岗位有多名员工的情形;工资和考勤之间的关系是一对一的关系,一个工资表只能有一个考勤表和它对应,而一个考勤表也只能被一张工资表所拥有,也就是说如果一个员工是按月发放工资那么他每一个月就只能有一个工资记录并且只有一个考勤记录。构造出E-R图,如图4.611n1nemployee_infopostsalary包括包含拥有fact_salarys_basicsalarys_numbonusdeductmonthbasic_salaryposttitle1monthworkdayabsentdaycheck_attendc_numemployee_infotel_numberstu_degree
24、passwordenumnamepostsexdept图4.6 E-R关系图5 逻辑结构设计5.1 优化关系模型对前面建立的E-R图进行分析。进行以下优化:员工表:把员工表的员工编号设为主键,职称和员工编号分别设为职称表和工资表的外键。该表里面没有部分函数依赖和传递函数依赖,符合3NF。工资表:把员工编号、月份设为主键,员工编号设为考勤表的外键。该表中消除了部分函数依赖和传递函数依赖,符合3NF。职称表:职称名为主键。只有两个属性且只和职工表有联系,所以是3NF。考勤表:职工编号、月份为主键,与工资表中的职工编号和月份相对应。没有传递函数依赖和部分函数依赖,达到3NF。管理员信息表:管理员账号
25、作为主键,用来记录管理系统管理员对数据库进行操作的账号和密码,不与E-R图相联系。自身就是BCNF。通过对各个表及之间的关系进行了优化后整个关系模型已经达到了3NF,达到了优化的目的,所以可以直接用此模型来建立相应的数据库和数据表了。此时得出的关系模型就是优化的关系模型。5.2 关系模型及所生成的表根据前面的E-R关系模型,对关系模型进行优化。建立以下的表和关系模型员工表(e_num,name,password,post,sex,tel_number,stu_degree,dept),如图5.1图5.1 员工信息表职称表(posttitle,basic_salary),如图5.2图5.2 职称
26、表工资表(s_num,bonus,deduct,s_basicsalary,fact_salary,month),如图5.3图5.3 工资表考勤表(c_num,workday,absentday,month),如图5.4图5.4 考勤表通过对各表的主键和外键的设置及关系模型优化,可以得出各个表所形成的关系模型图,如图5.5图5.5 关系模型6 系统部分功能的实现6.1 数据库的设计与实现(1) 创建数据库create database salary on primary (name=salaryf_Data,filename= D:数据库sql server 2000,size=1M,maxs
27、ize=10M,filegrowth=1M )log on( name=salaryf_Log,filename= D:数据库sql server 2000,size=1M,maxsize=3M,filegrowth=1M ) (2) 连接数据库 由于系统中的各个功能模块都需要连接数据库,所以在这里只给出员工登录时进行账号和密码验证的数据库连接,其他的数据库连接与此类似。void test_employee()String str1,str2;str1=jtf1.getText();str2=new String(jpwf.getPassword();tryClass.forName(com.
28、microsoft.jdbc.sqlserver.SQLServerDriver); /加载驱动catch(ClassNotFoundException e)try Connection con;con=DriverManager.getConnection(jdbc:microsoft:sqlserver:/localhost:1433;DatabaseName=salary,sa,sa); /连接PreparedStatement psmt=con.prepareStatement(select password from employee_info where e_num=+str1+)
29、;ResultSet res=psmt.executeQuery();if(!res.next()JOptionPane.showMessageDialog(this, 查无此人,错误,JOptionPane.ERROR_MESSAGE);else String pwd=res.getString(1);String pw=pwd.trim();if(!(pw.equals(str2) JOptionPane.showMessageDialog(this, 密码错误, 错误, JOptionPane.ERROR_MESSAGE);else loader2();dispose();psmt.cl
30、ose();con.close(); catch (Exception e) 6.2 系统功能的实现与测试(1) 更改基本工资功能的实现。该功能模块设计的基本思想:当把数据库salary建立好后,通过程序的连接代码和数据库建立连接。运行程序后会出现登录界面,要求用户选择登录类型并且输入用户名和登录密码。这里我们选择管理员类型,输入用户名和密码后,如果用户名输入不成功则会弹出“用户名错误”信息,如果用户名正确密码错误则提示“密码错误”。这里使用的管理员帐户是建立数据库时manage表中的帐户和密码,如果用户名和密码都输入正确则会进入到主界面,然后就可以对基本工资进行修改了。选择职位名称,输入基本
31、工资,然后提交就会出现“修改成功”的提示;点击退出就返回主界面。(2) 系统测试及截图登录功能的实现,利用数据库中的manage表中记录的信息来登录管理员帐户,对系统进行管理和维护。利用JAVA3语言的JDBC连接和数据库salary连接起来,从而对数据库进行操作。登录界面如图6.1图6.1 登录界面主界面实现,当以管理员账号登录时将进入主界面。如图6.2图6.2 主界面系统还包括更改基本工资模块,如图6.3;删除员工模块,如图6.4;增加员工模块,如图6.5;修改员工信息模块,如图6.6 图6.3 修改工资模块 图6.4 删除员工模块 图6.5 增加员工模块 图6.6 修改工资模块7 总结我
32、设计该工资管理系统花了很长时间,因为是一个人单独完成,所以还有很多没有做好的地方和没有想到的地方。开始时我先是做了工资管理系统的数据库,用来存放职工信息、工资发放信息、部门信息,接下来对各个表单进行了优化形成了完整的工资管理系统数据库。在对该系统进行了全面的需求分析后,最后用JAVA4语言实现了对工资管理系统的各个功能模块的设计。后来在添加程序代码的时候又遇到了好多麻烦,但在同学的帮助下我都顺利的解决了。整个系统大概花了一个周,由于设计者水平有限及时间等方面的原因,该系统的功能比较简单,查错能力也不强,对于一些不正确的输入可能会造成一些难以预料的结果,在数据库设计阶段可能考虑不是很周全,各个表
33、单之间的关系配置或许不是很恰当,因此可能会有一些冗余。这些不足请老师多多谅解。今后设计者会更多的学习编程技巧,不断的提高程序设计水平。在这之中我知道我还有很多的不足之处和很多错误没能想到,希望在以后的学习中能够努力弥补自己的不足争取在以后的课程设计中能够有好的成绩。参考文献1 王珊 萨师煊 编著. 数据库系统概论. 北京: 高等教育出版社,20062 唐洪亮 编著. SQL Server数据库设计与系统开发教程. 北京:清华大学出版社,20073 (美) Y.Daniel Liang著. 王镁译. Java语言程序设计基础篇. 北京:机械工业出版社,20064 (美) Jacquie Bark
34、er著. 万波等译. Java语言程序设计基础篇. 北京:人民邮电出版社,20075 曹军生著. SQL SERVER 2000实用教程. 北京:北京理工大学出版社,2001 6 李小喆著. SQL SERVER 2000 管理及应用系统开发. 人民邮电出版社,2001 7 王珊,陈红著. 数据库原理与应用. 北京:清华大学出版社, 2006 8 陈世洪,王晓海,廖建华著. SQL Server200管理开发应用详解. 北京:人民邮电出版社,2006 致 谢在这次数据库课程设计中,曾遇到过不少问题,单靠我个人的努力,很难按时完成该课程设计,在此,我衷心感谢我的指导老师徐远芳。徐远芳老师认真负责
35、的工作态度,严谨的治学精神和深厚的理论水平都使我获益非浅。另外,还要感谢学校领导、班主任、各位同学对我们的关怀、帮助,为我们提供了良好的设计环境以及各方面的支持。附 录:部分程序代码:/主函数public class Land public static void main(String args) LandFrame lf=new LandFrame(登陆);/用户登录void testify()String str;str=(String)list.getSelectedItem();if(str=管理员登录)test_manage();elsetest_employee();void t
36、est_manage()String str1,str2;str1=jtf1.getText();str2=new String(jpwf.getPassword();tryClass.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver);catch(ClassNotFoundException e)tryConnection con;con=DriverManager.getConnection(jdbc:microsoft:sqlserver:/localhost:1433;DatabaseName=salary,sa,sa);Prep
37、aredStatement psmt=con.prepareStatement(select m_password from manage where m_num=+str1+);ResultSet res=psmt.executeQuery();if(!res.next()JOptionPane.showMessageDialog(this, 查无此人,错误,JOptionPane.ERROR_MESSAGE);elseString pwd=res.getString(1);System.out.println(pwd);if(!(pwd.equals(str2)JOptionPane.sh
38、owMessageDialog(this, 密码错误, 错误, JOptionPane.ERROR_MESSAGE);elseloader1();dispose();psmt.close();con.close();catch(Exception e)e.printStackTrace();/主界面void lookover()final JFrame jf=new JFrame();jf.setLayout(new BoxLayout(jf.getContentPane(),BoxLayout.Y_AXIS);JButton jbtn=new JButton(关闭);jbtn.addActi
39、onListener(new ActionListener()public void actionPerformed(ActionEvent e)jf.dispose(););jf.setBounds(100, 100, 700, 500);jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);Container con1=jf.getContentPane();JTable table;Object a;Object name=员工号,姓名,密码,职称,性别,联系电话,文化程度,工作单位;try Class.forName(com.micr
40、osoft.jdbc.sqlserver.SQLServerDriver); catch (ClassNotFoundException e) / TODO: handle exceptiontry Connection con=DriverManager.getConnection(jdbc:microsoft:sqlserver:/localhost:1433;DatabaseName=salary,sa,sa);Statement sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_O
41、NLY);ResultSet rs=sql.executeQuery(select e_num,name,password,post,sex,tel_number,stu_degree,dept from employee_info);rs.last();int number=rs.getRow();a=new Objectnumber8;rs.beforeFirst();int a_num=0;while(rs.next()String num1=rs.getString(1);String name1=rs.getString(2);String password1=rs.getStrin
42、g(3);String post1=rs.getString(4);String sex1=rs.getString(5);String tel_number1=rs.getString(6);String stu_degree1=rs.getString(7);String dept1=rs.getString(8);aa_num0=num1;aa_num1=name1;aa_num2=password1;aa_num3=post1;aa_num4=sex1;aa_num5=tel_number1;aa_num6=stu_degree1;aa_num7=dept1;a_num+;table=
43、new JTable(a,name);con1.add(new JScrollPane(table);con1.add(jbtn);jf.setVisible(true); catch (Exception e) e.printStackTrace();/查询功能实现void alter() String e_num1,name1,password1,post1,sex1,tel_number1,stu_degree1,dept1;e_num1=jtf1.getText();name1=jtf2.getText();password1=jtf3.getText();post1=(String)jcb1.getSelectedItem();sex1=(String)jcb2.getSelectedItem();tel_number1=jtf6.getText();stu_degree1=jtf7.getText();dept1=jtf8.getText();if(e_num1.equals()JOptionPane.showMessa