小型公司管理系统说明书.pdf

上传人:罗晋 文档编号:7200533 上传时间:2020-11-05 格式:PDF 页数:41 大小:4.06MB
返回 下载 相关 举报
小型公司管理系统说明书.pdf_第1页
第1页 / 共41页
小型公司管理系统说明书.pdf_第2页
第2页 / 共41页
小型公司管理系统说明书.pdf_第3页
第3页 / 共41页
小型公司管理系统说明书.pdf_第4页
第4页 / 共41页
小型公司管理系统说明书.pdf_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《小型公司管理系统说明书.pdf》由会员分享,可在线阅读,更多相关《小型公司管理系统说明书.pdf(41页珍藏版)》请在三一文库上搜索。

1、小型公司工资管理系统 需求分析 1 第一章 需求分析 1.1 功能要求 1.功能概况 本次设计要求运用面向对象设计知识,利用 JAVA 语言设计实现一个“小型公司 工资管理系统” 。 2.存储功能 能够存储雇员的编号、姓名、性别、所在部门,级别,并进行工资的计算。 其中,雇员级别分为经理、技术人员、销售人员和销售经理。四类人员的月薪计 算方法如下:经理拿固定月薪;技术人员按小时领取月薪;销售人员按其当月销 售额的提成领取工资;销售经理既拿固定月薪也领取销售提成。由此要求,该项 目需要利用数据库的关系表存储数据。 3.添加功能 程序能够任意添加上述四类人员的记录, 可提供选择界面供用户选择所要添

2、加的 人员类别,要求员工的编号要唯一,如果添加了重复编号的记录时,则提示数据 添加重复并取消添加。需要利用 Java 语言连接数据库,使用数据库添加语句。 4.查询功能 可根据编号、姓名等信息对已添加的记录进行查询,如果未找到,给出相应的 提示信息, 如果找到, 则显示相应的记录信息。 利用 Java Swing 控件进行展示。 5.编辑功能 可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。 6.删除功能 主要实现对已添加的人员记录进行删除。如果当前系统中没有相应的人员记录, 则提示“记录为空! ”并返回操作;否则,输入要删除的人员的编号或姓名,根 据所输入的信息删除该人员记录,如

3、果没有找到该人员信息,则提示相应的记录 不存。 7.统计功能 能根据多种参数进行人员的统计。例如,统计四类人员数量以及总数,或者统计 男、女员工的数量,或者统计平均工资、最高工资、最低工资等信息。利用数据 库语句完成统计。 8.界面功能 利用 java 的 GUI 功能设计系统的图形用户界面,要求界面美观,易用。 小型公司工资管理系统 概要设计 2 第二章 概要设计 2.1 系统分析 2.1.1 架构设计 本系统采用架构如图 2.1 所示,主要分为三个模块:用户操作界面、身份认证中 心和用户数据库。其中,用户操作界面为最顶层功能,便于用户选择以添加、修改、 删除、查询统计公司信息;身份认证中心

4、便于鉴别不同用户,以实现映射到不同的 数据库(表) ;用户数据库中保存用户个人存储的信息,同时实现最底层功能,即各 项功能的基本操作。 图 2.1 系统架构 小型公司工资管理系统 概要设计 3 2.1.2 实体设计 1.登陆实体 作为程序的进入窗口,用户登陆时,系统会要求用户输入账号和密码,并在数据 库中进行匹配分析,若用户名存在且密码正确则通过身份认证,同时映射到用户 个人的数据表中,不同用户对应不同数据表存储相关信息。 2.主界面实体 登录成功后的功能选择界面,包含添加、查询、显示、统计四个功能,其中,对 于查询或显示的信息可直接选择并完成修改删除功能。 3.添加功能实体 从主界面中选择进

