系统设计
根据客户的需要,本软件系统是猎头公司内部管理系统,用户仅限于公司内部员工,需求功能主要是员工或者公司的管理层能通过软件系统,进行一系列的操作,从而实现管理公司的目的,下面是具体的需求:
(1)既然软件系统的用户仅限于公司内部的员工,所以就必须要有判断是否内部员工的功能。
(2)员工应该能从软件系统上了解到公司内部的新闻和通知,并且公司的管理层应该有发布和修改的功能。
(3)有一些突发事件随时有可能发生,如地址和联系方式的变化,这就要求员工能通过系统对自己的一些资料进行修改。
(4)员工不可能记的住公司每个人的地址、联系方式等,所以要有通过查询得知其他员工一些资料的功能。
(5)公司随时都可能根据发展计划进行新员工的加入和老员工的退出,这就要公司的管理层能通过软件系统随时录入和删除员工的资料。
(6)既然是管理软件,其主要功能还是公司的管理层能通过软件系统对公司的管理,如财务部的能从系统的计算结果得知每个人的薪金,人事部能随时通过系统调出员工的资料,每个部门的管理者都能对自己部门的员工的业绩进行操作等等。
需求分析是从客户的需求中提取出软件系统能够帮助用户解决的业务问题,而设计方案则是根据需求分析,规划出系统的功能模块,具体的划分如下:
1.公共模块
2.用户登录模块
3.系统主页模块
4.公司新闻模块
5.公司通知模块
6.用户对自己资料的操作模块
7.查询模块
8.各部门高层对本部门员工的操作模块
9.工资计算模块
如图1所示:
软件系统主要是公司的管理层对公司的管理,但是也有一般员工通过系统获取同事的资料和公司的通知,而且就算公司的管理层也有职位的不同,所以权限的设计就成为必然,然后就是数据的不同,有些数据只要是公司员工就能看到,而还有写数据却只有管理层才能看到,所以数据要进行数据的分类,而把两者结合在一起就是通过权限的判断,不同的权限看到的数据不一样,不同的权限的对数据的操作也不一样,这是本系统的核心。
1.权限设计
根据系统具体要实现的功能把所有员工分为三种权限,分别是一颗星,两颗星和三颗星,映射着不同的职位,下面是详细说明:
(1)一至三颗星
部门经理职位以下的员工都在此权限,在此权限的员工能看见和操作的数据包括:能获取公司的新闻和通知;能看到自己的一些资料,并能查询到自己的薪金;能修改自己的一些资料,如地址、联系方式等;能通过一个搜索条,搜索到其他员工的公开资料。
(2)四颗星
各部门的部门经理或其授权的系统管理员为四颗星权限,在此权限的员工能看见和操作的数据包括:所有一颗星权限的操作;能发布新闻和通知,并能对自己发布的进行修改和删除的操作;能查看所有员工的公开资料和保密资料;能对自己部门的员工资料进行操作;并且四颗星权限内,只有财务部部门经理或起授权的系统管理员,才能看到所有员工的薪金。
(3)五颗星
总经理、懂事长等高于部门经理职位的员工或其授权的系统管理员为五颗星权限,在此权限的员工能看见和操作的数据包括:所有两颗星的操作;能对所有的新闻和通知进行修改和删除的操作;能对所有部门的员工资料进行任何操作;能看到所有员工薪金。
2.数据分类
系统数据主要分为两类:员工资料和公司的新闻通知。以下是详细的说明:
(1)员工资料
系员工资料又分为两类,公开资料和保密资料:
公开资料是诸如姓名、性别、部门、职务、地址、联系方式等一些所有员工都能看到的数据。
保密资料包括公司管理层对员工的评价、备注,员工的详细简历等一些详细的资料,还有就是员工的业绩和薪金。这些资料都是公司的管理层才能看到,也只有公司的管理层才能对其操作。
(2)新闻通知
新闻通知是公司的新闻和一些诸如开会、比赛等的通知。所有员工都能看到这些数据,但只有公司的管理层才能对其操作。
系统实现
用户登录通过后根据登录ID查询数据库并返回用户权限,根据用户的权限显示主页,不同的权限做看到的主页不同。
1.四颗星以下权限员工所看到的页面
最上面有一个退出登录的链接,点击回到“登录”页面
能看到一个搜索条,通过搜索链接到“个人详细资料”页面,查看被搜索员工的公开资料。
可以看到一些自己的资料,并在下面有二个链接:查看详细资料和修改个人资料,点击分别进入“个人详细资料”和“修改个人资料”的页面,查看自己的详细资料、工资,修改自己的联系方式等。
能看到公司最新的通知,下面有一个查看以往通知的链接,点击进入“所有通知”页面查看所有通知。
能看到公司最新的10条新闻的标题,点击标题就能进入“新闻内容”的页面,下面有一个所有新闻的链接,点击进入“所有新闻”页面查看所有新闻。
2.四颗星以上权限员工所看到的页面
所有一颗星权限员工能看到的数据。
能在最上面的标题图片下面看到一个各部门的菜单,列出了所有部门的链接,无论点击哪个都会进入“部门员工清单”页面。
也能通过搜索条搜索员工,但是链接到“员工详细资料”页面。
有一个添加员工和员工业绩的链接,点击进入“添加员工”页面和“员工业绩”页面。
能看到发布通知和添加新闻的链接,点击进入“发布通知”和“添加新闻”页面。
只有财务部的四颗星员工和五颗星员工才能看到员工薪金的链接,点击进入“员工薪金清单”页面。
(1)“个人详细资料”页面
显示员工的公开资料。
(2)“修改个人资料”页面
修改自己的联系方式和地址。
(3)“所有通知”页面
在页面的左边部分列出了所有通知的发布时间,点击时右面便显示点击消息的内容。
(4)“新闻内容”页面
显示新闻的发布人,发布时间和内容。
(5)“所有新闻”页面
在页面左边部分列出了所有新闻的标题,点击时右面变显示点击新闻的内容。
(6)“部门员工清单”页面
根据链接来是所传来的部门的参数显示部门所有员工的一个清单,每个员工仅显示了编号、姓名、性别、部门四个资料,在每个员工后面还有一个详细资料的链接,点击进入“员工详细资料”页面。如果登录的是两颗星权限,并且登录者的部门和显示页面的部门一致的情况下或者登录的是三颗星权限的情况下,那么便会在每个员工的最后面看到一个删除的链接,点击删除此名员工的所有资料。
(7)“员工详细资料”页面
显示员工所有的资料,包括公开资料和保密资料。如果登录的是两颗星权限,并且登录者的部门和所显示员工的部门一致的情况下或者登录的是三颗星权限的情况下,就会在下面看到一个修改的链接,点击进入“修改员工资料”页面。
(8)“修改员工资料”页面
修改员工的资料。
(9)“添加员工”页面
当新员工加入的时候添加员工。
(10)“发布通知”页面
发布通知。
(11)“添加新闻”页面
添加新闻。
(12)“员工业绩新闻”页面
各部门的部门经理,对所属员工的业绩进行加减。
(13)“员工业绩新闻”页面
财务部的部门经理和公司部门经理以上职位的能人看到公司所有人当月薪金。
如图2所示:
1.创建数据库
首先在 SQL Server 2000 的企业管理器中创建一个名为 manager 的数据库。
2.创建表
数据库 manager 包含 7 个表:员工权限表(userpassword)、员工公开资料表(public_userdata)、员工保密资料表(interior_userdata)、公司理念表(com_idea)、新闻表(news)、通知表(notice)、员工业绩表(contribution)。详细如下:
(1)员工权限表
员工权限表(userpassword)用来保存每个员工的登录帐号、口令和登录权限,结构如表1:
表1 员工权限表(userpassword)
编号 |
字段名称 |
数据结构 |
说明 |
1 |
USERID |
vachar(7) |
员工编号(主键) |
2 |
PASSWORD |
varchar(7) |
登录密码 |
3 |
JURISDICTION |
varchar(10) |
员工权限 |
(2)员工公开资料表
员工公开资料表(public_userdata)用来保存每个员工的公开资料,结构如表2:
表2 员工公开资料表(public_userdata)
编号 |
字段名称 |
数据结构 |
说明 |
1 |
USERID |
vachar(7) |
员工编号(主键) |
2 |
USERNAME |
varchar(10) |
员工姓名 |
3 |
SEX |
varchar(2) |
员工性别 |
4 |
DEPARTMENT |
varchar(10) |
所属部门 |
5 |
DUTY |
varchar(10) |
员工职务 |
6 |
TEL |
varchar(30) |
联系电话 |
7 |
E_MAIL |
varchar(50) |
E_mail |
8 |
ADDRESS |
varchar(50) |
地址 |
(3)员工保密资料表
员工保密资料表(interior_userdata)用来保存每个员工的保密资料,结构如表3:
表3 员工保密资料表(interior_userdata)
编号 |
字段名称 |
数据结构 |
说明 |
1 |
USERID |
vachar(7) |
员工编号(主键) |
2 |
ADDCOMDATE |
varchar(10) |
加入公司时间 |
3 |
DOCUMENT |
varchar(8000) |
员工档案 |
(4)公司理念表
公司理念表(com_idea)用来保存公司的理念,结构如表4:
表4 公司理念表(com_idea)
编号 |
字段名称 |
数据结构 |
说明 |
1 |
ID |
int(4) |
理念序号,标识种子,增量1(主键) |
2 |
TITLE |
varchar(100) |
理念标题 |
3 |
BODY |
varchar(8000) |
理念内容 |
4 |
ADDDATE |
varchar(50) |
加入日期 |
5 |
ADDUSER |
varchar(10) |
加入员工姓名 |
(5)新闻表
新闻表(news)用来保存公司的新闻,结构如表5:
表5 新闻表(news)
编号 |
字段名称 |
数据结构 |
说明 |
1 |
ID |
int(4) |
新闻序号,标识种子,增量1(主键) |
2 |
TITLE |
varchar(100) |
新闻标题 |
3 |
BODY |
varchar(8000) |
新闻内容 |
4 |
ADDDATE |
varchar(30) |
加入日期 |
5 |
ADDUSER |
varchar(10) |
加入员工姓名 |
(6)通知表
通知表(notice)用来保存公司的通知,结构如表6:
表6 通知表(notice)
编号 |
字段名称 |
数据结构 |
说明 |
1 |
ID |
int(4) |
通知序号,标识种子,增量1(主键) |
2 |
CONTENT |
varchar(1000) |
通知标题 |
3 |
ADDDATE |
varchar(30) |
加入日期 |
4 |
ADDUSER |
varchar(10) |
加入员工姓名 |
(7)员工业绩表
员工业绩表(contribution)用来保存员工每月的业绩,结构如表7:
表7 员工业绩表(contribution)
编号 |
字段名称 |
数据结构 |
说明 |
1 |
USERID |
int(4) |
员工编号 |
2 |
CONTRIBUTION |
int(4) |
员工业绩 |
3 |
DATE |
varchar(10) |
当月日期 |
3.数据库的连接
在实现各个模块之前,首先要建立与数据库 manager 的连接,因为在系统中,这个操作非常频繁,所以我把它写成了两个 javabean : DBConnection.class 和 DBSQL.class,下面是详细的说明:
DBConnection.class 是用 JDBC 建立与数据库的连接,具体代码如下:
public class DBConnection
{
privateString driverName ="com.microsoft.jdbc.sqlserver.SQLServerDriver"; //驱动名称
privateString url="jdbc:microsoft:sqlserver://localhost:1433;databaseName=manage"; //驱动路径
privateString user = "sa"; //数据库用户名
privateString password = "sa"; //数据库密码
publicConnection getConnection()
{
try
{
Class.forName(driverName); //加载驱动
return DriverManager.getConnection(url,user, password); //建立连接
}
catch (Exception e)
{
e.printStackTrace();
return null;
}
}
}
DBSQL.class 通过调用 DBConnection.class 的对象建立与数据库的连接,然后执行传来的 SQL 语句,返回操作的结果集,代码如下:
public class DBSQL
{
protectedConnection conn = null;//Connection对象
protectedStatement stmt = null; //Statement对象
protectedResultSet rs = null; //记录结果集
protectedString sqlStr; //SQL语句
publicDBSQL()
{
try
{
sqlStr = "";
DBConnectiondcm = new DBConnection(); //实例 DBConnection 对象
conn= dcm.getConnection(); //获得连接
stmt= conn.createStatement(); //获取执行 SQL 语句命令对象
}
catch(Exception e)
{
System.out.println(e);
}
}
publicStatement getStmt()
{
returnstmt;
}
publicConnection getConn()
{
returnconn;
}
publicResultSet getRs()
{
returnrs;
}
publicvoid setSqlStr(String newSqlStr) //获得SQL语句
{
this.sqlStr=newSqlStr;
}
publicString getSqlStr() {
returnsqlStr;
}
publicvoid executeQuery() throws Exception
{
rs= stmt.executeQuery(sqlStr); //记录结果集
}
publicvoid executeUpdate() throws Exception
{
stmt.executeUpdate(sqlStr); //执行 SQL 语句
}
publicvoid close() throws SQLException //关闭数据库连接
{
if( stmt != null )
{
stmt.close();
stmt= null;
}
conn.close();
conn= null;
}
}
猎头公司管理软件由9个模块13个前台显示界面、14个后台操作页面和5个公共页面组成,因受论文篇幅所限,仅给出部分模块的设计和代码。
1.公共模块
公共模块是各个模块都可能用要的,在本系统中公共模块主要包括整个系统都要用到的图片和一些公共的调用,如对系统当前时间的读取,把它写到公共页面里,每次只要把公共页面包括进去,直接读取时间变量就行,具体实现的代码如下:
java.util.Date cur_time = new java.util.Date();//读取系统当前时间
SimpleDateFormat formatter = newSimpleDateFormat("yyyy-MM-dd");//定义读取时间格式
String dateString = formatter.format(cur_time);//付值给变量
2.用户登录模块
用户登录界面(login.jsp)用于员工的登录,主要功能用于判断用户输入的登录名和密码是否合法。
界面如图3:
当用户输入不合法的用户或者密码的时候,就会弹出错误对话框,在本系统,将用户和密码的规则都设为七位,所以当没有输入或者输入错误的时候就会弹出提醒对话框,此功能的实现是在前台登录的jsp页面嵌入一个javascript,具体的代码如下:
<scriptlanguage="javascript"> //用javascript判断用户的输入是否合法
function checkform()
{
if(form.userid.value.length!=7)
{
alert("请输入正确的编号!");
form.userid.focus();
returnfalse;
}
if(form.password.value.length!=7)
{
alert("请输入正确的密码!");
form.password.focus();
returnfalse;
}
returntrue;
}
</script>
通过在登录表单设置onClick属性来调用上面的javascript,具体代码如下:
<input type="submit"name="Submit" value="登录"onClick="javascript:return(checkform());">
当用户输入完毕点击登录按钮后,就会跳转到后台的检查页面,检查页面的功能是,通过用户输入的用户名和密码作为参数,到数据库里面去查找是否有匹配的项,如果有,则登录成功,跳转到系统主页面;如果没有,则返回登录页面,并显示用户名或密码错误。然后将登录状态设置为真,具体是通过给Session付值来实现具体代码如下:
String userid = newString(request.getParameter ("userid").trim().getBytes("ISO-8859-1"));
String password = newString(request.getParameter
("password").trim().getBytes("ISO-8859-1"));//接受从用户输入的用户名和密码
String sql = "SELECT * FROM userpasswordWHERE USERID='"+userid+"' ANDPASSWORD='"+password+"'";//通过用户名和密码在userpassword表中寻找是否有匹配项
DBSQL dbsql = new DBSQL();//连接数据库
dbsql.setSqlStr(sql);
dbsql.executeQuery();//执行SQL语句
ResultSet rs = dbsql.getRs();//返回结果集
if (!rs.next()) //判断登录用户和密码在数据库里是否存在
{
Stringerrmsg="error1";
response.sendRedirect("login.jsp?errmsg="+errmsg);//不存在则返回登录页面,并提示错误
return;
}
request.getSession(true);//存在则设置登录状态为真
String chk="true";
session.putValue("Enter",chk);
session.putValue("userid",userid);//记录登录用户的用户名
response.sendRedirect("index.jsp");//登录成功,跳转到主页面
3.系统主页模块
系统主页面(index.jsp)是员工进入系统后的一个操作索引,所有的操作都从这里开始,在此页面中,对权限的判断十分重要,不同权限的员工所看到的界面是不一样的,详细如下:
四颗星以下权限的员工登录后所看到的界面如图4:
不同权限员工看到的不同界面主要是部门菜单显示和非显示,具体的实现是用java代码实现的,具体如下:
<%
Stringuserid=(String)session.getValue("userid");//通过session获取登录用户的用户名
String sql="SELECT * FROM userpasswordWHERE USERID ='"+userid+"'";
DBSQL dbsql = new DBSQL();
dbsql.setSqlStr(sql);
dbsql.executeQuery();
ResultSet rs=dbsql.getRs();
rs.next();
String jurisdiction=newString(rs.getString("JURISDICTION"));//利用登录用户的用户名,通过查询员工权限表,得到登录用户的权限
sql="SELECT * FROM public_userdata WHEREUSERID ='"+userid+"'";
dbsql.setSqlStr(sql);
dbsql.executeQuery();
rs=dbsql.getRs();
rs.next();
String userdepartment =rs.getString("DEPARTMENT");//利用登录用户的用户名,通过查询员工公开资料表,得到登录用户的所属部门
if(jurisdiction.equals("****")||jurisdiction.equals("*****"))//判断登录用户权限决定是否显示,只有四颗星和五颗星登录权限才能显示
{
String renshi_department="人事部";
String houqin_department="后勤部";
String caiwu_department="财务部";
String yewu_department="业务部";
String jishu_department="技术部";
%>
<table width="800"border="0" cellpadding="0" cellspacing="0" bgcolor="#66CCFF">
<tr>
<td width="100"><divalign="center"><a href="userlist.jsp?department=<%=renshi_department%>">人事部</a></div></td>
<td width="100"><divalign="center"><ahref="userlist.jsp?department=<%=houqin_department%>">后勤部</a></div></td>
<td width="100"><divalign="center"><ahref="userlist.jsp?department=<%=caiwu_department%>">财务部</a></div></td>
<td width="100"><divalign="center"><ahref="userlist.jsp?department=<%=yewu_department%>">业务部</a></div></td>
<td width="100"><divalign="center"><ahref="userlist.jsp?department=<%=jishu_department%>">技术部</a></div></td>
<td width="100"><divalign="center"><a href="contributionlist.jsp">员工业绩</a></div></td>
<%
if(userdepartment.equals("财务部")||jurisdiction.equals("*****"))//用一个嵌套if语句,判断权限,只有财务部的部门经理和五颗星权限显示员工薪金
{
%>
<td width="100"><div><ahref="salarylist.jsp">员工薪金</a></div></td>
<%
}
%>
<td width="100"><divalign="center"><a href="adduser.jsp">添加员工</a></div></td>
</tr>
</table>
<%
}
%>
4.查询模块
查询模块是方便公司员工查询其他员工的一些资料而设计的,这也涉及到权限问题,一般员工的登录权限只能查询其他员工的公开资料,而管理层的登录权限不仅可以查询到公开资料,也能查询保密资料,这个功能是根据登录者的权限点击链接时,跳转到不同的显示页面来实现的。
一般员工查询的跳转页面如图6:
代码如下:
Stringuserid=(String)session.getValue("userid");//获取登录者用户名
String sql="SELECT * FROM userpasswordWHERE USERID ='"+userid+"'";
DBSQL dbsql = new DBSQL();
dbsql.setSqlStr(sql);
dbsql.executeQuery();
ResultSet rs=dbsql.getRs();
rs.next();
String jurisdiction=newString(rs.getString("JURISDICTION"));//根据用户名查询数据库,得到登录权限
String username = newString(request.getParameter("keyword").
trim().getBytes("ISO-8859-1"));//获取用户输入的查询关键字
sql = "SELECT * FROM public_userdataWHERE USERNAME='"+username+"'";
dbsql.setSqlStr(sql);
dbsql.executeQuery();
rs=dbsql.getRs();//根据关键字查询数据库
if(!rs.next())// 判断是否有此人
{
out.println("没有此人!");
}
else
{
if(jurisdiction.equals("****")||jurisdiction.equals("*****"))//判断登录权限
{
response.sendRedirect("particularuser.jsp?userid="+rs.getString("USERID"));//四颗星以上登录权限者跳转到particularuser.jsp页面查看被查询者资料
}
else
{
response.sendRedirect("usermessage.jsp?userid="+rs.getString("USERID"));//其他登录权限的则跳转到usermessage.jsp页面查看被查询者资料
}
}
5.薪金计算模块
员工每月薪金的计算是和员工的职务与业绩分不开的,而职务和员工的权限又是成正比的,所以和薪金相关的就是员工的权限与业绩,员工的权限是固定的,而每个月的业绩确实浮动的,所以具体的实现是:每个权限对应不同的固定薪金,然后每个员工的业绩通过一个算法,得到浮动薪金,把这两部分加起来就是员工的总薪金。这个算法我把它封装到了一个javabean里面,具体代码如下:
public class Salary
{
protectedint salary;//员工总薪金
publicSalary(String jurisdiction,int contribution)
{
try
{
int_salary = 0;
//不同权限对应不同的固定薪金
if(jurisdiction.equals("*"))
{
_salary= 1500;
}
if(jurisdiction.equals("**"))
{
_salary= 2000;
}
if(jurisdiction.equals("***"))
{
_salary= 3000;
}
if(jurisdiction.equals("****"))
{
_salary= 5000;
}
if(jurisdiction.equals("*****"))
{
_salary= 8000;
}
this.salary= _salary + contribution * 200;//计算员工总薪金
}
catch(Exception e) {
System.out.println(e.toString());
}
}
publicint getSalary() //获取薪金
{
returnsalary;
}
};
但需要计算某个员工薪金时,只需把这个员工的权限和业绩作为参数实例这个类的一个对象,然后调用getSalary()方法就能取的薪金,具体调用如下:
Salary sal = new Salary(jurisdiction,contribution);//jurisdiction和contribution为员工的权限和当月业绩
int salary = sal.getSalary();
源文件
版权所有© 帮我毕业网 并保留所有权利