数据库系统原理课程设计报告.docx
《数据库系统原理课程设计报告.docx》由会员分享,可在线阅读,更多相关《数据库系统原理课程设计报告.docx(24页珍藏版)》请在冰豆网上搜索。
![数据库系统原理课程设计报告.docx](https://file1.bdocx.com/fileroot1/2022-11/27/41a2185b-39aa-4dc3-9689-2ddae18ad5fb/41a2185b-39aa-4dc3-9689-2ddae18ad5fb1.gif)
数据库系统原理课程设计报告
数据库系统原理课程设计报告
题目名称:
Miracle工资管理系统
班级:
计103-1
组长学号:
姓名:
成绩:
组员学号:
姓名:
成绩:
组员学号:
姓名:
成绩:
组员学号:
姓名:
成绩:
组员学号:
姓名:
成绩:
组员学号:
姓名:
成绩:
组员学号:
姓名:
成绩:
2012年7月5日
第一章引言
1.1选题的依据及课题的意义
随着计算机技术的普及,数据信息处理技术得到了空前发展,人们处理大量数据的能力越来越强,大量以前必需由人工处理的工作现在都可以由计算机代劳。
早期的工资统计和发放都是使用人工方式处理纸质材料,不仅花费财务人员大量的时间且不易保存,往往由于个人的因素抄写不慎或计算疏忽,出现工资发放错误的现象。
早期工资管理多采取纸质材料和具有较强的时间限制。
基于以上原因,企业工资管理系统使用电脑安全保存、快速计算、全面统计,实现工资管理的系统化、规范化、自动化。
1.2程序基本概况
本程序为一个基本的工资管理系统,系统中对公司员工的工资情况进行管理。
本系统通过管理员实现了对员工工龄工资、职务工资、出勤奖惩和津贴等项目的统计与管理,以及对职务、出勤、津贴等项目的增添与修改,普通用户可以使用本系统查询自己的各项工资情况。
系统界面简洁有条,操作方便,基本满足了普通公司对员工工资的管理需求。
1.3项目开发背景及信息系统目标
随着经济不断的发展,公司迅速发展,业务不断扩大,人员增加,迫切需要一套完整的、行之有效的人员工资管理系统对公司员工的各项工资内容进行管理。
本系统应当实现以下功能:
对各部门员工职务、工龄、出勤情况、津贴情况进行有效的统计。
将各员工的各项基本情况转换为工资信息。
对各项工资信息进行汇总,统计计算出总工资。
允许本公司员工对个人工资进行查询,实现管理员对员工信息的管理。
第二章系统分析
2.1可行性分析
技术方面,本系统使用JAVA语言编写,实现方便,界面干净整洁,方便使用;利用MySql数据库对数据进行存储和处理,实现数据的共享,保证了系统的稳定性和安全性。
经济方面,支出方面,引进本系统需支付设备购置费、软件开发费、管理维护费、员工工资和培训费等;使用本系统节省了大量的书面报告,提高了办公效率,降低了办公费用,相对于前期投入,后期收益更为可观。
2.2项目开发计划
2.2.1目标:
⑴实现月工资计算和打印输出相应的工资表格;
⑵实现与工资管理有关的档案管理。
⑶提高工资管理工作效率,降低出错率。
2.2.2功能要求:
㈠档案管理
1.保存有关工资计算以及工资管理所必须的数据
2.能对各种数据进行插入、修改、删除等操作
3.能对数据进行查询、统计
㈡工资计算
1.正确计算出个人月工资、部门月工资以及全厂月工资。
2.能对病假扣款系数进行修正。
3.能打印输出工资计算表、个人工资单、部门工资单、工资汇总表四种表格。
2.2.3数据要求:
每个职工的各种数据分为三类:
1.职工的代号、姓名、性别、出生日期、参加工作日期、所属部门、人员类别、工种职别、技术等级、技术职称、文化程度、民族、籍贯、现住址。
2.职工的基本工资、岗位津贴、物价补贴、职务津贴、住房补贴、房租。
3.职工的出勤日数、公伤日数、产假日数、病假日数、旷工日数、事假日数、加班日数、夜班日数、病假系数。
工资单数据:
本月基本工资、岗位津贴、物价补贴、职务津贴、住房补贴、加班费、夜班费、房租、病假扣款、事假扣款、旷工扣款、其它扣款、实发工资。
根据开发计划、软硬件情况、人员配置情况,将员工工资管理系统的项目开发进度分为系统分析、需求分析、概要分析、详细设计、系统实施、系统维护六个阶段,具体进度安排如下:
项目
1天
1天
2-3天
7-9天
1-2天
长期
系统分析
√
需求分析
√
概要设计
√
详细设计
√
系统实施
√
系统维护
√
第三章分析与设计
3.1系统分析
根据该企业的业务情况及实现目标,系统功能模块图如图3.1所示:
图3.1系统功能模块
在这次系统开发中我主要完成的部分是工资管理和设置方面。
开发这个系统的目的就是帮助企业的财务主管部门提高工作效率,实现企业工资信息管理的系统化、规范化和自动化。
能够和认识管理系统、考勤管理系统相结合,真正实现企业高效、科学、现代化的员工管理。
系统最终实现的主要功能如下:
·企业工资信息设置部分:
包括设置员工的基本工资和其他项目的金额,如津贴等。
并且负责设置员工工资的计算公式。
图3.2工资信息设置模块
·企业工资信息管理部分:
包括统计出勤、计算工资、查询工资和导出工资表。
图3.3工资信息管理模块
·系统部分:
包括添加用户和修改密码。
图3.4系统模块
3.2数据库设计
数据库设计是开发数据库及其应用系统的技术,也是信息系统开发和建设的重要组成部分。
具体的说,数据库设计是要在一个给定的应用环境中,通过合理的逻辑设计和有效的物理设计,构造较优的数据库模式,建立数据库及其应用系统,满足用户的各种信息需求。
3.2.1实体描述
本系统中所涉及的实体有9个,其结构如下:
员工(编号,姓名,性别,出生日期,文化背景,民族,家乡,家庭住址)
部门(编号,名称)
工龄(工龄,对应工资)
职务(职务级别,对应工资)
津贴类别(编号,名称,薪水)
出勤类别(编号,名称,系数)
基本工资(员工,工龄,职务,基本工资)
实际工资(员工,实际工资)
用户(用户名,密码,权限)
3.2.2联系描述
本系统中实体之间有3个联系,其关系如下:
(1)员工—部门的所属关系:
部门与员工是1:
N的关系,一个部门有多个员工,但一个员工只属于一个部门;
(2)员工—出勤:
员工与出勤是M:
N的关系,一个员工可以有多种出勤情况,一种出勤情况可以对应多个员工;
(3)员工—津贴:
员工与津贴是M:
N的关系,一个员工可以有多种津贴情况,一种津贴情况可以对应多个员工;
以上实体的联系属性如下:
员工—部门(员工,部门)
员工—出勤(员工,出勤,出勤天数)
员工—津贴(员工,津贴)
3.2.3E-R图
本系统的E-R图如图3.5所示:
图3.5E-R图
3.2.4存储过程设计
存储过程(StoredProcedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
在我们的项目中,在添加工龄工资信息与职务工资信息中运用了存储过程,如果高级语言中函数调用一样,我们定义了5个参数,4个是输入参数,1个为输出参数,在判断向哪个表插入数据时,我们根据前两个参数来判断,然后根据输出参数的取值来查看操作是否成功。
3.2.5触发器的设计
触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作(insert,delete,update)时就会激活它执行。
触发器经常用于加强数据的完整性约束和业务规则等。
触发器可以从DBA_TRIGGERS,USER_TRIGGERS数据字典中查到。
在我们的项目中我们在删除职员信息时用到了触发器,我们的表设计中empandrsal、empandjintie、
DepAndEmp、EmpAndPre、EmpAndSal用引用了employees中的No属性,作为每个表的外键约束,当我们在删除employees
表时就违反参照完整性的约束,必须把这些表中相应的元组也给删除,出于以上目的,我们把在删除外键约束定义成了
一个触发器,根据employees中No的值来把相应表中的数据删除。
第四章系统实现
4.1数据库的实现
4.1.1表定义
(1)员工表(employees)
主码
字段代码
字段名称
数据类型
长度
小数位数
可否为空
*
emp_No
员工编号
Varchar
20
Notnull
emp_Name
员工姓名
Varchar
20
Notnull
emp_Sex
性别
Varchar
20
emp_Born
出生日期
Date
20
emp_Cul
文化程度
Varchar
20
emp_Nation
民族
Varchar
20
emp_Homeland
籍贯
Varchar
20
emp_Addr
地址
Varchar
20
emp_PersonLel
职务
Varchar
20
(2)部门(department)
主码
字段代码
字段名称
数据类型
长度
小数位数
可否为空
*
dep_No
部门编号
Int
Notnull
dep_Name
部门名称
Varchar
20
(3)工龄(SalAndTime)
主码
字段代码
字段名称
数据类型
长度
小数位数
可否为空
*
sal_timeLev
工龄
Int
Notnull
sal_timeMoney
对应工资
Double
(4)职务(SalAndTech)
主码
字段代码
字段名称
数据类型
长度
小数位数
可否为空
*
sal_techLev
职务
Int
Notnull
sal_techMoney
对应工资
Double
(5)津贴类别(jintie)
主码
字段代码
字段名称
数据类型
长度
小数位数
可否为空
*
jin_No
津贴编号
Int
Notnull
jin_Name
津贴项目
Varchar
jin_Money
对应工资
Double
(6)出勤类别(presence)
主码
字段代码
字段名称
数据类型
长度
小数位数
可否为空
*
pre_No
出勤编号
Int
Notnull
pre_Name
出勤项目
Varchar
pre_Xishu
对应系数
Double
(7)基本工资(EmpAndSal)
主码
字段代码
字段名称
数据类型
长度
小数位数
可否为空
*
emp_salEmpNO
员工姓名
Varchar
20
Notnull
emp_salTimeLev
工龄
Int
emp_salTechLev
职务
Int
emp_salary
基本工资
Double
(8)实际工资(EmpAndRSal)
主码
字段代码
字段名称
数据类型
长度
小数位数
可否为空
*
emp_rsalEmpNo
员工姓名
Varchar
20
Notnull
emp_rsalary
实际工资
Double
(9)用户(user1)
主码
字段代码
字段名称
数据类型
长度
小数位数
可否为空
*
user_name
用户名
Varchar
20
Notnull
user_password
密码
Varchar
20
user_power
权限
Int
(10)员工—部门(DepAndEmp)
主码
字段代码
字段名称
数据类型
长度
小数位数
可否为空
*
dep_empEmpNo
员工编号
Varchar
20
Notnull
dep_empDepNo
部门编号
Int
(11)员工—出勤(EmpAndPre)
主码
字段代码
字段名称
数据类型
长度
小数位数
可否为空
*
emp_preEmpNo
用户编号
Varchar
20
Notnull
emp_prePreNo
出勤编号
Int
emp_prePreDays
出勤天数
Int
(12)员工—津贴(EmpAndJintie)
主码
字段代码
字段名称
数据类型
长度
小数位数
可否为空
*
emp_jinEmpNo
用户编号
Varchar
20
Notnull
emp_jinJinNo
津贴编号
Int
4.1.2触发器与存储过程的实现
//触发器
droptriggerifexistsdel_onemployees;
delimiter$
createtriggerdel_onemployees
beforedeleteonemployees
foreachROW
begin
deletefromempandrsalwhereemp_rsalEmpNo=old.emp_No;
deletefromempandjintiewhereemp_jinEmpNo=old.emp_No;
deletefromDepAndEmpwheredep_empEmpNo=old.emp_No;
deletefromEmpAndPrewhereemp_preEmpNo=old.emp_No;
deletefromEmpAndSalwhereemp_salEmpNO=old.emp_No;
end$
//存储过程
delimiter$
createprocedureinsert_data
(insatint,insateint,injbint,inchbdoubleprecision,outsbint)
begin
setsb=1;
begin
if(sat=1)theninsertintoSalAndTimevalues(jb,chb);
elseif(sate=1)theninsertintoSalAndTechvalues(jb,chb);
endif;
end;
setsb=0;
end$
4.2程序流程图
程序流程图又称为程序框图,表示方法简单直观,是最早使用的一种模念模式,是用来描述处理执行的逻辑过程的,它把程序的基本步骤归纳为:
处理、判断、输入输出、起始和终结等几个基本功能,并用不同的记号加以表示,从而描述程序的执行过程。
在绘制程序流程图时使用的符号说明如下:
处理 输入输出 判断 起始终止 控制方向
图4.1
4.3人机界面设计
用户界面是指软件系统和用户交互的接口,良好的用户界面往往可以提高用户使用系统的热情,并刺激他们的积极性。
4.3.1登录界面设计
为了保证系统的安全性,进入系统之前必须经过必要的安全性,简洁、清晰、友好是此设计的风格,如图4.2所示:
图4.2
4.3.2系统基本信息界面设计
输入正确的用户名和密码后,即进入系统。
系统的基本操作界面如图4.3所示:
图4.3
系统基本操作界面主要包括修改信息、添加信息、显示信息、统计信息、修改信息几个功能模块。
4.3.3修改界面(员工信息)
图4.4
4.3.4添加界面(员工信息)
图4.5
4.3.5显示信息(员工信息)
图4.6
4.3.6删除信息(员工信息)
图4.7
第五章小结
ASDFASF:
在这次数据库设计中,我遇到的主要问题有以下几个方面:
1.Swing局部刷新时的问题,有时新的数据不能在组件上显示2.连接数据库时多个Connection没有关闭导致的取到错误的数据问题3.程序的健壮性,有些错误的情况不能以友好的方式提醒用户
总结:
在以后的设计中重视前期需求分析,分清模块功能。
SADFSA:
在本次软件的开发过程中,我进一步深入学习到了软件开发的流程,主要学习到了完整的数据库设计流程。
团队中人员的合作精神值得学习,大家集思广益,各司其职,尽自己所能做好各自的工作。
我认识到了前期分析的重要性,对后期开发有很大的指导作用,在分析过程中,大家经常会产生分歧,意见的不统一导致了开发时间的延误;此外还体会到了文档的重要性,文档是信息的重要载体,加强了人员间的交流,记录了软件的开发过程,为下一步的开发提供了良好的依据。
ASDFAS:
这次课程设计我们开发的项目是工资管理系统,主要包括后台数据库的建立和维护以及前台应用程序的开发两个方面。
主要功能包括对客户信息的增加、删除、修改等基本功能。
此次课程设计过程中也遇到了不少问题,由于自己的知识积累还不够,所以设计的项目也比较简单。
通过此次工资管理系统的设计过程,我对这两年的学习进行了全面的回顾与总结,并且得出以下结论:
1.系统分析很重要
2.严格按照既定的规划进行系统设计与开发
3.注重吸收其他软件的优点
4.广泛的积累素材
5.团队合作很重要
ASDASD:
在开发这个工资管理系统过程中我深刻地体会到了自学能力的重要性。
毕竟在学校学习到的知识是有限的,而在开发系统的过程中仅凭原有的一点点知识是远远不够的,只有翻阅大量的资料才能学到更多的知识,才能实现其预期的功能。
在开发过程中,遇到困难是在所难免的,期间我跟我的指导老师和同学进行交流,从中明白了很多。
开发一个系统,恒心和毅力也是不可缺少的,如果一遇到难题就心慌,想要放弃,那这样就不可能完成系统。
同样,在开发过程当中,细心也是非常重要的,由于很多事项都要很注意才行,如果没有做到这一点,就会出错。
在开发过程当中,我学到很多,明白了做任何事情都要有始有终,要敢于同困难作斗争,要养成独立思考的习惯。
在以后的工作和生活当中,我将继续发扬这些好的作风。
SADFASF:
经过反复测试,系统完成后运行添加、修改、查询、报表等功能均正常。
此系统任然存在许多缺陷,但是通过该系统设计达到了系统设计目的的意义,基本掌握了软件开发的主要步骤,了解了各个环节在开发时要注意的问题,体会到开发一个系统应该注意的方面以及重视用户在系统开发过程中间的作用,开发出好的软件高质量的软件。
另外在设计过程中也逐渐提高了软件开发技能和编程技能以及良好的软件开发思维模式。
SDFAS:
在学习数据库之前一直觉得数据库没有什么深入研究的价值,觉得无非是将数据存起来进行增删改查的操作就是了。
直到真正接触到了数据库这门课才真地发现了这里面得奥妙和值得专研的价值。
从某种意义上看来说,对于数据库的学习不仅仅改变了我对与数据库的看法,同时也改变了我对于程序设计的看法。
从前简单的看到就做是不科学的,应该经过规划和研究分析才能上手。
于此同时,老师留的项目其实是对于我们的所学习知识的一种检验与扩充。
因为项目结合很多的其他知识,同时做项目的过程是一个对于知识的重新审视与巩固的过程。
总地来说,这次的数据库课程设计让我觉得有所收获,有所得。
加强了对于课程本身的理解,同时也知道了更广的知识面。
ASDD:
近一周以来,虽然课程多、时间紧,考试忙,但在组长的带领下认真进行数据库课程设计。
认真听从老师的教导,及时进行学习、交流、实践。
通过学习交流,拓宽了知识面,提高了认识。
认识的提高主要表现在两方面:
一方面是对自我的认识,认识到自身的不足,需要不断提高自己的专业知识、数据管理方面的知识,明白了软件开发是一件工程学,需要工程学的指导,认真实践才是关键;另一方面是对数据库维护的学习认知,通过学习数据库使我上升了一个层次,使我在工作中能更好的完成数据库的维护工作,以及软件维护的重要性。
面向对象程序设计思想对于软件设计的巨大影响力,对于软件的扩展和维护的带来的巨大便利。
因此此次学习对于我个人来说至关重要。
源代码选摘:
//数据库连接
privateConnectiongetConnection(){
Stringurl="jdbc:
mysql:
//127.0.0.1:
3306/salary";
try{
Class.forName("com.mysql.jdbc.Driver");
return(Connection)DriverManager.getConnection(url,"root",
"mysql");
}catch(ClassNotFoundExceptione){
e.printStackTrace();
}catch(SQLExceptione){
e.printStackTrace();
}
returnnull;
}
publicstaticvoidmain(Stringargs[]){
newadminUser();
}
//添加职工信息监听
if(e.getSource()==enterInsert8){
try{
con=getConnection();
con.setAutoCommit(false);
sql=con.createStatement();
intk=sql.executeUpdate("INSERTINTOemployeesVALUES('"
+a8[0][0]+"','"+a8[0][1]+"','"+a8[0][2]
+"','"+a8[0][3]+"','"+a8[0][4]+"','"
+a8[0][5]+"','"+a8[0][6]+"','"+a8[0][7]
+"','"+a8[0][8]+"')");
System.out.println("k="+k);
intm=sql
.executeUpdate("INSERTINTOEmpandSal(emp_salEmpNO,emp_salTimeLev,emp_salTechLev)VALUES('"
+a8[0][0]
+"',"
+a8[0][8]
+","
+a8[0][10]
+")");
intn=sql.executeUpdate("INSERTINTODepAndEmpVALUES('"