5、入,负责接收用户输入的员工信息,判断员工编号是否重复、 录入的员工信息格式是否正确,并将符合要求的数据项其上传至数据库,完成添 加员工信息的操作。 4.查询功能实体 从主界面中选择进入,按照用户选择的查找方式和具体查找要求,从数据库中筛 选符合条件的信息并以表格形式显示,如果未查询到相关信息会给以提示。 5.修改功能实体 从查询功能实体进入。查询结果会以表格的形式显示在用户面前,用户可以双击 某项查询结果进入编辑界面完成修改功能,同添加功能类似,系统会判断用户修 改的编号是否已经重复、修改的信息是否格式正确,并将符合要求的信息在数据 库中完成更新修改操作。 6.删除功能实体 从查询功能实体进入

6、。查询结果会以表格的形式显示在用户面前,用户可以双击 某项查询结果进入编辑界面,在编辑界面中可选择删除此信息,删除完成后将会 予以反馈。 7.统计功能实体 自动统计以下内容:公司整体信息(职位分布、部门人数分布等) 、各部门详细 信息(男女比例、工资情况、年龄情况、职位分部等) ,并可由用户自行选取具 体部门、具体级别并显示统计结果,所有统计结果均自动绘图显示。 小型公司工资管理系统 概要设计 4 图 2.2 实体设计 2.1.3 分层设计 1.数据库驱动层(数据层) 数据库驱动层为最底层,主要以各种 JDBC 数据库驱动语句以及各种算法组成, 完成添加、修改、删除、查询、统计分析的基本功能,

7、并完成添加修改过程中的 编号查重、格式判断等异常判断。各功能成功或失败情况将传递给上层,同时, 异常情况也将分类传递给上层。 2.异常处理层(功能层) 主要分类处理数据库反馈的结果,例如查询成功失败、添加的编号重复、修改成 功等操作的反馈结果。并处理来自底层抛出的异常,捕获后生成提示信息传递给 上一层。 3.用户界面层(表示层) 接受来自异常处理层的处理结果: 对于异常, 采用消息框提示的方式展示给用户; 对于查询结果,以表格的形式显示在界面上;对于统计结果,自动绘制图表显示 给用户;其他提示信息同样采用消息框给用户反馈。同时用户可以直接在界面上 选择相应功能,底层会自动实现相应操作并反馈给用

8、户界面层。 小型公司工资管理系统 概要设计 5 图 2.3 系统层次结构 小型公司工资管理系统 概要设计 6 2.2 程序流程 2.2.1 系统流程图 图 2.4 系统流程图 2.2.2 调用关系 运行程序后,首先进入用户登陆界面,用户名与密码不匹配则登陆失败,成 功则进入用户操作主界面。 在用户操作主界面中有四个按钮供用户选择, 分别是: 添加记录、 查询记录、 显示信息、统计整理,点击不同按钮跳转至不同功能实现界面。 添加信息模块允许用户添加新信息,系统会判断编号是否重复、各式是否正 确。若通过审核则将此信息添加至数据库中,询问用户是否继续添加。如果退出 则重新返回主界面。 查询信息模块允

9、许用户按个人需求查询相关信息,如:职员编号、姓名、性 小型公司工资管理系统 概要设计 7 别、级别、部门等。查询得到的信息会显示在表格中,用户可以点击表格中具体 某一项选择编辑信息,在编辑模块中可以修改或删除选中的信息。 显示信息模块与查询功能类似,显示的内容会自动放入表格中同时允许编辑 修改。 统计整理模块会将统计得到的信息以图表形式显示给用户,同时允许用户自 行查询想要统计的信息并自动绘制图表。 小型公司工资管理系统 课程设计总结 8 第三章 详细设计 3.1 功能类定义与实现 3.1.1 常量与参数的定义(Parameter 类) 1.JDBC 数据库连接所用参数与端口 JDBC(Jav

10、a Data Base Connectivity,java 数据库连接)是一种用于执行 SQL 语句的 Java API,可以为多种关系数据库提供统一访问,它由一组用 Java 语言编写 的类和接口组成。JDBC 为数据库开发人员提供了一个标准的 API,据此可以构建更 高级的工具和接口,使数据库开发人员能够用纯 Java API 编写数据库应用程序, 并且可跨平台运行,并且不受数据库供应商的限制。 本系统采用的是MySQL数据库, 编程语言为Java语言, 编译器为Eclipse Oxygen, Java连接数据库时需要用到JDBC驱动器、 数据库URL以及数据库管理员账号密码等。 根据数据

