数据库系统报告.docx
《数据库系统报告.docx》由会员分享,可在线阅读,更多相关《数据库系统报告.docx(17页珍藏版)》请在冰点文库上搜索。
数据库系统报告
《数据库系统》
课程设计报告
课题员工培训管理系统
班级
学号
姓名
指导教师
时间:
2015.6.15—2015.6.26
课题简述:
企业的不断学习能够帮助企业更快地适应市场环境的飞速变化,通过有效地培训企业员工,赋予员工学习专业技能的机会与能力,企业可以迅速根据市场需求变化,调整分配企业组织的人力资源分布,形成高效的企业组织单元,更好地完成企业运作任务。
培训已经成为企业现代化的重要标志。
开发工具与环境:
1.Windows7
2.SQLServer2005
3.NetBeans编译器
4.Java语言
1.系统需求分析
1.1系统功能分析
员工培训系统需要实现的主要功能包括:
●企业总体培训课程的设置和安排。
●允许员工根据自己的情况选择合适的课程和上课时间。
●对选课结果进行统计报表。
允许员工对最后选课结果的查询。
●培训考核成绩的输入和查询。
●员工培训效果的综合报表。
●员工个人信息的修改。
1.2系统功能模块设计(划分)
本系统涉及到员工和培训管理部门之间的交流,因此需要根据用户的不同分成两大功能模块。
这两个模块的功能和使用的权限完全不同。
本系统功能模块如图1所示。
图1、员工培训管理系统功能模块图
1.3与其它系统的关系
员工培训系统可以为员工素质技能的评价提供可靠的依据,是职务评定的一个参考信息源。
系统本身需要用到人事管理系统中的员工基本信息和部门信息等辅助资料,这些数据可以通过数据库直接读取。
1.4数据流程图
员工培训管理系统的数据流程如图2所示。
图2、培训管理数据流程图
2.数据库设计
2.1数据库需求分析
根据系统数据流程图,列出以下系统所需的数据项和数据结构:
●部门(部门编号,部门名称)
●考核评价(考核评价编号,考核评价说明)
●课程状态(课程状态编号,课程状态说明)
●受教育程度(受教育程度编号,受教育程度说明)
●任课教师(任课教师编号,任课教师姓名)
●员工(员工编号,员工姓名,性别,生日,部门编号,职务,受教育程度编号,专业技能,家庭住址,联系电话,电子信箱,当前状态)
●课程(课程编号,课程名,任课教师编号,课程简介,所用教材,上课地点,课程上限人数,开课时间,课程状态编号)
●培训安排(员工编号,课程编号,成绩,考核评价编号,考核日期)
●员工登陆(员工编号,员工密码)
●任课教师登陆(任课教师编号,任课教师密码)
2.2数据库概念结构设计
图3是本系统所需数据的E-R模型图。
图3、培训管理E-R图
2.3数据库逻辑结构设计
根据系统的E-R图,我设计了10个数据表。
部门信息表
考核评价信息表
课程状态信息表
受教育程度信息表
任课教师信息表
员工信息表
课程信息表
培训安排信息表
员工登陆信息表
任课教师登陆信息表
2.4数据库的建立
点击开始,选择SQLServerManagementStudio,进入到主界面,右击数据库,选择新建数据库,创建一个本系统需要的数据库,然后点击该数据库,选择新建查询。
员工信息表创建如下(其他表创建方法类似):
createtable员工
(员工编号varchar(10),
姓名varchar(20)notnull,
性别varchar(10)notnull,
生日varchar(20),
部门编号varchar(10),
职务varchar(20)notnull,
受教育程度编号varchar(10),
专业技能varchar(20)notnull,
家庭住址varchar(50)notnull,
联系电话varchar(20)notnull,
电子信箱varchar(20),
当前状态varchar(10)notnull,
primarykey(员工编号),
foreignkey(部门编号)references部门(部门编号),
foreignkey(受教育程度编号)references受教育程度(受教育程度编号));
3.各功能模块的设计与实现
3.1功能说明
本管理系统主要分为两大部分:
培训管理应用程序和学员选课应用程序。
培训管理应用程序主要用于培训中心的管理人员对培训课程和培训情况进行维护。
此应用程序主要包括四项功能:
课程设置、选课结果查询修改、成绩输入、培训成绩统计报表。
另外,系统需要有登录窗口(用于权限认证)和导航窗口(用于连接各项功能)。
学员选课应用程序包括个人信息修改、选课和成绩查询三项功能。
(1)培训管理管理应用程序功能说明:
本功能是由任课教师登录后所操作的。
在登录之后,教师界面包含有两个选项:
课程设置管理和培训结果管理。
进入培训结果管理后,在该界面下会直接显示培训成绩单,此外成绩单下面,还有着查询、删除、更新功能,对员工的培训成绩会进行一系列操作;进入课程设置管理后,会直接显示课程表,在课程表底下则包含有查询、添加、删除、更改课程表的选项。
(2)学员选课应用程序功能说明:
本功能是由员工登陆后所操作的。
在登录之后员工界面包括两个选项:
选择培训课程和用户信息修改。
进入选择培训课程界面后,会直接显示课程表,底下则有多个按钮,查询、选择、删除课程,还有一个可以查看员工自己已经选择的课程;进入用户信息修改界面,点击员工信息显示,会显示出此时员工本人的详细信息,在修改完毕后,点击更新即可更新员工自己的信息;而点击修改登录密码,则会进入到修改密码的界面,从而进行修改密码的操作。
3.2用户界面设计
完成数据库创建和功能说明以后,我们可以进行下一步工作,既设计用户界面。
1、培训管理应用程序登录窗体的创建
因为有权限问题,所有登录的时候必须选择不同的角色才能进入到不同的操作界面。
2、培训管理应用程序主窗体的创建
选择不同的角色进入不同的界面。
3、课程设置窗体的创建
在这个界面下,任课教师可以进行一系列对课程操作还有学生成绩的操作。
4.学员选课客户端界面的创建
这个窗口,学生可以进行选课和查询自己的选课结果,以及删除自己不适合的课程。
3.3各功能模块的实现
1、培训管理应用程序登录程序的实现
代码如下:
Connectionconn=null;
Statements=null;
ResultSetr=null;
Stringt1=txt1.getText();//读取登录时输入的用户编号
Stringt2=pwd.getText();//读取登录时输入的密码
if(staff.isSelected()){//选择普通员工登陆
try{//连接数据库,以便验证输入的是否在数据库中Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
conn=DriverManager.getConnection("jdbc:
sqlserver:
//localhost:
1433;DatabaseName=员工培训","sa","1042438267");
s=conn.createStatement();
//查询用户是否在数据路中
r=s.executeQuery("SELECT*FROM员工登陆WHERE员工编号='"+t1+"'and员工密码='"+t2+"'");
r.last();
if(r.getRow()==1){
r.beforeFirst();
Staffstaff1=newStaff();
newCourse().setCourse(t1);//员工编号传递到选课模块
newModifyStaff().setModifyStaff(t1);//员工编号传递到修改员工信息模块中
newPassWord().setPassWord(t1,t2);//员工编号和密码传递到修改登陆密码模块中
staff1.setVisible(true);
this.setVisible(false);
}else{
JOptionPane.showMessageDialog(null,"用户编号或者密码错误!
","警告",JOptionPane.WARNING_MESSAGE);
}
}catch(Exceptionex){
ex.printStackTrace();
}finally{
try{
s.close();
conn.close();//关闭数据库,防止数据库信息的泄漏
}catch(SQLExceptione){
e.printStackTrace();
}
}
}elseif(teacher.isSelected()){//选择任课教师登陆
try{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");conn=DriverManager.getConnection("jdbc:
sqlserver:
//localhost:
1433;DatabaseName=员工培训","sa","1042438267");
s=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
r=s.executeQuery("SELECT*FROM任课教师登陆WHERE任课教师编号='"+t1+"'and任课教师密码='"+t2+"'");
r.last();
if(r.getRow()==1){
r.beforeFirst();
newTeacher().setVisible(true);
this.setVisible(false);
}else{
JOptionPane.showMessageDialog(null,"用户编号或者密码错误!
","警告",JOptionPane.WARNING_MESSAGE);
}
}catch(Exceptionex){
ex.printStackTrace();
}finally{
try{
s.close();
conn.close();
}catch(SQLExceptione){
e.printStackTrace();
}
}
}else{
JOptionPane.showMessageDialog(null,"请选择用户类型","警告",JOptionPane.WARNING_MESSAGE);
}
2、课程设置模块的实现
因为课程表的显示是绑定数据库,从而得到显示结果的,所以该操作不需要代码的实现,但该模块下的查询、更新、删除需要代码的实现,代码实现如下:
(连接数据库操作基本一致,所以在以下的代码中就不会再粘贴出来)
查询操作:
Table1.setModel(newjavax.swing.table.DefaultTableModel(newObject[][]{
{null,null,null,null,null},
{null,null,null,null,null},
{null,null,null,null,null},
{null,null,null,null,null}
},
newString[]{"员工编号","课程编号","成绩","考核评价编号","考核日期"}));//为了实现多次查询,这里必须初始化
//选择字段那里需要从组合框中选取字段,必须把里面的内容转化成String类型
Stringchoose1=choose.getSelectedItem()+"";
Stringt2=txt1.getText();//获取某属性的查询字段
//因为我不懂如何从组合框那里读取所选数据,所以只能进行遍历选择,选择查询字段后就进行模糊查询语句
if(choose1.equals("员工编号")){
r=s.executeQuery("SELECT*FROM培训安排WHERE员工编号LIKE'%"+t2+"%'");
}elseif(choose1.equals("课程编号")){
r=s.executeQuery("SELECT*FROM培训安排WHERE课程编号LIKE'%"+t2+"%'");
}elseif(choose1.equals("成绩")){
r=s.executeQuery("SELECT*FROM培训安排WHERE成绩LIKE'%"+t2+"%'");
}elseif(choose1.equals("考核评价编号")){
r=s.executeQuery("SELECT*FROM培训安排WHERE考核评价编号LIKE'%"+t2+"%'");
}elseif(choose1.equals("考核日期")){
r=s.executeQuery("SELECT*FROM培训安排WHERE考核日期LIKE'%"+t2+"%'");
}else{
JOptionPane.showMessageDialog(null,"请选择字段!
!
!
","警告",JOptionPane.WARNING_MESSAGE);
}
inti=0,j=-1;
while(r.next()){
j=0;
//设置获取的数据放置在表中位置
Table1.setValueAt(r.getString("员工编号"),i,j);
Table1.setValueAt(r.getString("课程课程"),i,j+1);
Table1.setValueAt(r.getString("成绩"),i,j+2);
Table1.setValueAt(r.getString("考核评价编号"),i,j+3);
Table1.setValueAt(r.getString("考核日期"),i,j+4);
i++;
j=0;
}
if(j==-1){
JOptionPane.showMessageDialog(null,"输入内容不存在!
","警告",JOptionPane.WARNING_MESSAGE);
}
更新操作:
该操作在原窗口不好进行操作,所以需要跳转到另一个窗口中执行。
代码如下:
Stringt1,t2;//设置全局变量,获取员工编号和课程编号,防止修改。
//进行员工编号和课程编号的选择,选出属于这主键(员工编号,课程编号)下代表的信息
t1=txt1.getText();
t2=txt2.getText();//获取此时的员工编号和课程编号
r=s.executeQuery("SELECT*FROM培训安排WHERE员工编号='"+t1+"'");
r1=s1.executeQuery("SELECT*FROM培训安排WHERE课程编号='"+t2+"'");
r2=s2.executeQuery("SELECT*FROM培训安排WHERE员工编号='"+t1+"'and课程编号='"+t2+"'");
if(!
r.next()){
JOptionPane.showMessageDialog(null,"不存在这样的员工编号!
!
","警告",JOptionPane.WARNING_MESSAGE);
}else{
if(r1.next()){
if(r2.next()){//获取信息
txt3.setText(r2.getString("成绩"));
txt4.setText(r2.getString("考核评价编号"));
txt5.setText(r2.getString("考核日期"));
}
}else{
OptionPane.showMessageDialog(null,"没有这样的课程编号!
","警告",JOptionPane.WARNING_MESSAGE);
}
}
删除操作:
因为培训安排表中,主键是员工编号和课程编号,所以进行删除操作的时候,必须依赖于这两个键才能实行。
代码如下:
Stringt4=txt2.getText();
Stringt5=txt3.getText();//获取输入的员工编号和课程编号
r=s.executeQuery("SELECT*FROM培训安排WHERE员工编号='"+t4+"'");
r1=s1.executeQuery("SELECT*FROM培训安排WHERE课程编号='"+t5+"'");
if(!
r.next()){
JOptionPane.showMessageDialog(null,"没有这样的员工编号!
","警告",JOptionPane.WARNING_MESSAGE);
}else{
if(r1.next()){
s.executeUpdate("deletefrom培训安排where员工编号='"+t4+"'");
JOptionPane.showMessageDialog(null,"删除成功!
","成功",JOptionPane.WARNING_MESSAGE);
}else{
JOptionPane.showMessageDialog(null,"没有这样的课程编号!
","警告",JOptionPane.WARNING_MESSAGE);
}
3、选课结果查询的实现
该功能是位于员工操作界面下,所以必须获取登陆界面输入的用户编号和密码信息。
同时,课程表的显示是绑定数据库而得到结果的,所以不需要代码的实现。
查询操作基本与第3个功能块相似,因为文档长度问题,这里就不再粘贴代码。
4、学员选课客户端应用程序的创建
在这个功能块中,有两个表格。
一个是显示课程信息,另一个是显示员工自己已经选择了的课程,在在模块下,我设置了选课按键和删除选课按键,方便员工合理的进行培训。
又因为员工的所有操作都依赖于登录时的信息,也就是员工只能操作属于自己的信息,所以我们必须获取登录时员工的编号和密码,方便下面的操作。
选课操作实际上就是更新的操作,这与第3个功能块的更新操作一致,篇幅问题,这里就不再一一粘贴出来。
这一功能块的删除操作与第3个功能块的删除操作基本一致,所以代码相似度极高,在这里就不一一粘贴出来。
4.系统实现
4.1数据库中详细的E-R图
每个实体的E-R图
部门:
受教育程度:
考核评价:
任课教师:
员工:
课程:
5.心得体会
刚开始的时候,因为没有想清楚要怎实现这个系统,同时各个实体的属性的选择也没有想清楚是怎么回事,然后就开始写代码,写了一天后,晚上回去想了一下,发现自己写的东西乱七八糟的,根本不符合题目要求,所以第二天自己重新来过,当时我没有立刻写代码,也是先把数据库的关系模型和各个实体间的联系、属性都给确定了,我才进行编译数据库信息,把数据库的表格给弄出来了。
写完数据库的信息后,我开始思考怎么实现代码和这个系统所需要的操作和界面的布局。
一步一步进行实施,把自己想到的功能写进代码中,同时我也询问了一下同学们对于这个系统的看法,把他们说给我听的,同时我认为合理的也写进代码中了。
因为刚接触数据库用于代码中,不懂得怎么实现代码中连接到数据库中的表,在这个阶段我浪费较多的时间,最后很同学一起研究了别人的代码才得以解决这个问题。
不止这一个问题,各种操作语句在java中是怎么操作的,自己也不是很懂,不得不要翻阅很多资料,虽然浪费很多时间,但是自己从中也学到了不少东西。
虽然现在写完了全部代码,但是自己觉得自己写的系统还是存在很多Bug,还有很多东西没有实现,比如说怎么知道一门课程的上限人数是否已经到达了上限等等问题。
总的来说,这次的课程设计对我来说是一次非常难得的锻炼机会,它使我懂得如何灵活运用所学的知识,得到了比任何一门课程都大得提高和进步。
同时,我还要感谢老师和同学们的帮助,如果没有老师和同学们的帮组,我不可能按时完成设计。