SQL数据库课程设计人事管理系统设计_第1页
SQL数据库课程设计人事管理系统设计_第2页
SQL数据库课程设计人事管理系统设计_第3页
SQL数据库课程设计人事管理系统设计_第4页
SQL数据库课程设计人事管理系统设计_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一、引言1.1 选题目的及意义 人事管理系统是一个比较复杂的工作,管理人事要跟公司的具体情况结合起来。一般说来,公司都会分比较多的部门,每一个员工都属于一个部门,担任不同的职务,在人事管理系统时都要考虑各种情况。在现实生活中,公司部门的调整,员工的聘请、辞退、升迁是很平常见,为了了解各种情况,在数据库中不仅要保存员工的基本资料,同时这些变动也要能反映到数据库中。作为计算机应用的一部分,使用计算机对人事进行管理,具有着手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高商场人事管理的效率,也是科学化、正规化管理的重要条件。1.

2、2 主要内容概要经过简单的分析,初步确定系统的主要功能:(1)友好的用户界面,操作简单。(2)具有良好的安全措施,能够保证系统数据不被非法使用。(3)按照某种条件,查询、统计符合条件的员工信息。(4)能动态更新部门,人事资料。1.3系统功能结构图及其相关模块描述人事管理系统用户资料管理用户权限管理员工资料管理基本资料管理日志管理数据库管理部门资料管理新增员工查询员工删除员工修改员工导入数据库导出数据库功能模块名:员工资料管理模块模块功能:作为本系统的核心模块,为了方便处理,人事变更如调动、离职等操作都放在这个模块的修改中,当然在实用系统中,这些功能可能会独立实现。功能模块名:数据库管理模块模块

3、功能:主要实现数据库备份。注:由于篇幅有限,本课程设计只实现了具有代表性和在系统中占核心地位的员工资料管理模块,同时也讲解了如何实现数据库备份。1.4系统的数据字典a. 员工基本资料(描述员工的考勤信息,便于查询、操作):员工号,员工名,性别,年龄,部门,职务,合同开始时间结束时间,工作状态,住址,联系电话,手机,邮箱,备注b. 人事更新表(描述员工的人事变动信息):记录号、工号、原部门、新部门、原职务、新职务、操作、日期c. 部门表(描述员工所在部门):部门号、部门名称、上级部门d. 职务表(描述员工所属部门):职务二、 数据库概念模型设计2.1数据实体关系图系统的概念结构设计设计就是将需求

4、分析得到的用户需求抽象为信息结构即概念模型的过程。设计概念结构通常有四类方法,它们分别是自顶向下、自底向下、逐步扩张、混合策略。在本系统中把需求分析中得到的数据图抽象,通过选择局部应用、逐一设计分e-r图,设计出人事管理系统的概念模型,用e-r模型来描述概念结构。人事管理系统实体关系e-r图:员 工部 门职 务人事变更111nn1属 于属 于执 行2.2数据实体描述 用户密码表(用户名、用户密码、用户权限) 员工资料表(员工号,员工名,性别,年龄,部门,职务,合同开始时间结束时间,工作 状态,住址,联系电话,手机,邮箱,备注) 人事更新表(记录号、工号、原部门、新部门、原职务、新职务、操作、日

5、期) 部门表(部门号、部门名称、上级部门) 职务表(职务)三、 数据库逻辑模型设计 逻辑结构设计是独立于任何一种数据模型的信息结构。逻辑结构设计的任务就是把概念结构设计阶段设计好的基本e-r图转换为与用户选用dbms产品所支持的数据模型相符合的逻辑结构。职务表职务 char 30人事变更表记录号 int 4工号 char 30原部门 char 30新部门 char 30新职务 char 30操作 char 30日期 datetime 8根据前面的概念结构设计出来的e-r图,将实体间的联系转换为关系模式,本系统通过e-r图转换成的关系模式如下:用户密码表用户名 char 30用户密码 char

6、30部门表部门号 char 30部门名称 char 30上级部门 char 30用户权限 char 30员工资料表员工号 char 20员工名 char 30性别 int 4年龄 int 4部门 char 30职务 char 30合同开始时间 datetime 8合同结束时间 datetime 8工作状态 char 20住址 char 20联系电话 char 15手机 char 15邮箱 char 30备注 char 127四、系统的实现4.1 设计登录模块 设置登录界面是保障系统安全的一种手段,一般的数据应用系统都需要进行登录才能进入系统。在这个模块里,主要处理的是输入的用户名和密码,程序根