11、库的 URL、用户名和密码,创建一个 JDBC Connection 对象。如: Connection connection = DriverManager.geiConnection(“连接数据库的 URL, 用户名, 密码”)。其中,URL=协议名+IP 地址(域名)+端口+数据库名称;用户名 和密码是指登录数据库时所使用的用户名和密码。示例创建 MySQL 的数据库连接代 码如下: Connection connectMySQL = DriverManager.geiConnection(“jdbc:mysql:/localhost:3306/myuser,root ,root ); 对

12、应代码如下: public static final String JDBC_DRIVER = com.mysql.jdbc.Driver; public static final String DB_URL = jdbc:mysql:/localhost:3306/java?useSSL=true public static final String ACC = root; public static final String PWD = zxczxc; 小型公司工资管理系统 课程设计总结 9 2.职员级别对应代号 本系统中将职员级别分为四种:经理、技术人员、销售人员、销售经理,其中经 理拿

13、固定月薪;技术人员按小时领取月薪;销售人员按其当月销售额的提成领取工 资;销售经理既拿固定月薪也领取销售提成。若想方便统计需要将对应职位转换成 相应的代号。此处经理对应 int 型数字 1,技术人员对应 2,销售人员对应 3,销售 经理对应 4.具体如下: public static final int Manager = 1; /经理 public static final int Engineer = 2; /技术人员 public static final int Salesman = 3; /销售人员 public static final int SalesManager = 4;

14、/销售经理 3.工资自动计算所需常量 由于经理拿固定月薪;技术人员按小时领取月薪;销售人员按其当月销售额的提 成领取工资;销售经理既拿固定月薪也领取销售提成。若想方便计算工资,必须提 前订好各种常量,如:固定的月薪、工作每小时的工资、销售额提成比例等,具体 如下: public static final int BASE = 5000; /底薪 public static final int HOUR = 80; /每小时工资 public static final double Parameter = 0.015; /提成比例 3.1.2 职工个人信息的定义(Person 类) 1.职工个人

15、信息 职工个人信息包括:职工编号(唯一) 、姓名、性别、年龄、电话号码、所属部 门、工作级别、月工作时间、月销售总额、月工资。其中月工资不可显式输入,自 动由程序结算得到。通过构造函数直接创建对象,具体如下: public Person(String ID,String name,String sex,int age,String phone, String department,int kind,int hours,double sells) this.ID = ID; this.name = name; this.sex = sex; this.age = age; this.phone

16、= phone; 小型公司工资管理系统 课程设计总结 10 this.department = department; this.kind = kind; this.hours = hours; this.sells = sells; 通过此方法得到私有成员变量: public String getID() return ID; 2.职工工资计算方法 经理拿固定月薪;技术人员按小时领取月薪;销售人员按其当月销售额的提成领 取工资;销售经理既拿固定月薪也领取销售提成。具体计算方法如下: switch (kind) case 1: this.salary = Parameter.BASE; bre

17、ak; case 2: this.salary = Parameter.HOUR*hours; break; case 3: this.salary = Parameter.Parameter*sells; break; case 4: this.salary = Parameter.BASE + Parameter.Parameter*sells; break; default: return; 小型公司工资管理系统 课程设计总结 11 3.1.3 数据库查询与底层算法(JDBC 类) 1.JDBC 连接数据库 (1)在开发环境中加载指定数据库的驱动程序。使用的数据库是MySQL,所以需 要

