欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载  

    SQL数据库课程设计-人事管理系统设计.doc

    • 资源ID:3258564       资源大小:565.03KB        全文页数:18页
    • 资源格式: DOC        下载积分:4
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要4
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    SQL数据库课程设计-人事管理系统设计.doc

    一、引言1.1 选题目的及意义 人事管理系统是一个比较复杂的工作,管理人事要跟公司的具体情况结合起来。一般说来,公司都会分比较多的部门,每一个员工都属于一个部门,担任不同的职务,在人事管理系统时都要考虑各种情况。在现实生活中,公司部门的调整,员工的聘请、辞退、升迁是很平常见,为了了解各种情况,在数据库中不仅要保存员工的基本资料,同时这些变动也要能反映到数据库中。作为计算机应用的一部分,使用计算机对人事进行管理,具有着手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高商场人事管理的效率,也是科学化、正规化管理的重要条件。1.2 主要内容概要经过简单的分析,初步确定系统的主要功能:(1)友好的用户界面,操作简单。(2)具有良好的安全措施,能够保证系统数据不被非法使用。(3)按照某种条件,查询、统计符合条件的员工信息。(4)能动态更新部门,人事资料。1.3系统功能结构图及其相关模块描述人事管理系统用户资料管理用户权限管理员工资料管理基本资料管理日志管理数据库管理部门资料管理新增员工查询员工删除员工修改员工导入数据库导出数据库功能模块名:员工资料管理模块模块功能:作为本系统的核心模块,为了方便处理,人事变更如调动、离职等操作都放在这个模块的修改中,当然在实用系统中,这些功能可能会独立实现。功能模块名:数据库管理模块模块功能:主要实现数据库备份。注:由于篇幅有限,本课程设计只实现了具有代表性和在系统中占核心地位的员工资料管理模块,同时也讲解了如何实现数据库备份。1.4系统的数据字典A. 员工基本资料(描述员工的考勤信息,便于查询、操作):员工号,员工名,性别,年龄,部门,职务,合同开始时间结束时间,工作状态,住址,联系电话,手机,邮箱,备注B. 人事更新表(描述员工的人事变动信息):记录号、工号、原部门、新部门、原职务、新职务、操作、日期C. 部门表(描述员工所在部门):部门号、部门名称、上级部门D. 职务表(描述员工所属部门):职务二、 数据库概念模型设计2.1数据实体关系图系统的概念结构设计设计就是将需求分析得到的用户需求抽象为信息结构即概念模型的过程。设计概念结构通常有四类方法,它们分别是自顶向下、自底向下、逐步扩张、混合策略。在本系统中把需求分析中得到的数据图抽象,通过选择局部应用、逐一设计分E-R图,设计出人事管理系统的概念模型,用E-R模型来描述概念结构。人事管理系统实体关系E-R图:员 工部 门职 务人事变更111NN1属 于属 于执 行2.2数据实体描述Ø 用户密码表(用户名、用户密码、用户权限)Ø 员工资料表(员工号,员工名,性别,年龄,部门,职务,合同开始时间结束时间,工作 状态,住址,联系电话,手机,邮箱,备注)Ø 人事更新表(记录号、工号、原部门、新部门、原职务、新职务、操作、日期)Ø 部门表(部门号、部门名称、上级部门)Ø 职务表(职务)三、 数据库逻辑模型设计 逻辑结构设计是独立于任何一种数据模型的信息结构。逻辑结构设计的任务就是把概念结构设计阶段设计好的基本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 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 设计登录模块 设置登录界面是保障系统安全的一种手段,一般的数据应用系统都需要进行登录才能进入系统。在这个模块里,主要处理的是输入的用户名和密码,程序根据用户名和密码编写SQL语句,然后执行,查询该用户名和密码是否与用户密码表的某条记录相符。新建一个工程,在窗体中添加控件,然后调整界面,如图:更改用户名对应的文本框的Name为Edit2,同时Password属性值改为*,表示键盘输入密码都显示为*。在文件新建DataModule新建一个DataModule设计器,更改其名Mydata,添加Database组件,Query组件Data Source组件,双击登录按钮,进入它的响应函数编辑区,添加代码如下:procedure Tlogin.SpeedButton1Click(Sender: TObject);begin with mydata.Query1 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.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 /结束程序,回收所有资源 application.Free;end;4.2设计主窗体当登录成功后,进入主窗口。新建一个form,然后将其命名为Main。窗体如图:具体实现员工资料管理模块。双击”员工资料管理“按钮,建立它的响应函数,添加代码如下:Employee.Show();Main.Hide;4.3设计员工资料管理模块添加用户子模块由于这个模块的数据结构比较复杂,先来构建员工子模块。新建一个form对象,添加需要的组件,窗口如图:图中的数据输入框有文本框,单选框,组合框等,Delphi中的组件相对容易控制,可以方便的将各控件的内容读取出来。各控件的属性及类型,如表格:Cption属性Name属性控件类型工号CodeTEdit员工名StuffnameTedit性别man,womenTradioButton年龄ageTEdit部门partmentTComboBox职务jobTComboBox合同开始starttimeTDateTimePicker合同结束endtimeTDateTimePicker住址addressTEdit联系电话telephoneTEdit手机mobileTEdit电子邮箱mailTEdit备注remarkTMemo部门和职务对应的组合框的内容都是通过数据表的内容动态更新,添加员工资料时可以直接在组合框里选择。工作状态输入框虽然也是组合框,但它的内容是在程序中设定,主要是在职,离职等一些相对固定的状态。合同开始时间和合同结束时间的输入框是时间日期拾取器,DataTimePicker,使用这个控件的Date属性可以获取的日期,然后调用Datetostr函数把他转化成字符串。备注对应的输入框是一个多行文本输入框memo控件,它与一般的文本输入框的区别是可以多行输入在这个子模块中,由于部门和职务组合框的数据是由数据表提供,所以除了各按钮控件的响应函数外,还需要一个初始化过程oninit(),在type部分声明procedure oninit();然后在inplementation中实现这个函数如下:procedure TForm5.oninit();var temp:string;begin 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(temp); 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: TObject);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)=' ') 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 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(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').AsString:=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('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:string;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语句中添加一个条件,查询子模块的窗体,如图:在查询子模块窗体内容与添加员工子模块类似,只是在添加员工子模块中的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 (checkcode.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('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 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<starttime.Date then begin showmessage('结束时间不能小于开始时间'); end else begin if sign then begin add('and'); end else begin add('where'); sign:=true; end; add('合同开始时间>=:sdata and 合同结束时间<=:edate'); ParamByName('sdate').AsString:=datetostr(starttime.Date); ParamByName('edate').AsString:=datetostr(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 else 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; 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; 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更新员工资料子模块在人事管理系统中更新资料相对比较频繁,在实际使用中,人事更新的操作类型有许多种,但在数据库操作方面来说,只是更新员工资料表,同时插入相应的记录。因而人事更新操作其实可以集中在一个资料更新模块中,当执行一些特定的操作,如更改部门职务,则需要在人事调动表添加一条记录,表明人事结构发生变化。在执行更新操作之前,要先输入工号,然后判断该工号是否存在于数据库中,如果存在,则读取数据库中的相关数据,并将它们显示在各组件中。输入工号按钮对应的函数,如下:procedure TForm7.BitBtn1Click(Sender: TObject);var sign:boolean;begin sign:=false; with mydata.Query1 do 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 man.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:=FieldByName('联系电话').AsString; mobile.Text:=FieldByName('手机').AsString; mail.Text:=FieldByName('邮箱').AsString; jobstate.Text:=FieldByName('工作状态').AsString; remark.Text:=FieldByName('备注').AsString; end else begin showmessage('员工号不正确'); end; end;end;输入工号后,可以选择任意项进行更新,如果没有任何选项中,则给出提示信息,不做数据库更新操作,更新按钮的响应函数及其代码如下:procedure 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.Text); 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 begin add(','); end; add('年龄=:age'); sign:=true; ParamByName('age').AsString:=trim(age.Text); end; if checkdepart.Checked then begin if sign then begin add(',');

    注意事项

    本文(SQL数据库课程设计-人事管理系统设计.doc)为本站会员(哈尼dd)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开