数据库通用工资管理系统我.docx
《数据库通用工资管理系统我.docx》由会员分享,可在线阅读,更多相关《数据库通用工资管理系统我.docx(20页珍藏版)》请在冰豆网上搜索。
![数据库通用工资管理系统我.docx](https://file1.bdocx.com/fileroot1/2022-11/28/b300c0f2-8e5c-4124-ab34-48d29e7e0217/b300c0f2-8e5c-4124-ab34-48d29e7e02171.gif)
数据库通用工资管理系统我
目录
1系统需求分析......................................................3
1.1任务目标......................................................3
1.2数据流条目.............................................3
1.3可行性分析....................................................3
1.4系统业务流程图................................................3
2系统概念分析.....................................................4
2.1逻辑模型.......................................................4
2.2数据字典......................................................5
2.3E-R图........................................................6.7
3系统逻辑设计......................................................8
3.1实体间的关系..........................................................8
3.2完整性约束............................................................8
3.3范式...................................................................8
4数据库实现........................................................8
4.1基于SQLServer的数据表设计............................................8
4.2角色.....................................................9
4.3关系图..................................................................9
5系统实现.....................................................9-16
6实验设计总结.....................................................17
参考文献..........................................................17
课程设计背景与意义:
随着全球信息化的发展,人事信息化建设也赶上时代的步伐。
工资管理系统的主要目标是支持企、事业的财政管理与事务处理业务人员的劳动强度,辅助企、事业管理,辅助高层领导决策,提高企、事业的工作效率,从而使企、事业能够以少的投入获得更好的社会效益与经济效益,像人事系统、工资管理系统等就属于人事工资管理系统的范畴。
它是单位实现现代化建设的基础工程,是提高单位的管理水平、业务的运转效率和服务质量的必要手段。
因此许多的程序员都可能面对如何开发一套比较完善的人事工资管理系统是相当有必要的问题。
随着计算机技术的飞速发展,计算机在企、事业管理中应用的普及,利用计算机实现企、事业人事工资的管理势在必行。
本系统结合人事、财务制度,经过需求分析、总体设计和详细设计的工资管理系统。
整个系统从符合操作简便、接口友好、灵活、实用、安全的要求出发,完成人事、工资管理的全过程,包括新进员工加入时人事档案的建立、老员工的转出、职位等的变动引起职工信息的修改、员工信息查询、员工工资修改等工资管理工作。
1.系统需求分析(楼炜主做,陈蒋昊,杨钰琨辅助)
1.1任务目标
工资管理系统是提供工资管理人员和职工工资进行管理的系统。
它能自动对不同职务,不同出勤及各个月份的工资进行管理并生成财务表。
工资管理系统的用户需求主要功能有:
1各部门的信息情况
2各职工的信息情况
3考勤信息情况
4工资信息情况
实现功能:
实现本单位财务部门对工资发放的集中管理。
可供财务人员对本单位的人员工资进行增加、删除、修改、查询、导入、导出文件、输出报表,并对系统的可登录人员进行管理;单位其他相关部门的人员对工资的数据编辑无法操作,只能通过查询或导出文件来了解本单位的工资发放情况;对工资发放中的应发工资合计、代扣个人所得税和出勤情况及个人实发工资等项目由系统自动进行计算。
1.2数据流条目
(1)管理员:
在登录管理方面,管理员员以工资发放系统的管理人员身份登录,并对本系统的可登录人员进行管理,有权增加及删除本系统的登录人员,进行自身密码的修改;而本单位其他相关部门的可登录人员在登录本系统后,则只能进行自身密码的修改,而无权增加及删除用户。
管理员角色能够实现如下3项功能:
①添加功能:
向系统中添加新的数据;
②删除功能:
删除系统中不需要的数据;
③修改功能:
修改系统中修要更新的数据。
(2)用户(员工)能够实现如下2项功能:
①信息查询:
用户可以查询自己工资的发放情况;
②密码修改:
用户可以修改需要更改的密码。
1.3可行性分析
工资管理系统是典型的管理信息系统,采用计算机管理企业的工资发放是当前不可缺少的一种管理措施。
其开发主要包括后台数据库的建立与维护以及前端应用程序的开发两个方面。
前者要求建立数据完整性和一致性强,安全性好的数据库。
后者要求应用程序功能完备,易用性强。
基于现有技术已能很好实现!
1.4系统业务流程图
数据流图是组织中信息运动的抽象。
是在调研的基础上,从系统的科学性、管理的合理性、实际运动的可行性角度出发。
将信息处理功能和彼此之间的联系自顶向下,逐层分解,从逻辑上精确地描述系统应具有的数据加工功能、数据输入、数据输出、数据存储及数据来源和去向(外部实体)等项目。
2.系统概念分析(楼炜,陈蒋昊,杨钰琨分做)
数据库概要设计
2.1逻辑模型
图2-1总体逻辑模型
2.2数据字典
表2-1工资信息数据字典表
表中列名
数据类型
长度
数据来源
C_num
varchar
10
工资信息表
Workday
Char
4
工资信息表
Absentday
Char
4
工资信息表
Month
varchar
2
工资信息表
表1.2员工工资数据字典表
表中列名
数据类型
长度
数据来源
id
int
4
教工工资信息表
objectid
int
4
教工工资信息表
property
varchar
64
教工工资信息表
value
varchar
255
教工工资信息表
uvalue
nvarchar
255
教工工资信息表
lvalue
image
16
教工工资信息表
version
int
4
教工工资信息表
表1.3员工信息数据字典表
表中列名
数据类型
长度
数据来源
e_num
varchar
10
教工信息表
name
varchar
15
教工信息表
password
varchar
8
教工信息表
post
nvarchar
20
教工信息表
sex
char
2
教工信息表
tel_number
char
15
教工信息表
stu_degree
varchar
15
教工信息表
dept
varchar
15
教工信息表
2.3E-R图
在系统的数据库设计中,先要对系统分析得到的数据字典中的数据存储进行分析,分析各数据存储之间的关系,然后才能得出系统的关系模式。
可以采用E-R图的方法来进行数据结构分析,E-R设计方法是一种通过E-R图来描述现实世界信息结构的DB设计方法。
E-R图由实体、属性、联系三部分组成。
各分E-R图如下:
员工工资E-R图:
员工所属部门
工资信息E-R图:
员工信息E-R图:
总体E-R图:
3.数据库逻辑设计(楼炜,陈蒋昊,杨钰琨分做)
3.1实体间的关系
本系统含有3个实体(为主码,为外码)
工资信息(工资号编号,出勤日,缺勤日,月份)
员工工资(帐号,员工所属部门,拥有金额,可使用金额,标识,变值,版本)
员工信息(员工编号,姓名,密码,职称,性别,电话号码,教龄,年龄)
3.2完整性约束
3.3.1实体完整性:
3个实体中的4个主码都不为空,满足实体完整性。
3.3.2参照完整性:
3个实体之间外码已经给出,都能找到主码关系表中属性与之对应,满足参照完整性
3.3范式
本系统3个实体,众多属性之间不存在任何函数依赖关系,所以满足第三范式。
4.数据库实施(以学校老师为例)
4.1基于SQLServer的数据表设计
4.1.1员工信息表
图4-1
4.1.2用户信息表
图4-2
4.2角色
建立了用户和管理员2个角色
用户角色:
只能执行查询和密码修改操作。
管理员角色:
能进行查询,修改,添加,删除操作。
4.3关系图
图4-4关系图
5系统实现
5.1登陆界面
packagesalary;
importjava.awt.*;
importjavax.swing.*;
importjava.awt.event.*;
importjava.sql.*;
classLandFrameextendsJFrame
{
JComboBoxlist;
JLabeljLabel1;
JLabeljLabel2;
JTextFieldjtf1;
//TextFieldjtf2;
JPasswordFieldjpwf;
JButtonjbtn,jbtn1;
LandFrame(Strings)
{
super(s);
setLayout(null);
setBounds(100,100,500,400);
list=newJComboBox();
list.setBorder(BorderFactory.createTitledBorder("请选择登录"));
list.addItem("管理员登录");
list.addItem("用户登录");
list.setBounds(175,50,150,50);
jLabel1=newJLabel("用户名:
");
jLabel2=newJLabel("密码:
");
jbtn=newJButton("登录");
jbtn.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente)
{
testify();
}
});
jbtn1=newJButton("退出");
jbtn1.addActionListener(newActionListener()
{
publicvoidactionPerformed(ActionEvente)
{
dispose();
}
});
jtf1=newJTextField(10);
//jtf2=newTextField(10);
//jtf2.setEchoChar('*');
jpwf=newJPasswordField(10);
jpwf.setEchoChar('*');
jLabel1.setBounds(155,150,50,30);
jLabel2.setBounds(155,190,50,30);
jtf1.setBounds(210,150,100,25);
//jtf2.setBounds(230,190,100,25);
jpwf.setBounds(210,190,100,25);
jbtn.setBounds(120,250,80,40);
jbtn1.setBounds(290,250,80,40);
//jbtn.setBounds(110,110,50,50);
Containercon=getContentPane();
con.add(list);
con.add(jLabel1);
con.add(jtf1);
con.add(jLabel2);
//con.add(jtf2);
con.add(jpwf);
con.add(jbtn);
con.add(jbtn1);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
getRootPane().setDefaultButton(jbtn);
setVisible(true);
//validate();
}
voidtestify()
{
Stringstr;
str=(String)list.getSelectedItem();
if(str=="管理员登录")
{
test_manage();
//System.out.println("Hello");
}
else
{
test_employee();
}
//System.out.println(list.getSelectedItem());
}
图5-1登陆界面
5.2主菜单界面
packagesalary;
importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.*;
importjava.sql.*;
importjavax.swing.table.*;
importjava.util.*;
/*publicclassManageFrame
{
publicstaticvoidmain(String[]args)
{
Managemf=newManage("工资管理系统");
}
}*/
classManageFrameextendsJFrame
{
JLabeljLabel1,jLabel2,jLabel4,jLabel5,jLabel6,jLabel7;
JTextFieldjtf1,jtf2,jtf3,jtf4,jtf5;
JButtonbtn1,btn2,btn3,btn4,btn5,btn6,btn7,btn8;
JComboBoxjcb1,jcb2;
ManageFrame(Strings)
{
super(s);
setLayout(null);
setBounds(100,100,500,500);
jcb1=newJComboBox();
jcb1.addItem("1");
jcb1.addItem("2");
jcb1.addItem("3");
jcb1.addItem("4");
jcb1.addItem("5");
jcb1.addItem("6");
jcb1.addItem("7");
jcb1.addItem("8");
jcb1.addItem("9");
jcb1.addItem("10");
jcb1.addItem("11");
jcb1.addItem("12");
jcb2=newJComboBox();
jcb2.setBorder(BorderFactory.createTitledBorder("请选择月份"));
jcb2.addItem("1");
jcb2.addItem("2");
jcb2.addItem("3");
jcb2.addItem("4");
jcb2.addItem("5");
jcb2.addItem("6");
jcb2.addItem("7");
jcb2.addItem("8");
jcb2.addItem("9");
jcb2.addItem("10");
jcb2.addItem("11");
jcb2.addItem("12");
jLabel1=newJLabel("员工号:
");
jLabel2=newJLabel("日期:
");
jLabel4=newJLabel("月");
jLabel5=newJLabel("工作天数:
");
jLabel6=newJLabel("缺席天数:
");
jLabel7=newJLabel("按月份查询员工工资:
");
jtf1=newJTextField(10);
jtf4=newJTextField
(2);
jtf5=newJTextField
(2);
btn1=newJButton("更改基本工资");
btn1.addActionListener(newActionListener()
{
publicvoidactionPerformed(ActionEvente)
{
S_changesc=newS_change("修改工资");
}
});
btn2=newJButton("修改员工信息");
btn2.addActionListener(newActionListener()
{
publicvoidactionPerformed(ActionEvente)
{
Alteral=newAlter("修改");
}
});
btn3=newJButton("增加员工");
btn3.addActionListener(newActionListener()
{
publicvoidactionPerformed(ActionEvente)
{
IncreaseFrameinf=newIncreaseFrame("增加员工");
}
});
btn4=newJButton("删除员工");
btn4.addActionListener(newActionListener()
{
publicvoidactionPerformed(ActionEvente)
{
Deletedl=newDelete("删除员工");
}
});
btn5=newJButton("查看所有员工信息");
btn5.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
//TODO自动生成方法存根
lookover();
}
});
btn6=newJButton("确定");
btn6.addActionListener(newActionListener()
{
publicvoidactionPerformed(ActionEvente){
//TODO自动生成方法存根
count();
}
});
btn7=newJButton("查询");
btn7.addActionListener(newActionListener()
{
publicvoidactionPerformed(ActionEvente)
{
query();
}
});
btn8=newJButton("退出");
btn8.addActionListener(newActionListener()
{
publicvoidactionPerformed(ActionEvente)
{
dispose();
}
});
jLabel1.setBounds(60,40,50,20);
jtf1.setBounds(115,40,100,20);
jLabel2.setBounds(300,40,30,20);
jcb1.setBounds(340,40,45,20);
jLabel4.setBounds(395,40,20,20);
jLabel5.setBounds(60,80,60,20);
jtf4.setBounds(125,80,30,20);
jLabel6.setBounds(200,80,60,20);
jtf5.setBounds(265,80,30,20);
jLabel7.setBounds(80,120,130,30);
jcb2.setBounds(215,120,80,50);
btn1.setBounds(90,230,130,30);
btn2.setBounds(270,230,130,30);
btn3.setBounds(100,290,100,30);
btn4.setBounds(280,290,100,30);
btn5.setBounds(150,370,200,30);
btn6.setBounds(340,75,60,30);
btn7.setBounds(340,130,60,30);
btn8.setBounds(200,420,80,30);
Containercon=getContentPane();
con.add(jLabel1);
con.add(jtf1);
con.add(jLabel2);
con.add(jcb1);
con.add(jLabel4);
con.add(jLabel5);
con.add(jtf4);
con.add(jLabel6);
con.add(jtf5);
con.add(