1、员工薪资管理系统课程设计 学院:班级:学号:姓名:余黎晨 李雪敏 敬翰林 颜学宏指导教师:李竹林 目录一:绪论1.1设计目的 1.2设计内容 1.3开发背景 1.4开发环境 1.5组内成员及分工 二:需求分析 2.1题目分析 2.2功能分析 2.3数据流图 2.4数据字典 2.5系统功能 三:系统分析与设计 3.1概念结构设计 3.2逻辑结构设计 3.3 物理结构设计 四:数据库实施及运行 4.1建基本表 4.3功能实现 4.4完整代码五:设计心得及体会 一:绪论1.1设计目的 员工薪资系统的主要目的是通过操作计算机代替手工劳动,能够在该系统内完成员工的信息录入,查询,删除等操作,方便公司的高
2、效化,规范化管理,有利于员工更好更方便了解自己的薪资信息。 系统开发的总体任务就是实现员工薪资管理的系统化、规范化和自动化。1.2设计内容 题目:员工薪资管理 1) 背景资料a) 某单位现有1000名员工,其中有管理人员、财务人员、技术人员和销售人员。b) 该单位下设4个科室,即经理室、财务科、技术科和销售科。c) 工资由基本工资、福利补贴和奖励工资构成,失业保险和住房公积金在工资中扣除。d) 每个员工的基本资料有姓名、性别、年龄、单位和职业(如经理、工程师、销售员等)。e) 每月个人的最高工资不超过3000元。工资按月发放,实际发放的工资金额为工资减去扣除。2) 设计要求:a) 进行需求分析
3、,编写数据字典。b) 设计E-R图。c) 实现按照科室录入个人的基本资料、工资和扣除金额的数据。d) 计算个人的实际发放工资。e) 按科室、职业分类统计人数和工资金额。f) 实现分类查询。g) 能够删除辞职人员的数据。h) 开发工具不限。1.3开发背景当今社会,随着企业人数的不断增加,企业员工薪资的管理工作也越来越复杂,资金是企业生存的核心部分,而资金流动也是关键环节,随着计算机的普及,计算机管理系统已经原来越来越广泛的应用于各个中小型企业中,用计算机取代手工对企业管理的操作也是势在必行的,并且人为操作容易造成信息错误,纸质材料不易保存,可能会导致企业运转出现滞缓现象,影响企业发展。为了更好的
4、、更方便地管理企业中各个成员的工资发放情况,我们必须要有一个完善的、合理的、便捷的员工薪资管理系统来管理公司员工工资的发放情况。该员工薪资管理系统主要用于中小型企业员工的工资发放管理,此系统的建立和使用有利于员工更好的了解自己的薪资信息,提高公司员工薪资发放工作的效率,大大减少纸质管理对工作带来的失误。1.4开发环境 开发平台:SQL Server2005 开发工具:Eclipse JDBC 开发语言:SQL语言 JAVA语言1.5组内成员及分工李雪敏:系统框架 撰写报告颜学宏:代码编写 数据库的连接与运行 余黎晨:概念结构设计 代码调试 敬翰林:逻辑结构设计 需求分析 二:需求分析2.1题目
5、分析 该题目要求设计一个员工薪资系统,实现员工信息的有序化,规范化,并能进行员工信息录入,查询,修改,删除等操作,能实现分类查询,2.2功能分析 该员工薪资系统能够实现的功能如下:员工信息的管理,包括姓名,性别,年龄,职业,员工号,部门编号基本信息的录入,查询,删除,修改等操作部门信息的管理,包括部门编号和部门名称,查询每个部门的业绩和员工薪资情况薪资信息的管理,包括员工号,部门编号,基本工资,福利补贴,奖励工资,失业保险,住房公积金,实发薪资等信息,统计出员工的基本工资,福利补贴,奖励工资,扣除失业保险,住房公积金后所得的工2.3数据流图注册员工员工基本信息查询员工员工工资记录员工薪资信息形
6、成查询部门经理薪资信息管理部门工资记录统计分析财务统计人员2.4数据字典数据字典在数据库设计中占有很重要的地位,数据字典是各类数据描述的集合,它是进行详细的数据收集和数据分析后所获得的主要成果。根据数据流图对员工薪资管理数据库数据字典的设计如下所示:2.41数据结构名:员工含义说明:员工信息组成:姓名,性别,年龄,职业,员工号数据项名数据类型长度可否为空含义说明员工号char10no员工编号员工姓名char10 no姓名员工年龄char 10 no年龄部门名称char 10 no所属部门员工职业char 10 no担任职务2.42数据结构名:部门含义说明:部门信息组成:部门编号,部门名称数据项
7、名数据类型长度可否为空含义说明部门编号char4no科室类别部门名称char10no科室名称2.43数据结构名:工资含义说明:员工薪资信息组成:员工号,部门编号,基本工资,福利补贴,奖励工资,扣罚工资,失业保险,住房公积金,实发薪资数据项名数据类型长度可否为空含义说明员工号char8no员工编号员工工资char4no所的工资奖励工资money8no基本工资员工薪资money8yes福利和补贴工资 2.5系统功能该员工薪资系统的功能如下: 三:系统分析与设计3.1概念结构设计 ER图设计员工实体关系图性别姓名职业员工员工号年龄部门编号部门实体关系图 部门编号部门部门名称工资实体关系图员工号实发薪
8、资住房公积金福利补贴基本工资部门编号工资奖励工资失业保险总的ER图 3.2概念结构设计 E-R图表示的概念模型是用户数据要求的形式化,它不为任何一个DBMS所支持,而逻辑结构设计的任务就是把概念模型结构转换成某个具体的DBMS所支持的数据模型,员工薪资管理E-R图转换为关系模式为:员工(姓名,性别,年龄,职业,员工号,部门编号)部门(部门编号,部门名称)薪资(员工号,员工工资,福利补贴,奖励工资,失业保险,住房公积金,实发薪资) 四:数据库实施与运行4.1建基本表 员工信息表 部门信息表 工资信息表 4.3功能实现 4.31系统界面展示: 4.32员工信息查询功能 按工号查询: 按姓名查询:
9、4.33员工工资查询功能: 4.34修改员工工资功能: 4.35添加员工功能: 4.36修改员工信息功能: 4.37删除员工信息功能: 4.4完整代码展示 4.41源程序代码/类DBConnect用于数据库的连接/导入sql包import java.sql.*;/创建数据库连接类DBConnectpublic class DBConnect/静态方法提高数据库的连接效率public static Connection getConn() throws Exception/加载JDBC驱动Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);/以系统默认用户身份
10、,连接数据库StudentManagerreturn DriverManager.getConnection(jdbc:odbc:Test,dmj,753);4.42主框架代码: /系统主框架类/导入系统的包import java.awt.*;import java.awt.event.*;import javax.swing.*;/创建主框架类MainFramepublic class MainFrame extends JFrame implements ActionListener/创建内容面板JPanel contentPane;/创建菜单栏组件的对象JMenuBar jMenuBar
11、1=new JMenuBar();/菜单条JMenu jMenu0=new JMenu(退出系统);/菜单JMenuItem jMenuItem0=new JMenuItem(退出);/子菜单JMenu jMenu1=new JMenu(员工管理);JMenuItem jMenuItem1=new JMenuItem(添加员工);JMenuItem jMenuItem2=new JMenuItem(修改员工);JMenuItem jMenuItem3=new JMenuItem(删除员工);JMenu jMenu2=new JMenu(工资管理);JMenuItem jMenuItem4=ne
12、w JMenuItem(添加工资);JMenuItem jMenuItem5=new JMenuItem(修改工资);JMenuItem jMenuItem8=new JMenuItem(工资查询);JMenu jMenu3=new JMenu(员工查询);JMenuItem jMenuItem6=new JMenuItem(按工号查询);JMenuItem jMenuItem7=new JMenuItem(按姓名查询);JMenuItem jMenuItem9=new JMenuItem(互动);/创建标签,用于显示信息JLabel jLabel1=new JLabel(欢迎使用员工薪资管理
13、系统);/创建构造方法public MainFrame()try/关闭框架窗口时的默认事件方法setDefaultCloseOperation(EXIT_ON_CLOSE);/调用初始化方法jbInit();catch(Exception exception)exception.printStackTrace();/界面初始化方法private void jbInit() throws Exception/创建内容面板contentPane =(JPanel) getContentPane();/设置内容面板的布局为空contentPane.setLayout(null);/主框架的大小set
14、Size(new Dimension(400,360);/主框架的标题setTitle( 员工薪资管理系统);/添加事件监听器jMenuItem0.addActionListener(this);jMenuItem1.addActionListener(this);jMenuItem2.addActionListener(this);jMenuItem3.addActionListener(this);jMenuItem4.addActionListener(this);jMenuItem5.addActionListener(this);jMenuItem6.addActionListene
15、r(this);jMenuItem7.addActionListener(this);jMenuItem8.addActionListener(this);jMenuItem9.addActionListener(this);/添加菜单条到主框架setJMenuBar(jMenuBar1);/添加菜单到菜单条jMenuBar1.add(jMenu0);jMenuBar1.add(jMenu1);jMenuBar1.add(jMenu2);jMenuBar1.add(jMenu3);/添加菜单项到菜单jMenu0.add(jMenuItem0);jMenu1.add(jMenuItem1);jM
16、enu1.add(jMenuItem2);jMenu1.add(jMenuItem3);jMenu2.add(jMenuItem4);jMenu2.add(jMenuItem5);jMenu2.add(jMenuItem8);jMenu3.add(jMenuItem6);jMenu3.add(jMenuItem7);/添加标签到主框架内容面板contentPane.add(jLabel1);/设置标签组件的大小和字体jLabel1.setFont(new java.awt.Font(黑体,Font.BOLD,20);jLabel1.setBounds(new Rectangle(65,70,2
17、75,55);/菜单项事件对应的处理方法public void actionPerformed(ActionEvent actionEvent)/点击“系统”菜单下的“退出”菜单项if(actionEvent.getSource()=jMenuItem0)System.exit(0);/点击“员工管理”菜单下的“添加员工”菜单项if(actionEvent.getSource()=jMenuItem1)/创建“添加员工”面板对象AddEmployee AddEmp=new AddEmployee();/移除主框架上原有的内容this.remove(this.getContentPane();/
18、加载“添加职工”面板的对象到主框架this.setContentPane(AddEmp);/令界面可见this.setVisible(true);/点击“员工管理”菜单下的“修改员工”菜单项if(actionEvent.getSource()=jMenuItem2)/创建“修改员工”面板对象ModifyEmployee ModifyEmp=new ModifyEmployee();this.remove(this.getContentPane();/加载“修改员工”面板的对象到主框架this.setContentPane(ModifyEmp);this.setVisible(true);/点击
19、“员工管理”菜单下的“删除员工”菜单项if(actionEvent.getSource()=jMenuItem3)/创建“删除员工”面板对象DeleteEmployee DeleteEmp=new DeleteEmployee();this.remove(this.getContentPane();/加载“删除员工”面板的对象到主框架this.setContentPane(DeleteEmp);this.setVisible(true);/点击“工资管理”菜单下的“添加工资”菜单项if(actionEvent.getSource()=jMenuItem4)/创建工资添加的面板对象AddSala
20、ry AddSal=new AddSalary();this.remove(this.getContentPane();/加载工资添加面板的对象到主框架this.setContentPane(AddSal);this.setVisible(true);/点击“工资管理”菜单下的“修改工资”菜单项if(actionEvent.getSource()=jMenuItem5)/创建工资修改的面板对象ModifySalary ModifySal=new ModifySalary();this.remove(this.getContentPane();/加载工资修改面板的对象到主框架this.setCo
21、ntentPane(ModifySal);this.setVisible(true);/点击“工资管理”菜单下的“工资查询”菜单项if(actionEvent.getSource()=jMenuItem8)/创建工资修改的面板对象SalaryInquire SalaryInq=new SalaryInquire();this.remove(this.getContentPane();/加载工资修改面板的对象到主框架this.setContentPane(SalaryInq);this.setVisible(true);/点击“员工查询”菜单下的“按工号查询”菜单项if(actionEvent.
22、getSource()=jMenuItem6)/创建“按工号查询”面板对象InquireOnGH OnGH=new InquireOnGH();/移除主框架上原有的内容this.remove(this.getContentPane();this.setContentPane(OnGH);this.setVisible(true);4.43主函数Main代码:/系统的主程序类Main/导入包import java.awt.*;import javax.swing.*;/创建主系统类class Mainpublic static void main (String args)/创建主界面,调用Ma
23、inFrame()构造函数和方法MainFrame frame=new MainFrame();/获取屏幕尺寸Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();/获取主界面的窗体尺寸Dimension frameSize =frame.getSize();/令主界面窗体居中if(frameSize.heightscreenSize.height)frameSize.height=screenSize.height;if(frameSize.widthscreenSize.width)frameSize.width=
24、screenSize.width;frame.setLocation(screenSize.width-frameSize.width)/2,(screenSize.height-frameSize.height)/2);/令主界面显示frame.setVisible(true);4.44员工信息查询代码 按工号查询代码/导入系统的类包import java.awt.*;im/按员工号查询面板类InquireOnGHport java.sql.*;import javax.swing.*;import java.awt.event.*;/创建“按员工号查询”类public class Inqu
25、ireOnGH extends JPanel implements ActionListener/声明连接数据库对象Connection con;/声明SQL语句对象Statement st;/创建组件对象:标签、文本行、单选JLabel jLabel1=new JLabel(请输入员工号:);JTextField jTextField1=new JTextField();JButton jButton1=new JButton(查找);JTextArea jTextArea1=new JTextArea();/构造方法public InquireOnGH()try/调用初始化方法jbInit
26、();catch(Exception exception)exception.printStackTrace();/面板初始化方法private void jbInit() throws Exception/连接数据库con=DBConnect.getConn();st=con.createStatement();/框架的布局this.setLayout(null);/设置各组件的大小jLabel1.setFont(new java.awt.Font(黑体,Font.BOLD,16);jLabel1.setBounds(new Rectangle(46,4,222,32);jTextField
27、1.setBounds(new Rectangle(47,37,247,31);jButton1.setBounds(new Rectangle(47,86,247,30);jTextArea1.setBounds(new Rectangle(24,130,305,109);/添加按钮动作事件jButton1.addActionListener(this);/添加组件到面板this.add(jLabel1);this.add(jTextField1);this.add(jTextArea1);this.add(jButton1);/点击按钮事件public void actionPerform
28、ed(ActionEvent e)/获取输入的员工号String EmployeeID=jTextField1.getText();/清空文本区原有的内容jTextArea1.setText();try/利用st对象执行SQL语句,返回结果集对象ResultSet rs=st.executeQuery(select * from Employee where 员工号=+EmployeeID+);/处理结果集if(rs.next()jTextArea1.setText(员工号:+rs.getString(员工号)+n+员工姓名:+rs.getString(员工姓名)+n+员工性别:+rs.get
29、String(员工性别)+n+员工年龄:+rs.getString(员工年龄)+n+部门名称:+rs.getString(部门名称)+n+员工职业:+rs.getString(员工职业)+n);elseJOptionPane.showMessageDialog(this,没有这个员工号的员工!);catch(Exception ex)/利用消息对话框提示查询失败JOptionPane.showMessageDialog(this,员工查询失败!); 按姓名查询 /按员工姓名查询面板类InquireOnName/导入系统的类包import java.awt.*;import java.sql.*
30、;import javax.swing.*;import java.awt.event.*;/创建“按员工姓名查询”类public class InquireOnName extends JPanel implements ActionListener/声明连接数据库对象Connection con;/声明SQL语句对象Statement st;/创建组件对象:标签、文本行、单选JLabel jLabel1=new JLabel(请输入员工姓名:);JTextField jTextField1=new JTextField();JButton jButton1=new JButton(查找);
31、JTextArea jTextArea1=new JTextArea();/构造方法public InquireOnName()try/调用初始化方法jbInit();catch(Exception exception)exception.printStackTrace();/面板初始化方法private void jbInit() throws Exception/连接数据库con=DBConnect.getConn();st=con.createStatement();/框架的布局this.setLayout(null);/设置各组件的大小jLabel1.setFont(new java.
32、awt.Font(黑体,Font.BOLD,16);jLabel1.setBounds(new Rectangle(46,4,222,32);jTextField1.setBounds(new Rectangle(47,37,247,31);jButton1.setBounds(new Rectangle(47,86,247,30);jTextArea1.setBounds(new Rectangle(24,130,305,109);/添加按钮动作事件jButton1.addActionListener(this);/添加组件到面板this.add(jLabel1);this.add(jTex
33、tField1);this.add(jTextArea1);this.add(jButton1);/点击按钮事件public void actionPerformed(ActionEvent e)/获取输入的员工的姓名String EmployeeName=jTextField1.getText();/清空文本区原有的内容jTextArea1.setText();try/利用st对象执行SQL语句,返回结果集对象ResultSet rs=st.executeQuery(select * from Employee where 员工姓名=+EmployeeName+);/处理结果集if(rs.n
34、ext()jTextArea1.setText(员工号:+rs.getString(员工号)+n+员工姓名:+rs.getString(员工姓名)+n+员工性别:+rs.getString(员工性别)+n+员工年龄:+rs.getString(员工年龄)+n+部门名称:+rs.getString(部门名称)+n+员工职业:+rs.getString(员工职业)+n);elseJOptionPane.showMessageDialog(this,没有这个员工号的员工!);catch(Exception ex)/利用消息对话框提示查询失败JOptionPane.showMessageDialog(
35、this,员工查询失败!); 4.45员工工资查询代码/工资查询面板类SalaryInquire/导入系统的类包import java.awt.*;import java.sql.*;import javax.swing.*;import java.awt.event.*;/创建“工资查询”类public class SalaryInquire extends JPanel implements ActionListener/声明连接数据库对象Connection con;/声明SQL语句对象Statement st;/创建组件对象:标签、文本行、单选JLabel jLabel1=new JL
36、abel(请输入要查询的员工号:);JTextField jTextField1=new JTextField();JButton jButton1=new JButton(工资查询);JTextArea jTextArea1=new JTextArea();/构造方法public SalaryInquire()try/调用初始化方法jbInit();catch(Exception exception)exception.printStackTrace();/面板初始化方法private void jbInit() throws Exception/连接数据库con=DBConnect.get
37、Conn();st=con.createStatement();/框架的布局this.setLayout(null);/设置各组件的大小jLabel1.setFont(new java.awt.Font(黑体,Font.BOLD,16);jLabel1.setBounds(new Rectangle(46,4,222,32);jTextField1.setBounds(new Rectangle(47,37,247,31);jButton1.setBounds(new Rectangle(47,86,247,30);jTextArea1.setBounds(new Rectangle(24,1
38、30,305,109);/添加按钮动作事件jButton1.addActionListener(this);/添加组件到面板this.add(jLabel1);this.add(jTextField1);this.add(jTextArea1);this.add(jButton1);/点击按钮事件public void actionPerformed(ActionEvent e)/获取输入的员工号String EmployeeID=jTextField1.getText();/清空文本区原有的内容jTextArea1.setText();try/利用st对象执行SQL语句,返回结果集对象ResultSet rs=st.executeQuery(select * from Salary where 员工号=+EmployeeID+);/处理结果集if(rs.next()jTextArea1.setText(员工号:+rs.getString(员工号)+n+员工工资:+rs.getString(员工工资)+n);elseJOptionPane.showMessageDialog(this,该员工号的员工没有工资记录!);catch(Exception ex)/利用消息对话框提示查询失败JOptionPane.showMessageDialog(thi