18、下载MySQL支持JDBC的驱动程序(mysql-connector-java-5.1.18-bin.jar);而开 发环境是Eclipse,将下载得到的驱动程序加载进开发环境中。 (2)在Java程序中加载驱动程序。在Java程序中,可以通 过 “Class.forName(“指定数据库的驱动程序”)” 方式来加载添加到开发环境 中的驱动程序,例如加载MySQL的数据驱动程序的代码 为: Class.forName(“com.mysql.jdbc.Driver”) (3) 创建数据连接对象: 通过DriverManager类创建数据库连接对象Connection。 DriverManager

19、类作用于Java程序和JDBC驱动程序之间,用于检查所加载的驱动程序 是否可以建立连接,然后通过它的getConnection方法,根据数据库的URL、用户名 和密码,创建一个JDBC Connection 对象。如:Connection connection = DriverManager.geiConnection(“连接数据库的URL, 用户名, 密码”)。 其中,URL=协议名+IP地址(域名)+端口+数据库名称;用户名和密码是指登录数据库 时所使用的用户名和密码。 (4)创建Statement对象:Statement 类的主要是用于执行静态 SQL 语句并返 回它所生成结果的对象。通

20、过Connection 对象的 createStatement()方法可以创建 一个Statement对象。 例如: Statement statament = connection.createStatement(); 具体示例创建Statement对象代码如下: Statement statamentMySQL =connectMySQL.createStatement(); (5) 调用Statement对象的相关方法执行相对应的 SQL 语句: 通过execuUpdate() 方法用来数据的更新,包括插入和删除等操作,例如向staff表中插入一条数据的代 码: statement.ex

21、cuteUpdate( INSERT INTO staff(name, age, sex,address, depart, worklen,wage) + VALUES (Tom1, 321, M, china,Personnel,3,3000 ) ) ; 通过调用Statement对象的executeQuery()方法进行数据的查询,而查询结果会得到 ResulSet对象,ResulSet表示执行查询数据库后返回的数据的集合,ResulSet对象 具有可以指向当前数据行的指针。 通过该对象的next()方法, 使得指针指向下一行, 然后将数据以列号或者字段名取出。如果当next()方法返回n

22、ull,则表示下一行中 没有数据存在。使用示例代码如下: ResultSet resultSel = statement.executeQuery( select * from staff ); 小型公司工资管理系统 课程设计总结 12 (6)关闭数据库连接:使用完数据库或者不需要访问数据库时,通过Connection的 close() 方法及时关闭数据连接。 2.身份认证 对于用户,需要先要求输入账号密码,并将账号密码传入数据库身份鉴别表进行 匹配,若用户名密码均匹配成功,则映射到用户创建的表中。传入参数为账号和密 码,返回判断情况:返回1为账号不存在、返回2为密码不正确、返回3为出现数据库

23、 连接异常、返回0则认证成功。 public static int LoginCharge(String acc,String pwd) try Class.forName(Parameter.JDBC_DRIVER); Connection conn = DriverManager.getConnection(Parameter.DB_URL, Parameter.ACC, Parameter.PWD); Statement stat = conn.createStatement(); String query = select * from + Parameter.COMPANY + wh

