1、考勤管理系统软件工程需求分析深 圳 大 学题目: 员工考勤管理系统需求说明书 姓名: 杜英权、李土增 专业: 计算机科学与技术 学院: 信息工程学院 学号: 20081032131681017、20081032131681048 2010年 06 月 27 日目录一、.引言 31.1 实验目的 31.2 项目背景 31.3 参考资料 3二、设备与环境 3三、实验内容及分析 31 需求工程 31.1 功能需求 31.2数据流图 41.3 E-R图 62.软件设计 72.1 总体设计 72.2数据库设计 82.2.1表结构分别如下 82.2.2各表之间关系图 102.3详细设计 103.系统实现
2、113.1展显屏的设计 113.2登录界面的设计 113.3主界面设计 123.4查询结果显示的界面 144测试结果 154.1登录模块测试 154.2主界面模块测试 164.2.1签到测试 164.2.2签离操作 164.2.3删除打操作 174.2.4查询操作 17四、总结 18一、引言1.1实验目的通过软件工程综合实验,使学生认识到在软件系统实际开发中运用软件工程方法的意义,加深对软件工程所学知识的理解,初步掌握进行软件系统开发的基本方法,培养学生分析问题、解决实际问题的能力,为毕业设计以及将来从事软件项目开发与管理工作打下一定的基础。1.2 项目背景公司原本拥有统一的学籍管理系统,但由
3、于自考培训项目与其他培训项目存在很多区别,包含很多的特殊因素,原有系统不能满足自考培训部门的需要。由于部门不能使用原系统进行工作管理,大量学籍资料都存放在Excel表格里,给数据的查询、分类、更新带来很多不便,也给工作人员带来许多工作量,员工考勤管理系统在该背景下确立项目。1.3 参考资料 公司原有学籍管理系统二、设备与环境操作系统:WindowsXP/CE。数据库:SQL Server2000。编程工具:DEKPHI 7 编程环境三、实验内容及分析1 需求工程 1.1 功能需求 考勤管理是企业管理中非常重要的一环。作为公司主管考勤的人员能够通过考勤管理系统清楚的看到公司员工编号,姓名,部门以
4、及签到时间、签离时间以及是否迟到、早退等诸多信息。还能够通过所有员工的出勤记录比较来发现企业管理和员工作业方面的诸多问题。更是员工工资及福利待遇方面重要的参考依据。具体操作流程如下: 超级用户登录本系统,输入用户名和密码,系统进行验证,验证通过的话进入程序主界面,在主界面对普通用户的信息进行录入,超级用户需要输入普通用户的部门和编号进行录入,经过系统验证通过后该员工签到成功,下班签离时超级用户先输入该普通用户的部门和编号,如果该员工今天已经签到,那样签离成功。同时超级用户可以查询员工所有信息、某段时间内员工的出勤情况。 本系统是一个可靠性高、可用性强的系统,能够处理基本的功能和非功能故障。关于
5、用户信息的安全性和保密性提供了基本保障。 1.2 数据流图用户的需求具体表现在对个人信息的提供、编辑、处理和查询上。这就要求数据库能够满足各种信息的输入、输出和处理。通过分析考勤管理系统的实际内容和要求,得到一下数据流图:图1 顶层数据流图图2 0层数据流图1.3 E-R图 图3 超级用户E-R图 图4 用户E-R图 图5 部门E-R图 图6 总体E-R2.软件设计 2.1 总体设计本系统的初步结构图如下所示: 关于图中的标号,分别表示为:a、登录信息 b、不合格登录信息 c、不合格签到信息 d、签到信息 e、不合格签离信息f、签离信息 g、不合格删除条件 h、删除条件 i、查询条件 k、不合
6、格查询条件m、合格登录信息 n、程序主界面信息 l、删除成功信息 j、合格删除条件 o、查询结果p、合格查询条件 q、合格签到信息 r、签到成功返回结果 s、签离成功返回结果t、合格签离信息优化后的结构图为: 其中编号的具体内容为: 1、合格的登录信息2、程序主界面 3、签到成功的返回信息4、合格的签到信息 5、签离成功的返回信息 6、合格的签离信息 7、合格的删除条件 8、删除成功信息 9、合格的查询条件 10、查询结果 2.2 数据库设计 本系统设计到普通用户,也就是员工,和超级用户两类用户。超级用户可以管理员工的签到签离操作,也可以查询员工的个人情况和出勤情况。员工只需要告诉超级员工自己
7、的部门和编号就可以完成签到和签离操作。根据实际应用的需要,最大限度的提高系统的性能,本系统涉及5张表,分别是超级用户表、普通用户表、部门表、考勤表和考勤历史表。 2.2.1表结构分别如下:表1 部门表结构名称字段类型为空性备注部门编号BM_NumVarchar(10)否唯一表示部门部门名称BM_NAMEVarchar(20)否部门名称部门人数BM_COUNTint是 表2 超级用户表结构名称字段类型为空性备注用户名SUserVarchar(10)Not null唯一标识用户身份密码MMVarchar(10)Not null每个用户都有密码姓名SNameVarchar(10)Null性别SSex
8、Char(2)Null 出生日期SBirDateDatetimeNull籍贯SPlaceVarchar(30)null 表 3 普通用户表结构 名称字段类型为空性备注编号NumVarchar(10)Not null 唯一标识用户身份部门AparVarchar(10)姓名CNameVarchar(10)性别SexChar(2)出生日期BirdateDatetime籍贯PlaceVarchar(30) 表4 考勤表结构名称字段类型为空性备注序列号SeqintNot null唯一标识记录序列,自增长编号NO.Varchar(10) Not null 普通用户编号签到时间GtimeVarchar(50
9、)Not null签离时间OtimeVarchar(50)Null 表5 考勤历史表名称字段类型为空性备注记录号LSeqintNut null唯一标识记录序列,自增长编号NumVarchar(10)Not null普通用户编号日期wDateDatestampNot null签到时间gtimeVarchar(50)Not null签离时间otimeVarchar(50)Not null 是否迟到WlateBit Not null1 迟到,0 未迟到 是否早退WearlyBitNot null1 早退,0 未早退是否缺勤WOutBitNot null 1 缺勤,0未缺勤 2.2.2 这个表之间一定
10、存在这某种相互制约的关系,下图为各表之间的关系图: 2.3 详细设计本系统是用delphi制作完成的。具体实现如下A、超级用户需要先输入自己的用户名和密码,等待系统验证通过后才能登录系统主界面。超级用户的用户名和密码是存放在数据库中的一个表中的。所以运行本程序时要先连接数据库。B、在系统主界面超级用户可以实现普通用户签到操作和签离操作,可以对普通用户的出勤情况进行修改和查询。超级用户对普通用户进行签到操作时,要先输入该员工的部门编号,然后输入该员工的编号。点击确认后系统将本人的签到时间插入到考勤表中。员工的部门编号以及员工的编号也是存储在数据库中的,在员工输入之后会核对员工输入信息的正确性。进
11、行签离操作是针对已经签到的员工进行的,所以如果用户选择的员工编号没有出现在考勤表中则拒绝进行操作。C、主界面对信息的查询。对信息的查询包括员工个人信息、员工出勤信息和部门信息。这个是通过在一个新窗体中打开数据库中的表实现的。对于比较详细的查询操作,这里没有暂时实现该功能。D、主界面对考勤信息的删除操作。删除操作包括删除当天所有签到信息、签离信息以及删除某个人的信息。这个是通过存储过程来实现的。3 系统实现 3.1 展示屏的设计 在一个窗体上放一张图片,然后在图片上加相应的文字说明,增加一个timer控件,在timer的ontime编写相应的代码。效果图为: 3.2 登录界面的设计 登录界面需要
12、用户名和密码的验证,因此需要连接数据库,需要用到相应的控件,连接上数据库,在“确定”按钮的单击事件中输入相应代码: var suser,password:string;begin suser:=form2.Edit1.Text; password:=form2.Edit2.Text; adoquery1.Close; adoquery1.SQL.Clear; adoquery1.SQL.Add(select suser,mm from SUser where suser=+suser+and mm=+password+); adoquery1.Open; if adoquery1.Record
13、Count=0 then begin application.MessageBox(用户名与密码错误,请重新输入,提示,mb_ok); edit1.SetFocus; end else begin form2.Hide; form3.Show; end;end; 将该窗体的边界风格设置为bsnone,效果图为: 3.3 主界面的设计 控件的放置如下图所示,在“部门”组合框的ondropdown事件中获得数据库中关于部门的信息,代码为:var i,j:integer;begin combobox1.Clear; adoquery1.sql.Clear; adoquery1.SQL.Add(sel
14、ect distinct * from dep); /从数据库的dep表中读取数据 adoquery1.Open; j:= adoquery1.RecordCount; /recordcount为读取的记录数 if j0 then begin adoquery1.first; for i:=0 to j-1 do begin combobox1.Items.Add(adoquery1.FieldList0.asstring); /增加部门编号 adoquery1.Next; end; end else application.MessageBox(没有部门的信息,提示,mb_ok); end;
15、 “编号”组合框的代码同上面的类似,这里就不予列列出。该界面的关键功能是“确认”按钮,单击此按钮后将数据插入到考勤表中,并且显示该员工的个人信息和其是否迟到早退的情况,代码为: adoquery1.SQL.Clear; adoquery1.SQL.Add(select * from cuser where num=+combobox2.Text+); adoquery1.Open; /获取输入的员工号的记录 if adoquery1.RecordCount0 then begin edit1.Text:=(adoquery1.FieldList2.asstring);/显示员工相关信息 edi
16、t2.Text:=(adoquery1.FieldList1.asstring); edit3.Text:=(adoquery1.FieldList3.asstring); edit4.Text:=(adoquery1.FieldList4.asstring); if radiobutton3.Checked then begin /签到操作 with ADOStoredProc1 do begin Close; /将这条记录插入到考勤表中 ProcedureName:=wat_insert; Parameters.Clear; Parameters.Refresh; Parameters.P
17、aramByName(num).Value:= combobox2.Text; Parameters.ParamByName(gtime).Value:= time(); ExecProc; end; /判断是否迟到 if formatdatetime(hh:mm:ss,time) 0 then begin with ADOStoredProc1 do begin Close; ProcedureName:=otime_insert; Parameters.Clear; Parameters.Refresh; Parameters.ParamByName(num).Value:= combob
18、ox2.Text; Parameters.ParamByName(otime).Value:= time();/插入签离时间 ExecProc; end; /判断是否早退 if formatdatetime(hh:mm:ss,time) =(18:00:00) then edit6.Text:=是 else edit6.Text:=否 end else application.MessageBox(该人没有签到不能签离!,出错啦!,mb_ok) end else application.MessageBox(请选择签到还是签离,提示,mb_ok); /没有选择签离还是签到 end else b
19、egin application.MessageBox(没有该员工!,提示,mb_ok); combobox2.SetFocus; “删除当前所有签到记录”按钮与“删除所有签离记录”按钮的单击事件的代码相似。“所有员工信息”、“查询当天记录”、“查询所有记录”和“部门信息”按钮的单击事件代码相似。 主界面的设计如下图所示, 3.4 查询结果显示的界面 这几个界面的实现只要是通过控件实现的,所以只显示一个,为员工信息: 另外系统中难免会输入有错误的地方,这时候提示很重要,这里只显示一个出错提示,如下所示:实现这个的代码为:application.Messagebox(,mb_ok).引号中输入相
20、信的内容既可4、测试结果 4.1 登录模块测试 登录模块输入的用户名和密码是要求和数据库中SUser表中的记录相同才能进入主界面的。当输入空的用户名和密码以及不正确的用户名和密码时,是不能进入主界面的。出错提示如下图所示: 只有输入正确的用户名和密码才成进入主界面进行操作。 测试用例:用户名 空 密码 空 (数据库中不存在的用户名和密码) 用户名 23423423 密码 空 (数据库中不存在的用户名和密码) 用户名 admin密码 8787676 (用户名和密码字段不匹配) 上面的测试用例都不能进去主界面,可以用adminadmin进去主界面。 4.2 主界面模块测试 4.2.1 签到测试员工
21、签到时可以自己输入部门编号和员工编号,也可以从下拉列表中进行选择。当然下拉列表中的信息是直接从数据库中的表读出的不可能有错。如果员工自己输入部门编号和员工编号的话是可能出错的。测试用例:部门 89898 (数据库中不存在)员工 9008989 (数据库中不存在) 部门00001 (数据库中存在)员工 opopop(数据库中不存在) 部门00001 (数据库中存在)员工 0000201(数据库中存在但是不是该部门的数据),测试结果为: 成功签到后,系统显示是否迟到,如下图:4.2.2 签离操作员工签离时可以自己输入部门编号和员工编号,也可以从下拉列表中进行选择。输入错误的员工信息时如签到操作时的
22、提示,这里不在截图表示。当员工输入了正确的部门和员工编号时,但是该员工还没有签到,但员工现在选择签离操作,这个不允许的,这里给出提示,如下所示: 签离成功后,系统显示是否早退,如图: 4.2.3 删除操作可以选择删除当日所有签到记录和所有签离记录也可以选择删除某个人的记录,删除当天某个人的记录的时候,必须保证这个人已经签到了,早考勤表中存在。如果不存在,会有如下提示: 测试用例:空 当删除成功时会有如下提示: 测试用例:0000201 (已经进行签到的员工编号) 4.2.4 查询操作 进行查询操作时要确认连接到数据库中,所以要输入系统的用户名和密码,dba和sql。否则程序会出错。这个我没有能
23、力做处理。 进行详细查询时,需要输入部门号和查询时间段,当用户输入了错误的时间,或者考勤历史表中没有时间的记录时给出提示:四、总结 通过这次实验,我们不仅熟悉了我们以前学习的数据库原理以及现在正在学习的delphi程序设计和sql sever教程所学到的知识,而且我们还初步了解了制作一个比较合理的软件的具体实施步骤。 首先要对自己要做的这个软件进行一系列的分析,包括可行性分析,需求分析等。在可行性分析中又包括了对软件开发的经济可行性、技术可行性和法律可行性等的分析。需求分析更是对完成一个符合用户需求的软件最重要的必不可少的部分。所以在做需求分析的时候要格外的细心和耐心,保证尽量了解用户对软件的
24、需求,这样才能保证交付用户一个满意的软件。我相信学习软件工程对以后的工作中的项目开发一定会有很大的作用。或许现在我们还只是对软件工程一知半解,只有在具体的实践中才能真正理会软件工程这门课的重要性。但是经过这次课程设计我已经深刻的感觉,开发一个系统最困难的阶段不是写代码编代码,而是对系统进行详尽的分析,而且对系统的分析占用了整个软件开发的很大部分时间。到最后的编码过程中,只需要按照需求分析报告中的功能需求对软件进行编程。 总之,这次实验对我们的收获还是挺大的。我们从中了解到了开发一个软件的大致过程,从而在以后开发的过程中,对那些很重要的比较复杂的部分就有一定的对待策略,而不像第一次开发时这样显得无从下手,总是改变自己刚开始设定的软件的模式。由于这次实验做的比较早,许多delphi的知识老师还没有讲到,所以自己就是在边摸索边前进的过程中实现该软件的。这对自己的自学能力也有一定的锻炼,而且增加了自己对sql server2000的使用。对自己有很大的提高。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1