7、据用户名和密码编写sql语句,然后执行,查询该用户名和密码是否与用户密码表的某条记录相符。新建一个工程,在窗体中添加控件,然后调整界面,如图:更改用户名对应的文本框的name为edit2,同时password属性值改为*,表示键盘输入密码都显示为*。在文件新建datamodule新建一个datamodule设计器,更改其名mydata,添加database组件,query组件data source组件,双击登录按钮,进入它的响应函数编辑区,添加代码如下:procedure tlogin.speedbutton1click(sender: tobject);begin with mydata.q

8、uery1 do begin close; /关闭query1,否则不能写入sql语句with sql do /使用query1的sql属性 begin clear; /先清除sql属性中的内容,以免影响下面的操作 /添加sql代码,使用参数化方法,注意在参数前面一定要用:号 add(select *from 用户密码表 where 用户名=:uname and 用户密码=:upassword); /给各参数赋值 parambyname(uname).asstring:=trim(edit1.text); parambyname(upassword).asstring:=trim(edit2.

9、text); end; open; /执行sql语句 if(mydata.query1.findlast)then /判断查询结果是否为空 begin /如果用户名和密码正确,则隐藏登录窗体,显示主窗体,main为主窗体名 main.show(); login.hide; end; else begin /提示出错信息 showmessage(用户名或密码错误,请重新输入); end; end;end;双击退出按钮,建立它的响应函数,并添加代码如下:procedure tlogin.speedbutton2click(sender: tobject);begin /结束程序,回收所有资源 ap

10、plication.free;end;4.2设计主窗体当登录成功后,进入主窗口。新建一个form,然后将其命名为main。窗体如图:具体实现员工资料管理模块。双击”员工资料管理“按钮,建立它的响应函数,添加代码如下:employee.show();main.hide;4.3设计员工资料管理模块添加用户子模块由于这个模块的数据结构比较复杂,先来构建员工子模块。新建一个form对象,添加需要的组件,窗口如图:图中的数据输入框有文本框,单选框,组合框等,delphi中的组件相对容易控制,可以方便的将各控件的内容读取出来。各控件的属性及类型,如表格:cption属性name属性控件类型工号codete

11、dit员工名stuffnametedit性别man,womentradiobutton年龄agetedit部门partmenttcombobox职务jobtcombobox合同开始starttimetdatetimepicker合同结束endtimetdatetimepicker住址addresstedit联系电话telephonetedit手机mobiletedit电子邮箱mailtedit备注remarktmemo部门和职务对应的组合框的内容都是通过数据表的内容动态更新,添加员工资料时可以直接在组合框里选择。工作状态输入框虽然也是组合框,但它的内容是在程序中设定,主要是在职,离职等一些相对

12、固定的状态。合同开始时间和合同结束时间的输入框是时间日期拾取器,datatimepicker,使用这个控件的date属性可以获取的日期,然后调用datetostr函数把他转化成字符串。备注对应的输入框是一个多行文本输入框memo控件,它与一般的文本输入框的区别是可以多行输入在这个子模块中,由于部门和职务组合框的数据是由数据表提供,所以除了各按钮控件的响应函数外,还需要一个初始化过程oninit(),在type部分声明procedure oninit();然后在inplementation中实现这个函数如下:procedure tform5.oninit();var temp:string;be

