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)六.工作总结 (39)七、致谢 (39)八.附录 (39)一.需求分析报告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)数据元素条目(2)数据流条目(3)处理过程定义(4)数据存储5.数据加工处理的描述数据加工处理的工具主要包括:结构化语言,判断树,决策表。
下面用结构化语言描述。
如果职务是经理则基本工资为2500如果职务是部长则基本工资为2000如果职务是工人则基本工资为1200 6.管理信息系统流程设计图(新系统模型)图3-7 企业工资管理——工资管理子系统设计报告四 .系统设计报告1.功能结构设计本学工资管理子系统主要分为三个模块,包括查询,添加,修改和删除。
本系统首先将员工的基本和基本工资信息输入,然后可以进行以下三种功能操作。
图4-1 企业工资管理——工资管理子系统功能模块设计2.新系统信息处理流程设计图4-23.代码设计(如:职工证号和部门代号等)每一个代码都只代表唯一的实体或属性,代码必须简单明了,但必须有利于对数据进行统计、汇总、分析等操作。
同时必须满足系统要求,便于记忆和使用。
该工资管理子系统是针对员工信息进行管理的,主要涉及到的人员是员工,下面对员工的相关代码结构及编码规则进行说明,如下所示:员工编号5.五.系统实现部分1.程序框图(程序流程图)2.源程序下面是程序的各部分关系图:登录工资管理系统登陆权限对与否管理员编辑界面员工查询界面Y N增添删除修改员工信息基本工资员工信息基本工资员工信息基本工资员工信息基本工资查询退出子系统普通员工进入后的界面,只有查询功能,其余有添加修改删除操作的菜单为灰色,不能操作。
这是管理员进入后的界面,全部可以操作,菜单显示可以全部操作。
这是登陆界面的代码: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 TextField(); private TextField fjtx=new TextField(); private TextField chutx=new TextField(); private TextField sftx=new TextField(); private TextField intx=new TextField(); private Choice numcho=new Choice(); private Button add=new Button("增加"); private Button exit=new Button("退出"); private Button set=new Button("设置"); public bm(){ setTitle("添加工资");setSize(400,300);setBackground(Color.LIGHT_GRAY);this.setLocationRelativeTo(this.getParent());this.setResizable(false);setLayout(null);num.setBounds(80,50,50,20);jb.setBounds(80,70,50,20);fj.setBounds(80,90,50,20);in.setBounds(80,110,50,20);chu.setBounds(80,130,50,20);sf.setBounds(80,150,50,20);numtx.setBounds(160,50,100,20);jbtx.setBounds(160,70,100,20);fjtx.setBounds(160,90,100,20);intx.setBounds(160,110,100,20);chutx.setBounds(160,130,100,20);sftx.setBounds(160,150,100,20);numcho.setBounds(160,170,100,20);add.setBounds(60,220,50,20);set.setBounds(180,220,50,20);exit.setBounds(300,220,50,20);add(add);add(set);add(exit);add(num);add(jb);add(fj);add(in);add(chu);add(sf);add(numtx);add(jbtx);add(fjtx);add(intx);add(chutx);add(sftx);add(numcho);//lbadd.addActionListener(this);set.addActionListener(this);exit.addActionListener(this);numcho.addItemListener(this);initnumcho();setVisible(true);addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){dispose();}});}public void itemStateChanged(ItemEvent i){ numtx.setText(numcho.getSelectedItem());String str=numtx.getText();conx=new condb();sql="select * from 最终工资where 员工编号="+str;// System.out.println(sql);try{rs=conx.getrs(conx.con,sql);rs.next();jbtx.setText(rs.getString(3));fjtx.setText(rs.getString(4));intx.setText(rs.getString(7));chutx.setText(rs.getString(6));sftx.setText(rs.getString(9));conx.dbclose(conx.con,rs);conx=null;rs=null;} catch(Exception eo){}}public void initnumcho(){ conx=new condb();sql="select * from 最终工资";numcho.removeAll();try { rs=conx.getrs(conx.con,sql);while(rs.next()){numcho.add(rs.getString("员工编号"));}conx.dbclose(conx.con,rs);conx=null;rs=null;}catch(Exception eo){}}public void actionPerformed(ActionEvent e){ conx=new condb();if(e.getActionCommand().equals("退出"))this.dispose();if(e.getActionCommand().equals("设置")){try{sql="update 最终工资"+"set 姓名='"+jbtx.getText()+"',底薪="+fjtx.getText()+",绩效奖励="+intx.getText()+",出勤金额="+chutx.getText()+",实发工资="+sftx.getText()+" where 员工编号="+numtx.getText();// System.out.println(sql);conx.moddb(conx.con, sql);try { //System.out.println(sql);conx.con.close();}catch(Exception ue){System.out.println(""+ue);}JOptionPane jop=new JOptionPane();jop.showMessageDialog(null," 修改成功!","修改成功",-1);conx=null;rs=null;}catch(Exception et){JOptionPane jop=new JOptionPane();jop.showConfirmDialog(null,"修改失败!","警告!",-1);conx=null;rs=null;System.out.println(""+et);}}if(e.getActionCommand().equals("增加")){sql="select MAX(id) from 最终工资";try { rs=conx.getrs(conx.con,sql);rs.next();id=rs.getLong(1);id++;System.out.println(id);rs=null;}catch(Exception eo){}// sql="update * from 最终工资where 员工编号='"+numtx.getText()+"'";try{sql="insert into 最终工资(员工编号,姓名,底薪,绩效奖励,出勤金额,实发工资,id)"+"values("+numtx.getText()+",'"+jbtx.getText()+"',"+fjtx.getText()+","+intx.getText()+","+chutx.getText()+","+sftx.get Text()+","+id+")";// System.out.println(sql);conx.moddb(conx.con, sql);try { // System.out.println(sql);conx.con.close();}catch(Exception ue){System.out.println(""+ue);}JOptionPane jop=new JOptionPane();jop.showMessageDialog(null," 工资添加成功!","添加成功",-1);initnumcho();numtx.setText("");jbtx.setText("");fjtx.setText("");conx=null;rs=null;}catch(Exception et){JOptionPane jop=new JOptionPane();jop.showConfirmDialog(null,"添加失败!","警告!",-1);conx=null;rs=null;System.out.println(""+et);}}}}/*else*/3.模拟运行数据在新系统部分完成的时候,需要对程序进行调试,看程序是否运行正确,将各个数据输入道程序当中,进行调试。