软件工程综合实验报告(考勤管理系统)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
宿迁学院三系综合性实验
实验报告
课程名称软件工程
实验学期 2008 至 2009 学年第二学期学生所在系部计算机系
年级 2 专业班级
学生姓名学号
任课教师郭红
实验成绩
计算机系制
图1 顶层数据流图
图2 0层数据流图
1.3 E-R图
图3 超级用户E-R图
图4 用户E-R图
图5 部门E-R图
图6 总体E-R
2.软件设计
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、签离成功的返回信息
6、合格的签离信息
7、合格的删除条件
8、删除成功信息 9、合格的查询条件 10、查询结果
2.2 数据库设计
本系统设计到普通用户,也就是员工,和超级用户两类用户。超级用户可以管理员工的签到签离操作,也可以查询员工的个人情况和出勤情况。员工只需要告诉超级员工自己的部门和编号就可以完成签到和签离操作。根据实际应用的需要,最大限度的提高系统的性能,本系统涉及5张表,分别是超级用户表、普通用户表、部门表、考勤表和考勤历史表。
2.2.1表结构分别如下:
表1 部门表结构
名称字段类型为空性备注
是否迟到Wlate Bit Not null 1 迟到,0 未迟到
是否早退Wearly Bit Not null 1 早退,0 未早退
是否缺勤WOut Bit Not null 1 缺勤,0未缺勤
2.2.2 这个表之间一定存在这某种相互制约的关系,下图为各表之间的关系图:
2.2.3 用到的比较重要的存储过程、触发器以及索引。
在主界面,当用户选择签到点击“确定”按钮后,执行将数据插入到考勤表中的存储过程wat_insert代码为:
use ygkq
go
create proc wat_insert
@num varchar(10),@gtime datetime
as
insert into worker_attend(num,gtime)
values(@num,@gtime)
Go
当用户选择签离,并且点击确认按钮后,执行将该员工的信息插入到考勤表中的存储过程otime_insert代码为:
use ygkq
go
create proc otime_insert
@num varchar(10),@otime varchar(50)
as
update worker_attend
set otime=@otime
where num=@num
Go
2.3 详细设计
本系统是用delphi制作完成的。具体实现如下
A、超级用户需要先输入自己的用户名和密码,等待系统验证通过后才能登录系统主界面。
超级用户的用户名和密码是存放在数据库中的一个表中的。所以运行本程序时要先连接数据库。
B、在系统主界面超级用户可以实现普通用户签到操作和签离操作,可以对普通用户的出
勤情况进行修改和查询。超级用户对普通用户进行签到操作时,要先输入该员工的部门编号,然后输入该员工的编号。点击确认后系统将本人的签到时间插入到考勤表中。员工的部门编号以及员工的编号也是存储在数据库中的,在员工输入之后会核对员工输入信息的正确性。
进行签离操作是针对已经签到的员工进行的,所以如果用户选择的员工编号没有出现在考勤表中则拒绝进行操作。
C、主界面对信息的查询。对信息的查询包括员工个人信息、员工出勤信息和部门信息。
这个是通过在一个新窗体中打开数据库中的表实现的。对于比较详细的查询操作,这里没有暂时实现该功能。
D、主界面对考勤信息的删除操作。删除操作包括删除当天所有签到信息、签离信息以及
删除某个人的信息。这个是通过存储过程来实现的。
3 系统实现
3.1 展示屏的设计
在一个窗体上放一张图片,然后在图片上加相应的文字说明,增加一个timer控件,在timer 的ontime编写相应的代码。效果图为:
3.2 登录界面的设计
登录界面需要用户名和密码的验证,因此需要连接数据库,需要用到相应的控件,连接上
数据库,在“确定”按钮的单击事件中输入相应代码:
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.RecordCount=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('select distinct * from dep'); //从数据库的dep表中读取数据
adoquery1.Open;
j:= adoquery1.RecordCount; //recordcount为读取的记录数
if j>0 then
begin
adoquery1.first;
for i:=0 to j-1 do
begin
combobox1.Items.Add(adoquery1.FieldList[0].asstring); //增加部门编号
adoquery1.Next;
end;
end
else
application.MessageBox('没有部门的信息','提示',mb_ok);
end;
“编号”组合框的代码同上面的类似,这里就不予列列出。