人事管理系统数据库课程设计.docx
《人事管理系统数据库课程设计.docx》由会员分享,可在线阅读,更多相关《人事管理系统数据库课程设计.docx(34页珍藏版)》请在冰豆网上搜索。
人事管理系统数据库课程设计
《数据库》实习报告
课题:
人事管理系统
课程名称:
数据库原理及应用
学生姓名:
学生学号:
所在专业:
计算机科学与技术
所在班级:
指导老师:
成绩:
设计总说明
1.设计概况
名称:
人事管理系统
用途:
学校等机构
功能:
实现对员工信息的管理与维护等功能
2.设计说明
学生学籍管理系统,可用于学校等机构的学生信息管理,查询,更新与维护,使用方便,易用性强,图形界面清晰明了。
该软件用java语言编写,用SQLServer2005数据库作为后台的数据库进行信息的存储,用SQL语句完成添加,查询,修改,删除的操作。
用ODBC驱动实现前台Java与后台SQL数据库的连接。
Java语言跨平台性强,可以在windows,linux,ubuntu等系统下使用,方便简单,安全性好。
SQLServer2005数据库高效安全,两者结合可相互利用各自的优势。
该系统实现的大致功能:
系统功能的基本要求:
Ø员工各种信息的输入,包括员工的基本信息、学历信息、婚姻状况信息、职称等。
Ø员工各种信息的修改;
Ø对于转出、辞职、辞退、退休员工信息的删除;
Ø按照一定的条件,查询、统计符合条件的员工信息;至少应该包括每个员工详细信息的查询、按婚姻状况查询、按学历查询、按工作岗位查询等,至少应该包括按学历、婚姻状况、岗位、参加工作时间等统计各自的员工信息;
Ø对查询、统计的结果打印输出。
3.本系统只实现了基本操作功能,对于一些更大型、属性更多、关系更复杂的企业,便利性和安全性仍有不足,使用过程中造成的不便还请谅解!
1.人事管理系统概述
1.1研究背景
人事管理系统是企业管理系统中不可缺少的重要组成部分,它的内容对于企业的决策者和管理者来说都至关重要,所以人事档案管理系统应该能够为用户提供充足的信息和快捷的查询手段。
但一直以来人们使用传统人工的方式管理文件档案,这种管理方式存在着许多缺点,如:
效率低、保密性差,另外时间一长,将产生大量的文件何数据,这对于查找、更新和维护都带来了不少的困难。
随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
1.2意义及目的开发
作为计算机应用的一部分,使用计算机对人事档案信息进行管理,具有着手工管理所无法比拟的优点.例如:
检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。
这些优点能够极大地提高人事档案管理的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。
因此,开发这样一套管理软件成为很有必要的事情。
本系统针对以上缺点能够极大地提高学生信息管理的效率,也是科学化、正规化的管理,与世界接轨的重要条件。
所以如何自动高效地管理信息是这些年来许多人所研究的。
一个健全的人事管理系统是一个学校或某个集体单位正常运作的必要条件,使人事管理方便快捷而又清晰,面对各种不同种类的信息,需要合理的数据库结构来保存数据信息以及有效地程序结构来支持各种数据的操作的执行。
实现集体单位管理系统化,规范化和自动化,从而达到提高人事管理的工作效率和工作质量的目的。
2.系统需求分析
2.1开发环境和软件
本学籍采用Java语言编写前台程序,后台采用SQLServer2005软件管理数据库,调试和运行皆由EclipseSDKv3.5.0完成。
2.2系统设计与功能分析
系统设计的基本思想:
1.用户登录模块
2.系统管理模块
1)密码修改
2)重新登录
3)添加/删除用户
4)退出系统
3.信息管理模块
1)对学校里所有员工和院系进行统一标号,将每一位员工的信息保存在员工档案记录中
2)对新聘的员工,将其信息加入到员工档案记录中;对于转出、退休、辞职、辞退的员工,将其信息从员工档案记录中删除
3)当员工信息发生变动时,修改员工档案记录中相应的属性
4.信息查询模块
查询员工信息及院系信息
5.其他模块
1)计算器
2)关于系统的说明
3)退出
系统功能的基本要求:
Ø员工各种信息的输入,包括员工的基本信息、学历信息、婚姻状况信息、职称等。
Ø员工各种信息的修改;
Ø对于转出、辞职、辞退、退休员工信息的删除;
Ø按照一定的条件,查询、统计符合条件的员工信息;至少应该包括每个员工详细信息的查询、按婚姻状况查询、按学历查询、按工作岗位查询等,至少应该包括按学历、婚姻状况、岗位、参加工作时间等统计各自的员工信息;
Ø对查询、统计的结果打印输出。
3.数据库设计
3.1系统概念结构设计
3.1.1系统功能模块图
删除
3.1.2数据流程图
3.2系统逻辑结构设计
画出系统E-R图
住址
图4员工实体图
院系名称
图5院系实体图
编号
图6管理员实体图
员工
职称编号
图7各实体之间联系图(总体E-R图)
3.3物理结构设计
数据库物理设计阶段的任务是根据具体计算机系统的特点,给给定的数据库系统确定合理的存储结构和存取方法。
所谓的“合理”主要有两个含义:
一个是要使设计出的物理数据库占用较少的存储空间,另一个对数据库的操作具有尽可能高的速度。
主要体现在索引和存储结构的设置。
(1)建立索引
1.对员工信息表在属性列:
员工编号上建立聚集索引,在属性列:
身份证号建立唯一索引;
2.对院系信息表在属性列:
院系编号上建立聚集索引;
(2)存储过程
1.创建不带参数的存储过程:
查询在信息学院的员工的编号和姓名
createprocedures2
as
select员工编号,员工姓名
from员工信息
where院系编号=(select院系编号
from院系信息
where院系名称='信息学院')
go
execs2
2.创建带参数的存储过程:
根据用户输入的员工编号,输出其姓名和学历
createprocedures1
(@员工编号int,@员工姓名nchar(10)output,@学历nchar(10)output)
as
select@学历=学历,@员工姓名=员工姓名
from员工信息
where员工编号=@员工编号
go
declare@员工姓名nchar(10),
@学历nchar(10)
execs1'2',@员工姓名output,@学历output
select'员工姓名'=@员工姓名,
'学历'=@学历
(3)存储结构
确定数据库的存储结构主要指确定数据的存放位置和存储结构,包括确定关系,索引,日志,备份等的存储安排及存储结构,以及确定系统存储参数的配置。
将日志文件和数据库(表,索引等)分别放在不同的磁盘,可以改进系统的性能,提高系统的安全性,所以,系统应将日志文件存放在不同的磁盘上。
3.4数据库关系图
关系模型
(1)岗位信息表(岗位编号,岗位名称):
其中岗位编号为主键;
(2)用户表(管理员ID,密码):
管理员ID为主键;
(3)员工信息表(员工编号,员工姓名,性别,院系编号,岗位编号,职称编号,婚姻状况,民族,学历,联系方式,住址,身份证号,工资):
其中员工编号为主键,院系编号、岗位编号、职称编号均为外键;
(4)院系信息表(院系编号,院系名称):
其中院系编号为主键;
(5)职称信息表(职称编号,职称名称):
其中职称编号为主键。
数据库表
(1)岗位信息表:
(2)用户表:
(3)员工信息表:
(4)院系信息表:
(5)职称信息表:
4.系统模块设计概述
4.1用户登录模块
该模块用于管理员的登录,后台数据库的用户表中给出了三个管理员ID和相对应的密码,只有输入正确方可进入系统。
4.2系统管理模块
功能如下图所示:
(具体见系统运行与测试此模块)
4.3信息管理模块
功能如下图所示:
1)对学校里所有员工和院系进行统一标号,将每一位员工的信息保存在员工档案记录中
2)对新聘的员工,将其信息加入到员工档案记录中;对于转出、退休、辞职、辞退的员工,将其信息从员工档案记录中删除
3)当员工信息发生变动时,修改员工档案记录中相应的属性
(见系统运行与测试此模块)
4.4信息查询模块
功能如下图所示:
(具体见系统运行与测试此模块)
4.5其他模块
此模块主要用于显示此系统的运行环境、开发环境等信息,考虑到管理员可能要用到数值、统计等计算等,我们还提供了计算器。
5.系统运行与测试
5.1用户登录
5.2系统管理
5.3信息管理
5.4信息查询
5.5其他模块
5.5.1关于
5.5.2计算器
5.5.3退出
主界面左边一列最下一个即为退出按钮。
5.6优缺点自我评价
优点:
(1)Java语言跨平台性强,可以在windows,linux,ubuntu等系统下使用,方便简单,安全性好。
SQLServer2005数据库高效安全,两者结合可相互利用各自的优势;
(2)此系统界面整洁大方,功能较强大,根据界面的布局提示,用户可快速方便地操作,考虑到用户可能要进行统计和数值运算,更加体现了人性化的设计构思;
(3)后台的数据库设计基本符合3NF的要求,表格设计了五张,每张表的属性都根据实际情况定义类型和相应的约束,基本涵盖了一个小型企业需要的信息,表和表之间的关系(外键与主键的建立)也基本符合实际要求,为了便于快速查询信息,建立了聚集索引和唯一索引,也建立了有参数和无参数的存储过程;
(4)此系统只能供有权限的管理员登录与操作,提高了安全性。
缺点:
(1)对于员工信息表,当时忘了加“出生日期”这一重要属性,接近尾声时才发现,可是由于时间紧迫,没有修改;
(2)五张表之间,岗位信息表和职称信息表与其他表的联系不是太密切,应当直接加入属性,也是由于时间紧迫,没有修改,照成了数据冗余;
(3)建立的存储过程在界面代码中未调用,用户只是管理员类型,没有设置具体的权限,使得其他人员无法操作;
(4)功能强大的同时,代码相应比较多,虽然注释了不少,可对于普通用户来说,看起来还是比较不方便,这些代码也照成了一定程度上的资源浪费;
(5)对于员工信息的查询,只能直接显示院系、职称、岗位编号,无法显示相应的信息。
6.课程设计总结
在我看来,数据库课程设计主要的目标是利用课程中学到的数据库知识和技术较好的开发设计出数据库应用系统,去解决各行各业信息化处理的要求。
通过这次课程设计,可以巩固我们对数据库基本原理和基础理论的理解,掌握数据库应用系统开发的基本方法,进一步提高我们综合运用所学知识的能力。
当我们先确定下来要做的题目时,并不是急着着手写程序。
而是大家一起商量这个系统概述、系统目标、系统需求、业务流程分析、数据流程分析和数据词典,做好这些工作以后,我们各个组员作了一些分工。
在主要功能方面我主要负责实现添加和删除用户、用户密码修改的功能的实现,相对于而言,我的工作比较轻松,其中加入了一个计算器类,主要负责计数,这是一个人性化的考虑在里面。
我们的分工不同,遇到的困难自然也就不一样了,我们平时都是独立做自己的那一部分,但是会及时将自己的进展告知组员,以便一个的系统的完美完成。
当然我们也会集中起来探讨一下各自遇到的问题,大家共同想办法解决,搜索资料、借阅大量书本、向其他同学请教等等都是我们解决问题的方式,最终在大家的努力下,不太完美却是很认真完成的系统诞生了!
辛苦在这时显得是那么苍白无力,兴奋的尽头淹没了所有的辛苦。
以前也做过课程设计,但是这次的课程设计涉及到的开发工具不一样了,最主要的不一样体现在我们要用到两个开发平台,我们不仅要做出前台数据库,还要与后台开发的数据库进行连接,这是一个全新的认识:
我们不可能将大量的数据直接放在代码之中。
对于SQL2005可以熟练的应用,主要得益于老师要求我们平时做的一些实验,所以在后台的设计和操作没有花费太多的时间,虽然平时抱怨实验太多,这个时候还是不会忘记感谢老师平时的严格要求。
后台的开发对我来说真的是空前的挑战,首先涉及到的Java语言是在老师的要求下,自己在图书馆借书学得,绝对的半桶水,困难很大也很多,在组员的帮助下也算成功的克服了那些困难,得到一个圆满的结局!
当我遇到错误的时候,感到很受打击;值得欣慰的是,在组员的帮助和大量参考书的查阅下,最终成功了!
这次课程设计让我懂得遇到困难永不放弃的重要性,我知道了团队合作的重要性,我领悟了只有坚持不懈才会取得胜利.
7.附录(代码)
关于类:
主要功能:
显示人事管理系统的一些相关信息
源代码:
packagea;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassAboutextendsJInternalFrame{
JLabellabel=newJLabel("运行环境:
Windows");
JLabellabe2=newJLabel("开发环境:
JAVA,SQLServer");
JLabellabe3=newJLabel("制作人员:
郝中奎、马家权、童孟丹");
JLabellabe4=newJLabel("对应学号:
201011621407;201011621421;201011621322");
publicAbout(){
setTitle("关于");
Containercon=getContentPane();
con.setLayout(newGridLayout(4,1));
con.add(label);
con.add(labe2);
con.add(labe3);
con.add(labe4);
con.setBackground(Color.white);
setResizable(false);
setSize(380,220);
setVisible(true);
setClosable(true);
}
}
添加和删除用户类:
主要功能:
用于添加和删除管理员的帐号信息
源代码:
packagea;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjavax.swing.JButton;
importjavax.swing.JComboBox;
importjavax.swing.JLabel;
importjavax.swing.JOptionPane;
importjavax.swing.JPasswordField;
importjavax.swing.JTextField;
publicclassAddDeleteUserextendsjavax.swing.JInternalFrame{
privateJButtonbutACancel,butDCancel,butDelete,butOk;
privateJComboBoxcbUserName;
privateJLabeljLabel1,jLabel2,jLabel3,jLabel4,jLabel5;
privateJPasswordFieldpas1,pas2,pas3;
privateJTextFieldtxtname;
publicAddDeleteUser(){
initComponents();
this.setVisible(true);
this.setClosable(true);
this.setSize(268,350);
}
privatevoidinitComponents(){
jLabel1=newJLabel();
jLabel2=newJLabel();
jLabel3=newJLabel();
txtname=newJTextField();
pas1=newJPasswordField();
pas2=newJPasswordField();
butOk=newJButton();
butACancel=newJButton();
jLabel4=newJLabel();
cbUserName=newJComboBox();
jLabel5=newJLabel();
pas3=newJPasswordField();
butDelete=newJButton();
butDCancel=newJButton();
getContentPane().setLayout(null);
jLabel1.setText("新用户名:
");
getContentPane().add(jLabel1);
jLabel1.setBounds(30,30,70,20);
jLabel2.setText("输入密码:
");
getContentPane().add(jLabel2);
jLabel2.setBounds(30,60,70,18);
jLabel3.setText("确认密码:
");
getContentPane().add(jLabel3);
jLabel3.setBounds(30,90,60,18);
getContentPane().add(txtname);
txtname.setBounds(100,30,130,24);
getContentPane().add(pas1);
pas1.setBounds(100,60,130,24);
getContentPane().add(pas2);
pas2.setBounds(100,90,130,24);
butOk.setText("添加");
getContentPane().add(butOk);
butOk.setBounds(80,130,70,27);
butACancel.setText("清空");
getContentPane().add(butACancel);
butACancel.setBounds(160,130,70,27);
jLabel4.setText("已有用户名:
");
getContentPane().add(jLabel4);
jLabel4.setBounds(30,180,80,18);
getContentPane().add(cbUserName);
cbUserName.setBounds(100,180,130,24);
jLabel5.setText("密码:
");
getContentPane().add(jLabel5);
jLabel5.setBounds(30,210,60,18);
getContentPane().add(pas3);
pas3.setBounds(100,216,130,24);
butDelete.setText("删除");
getContentPane().add(butDelete);
butDelete.setBounds(79,260,70,27);
butDCancel.setText("清空");
getContentPane().add(butDCancel);
butDCancel.setBounds(160,260,70,27);
//将所有用用户名读出来
Database.joinDB();
Stringsql="select*from用户";
try{
if(Database.query(sql)){
while(Database.rs.next()){
Stringname=Database.rs.getString("管理员ID");
cbUserName.addItem(name);
}
}
}
catch(Exceptione){}
//为添加和取消按钮加事件-----------------------------------------
butOk.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
if(txtname.getText().equals("")){
newJOptionPane().showMessageDialog(null,"用户名不能为空!
");
}
elseif(pas1.getText().equals("")){
newJOptionPane().showMessageDialog(null,"密码不能为空!
");
}
elseif(pas1.getText().equals(pas2.getText())){
Stringsql="insert用户values('"+txtname.getText()+"','"+pas1.getText()+"')";
try{
if(Database.executeSQL(sql)){
newJOptionPane().showMessageDialog(null,"添加成功!
");
cbUserName.addItem(txtname.getText());
}
}
catch(Exceptionea){}
}
}
});
butACancel.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
txtname.setText("");
pas1.setText("");
pas2.setText("");
}
});
//为删除和取消按钮加事件---------------------------------------
butDelete.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
Stringname=""+cbUserName.getSelectedItem();
Stringsql="select*from用户where管理员ID='"+name+"'";
try{
if(Database.query(sql)){
Database.rs.next();
Stringpas=pas3.getText();
Stringpasswo