1、华北科技学院计算机系综合性实验报告宿迁学院三系综合性实验实 验 报 告 课程名称 软件工程 实验学期 2008 至 2009 学年 第 二 学期学生所在系部 计算机系 年级 2 专业班级 学生姓名 学号 任课教师 郭 红 实验成绩 计算机系制实验题目员工考勤管理系统实验时间2009年5月31日实验地点软件工程实验室一、实验目的通过软件工程综合实验,使学生认识到在软件系统实际开发中运用软件工程方法的意义,加深对软件工程所学知识的理解,初步掌握进行软件系统开发的基本方法,培养学生分析问题、解决实际问题的能力,为毕业设计以及将来从事软件项目开发与管理工作打下一定的基础。二、设备与环境操作系统:Win
2、dowsXP/CE。数据库:SQL Server2000。编程工具:DEKPHI 7 编程环境三、实验内容及分析1 需求工程 1.1 功能需求 考勤管理是企业管理中非常重要的一环。作为公司主管考勤的人员能够通过考勤管理系统清楚的看到公司员工编号,姓名,部门以及签到时间、签离时间以及是否迟到、早退等诸多信息。还能够通过所有员工的出勤记录比较来发现企业管理和员工作业方面的诸多问题。更是员工工资及福利待遇方面重要的参考依据。具体操作流程如下: 超级用户登录本系统,输入用户名和密码,系统进行验证,验证通过的话进入程序主界面,在主界面对普通用户的信息进行录入,超级用户需要输入普通用户的部门和编号进行录入
3、,经过系统验证通过后该员工签到成功,下班签离时超级用户先输入该普通用户的部门和编号,如果该员工今天已经签到,那样签离成功。同时超级用户可以查询员工所有信息、某段时间内员工的出勤情况。 本系统是一个可靠性高、可用性强的系统,能够处理基本的功能和非功能故障。关于用户信息的安全性和保密性提供了基本保障。 1.2 数据流图用户的需求具体表现在对个人信息的提供、编辑、处理和查询上。这就要求数据库能够满足各种信息的输入、输出和处理。通过分析考勤管理系统的实际内容和要求,得到一下数据流图: 图1 顶层数据流图 图2 0层数据流图 1.3 E-R图 图3 超级用户E-R图 图4 用户E-R图 图5 部门E-R
4、图 图6 总体E-R2.软件设计 2.1 总体设计本系统的初步结构图如下所示: 关于图中的标号,分别表示为:a、 登录信息 b、不合格登录信息 c、不合格签到信息 d、签到信息 e、不合格签离信息f、签离信息 g、不合格删除条件 h、删除条件 i、查询条件 k、不合格查询条件m、合格登录信息 n、程序主界面信息 l、删除成功信息 j、合格删除条件 o、查询结果p、合格查询条件 q、合格签到信息 r、签到成功返回结果 s、签离成功返回结果t、合格签离信息优化后的结构图为: 其中编号的具体内容为: 1、合格的登录信息2、程序主界面 3、签到成功的返回信息4、合格的签到信息 5、签离成功的返回信息
5、6、合格的签离信息 7、合格的删除条件 8、删除成功信息 9、合格的查询条件 10、查询结果 2.2 数据库设计 本系统设计到普通用户,也就是员工,和超级用户两类用户。超级用户可以管理员工的签到签离操作,也可以查询员工的个人情况和出勤情况。员工只需要告诉超级员工自己的部门和编号就可以完成签到和签离操作。根据实际应用的需要,最大限度的提高系统的性能,本系统涉及5张表,分别是超级用户表、普通用户表、部门表、考勤表和考勤历史表。 2.2.1表结构分别如下: 表1 部门表结构名称字段类型为空性备注部门编号BM_NumVarchar(10)否唯一表示部门部门名称BM_NAMEVarchar(20)否部门
6、名称部门人数BM_COUNTint是 表2 超级用户表结构名称字段类型为空性备注用户名SUserVarchar(10)Not null唯一标识用户身份密码MMVarchar(10)Not null每个用户都有密码姓名SNameVarchar(10)Null性别SSexChar(2)Null 出生日期SBirDateDatetimeNull籍贯SPlaceVarchar(30)null 表 3 普通用户表结构 名称字段类型为空性备注编号NumVarchar(10)Not null 唯一标识用户身份部门AparVarchar(10)姓名CNameVarchar(10)性别SexChar(2)出生日
7、期BirdateDatetime籍贯PlaceVarchar(30) 表4 考勤表结构名称字段类型为空性备注序列号SeqintNot null唯一标识记录序列,自增长编号NO.Varchar(10) Not null 普通用户编号签到时间GtimeVarchar(50)Not null签离时间OtimeVarchar(50)Null 表5 考勤历史表名称字段类型为空性备注记录号LSeqintNut null唯一标识记录序列,自增长编号NumVarchar(10)Not null普通用户编号日期wDateDatestampNot null签到时间gtimeVarchar(50)Not null签
8、离时间otimeVarchar(50)Not null 是否迟到WlateBit Not null1 迟到,0 未迟到 是否早退WearlyBitNot null1 早退,0 未早退是否缺勤WOutBitNot null 1 缺勤,0未缺勤 2.2.2 这个表之间一定存在这某种相互制约的关系,下图为各表之间的关系图: 2.2.3 用到的比较重要的存储过程、触发器以及索引。 在主界面,当用户选择签到点击“确定”按钮后,执行将数据插入到考勤表中的存储过程wat_insert代码为:use ygkqgocreate proc wat_insertnum varchar(10),gtime datet
9、imeasinsert into worker_attend(num,gtime)values(num,gtime)Go当用户选择签离,并且点击确认按钮后,执行将该员工的信息插入到考勤表中的存储过程otime_insert代码为:use ygkqgocreate proc otime_insertnum varchar(10),otime varchar(50)asupdate worker_attend set otime=otimewhere num=numGo 2.3 详细设计本系统是用delphi制作完成的。具体实现如下A、超级用户需要先输入自己的用户名和密码,等待系统验证通过后才能登
10、录系统主界面。超级用户的用户名和密码是存放在数据库中的一个表中的。所以运行本程序时要先连接数据库。B、在系统主界面超级用户可以实现普通用户签到操作和签离操作,可以对普通用户的出勤情况进行修改和查询。超级用户对普通用户进行签到操作时,要先输入该员工的部门编号,然后输入该员工的编号。点击确认后系统将本人的签到时间插入到考勤表中。员工的部门编号以及员工的编号也是存储在数据库中的,在员工输入之后会核对员工输入信息的正确性。进行签离操作是针对已经签到的员工进行的,所以如果用户选择的员工编号没有出现在考勤表中则拒绝进行操作。C、主界面对信息的查询。对信息的查询包括员工个人信息、员工出勤信息和部门信息。这个
11、是通过在一个新窗体中打开数据库中的表实现的。对于比较详细的查询操作,这里没有暂时实现该功能。D、主界面对考勤信息的删除操作。删除操作包括删除当天所有签到信息、签离信息以及删除某个人的信息。这个是通过存储过程来实现的。3 系统实现 3.1 展示屏的设计 在一个窗体上放一张图片,然后在图片上加相应的文字说明,增加一个timer控件,在timer的ontime编写相应的代码。效果图为: 3.2 登录界面的设计 登录界面需要用户名和密码的验证,因此需要连接数据库,需要用到相应的控件,连接上数据库,在“确定”按钮的单击事件中输入相应代码: var suser,password:string;begin
12、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.RecordCount=0 then begin application.MessageBox(用户名与密码错误,请重新输入,提示,mb_ok); edit1.SetFocus; end el
13、se begin form2.Hide; form3.Show; end;end; 将该窗体的边界风格设置为bsnone,效果图为: 3.3 主界面的设计 控件的放置如下图所示,在“部门”组合框的ondropdown事件中获得数据库中关于部门的信息,代码为:var i,j:integer;begin combobox1.Clear; adoquery1.sql.Clear; adoquery1.SQL.Add(select distinct * from dep); /从数据库的dep表中读取数据 adoquery1.Open; j:= adoquery1.RecordCount; /reco
14、rdcount为读取的记录数 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);/显示员工相关信息 edit2.Text:=(adoquery1.FieldList1.asstring); edit3.Text:=(adoquery1.FieldList3.asstring); ed
16、it4.Text:=(adoquery1.FieldList4.asstring); if radiobutton3.Checked then begin /签到操作 with ADOStoredProc1 do begin Close; /将这条记录插入到考勤表中 ProcedureName:=wat_insert; Parameters.Clear; Parameters.Refresh; Parameters.ParamByName(num).Value:= combobox2.Text; Parameters.ParamByName(gtime).Value:= time(); Exe
17、cProc; 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:= combobox2.Text; Parameters.ParamByName(otime).Value:= time();/插入签离时间 ExecProc; end; /判断是否早退 if
18、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 begin application.MessageBox(没有该员工!,提示,mb_ok); combobox2.SetFocus; “删除当前所有签到记录”按钮与“删除所有签离记
19、录”按钮的单击事件的代码相似。“所有员工信息”、“查询当天记录”、“查询所有记录”和“部门信息”按钮的单击事件代码相似。 主界面的设计如下图所示, 3.4 查询结果显示的界面 这几个界面的实现只要是通过控件实现的,所以只显示一个,为员工信息: 另外系统中难免会输入有错误的地方,这时候提示很重要,这里只显示一个出错提示,如下所示:实现这个的代码为:application.Messagebox(,mb_ok).引号中输入相信的内容既可4、测试结果 4.1 登录模块测试 登录模块输入的用户名和密码是要求和数据库中SUser表中的记录相同才能进入主界面的。当输入空的用户名和密码以及不正确的用户名和密码
20、时,是不能进入主界面的。出错提示如下图所示: 只有输入正确的用户名和密码才成进入主界面进行操作。 测试用例:用户名 空 密码 空 (数据库中不存在的用户名和密码) 用户名 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。否则程序会出错。这个我没有能力做处理。 进行详细查询时,需要输入部门号和查询时间段,当用户输入了错误的时间,或者考勤历史表中没有时间的记录时给出提示:5、 总结 通过这次实验,我们不仅熟悉了我们以前学习的数
23、据库原理以及现在正在学习的delphi程序设计和sql sever教程所学到的知识,而且我们还初步了解了制作一个比较合理的软件的具体实施步骤。 首先要对自己要做的这个软件进行一系列的分析,包括可行性分析,需求分析等。在可行性分析中又包括了对软件开发的经济可行性、技术可行性和法律可行性等的分析。需求分析更是对完成一个符合用户需求的软件最重要的必不可少的部分。所以在做需求分析的时候要格外的细心和耐心,保证尽量了解用户对软件的需求,这样才能保证交付用户一个满意的软件。我相信学习软件工程对以后的工作中的项目开发一定会有很大的作用。或许现在我们还只是对软件工程一知半解,只有在具体的实践中才能真正理会软件
24、工程这门课的重要性。但是经过这次课程设计我已经深刻的感觉,开发一个系统最困难的阶段不是写代码编代码,而是对系统进行详尽的分析,而且对系统的分析占用了整个软件开发的很大部分时间。到最后的编码过程中,只需要按照需求分析报告中的功能需求对软件进行编程。 总之,这次实验对我们的收获还是挺大的。我们从中了解到了开发一个软件的大致过程,从而在以后开发的过程中,对那些很重要的比较复杂的部分就有一定的对待策略,而不像第一次开发时这样显得无从下手,总是改变自己刚开始设定的软件的模式。由于这次实验做的比较早,许多delphi的知识老师还没有讲到,所以自己就是在边摸索边前进的过程中实现该软件的。这对自己的自学能力也
25、有一定的锻炼,而且增加了自己对sql server2000的使用。对自己有很大的提高。6、 附录 实现本系统参考书籍有:Delphi 程序设计教程 第二版 机械工业出版社Delphi 课程设计案例精编 清华大学出版社Sql server 教程 清华大学出版社软件工程 清华大学出版社教 师 评 价评定项目ABCD评定项目ABCD选题合适方法可行分析从实际出发内容完整图表齐全图表正确规范软件结构合理模块算法正确报告规范布局合理文字流畅其他:评价教师签名:年 月 日合同管理制度1 范围本标准规定了龙腾公司合同管理工作的管理机构、职责、合同的授权委托、洽谈、承办、会签、订阅、履行和变更、终止及争议处理
26、和合同管理的处罚、奖励;本标准适用于龙腾公司项目建设期间的各类合同管理工作,厂内各类合同的管理,厂内所属各具法人资格的部门,参照本标准执行。2 规范性引用中华人民共和国合同法龙腾公司合同管理办法3 定义、符号、缩略语无4 职责4.1 总经理:龙腾公司经营管理的法定代表人。负责对厂内各类合同管理工作实行统一领导。以法人代表名义或授权委托他人签订各类合法合同,并对电厂负责。4.2 工程部:是发电厂建设施工安装等工程合同签订管理部门;负责签订管理基建、安装、人工技术的工程合同。4.3 经营部:是合同签订管理部门,负责管理设备、材料、物资的订购合同。4.5 合同管理部门履行以下职责:4.5.1 建立健
27、全合同管理办法并逐步完善规范;4.5.2 参与合同的洽谈、起草、审查、签约、变更、解除以及合同的签证、公证、调解、诉讼等活动,全程跟踪和检查合同的履行质量;4.5.3 审查、登记合同对方单位代表资格及单位资质,包括营业执照、经营范围、技术装备、信誉、越区域经营许可等证件及履约能力(必要时要求对方提供担保),检查合同的履行情况;4.5.4 保管法人代表授权委托书、合同专用章,并按编号归口使用;4.5.5 建立合同管理台帐,对合同文本资料进行编号统计管理;4.5.6 组织对法规、制度的学习和贯彻执行,定期向有关领导和部门报告工作;4.5.7 在总经理领导下,做好合同管理的其他工作,4.6 工程技术部:专职合同管理员及材料、燃料供应部兼职合同管理员履行以下职责:4.6.1 在主任领导下,做好本部门负责的各项合同的管理工作,负责保管“法人授权委托书”;4.6.2 签订合同时,检查对方的有关证件,对合同文本内容依照法规进行检查,检查合同标的数量、金额、日期、地点、质量要求、安全责任、违约责任是否明确,并提出补充及修改意见。重大问题应及时向有关领导报告,提出解决方案;4.6.3 对专业对口的合同统一编号、登记、建立台帐,分类整理归档。对合同承办部门提供相关法规咨询和日常协作服务工作;4.6.4 工程技术部专职合同管理员负责收集整理各类合同,建立合同统计台帐,并负责第 17 页