13、gin man.checked:=true; /初始选择男 /选择query_depart 用来读取部门资料表内容 /选择query组件可以是任意的,只要不影响其他操作 with mydata.query_depart do begin close; with sql do begin clear; add(select 部门名称 from 部门资料表); end; open; first; partment.clear; while (eof=false) do begin temp:=fieldbyname(部门名称).asstring; partment.items.append(tem

14、p); next; end; end; with mydata.query_job do begin close; with sql do begin clear; add (select * from 职务表); end; open; first; job.clear; while (eof=false) do begin temp:=fieldbyname(职务).asstring; job.items.append(temp); next; end; end;end;实现“添加用户”按钮的响应函数,程序如下:procedure tform5.addstuffclick(sender: t

15、object);var temp:string;begin /判断输入内容是否完整,如果不完整则要求用户输入完整后在执行下一步操作 if (trim(code.text)= )or(trim(stuffname.text)= )or(trim(age.text)= )or (trim(partment.text)= )or(trim(job.text)= )or(trim(address.text)= )or (trim(telephone.text)= )or(trim(mobile.text)= )or(trim(mail.text)= )or (trim(jobstate.text)=

16、) then begin showmessage(请输入完整资料); end else begin with mydata.query_stuff do begin close; with sql do begin clear; add (select * from 员工资料表 where 员工号=:stuffcode); parambyname (stuffcode).asstring:=trim(code.text); end; open; if(findlast() then begin showmessage(该工号已经有人使用,请重新输入工号); with sql do begin

17、clear; add (select * from 员工资料表); end; open; end else begin close; with sql do begin clear; add(insert into 员工资料表 values(:code,:name,:sex,:age,:partment,:job,:start,:end,:state,:address,:telephone,:mobile,:email,:remark); parambyname(code).asstring:=trim(code.text); parambyname(name).asstring:=trim(

18、stuffname.text); if man.checked then begin parambyname(sex).asinteger:=1; end else begin parambyname(sex).asinteger:=0; end; parambyname(age).asinteger:=strtoint(trim(age.text); parambyname(partment).asstring:=trim(partment.text) ; parambyname(job).asstring:=trim(job.text); parambyname(start).asstri

19、ng:=datetostr(starttime.date); parambyname(end).asstring:=datetostr(endtime.date); parambyname(address).asstring:=trim (address.text); parambyname(telephone).asstring:=trim (telephone.text); parambyname(mobile).asstring:=trim (mobile.text); parambyname(email).asstring:=trim (mail.text); parambyname(

20、state).asstring:=trim (jobstate.text); parambyname(remark).asstring:=trim (remark.text); end; try execsql; except showmessage(unsuccess); end; close; with sql do begin clear; add(select * from 员工资料表); end; open; end; end; end;end;清除输入的函数代码如下:procedure tform5.clearclick(sender: tobject);var temp:stri

21、ng;begin code.text:=; stuffname.text:=; man.checked:=true; age.text:=0; address.text:=; telephone.text:=; mobile.text:=; mail.text:=; jobstate.text:=; remark.text:=;end;4.4查询员工子模块查询员工并不需要根据所有字段进行查询,有时可能是查询所有,有时可能只需要对某几个字段条件进行查询,这就是需要对sql语句进行合适的处理。在条件选择上,可以使用cleck box组件进行选择判断,每选择一项,则在sql语句中添加一个条件,查询子

22、模块的窗体,如图:在查询子模块窗体内容与添加员工子模块类似,只是在添加员工子模块中的label组件改为check box组件。双击查询按钮建立它的响应函数,如下:procedure tform6.searchstuffclick(sender: tobject);var sign:boolean; value:integer;begin sign:=false; /标准前面是否选择查询条件 with mydata.query_stuff do begin close; with sql do begin clear; add(select * from 员工资料表); if (checkcod

23、e.checked ) then /如果选择查询工号 begin add(where 员工号=:code); /添加查询条件 parambyname(code).asstring:=trim(code.text); sign:=true; end; if checkname.checked then /判断是否选择名字查询 begin if sign then /如果已经有其他条件查询,则用and还是where begin add(and 员工名=:name); end else begin add(where 员工名=:name); sign:=true; end; parambyname(

24、name).asstring:=trim(stuffname.text); end; if checksex.checked then begin if man.checked then begin value:=1; end else begin value:=0; end; if sign then begin add(and 性别=:sex); end else begin add(where 性别=:sex); sign:=true; end; parambyname(sex).asinteger:=value; end; if checkage.checked then begin

25、if sign then begin add(and 年龄=:age); end else begin add(where 年龄=:age); sign:=true; end; parambyname(age).asstring:=trim(age.text); end; if checktime.checked then begin if endtime.date=:sdata and 合同结束时间=:edate); parambyname(sdate).asstring:=datetostr(starttime.date); parambyname(edate).asstring:=dat

26、etostr(endtime.date); end; end; if checkstate.checked then begin if sign then begin add(and 工作状态=:state); end else begin add(where 工作状态=:state); sign:=true; end; parambyname(state).asstring:=trim(jobstate.text); end; if checkaddress.checked then begin if sign then begin add(and 住址=:address); end els

27、e begin add(where 住址=:address); sign:=true; end; parambyname(address).asstring:=trim(address.text); end; if checktel.checked then begin if sign then begin add(and 联系电话=:telephone); end else begin add(where 联系电话=:telephone); sign:=true; end; parambyname(telephone).asstring:=trim(telephone.text); end;

28、 if checkmobile.checked then begin if sign then begin add(and 手机=:mobile); end else begin add(where 手机=:mobile); sign:=true; end; parambyname(mobile).asstring:=trim(mobile.text); end; if checkmail.checked then begin if sign then begin add(and 邮箱=:mail); end else begin add(where 邮箱=:mail); sign:=true

29、; end; parambyname(mail).asstring:=trim(mail.text); end; if checkremark.checked then begin if sign then begin add(and 备注 like :remark ); end else begin add(where 备注 like :remark); end; parambyname(remark).asstring:=trim(%+remark.text+ %); end; end; open; end;end;4.4更新员工资料子模块在人事管理系统中更新资料相对比较频繁,在实际使用中

30、,人事更新的操作类型有许多种,但在数据库操作方面来说,只是更新员工资料表,同时插入相应的记录。因而人事更新操作其实可以集中在一个资料更新模块中,当执行一些特定的操作,如更改部门职务,则需要在人事调动表添加一条记录,表明人事结构发生变化。在执行更新操作之前,要先输入工号,然后判断该工号是否存在于数据库中,如果存在,则读取数据库中的相关数据,并将它们显示在各组件中。输入工号按钮对应的函数,如下:procedure tform7.bitbtn1click(sender: tobject);var sign:boolean;begin sign:=false; with mydata.query1 d

31、o begin close; with sql do begin clear; add(select * from 员工资料表 where 员工号=:code); parambyname(code).asstring:=trim(code.text); end; open; if findlast() then /判断工号是否存在与数据库中 begin stuffname.text:=fieldbyname(员工号).asstring; if (fieldbyname(性别).asinteger=1) then begin man.checked:=true; end else begin m

32、an.checked:=false; end; age.text:=fieldbyname(年龄).asstring; partment.text:=fieldbyname(部门).asstring; job.text:=fieldbyname(职务).asstring; starttime.datetime:=fieldbyname(合同开始时间).asdatetime; endtime.datetime:=fieldbyname(合同结束时间).asdatetime; address.text:=fieldbyname(住址).asstring; telephone.text:=field

33、byname(联系电话).asstring; mobile.text:=fieldbyname(手机).asstring; mail.text:=fieldbyname(邮箱).asstring; jobstate.text:=fieldbyname(工作状态).asstring; remark.text:=fieldbyname(备注).asstring; end else begin showmessage(员工号不正确); end; end;end;输入工号后,可以选择任意项进行更新,如果没有任何选项中,则给出提示信息,不做数据库更新操作,更新按钮的响应函数及其代码如下:procedur

34、e tform7.updatestuffclick(sender: tobject);var sign:boolean;begin sign:=false; /开始无更新选项 with mydata.query1 do /使用query1 begin close; with sql do /设置sql属性 begin clear; add(update 员工资料表 set); /开始添加更新资料的sql语句 if checkname.checked then begin add(员工名=:name); parambyname(name).asstring:=trim(stuffname.tex

35、t); sign:=true; end; if checksex.checked then begin if sign then begin /如果前面已经有其他字段更新,则需要在赋值语句前加上“,”号 add(,); end; sign:=true; add(性别=:sex); if man.checked then begin parambyname(sex).asinteger:=1; end else begin parambyname(sex).asinteger:=0; end; end; if checkage.checked then begin if sign then be

36、gin add(,); end; add(年龄=:age); sign:=true; parambyname(age).asstring:=trim(age.text); end; if checkdepart.checked then begin if sign then begin add(,); end; sign:=true; add(部门=:depart); parambyname(depart).asstring:=trim(partment.text); end; if checkjob.checked then begin if sign then begin add(,);

37、end; sign:=true; add(职务=:job); parambyname(job).asstring:=trim(job.text); end; if checkstart.checked then begin if sign then begin add(,); end; sign:=true; add(合同开始时间=:startdate); parambyname(startdate).asstring:=datetostr(starttime.date); end; if checkend.checked then begin if sign then begin add(,

38、); end; sign:=true; add(合同结束时间=:endtime); parambyname(endtime).asstring:=datetostr(endtime.date); end; if checkstate.checked then begin if sign then begin add(,); end; sign:=true; add(工作状态=:state); parambyname(state).asstring:=trim(jobstate.text); end; if checkaddress.checked then begin if sign then

39、 begin add(,); end; sign:=true; add(住址=:address); parambyname(address).asstring:=trim(address.text); end; if checktel.checked then begin if sign then begin add(,); end; sign:=true; add(联系电话=:telephone); parambyname(telephone).asstring:=trim(telephone.text); end; if checkmobile.checked then begin if

40、sign then begin add(,); end; sign:=true; add(手机=:mobile); parambyname(mobile).asstring:=trim(mobile.text); end; if checkmail.checked then begin if sign then begin add(,); end; sign:=true; add(邮箱=:mail); parambyname(mail).asstring:=trim(mail.text); end; if checkremark.checked then begin if sign then begin add(,); end; add(备注=:remark); parambyname(remark).asstring:=trim(remark.text); end; add(where 员工号=:code); parambyname(code).asstring:=trim(code.text); end; if sign then begin execsql; /如果有更新选项,则执行更新语句

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论