24、ere acc= + acc + ; ResultSet rs = stat.executeQuery(query); if (!rs.next() return 1;/账号不存在 String pwd2 = rs.getString(pwd); if(!pwd2.equals(pwd) return 2;/密码不正确 String table = rs.getString(table); Parameter.TABLE = table; return 0; catch (Exception e) e.printStackTrace(); return 3; 3.向数据库中插入信息 小型公司工

25、资管理系统 课程设计总结 13 插入信息模块中,需要判断插入的编号是否重复,如果重复则不允许插入,函数 rs.next()如果返回结果不为空,则说明已经存在此编号。输入信息为Person对象, 返回判断结果:返回1为编号已存在,返回2为数据库连接异常,返回0为插入成功, 具体如下: public static int insertIntoSql(Person p) try Class.forName(Parameter.JDBC_DRIVER); Connection conn = DriverManager.getConnection(Parameter.DB_URL, Parameter.

26、ACC, Parameter.PWD); Statement stat = conn.createStatement(); / 判断是否已经存在编号 String query1 = select * from + Parameter.TABLE + where no= + p.getID() + ; ResultSet rs = stat.executeQuery(query1); if (rs.next() return 1; String query = INSERT INTO + Parameter.TABLE + VALUES ( + p.getID() + , + p.getName

27、() + , + p.getSex() + , + p.getAge() + , + p.getPhone() + , + p.getDep() + , + p.getKind() + , + p.getHours() + , + p.getSells() + , + p.getSalary() + ); stat.executeUpdate(query); return 0; catch (Exception expt) return 2; 4.从数据库中删除信息 小型公司工资管理系统 课程设计总结 14 删除信息模块中,需要删除的编号是否存在,如果不存在则不允许删除,函数 rs.next(

28、)如果返回结果为空,则说明此编号对应的职员不存在。输入信息为职员的 编号ID,返回判断结果:返回1为编号不存在,返回2为数据库连接异常,返回0为插 入成功,具体如下: public static int deleteFromsql(String id) try Class.forName(Parameter.JDBC_DRIVER); Connection conn = DriverManager.getConnection(Parameter.DB_URL, Parameter.ACC, Parameter.PWD); Statement stat = conn.createStatemen

29、t(); String query1 = select * from + Parameter.TABLE + where no= + id + ; ResultSet rs = stat.executeQuery(query1); if (!rs.next() return 1; String query2 = delete from + Parameter.TABLE + where no= + id + ; stat.executeUpdate(query2); return 0; catch (Exception expt) return 2; 5.从数据库中查询信息 小型公司工资管理系

30、统 课程设计总结 15 查询信息模块中, 具体分为按照ID查询和按照其他条件查询, 具体差别为ID唯一, 至多只能查找到一条信息,而按照其他条件查询可能会返回多条信息,因此需要区 别处理,输入信息为职员的信息,返回值为查询结果,为空则查询失败具体如下: public static String searchByID(String id) /按照ID查询 try Class.forName(Parameter.JDBC_DRIVER); Connection conn = DriverManager.getConnection(Parameter.DB_URL, Parameter.ACC, P

31、arameter.PWD); Statement stat = conn.createStatement(); String query1 = select * from + Parameter.TABLE + where no= + id + ; ResultSet rs = stat.executeQuery(query1); if (!rs.next() return null; String name = rs.getString(name); String sex = rs.getString(sex); int age = rs.getInt(age); String phone

32、= rs.getString(phone); String department = rs.getString(department); int kind = rs.getInt(kind); int hours = rs.getInt(hours); double sells = rs.getDouble(sales); double salary = rs.getDouble(salary); String result = id + + name + + sex + + age + + phone + + department + + kind + + hours + + sells +

33、 + salary; / 生成日志 File f = new File(log.txt); 小型公司工资管理系统 课程设计总结 16 if (!f.exists() f.createNewFile(); PrintStream ps = new PrintStream(new FileOutputStream(f); ps.println(result); ps.close(); return result; catch (Exception expt) return Fail; public static String searchByOthers(String chosen, String

34、 others) /按照其他条件查询,chosen为条件,others为具体筛选内容 try Class.forName(Parameter.JDBC_DRIVER); Connection conn = DriverManager.getConnection(Parameter.DB_URL, Parameter.ACC, Parameter.PWD); Statement stat = conn.createStatement(); String query; if (chosen.equals(age) | chosen.equals(kind) query = select * fro

35、m + Parameter.TABLE + where + chosen + = + Integer.parseInt(others) + ; else query = select * from + Parameter.TABLE + where + chosen + = + others + ; ResultSet rs = stat.executeQuery(query); if (!rs.next() return null; 小型公司工资管理系统 课程设计总结 17 String id = rs.getString(no); String name = rs.getString(na

36、me); String sex = rs.getString(sex); int age = rs.getInt(age); String phone = rs.getString(phone); String department = rs.getString(department); int kind = rs.getInt(kind); int hours = rs.getInt(hours); double sells = rs.getDouble(sales); double salary = rs.getDouble(salary); String result = id + +

37、name + + sex + + age + + phone + + department + + kind + + hours + + sells + + salary; while (rs.next() id = rs.getString(no); sex = rs.getString(sex); name = rs.getString(name); age = rs.getInt(age); phone = rs.getString(phone); department = rs.getString(department); kind = rs.getInt(kind); hours =

38、 rs.getInt(hours); sells = rs.getDouble(sales); salary = rs.getDouble(salary); result += # + id + + name + + sex + + age + + phone + + department + + kind + + hours + + sells + + salary; catch (Exception expt) expt.printStackTrace(); return Fail; 小型公司工资管理系统 课程设计总结 18 6.从数据库中更新信息 编辑信息模块中,如果需要修改信息,则需要

39、启用更新操作:先判断是否修改了 编号,如果修改编号则需要判断修改后的编号是否重复,如果重复则不允许修改为 此编号。输入修改前的Person对象和修改后的Person对象,如果修改失败则回退操 作,即把原来的Person对象恢复,具体实现如下: public static int UpdateFromsql(Person newP, Person oldP) try Class.forName(Parameter.JDBC_DRIVER); Connection conn = DriverManager.getConnection(Parameter.DB_URL, Parameter.ACC,

40、 Parameter.PWD); Statement stat = conn.createStatement(); if (deleteFromsql(oldP.getID() != 0) return 1; String query1 = select * from + Parameter.TABLE + where no= + newP.getID() + ; ResultSet rs = stat.executeQuery(query1); if (rs.next() if (insertIntoSql(oldP) != 0) JOptionPane.showMessageDialog(

41、null, 发生未知错误); return 2; if (insertIntoSql(newP) != 0) if (insertIntoSql(oldP) != 0) JOptionPane.showMessageDialog(null, 发生未知错误); return 3; 小型公司工资管理系统 课程设计总结 19 return 0; catch (Exception expt) if (insertIntoSql(oldP) != 0) JOptionPane.showMessageDialog(null, 发生未知错误); return 4; 7.从数据库中统计整理信息 统计整理模块功

42、能较为复杂,但实现方法大体类似,根据具体的查询条件和查询 内容查询相关的信息,并返回结果,具体实现如下: (1)统计数量 public static int statisticCount(String option) try Class.forName(Parameter.JDBC_DRIVER); Connection conn = DriverManager.getConnection(Parameter.DB_URL, Parameter.ACC, Parameter.PWD); Statement stat = conn.createStatement(); String query

43、= select count(*) from + Parameter.TABLE + +option; ResultSet rs = stat.executeQuery(query); if (!rs.next()|rs.getString(1)=null) return 0; int result = Integer.parseInt(rs.getString(1); return result; 小型公司工资管理系统 课程设计总结 20 catch (Exception expt) JOptionPane.showMessageDialog(null, 发生未知错误); return 0;

44、 (2)统计不同职位的人数(代码类似,见附录) public static int statisticKindCount(int kind, String option1, String option2) (3)统计不同性别的人数(代码类似,见附录) public static int statisticSexCount(String sex, String option1, String option2) (4)统计最高、最低、平均工资(代码类似,见附录) public static double statisticAvgSalary(String option1, String optio

45、n2) public static double statisticMaxSalary(String option1, String option2) public static double statisticMinSalary(String option1, String option2) (4)统计最大、最小、平均年龄(代码类似,见附录) public static double statisticAvgAge(String option1, String option2) public static int statisticMaxAge(String option1, String option2) public static int statisticMinAge(S

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1