资源描述
Java程序设计基础
课程设计
课题名称 工资管理系统——工资管理设计
学 号
姓 名
班 级
指导老师
企业工资管理——工资管理子系统
企业工资管理——工资管理子系统 2
一.需求分析报告 3
1.组织机构操作方式上的可行性 3
2.基础数据的可用性 3
3.经济上的可行性 3
4.技术上的可行性 3
5.目标分析 3
二.项目开发计划 4
1.项目开发组织机构的设置和人员的安排 4
2.项目开发的进度 4
3.项目开发经费的概算 4
4.项目所需的硬件和软件资源等 4
三.系统分析报告 4
1.业务流程图 4
2.数据流程图 6
3.功能分析图 8
4.数据字典………………...…………………………………………………………………..9
5.数据加工处理的描述 12
6.管理信息系统流程设计图(新系统模型) 12
四 .系统设计报告 13
五.系统实现部分 16
2.源程序 16
3.模拟运行数据 33
4.测试用例 34
6.系统使用说明书。 37
六.工作总结 35
七、致谢 36
八.附录 36
一.需求分析报告
1.组织机构操作方式上的可行性
本系统运行在通用的Windows操作系统上,具有Windows相似的操作界面。具有简单易学,使用方便等特点,只需在计算机上进行相关的简单的设置即可,懂得计算机基本操作的人员经过短期培训培训即可熟练操作,熟悉计算机操作的人员不需要再经过专门的培训即可熟练操作。所以,从组织机构操作方式上的可行性分析,该系统是可行的。
2.基础数据的可用性
企业工资管理系统的基础数据都是一些比较常见的基础数据,比如职工编号,姓名,部门编号等等,在系统的设计过程中都是很好使用和编排的,所以,从系统基础数据可用性的角度看,该系统是可行的。
3.经济上的可行性
a.采用新的工资管理系统可取代原系统的单据手工传递工作,减少人工开支,节省资金,并且可大大提高信息量的取得,缩短信息处理周期,提高工资汇总的效率,使公司变的资金运转更加便捷。
b.开发经费、投资方面的来源和限制:各种硬件及人员花费至少需8000元.
所以,从经济上的可行性分析,该系统是可行的。
4.技术上的可行性
本系统是一个数据库管理和查询的系统,现有的技术以较为成熟,硬件、软件的性能要求、环境条件等各项条件良好,估计利用现有技术条件应完全可以达到该系统的功能目标。职工工资管理系统开发与运行环境选择如下:
开发环境:Windows XP
开发工具:Java,Java软件可以选用eclipse3.5
数据库管理系统:access数据库
5.目标分析
做出一个简单实用工资管理系统,不需要功能复杂,只需要实用性强。功能要在很多小型企业都能够使用。操作性简单,要最大限度的减少使用用户的工作量。
二.项目开发计划
1.项目开发组织机构的设置和人员的安排
本系统开发人员共有4位,每人负责一部分。
:负责工资管理部分;
:负责考勤管理部分;
:负责工资管理部分;
:负责前台设置部分;
2.项目开发的进度
本小组决定在两周之内完成该项目的开发,即完成对该工资管理系统的开发,本系统计划分为四个模块,分别为工资管理,工资管理,考勤管理,前后台设置。第一周将系统设计报告撰写好,第三周时间进行系统设计和java代码设计,最后测试系统并加以完善。
3.项目开发经费的概算
项目开发经费的预算为:各种软硬件及人员花费至少需8000元。
4.项目所需的硬件和软件资源等
硬件、软件、运行环境和开发环境方面的条件和限制:软件需求:操作系统WINDOWS 2000 Advance Server以上;数据库服务器端软件access,java编程软件,jdk1.6版本。硬件需求:10M以上的LAN接入网络带宽,P4 3.0G Xeon CPU /1G内存/360G(10K) SCSI硬盘的服务器,P3以上微机(带网卡)的客户机,P4 3.0G Xeon CPU /1G内存/36G(10K) RAID硬盘的数据库服务器。
本系统采用java实现,依靠其强大的控件系统以及access数据库管理系统。
三.系统分析报告
1.业务流程图
图例说明:
表示外部实体 表示处理过程的说明
表示系统 表示生成文档
表示表 表示信息的传输过程,线段上的文字是对传递信息的说明
根据需求分析,我们分析出一个工资管理系统中工资管理子系统业务的一般流程:
首先,用户必须进行注册以及登陆,才能进入工资管理系统。注册及登陆的流程如下:
图3-1员工注册及登陆业务流程图
其次,员工登陆进入工资管理子系统之后就要进行工资查询。
图3-2 企业工资管理——工资管理子系统业务流程图
2.数据流程图
图例说明:
表示外部实体 表示处理过程
表示存储信息或文件 带有名称的有向线段表示数据流
图3-3 工资管理系统顶层DFD
图3-4 工资管理系统的第一层DFD
图3-5 企业工资管理——工资管理子系统的数据流程图
3.功能分析图
该工资管理——工资管理子系统的总体功能可以从两个方面来分析,一是查找功能,二是编辑功能----包括修改,删除,和添加,总体功能设计如图3-4所示。
功
能
名
称
查询功能
编辑功能
员工
员工和管理员都可以通过在进入工资管理子系统后,对员工的基本,和基本工资信息进行查询
无
管理员
管理员通过管理权限登录后,可根据改变员工信息,对基本工资表,工资表进行修改,添加和删除操作。
图3-6 工资管理子系统功能分析图
4.数据字典
数据字典中有六类条目:数据元素、数据结构、数据流、数据存储、处理过程和外部实体。不同类型的条目有不同的属性。根据“数据流程图”,编写相应的“数据字典”,如下所示。
(1)数据元素条目
数据元素条目
总编码:3-1
编号:01
数据项名称:员工编号 有关编码说明:
数值类型:离散 XX XX
类型:数字 序号
长度:8 职务编号
说明: 员工的具体编号
有关数据结构:
基本工资表,工资表,可变工资表,最终工资表
考勤表
数据元素条目
总编码:3-2
编号:02
数据项名称:姓名
类型:字符
长度:8
说明: 员工的姓名
有关数据结构:
基本工资表,工资表,可变工资表,最终工资表
考勤表
数据元素条目
总编码:3-3
编号:03
数据项名称:性别
类型:字符
长度:2
说明: 员工的所拥有的性别
有关数据结构:
工资表,最终工资表,考勤表
数据元素条目
总编码:3-4
编号:04
数据项名称:部门编号 有关编码说明:
数值类型:离散 XX
类型:数字 部门编号
长度:2
说明: 员工的所在部门的编号
有关数据结构:
工资表,可变工资表,最终工资表
考勤表
数据元素条目
总编码:3-5
编号:05
数据项名称:职务编号 有关编码说明:
数值类型:离散 XX
类型:数字 职务编号
长度:2
说明: 员工的拥有的职务的编号
有关数据结构:
工资表,最终工资表
数据元素条目
总编码:3-8
编号:08
数据项名称:底薪
类型:数字
长度:8
说明: 员工的得到的工资
有关数据结构:
工资表,最终工资表
数据元素条目
总编码:3-9
编号:09
数据项名称:津贴
数值类型:离散
类型:数字
长度:8
说明: 员工得到的津贴
有关数据结构:
工资表,最终工资表
(2)数据流条目
名称:基本工资表
简要说明:每月结束时,有工资管理员填写的表 总编号:3-10
数据来源:管理员 编号:10
数据流向: P1.1,P1.3
包含的数据结构: 流通量:1份/ 月
员工编号
性别
姓名
部门编号
职务编号
底薪
津贴
(3)处理过程定义
名称:查询最终工资
说明:月末员工查询最终工资 总编号:3-12
输入: P3.2 编号:12
输出: D6
处理:员工通过正确的权限,进入到
最终工资表界面,查询其本月所得到
的最终工资.
名称:修改基本工资表
说明:月末管理员修改或查询基本工资 总编号:3-14
输入:P1.1,P1.3 编号:14
输出: D2
处理:管理员通过工资表和基本工资表的变动,对
基本工资表进行查询或修改.
(4)数据存储
数据存储名称:基本工资表
说明:月末按员工编号给员工发的最基本工资 总编号:3-16
包含的数据结构: 编号:16
员工编号
性别 有关的数据流:
姓名
部门编号
职务编号 信息量:1份/月
底薪 有无立即查询:有
津贴
5.数据加工处理的描述
数据加工处理的工具主要包括:结构化语言,判断树,决策表。下面用结构化语言描述。
如果 职务是经理
则 基本工资为2500
如果 职务是部长
则 基本工资为2000
如果 职务是工人
则 基本工资为1200
6.管理信息系统流程设计图(新系统模型)
图3-7 企业工资管理——工资管理子系统设计报告
四 .系统设计报告
1. 功能结构设计
本学工资管理子系统主要分为三个模块,包括查询,添加,修改和删除。本系统首先将员工的基本和基本工资信息输入,然后可以进行以下三种功能操作。
图4-1 企业工资管理——工资管理子系统功能模块设计
2. 新系统信息处理流程设计
图4-2
3.代码设计(如:职工证号和部门代号等)
每一个代码都只代表唯一的实体或属性,代码必须简单明了,但必须有利于对数据进行统计、汇总、分析等操作。同时必须满足系统要求,便于记忆和使用。
该工资管理子系统是针对员工信息进行管理的,主要涉及到的人员是员工,下面对员工的相关代码结构及编码规则进行说明,如下所示:
员工编号
10 00
编号
部门编号
5.程序设计说明书
五.系统实现部分
1.程序框图(程序流程图)
2.源程序
下面是程序的各部分关系图:
普通员工进入后的界面,只有查询功能,其余有添加修改删除操作的菜单为灰色,不能操作。
这是管理员进入后的界面,全部可以操作,菜单显示可以全部操作。
这是登陆界面的代码:
import java.awt.*;
class denglu extends Frame
{ public Label name=new Label("用户名");
public Label pass=new Label("密码");
public TextField txtname=new TextField();
public TextField txtpass=new TextField();
public Button btok=new Button("登陆");
public Button btexit=new Button("取消");
public condb conu=new condb();
private String sql=null;
private ResultSet rs=null;
private Image img;
public denglu()
{
img=getToolkit().getImage(getClass().getResource("/ww.png"));
setTitle("欢迎使用工资管理系统");
setLayout(null);
setResizable(false);
setSize(500,350);
Dimension scr=Toolkit.getDefaultToolkit().getScreenSize();
Dimension frm=this.getSize();
setLocation((scr.width-frm.width)/2,(scr.height-frm.height)/2-18);
txtpass.setEchoChar('*');
txtname.setBounds(120,260,120,27);
txtpass.setBounds(120,300,120,27);
btok.setBounds(340,260,100,28);
btexit.setBounds(340,300,100,28);
add(name);
add(txtname);
add(pass);
add(txtpass);
add(btok);
add(btexit);
setVisible(true);
btexit.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
dispose();
System.exit(0);
} });
btok.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
sql="select * from 数据库用户 where 用户名='"+txtname.getText()+"' and 密码='"+txtpass.getText()+"'";
try { rs=conu.getrs(conu.con,sql);
if(rs.next() )
{ mainff mf=new mainff();
if(rs.getInt(4)!=0){
mf.getInitsys().setEnabled(false);
mf.getUser().setEnabled(false);
mf.getGong2().setEnabled(false);
}
dispose();
mf.show();
}
else { JOptionPane jop=new JOptionPane();
jop.showMessageDialog(null,"用户名或密码错误","信息提示!",-1);}
}catch(Exception ee){}
}
} );
addWindowListener( new WindowAdapter()
{public void windowClosing(WindowEvent e)
{ dispose();
System.exit(0);
}
} );
}
public void paint(Graphics g)
{ g.setClip(new Rectangle2D.Float(0,0,500,350));
g.drawImage(img,0,0,this);
}
}
public class dl
{ public static void main(String args[])
{ denglu deng=new denglu();
}
}
工资查询的功能截图
查询代码:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;
class whole extends JDialog implements ActionListener {
private condb con = null;
private ResultSet rs = null;
private String sql = null;
private JLabel bmhao = new JLabel("员工编号:");
private JLabel bmname = new JLabel("姓名:");
private JTextField wholetx1 = new JTextField();
private JTextField wholetx2 = new JTextField();
private JButton ok = new JButton("查询");
private JOptionPane jop = new JOptionPane();
private JTable ta = null;
private JScrollPane taooo = new JScrollPane();
private String col[] = { "员工编号", "姓名", "旷工", "迟到", "底薪", "加班", "绩效奖励",
"出勤金额", "实发工资" };
private Object rowline[][] = new String[45][10];
private boolean tf = false;
public whole() {
con=new condb();
setTitle("全部信息");
setSize(600, 300);
getContentPane().setBackground(Color.LIGHT_GRAY);
getContentPane().setLayout(null);
Dimension scr = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frm = getSize();
setLocation((int) (scr.getWidth() - frm.getWidth()) / 2, 150);
bmhao.setBounds(50, 20, 80, 30);
wholetx1.setBounds(140, 20, 50, 20);
bmname.setBounds(210, 20, 80, 30);
wholetx2.setBounds(300, 20, 50, 20);
ok.setBounds(400, 20, 100, 30);
getContentPane().add(bmhao);
getContentPane().add(wholetx1);
getContentPane().add(bmname);
getContentPane().add(wholetx2);
getContentPane().add(ok);
ok.addActionListener(this);
setVisible(true);
}
public void initTable(Object row[][], String col[]) {
if (wholetx1.getText().equals("")&& wholetx2.getText().equals("")) {
sql = "select * from 员工数据表,出勤表,员工绩效,最终工资 where" +
" 员工数据表.员工编号=最终工资.员工编号 and 最终工资.员工编号=出勤表.员工编号 and 出勤表.员工编号=员工绩效.员工编号";
} else if (wholetx1.getText().equals("") == false) {
sql = "select * from 员工数据表,出勤表,员工绩效,最终工资 where" +
" 员工数据表.员工编号=最终工资.员工编号 and 最终工资.员工编号=出勤表.员工编号 and 出勤表.员工编号=员工绩效.员工编号 and 员工数据表.员工编号= "+wholetx1.getText() + "";
System.out.println(sql);
}
else if (wholetx2.getText().equals("") == false) {
sql = "select * from 员工数据表,出勤表,员工绩效,最终工资 where" +
" 员工数据表.员工编号=最终工资.员工编号 and 最终工资.员工编号=出勤表.员工编号 and 出勤表.员工编号=员工绩效.员工编号 and 员工数据表.员工姓名='"+wholetx2.getText() + "'";
System.out.println(sql);
}
Connection conn=con.getConn();
Statement sta=null;
try {
sta = conn.createStatement();
ResultSet rs=sta.executeQuery(sql);
int cnt = 0;
while (rs.next())
{
rowline[cnt][0] = rs.getString("员工编号");
rowline[cnt][1] = rs.getString("员工姓名");
rowline[cnt][2] = rs.getString("矿工次数");
rowline[cnt][3] = rs.getString("迟到次数");
rowline[cnt][4] = rs.getString("底薪");
rowline[cnt][5] = rs.getString("加班次数");
rowline[cnt][6] = rs.getString("绩效奖励");
rowline[cnt][7] = rs.getString("出勤金额");
rowline[cnt][8] = rs.getString("实发工资");
cnt++;
}
ta = new JTable(rowline, col);
ta.setSize(580, 190);
taooo = new JScrollPane(ta);
taooo.setLocation(20, 50);
taooo.setSize(560, 190);
getContentPane().add(taooo);
this.repaint(0, 0, 500, 300);
tf = false;
} catch (SQLException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
public void actionPerformed(ActionEvent ae) {
/* {int cnt=1;
while(cnt<11)
{ rowline[cnt][0]="1";
rowline[cnt][1]="2";
rowline[cnt][2]="3";
rowline[cnt][3]="4";
rowline[cnt][4]="5";
rowline[cnt][5]="6";
rowline[cnt][6]="7";
rowline[cnt][7]="8";
rowline[cnt][8]="9";
rowline[cnt][9]="10";
cnt++;
}
ta=new JTable(rowline,col);
ta.setSize(580,190);
taooo=new JScrollPane(ta);
taooo.setLocation(20,50);
taooo.setSize(560,190);
getContentPane().add(taooo);
this.repaint(0,0,500,300);
con.dbclose(con.con,rs);
con=null;
tf=false;}//删除*/
if (tf == false) {
for (int i = 0; i < rowline.length; i++)
for (int j = 0; j < 10; j++)
rowline[i][j] = null;
initTable(rowline, col);
wholetx1.setText("");
wholetx2.setText("");
}
}
}
这是工资设置的功能截图:
工资设置的代码:
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import javax.swing.*;
class bm extends Frame implements ActionListener,ItemListener
{ private condb conx=null;
private ResultSet rs=null;
private String sql=null;
long id;
private Label num=new Label("员工编号");
private Label jb=new Label("姓名");
private Label fj=new Label("底薪");
private Label in=new Label("绩效奖励");
private Label chu=new Label("出勤金额");
private Label sf=new Label("实发工资");
private TextField numtx=new TextField();
private TextField jbtx=new Te
展开阅读全文