资源描述
课 程 设 计
课程名称
SQL数据库系统课程设计
题目名称
职工考勤管理信息系统
专业班级
2013级软件工程
学生姓名
学 号
指导教师
2015年12月
目录
一 可行性研究 1
1.1 问题描述 1
1.2 研究目的 1
1.3 开发环境和运行环境 1
1.4 预期结果和意义 2
二 需求分析 2
2.1 功能需求 2
2.1.1 数据管理 2
2.1.2考勤管理 2
2.1.3加班管理 2
2.1.4 请假管理 2
2.1.5 出差管理 2
2.2 功能模块图 3
2.3 系统数据流程图 4
2.4 数据字典 4
三 概念结构设计 4
3.1 局部E-R图 4
3.1.1 员工信息E-R图 4
3.1.2 出勤记录 E-R图 5
3.1.3 出差记录 E-R图 5
3.1.4 加班记录 E-R图 5
3.1.5 请假记录 E-R图 6
3.2 总 E-R图 6
四 逻辑结构设计 7
4.1关系模式 7
五 数据实施和维护 7
5.1数据表的创建 7
5.2数据表的属性 8
5.2.1出勤资料表 8
5.2.2加班资料表 9
5.2.3请假资料表 10
5.2.4出差资料表 10
六 测试 11
6.1登录模板测试 11
6.2登录后页面 13
6.3建立上班签到表 15
6.4职工信息表 17
6.5出差信息系统 20
6.6加班信息系统 24
6.7请假信息系统 29
七 心得体会 32
八 参考文献 32
一 可行性研究
1.1 问题描述
随着企业人事管理的日趋复杂和企业人员的增多,企业的考勤管理变得越来越复杂。规范的考勤管理是现代企业提高管理效益的重要保证,而传统的人工管理存在着效率低、不易统计、成本高和易出错等弊端,已经无法适应现代企业的需求。随着计算机技术和通信技术的迅速发展,将传统的人工考勤管理计算机化,建立一个高效率的、无差错的考勤管理系统,能够有效的帮助企业实现“公正考勤,高效薪资”,使企业的管理水平登上一个新的台阶。
职工考勤管理经过如下的业务流程:
(1)员工基本信息管理,添加,删除,更改
(2)员工考勤管理,员工根据自己的班次在上下班时分别进行出勤操作,采用手动方式或者使用划卡机。由人事部门专门的人员管理出勤和退勤信息。
(3)一般在每个月月初进行考勤汇总,汇总信息包括工作日的出勤情况、请假天数、出差天数、休假天数和不同性质的加班记录等。
1.2 研究目的
待开发的系统的名称为职工考勤管理信息系统。
我们以中小型企业的考勤管理业务为依托,结合科学管理的理论,设计并开发一个企业考勤管理信息系统,提供一个科学合理的考勤管理解决方案,彻底实现无纸化作业。根据管理权限的不同,将界面分为一般职员、部门经理、系统管理员和最高管理者四个层次。
(1)提供简单、方便的操作。
(2)根据企业原来的考勤管理制度,为企业不同管理层次提供相应的功能。
(3)通过考勤管理无纸化的实现,使企业的考勤管理更加科学规范。
(4)节省考勤管理的成本。
(5)提高企业考勤管理的透明度和效率,防止“虚假出勤“的现象。
(6)对系统提供必要的权限管理。
(7)为企业实现整体信息化的其他相关系统提供必要的数据支持。
1.3 开发环境和运行环境
公司考勤管理系统这运用了当前最流行的SQL SERVER2012来建表还有前台应用程序采用VISUAL STUDIOI2015编写运行和开发的。
1.库、基本表的建立和修改:在SQL-SERVER环境下用CREATE TABLE 建立库以及库中基本表。
2.数据加载: 用手工录入或导入等方法实现基本表中的数据加载。
3.单表查询以及多表查询:在建立的基本表中使用select基本格式和聚集函数;设计合适的视图,实现多表间查询。
4.用SQL SERVER 2012等开发环境设计、实现系统主要功能。
1.4 预期结果和意义
考勤系统能实现职工日考勤记录,记录请假信息,记录出差信息等功能,并最终所有信息归入月统计中去。
本考勤系统建立了一个高效率的、无差错的考勤管理系统,能够有效的帮助企业实现“公正考勤,高效薪资”,使企业的管理水平登上一个新的台阶。
二 需求分析
2.1 功能需求
2.1.1 数据管理
功能是设置和管理基础数据,包括加班、请假类别的定义和班次的定义,在全县范围内可以进行基础数据的添加、删除和修改。
2.1.2考勤管理
包括出勤动作、出勤信息的查询;上级对下级员工的出勤信息的确认;生成考勤统计信息并可以根据指定的条件进行查询。实现从每日出勤到统计全部考勤信息的无纸化操作。为方便数据传递和查阅,要根据需求提供不同时间短的考勤统计信息表。
2.1.3加班管理
对员工的加班时间进行统计,记录开始时间和结束时间,对加班信息实现添加,删除等操作。
2.1.4 请假管理
可以提出请假申请,并完善请假信息,如请假开始时间,请假结束时间,请假的次数进行管理。
2.1.5 出差管理
管理者安排员工出差,对出差时间,次数的管理。
2.2 功能模块图
如图2-1所示,图为功能模块图
2-1 功能模块图
2.3 系统数据流程图
如图2.3所示,图为数据流程图
考勤员
员工
经理审批
请假值班出差记录
上下班时间安排
员工出勤记录
记录出勤时间
2-2 数据流程图
2.4 数据字典
在物理结构中,数据的基本存取单位是存储记录。有了逻辑结构以后,就可以设计存储记录结构,一个存储记录可以与多个逻辑记录相对应。存储记录就包括记录的组成,数据项的类型和长度等。
三 概念结构设计
3.1 局部E-R图
3.1.1 员工信息E-R图
职工信息
职称
年龄
姓名
性别
编号
图3-1
3.1.2 出勤记录 E-R图
下班时间
缺勤记录
上班时间
出勤记录
图3-2
3.1.3 出差记录 E-R图
结束时间
总计天数
开始时间
出差记录
图3-3
3.1.4 加班记录 E-R图
统计时间
开始时间
加班记录
结束时间
图3-4
3.1.5 请假记录 E-R图
结束时间
统计天数
开始时间
请假记录
图3-5
3.2 总 E-R图
图3-6
四 逻辑结构设计
4.1关系模式
职工信息(职工编号,姓名,性别,年龄,职称)
出勤记录(上班打卡时间,下班打卡时间,缺勤记录)
出差记录(出差开始时间,出差结束时间,统计出差时间)
加班信息(加班开始时间,加班结束时间,加班时间统计)
请假信息(请假开始时间,请假结束时间,请假时间统计)
五 数据实施和维护
5.1数据表的创建
图5-1表的建立
5.2数据表的属性
图5-2表的属性
5.2.1出勤资料表
图5-3出勤资料
图5-4员工出勤基本资料表属性
图5-5员工出勤基本资料属性
5.2.2加班资料表
图5-6加班资料表属性
图5-7加班资料表
5.2.3请假资料表
图5-8请假资料表属性
图5-9请假资料表
5.2.4出差资料表
图5-10出差资料表属性
图5-11出差资料表
六 测试
6.1登录模板测试
为了系统的安全,在进入系统之前首先会出现一个登录模块,用户只有在输入正确的用户名和正确的密码之后,才能进入系统。
图6-1登录界面
登录代码的简单说明:
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text == "" || textBox2.Text == "")
{
MessageBox.Show("请输入用户名或密码");
}
else
{
string sql = "select '" + textBox1.Text + "' from 登录信息表 where 密码='" + textBox2.Text + "'";
SqlConnection con = new SqlConnection("Data Source=ZHANGHAO\\SQL2012;Initial Catalog=职工考勤系统;User Id=sa;Password=147258");
con.Open();
SqlCommand com = new SqlCommand(sql, con);
SqlDataReader sread = com.ExecuteReader();
try
{
if (sread.Read())
{
Form3 frm2 = new Form3();
frm2.Show();
this.Hide();
}
else
{
MessageBox.Show("登录信息有误");
textBox1.Text = textBox2.Text = "";
}
}
catch
{
}
finally
{
con.Close();//关闭连接
con.Dispose();//释放连接
sread.Close();//释放资源
}
}
}
6.2登录后页面
图6-2 登录后页面
登录进入的主页面主要代码:
private void button1_Click(object sender, EventArgs e)
{
panel1.Controls.Clear();
Form2 form2 = new Form2();
form2.TopLevel = false;
panel1.Controls.Add(form2);
form2.Show();
}
private void button2_Click(object sender, EventArgs e)
{
panel1.Controls.Clear();
Form4 form4 = new Form4();
form4.TopLevel = false;
panel1.Controls.Add(form4);
form4.Show();
}
private void button3_Click(object sender, EventArgs e)
{
panel1.Controls.Clear();
Form5 form4 = new Form5();
form4.TopLevel = false;
panel1.Controls.Add(form4);
form4.Show();
}
private void button4_Click(object sender, EventArgs e)
{
panel1.Controls.Clear();
Form7 form4 = new Form7();
form4.TopLevel = false;
panel1.Controls.Add(form4);
form4.Show();
}
private void button5_Click(object sender, EventArgs e)
{
panel1.Controls.Clear();
Form6 form4 = new Form6();
form4.TopLevel = false;
panel1.Controls.Add(form4);
form4.Show();}
6.3建立上班签到表
private void button1_Click(object sender, EventArgs e)
{
try {
SqlConnection conn = new SqlConnection("Data Source=ZHANGHAO\\SQL2012;Initial Catalog=职工考勤系统;User Id=sa;Password=147258");
conn.Open();
String sql = "select * from 职工信息表 where 职工编号='"+textBox1.Text+"'";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
SqlDataReader dr = cmd.ExecuteReader();
if (dr.HasRows)
while (dr.Read())
{
tx.Text = dr["职工姓名"].ToString();
}
else
{
MessageBox.Show("查无此人");
}
conn.Close();
}
catch (Exception ex) { MessageBox.Show(ex.Message); }
try
{
SqlConnection conn = new SqlConnection("Data Source=ZHANGHAO\\SQL2012;Initial Catalog=职工考勤系统;User Id=sa;Password=147258");
conn.Open();
String sql = "insert into 出勤信息表(职工编号,职工姓名,上班时间)values('" + textBox1.Text + "','"+tx.Text+"','" + DateTime.Now.ToShortTimeString() + "')";
SqlCommand cmd = new SqlCommand(sql, conn);
int n=cmd.ExecuteNonQuery();
if (n > 0)
{
MessageBox.Show("签到成功,经验值+5");
this.出勤信息表TableAdapter.Fill(this.职工考勤系统DataSet1.出勤信息表);
}
conn.Close();
}
catch { MessageBox.Show("禁止重复签到"); }
图6-3 出勤界面
6.4职工信息表
职工信息表的插入添加还有查询页面 其相关代码:
private void button3_Click(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection("Data Source=ZHANGHAO\\SQL2012;Initial Catalog=职工考勤系统;User Id=sa;Password=147258");
conn.Open();
String sql = "select * from 职工信息表 where 职工编号='" + textBox6.Text + "'";
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataReader dre = cmd.ExecuteReader();
if (dre.HasRows)
while (dre.Read())
{
textBox1.Text = dre["职工编号"].ToString();
textBox2.Text = dre["职工姓名"].ToString();
textBox3.Text = dre["性别"].ToString();
textBox4.Text = dre["年龄"].ToString();
textBox5.Text = dre["职称"].ToString();
}
else
{
MessageBox.Show("查无此人");
textBox6.Text = "";
}
this.职工信息表TableAdapter.Fill(this.职工考勤系统DataSet.职工信息表);
conn.Close();
conn.Dispose();
}
private void button4_Click(object sender, EventArgs e)
{
try {
SqlConnection conn = new SqlConnection("Data Source=ZHANGHAO\\SQL2012;Initial Catalog=职工考勤系统;User Id=sa;Password=147258");
conn.Open();
String sql = "update 职工信息表 set 职工姓名='" + textBox2.Text + "',性别='" + textBox3.Text + "',年龄='" + textBox4.Text + "',职称='" + textBox5.Text + "' where 职工编号='" + textBox1.Text + "'";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
MessageBox.Show("更新成功");
conn.Close();
conn.Dispose();
textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
textBox4.Text = "";
textBox5.Text = "";
textBox6.Text = "";
this.职工信息表TableAdapter.Fill(this.职工考勤系统DataSet.职工信息表);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
图6-4 职工信息表
6.5出差信息系统
图6-5 出差信息系统
其中各按钮代码中总时长代码:
private void button3_Click(object sender, EventArgs e)
{
try
{
SqlConnection connn = new SqlConnection("Data Source=ZHANGHAO\\SQL2012;Initial Catalog=职工考勤系统;User Id=sa;Password=147258");
connn.Open();
String sqll = "select * from 出差信息表1 where 职工编号='" + textBox1.Text + "'";
SqlCommand cmdd = new SqlCommand(sqll, connn);
SqlDataReader dr = cmdd.ExecuteReader();
if (dr.HasRows)
while (dr.Read())
{
te.Text = dr["出差开始时间"].ToString();
tx.Text = dr["出差结束时间"].ToString();
}
}
catch (Exception ex) { MessageBox.Show(ex.Message); }
try
{
string hour;
DateTime.TryParse(te.Text, out da1);
DateTime.TryParse(tx.Text, out da2);
tp = da2 - da1;
hour = tp.TotalMinutes.ToString();
SqlConnection con = new SqlConnection("Data Source=ZHANGHAO\\SQL2012;Initial Catalog=职工考勤系统;User Id=sa;Password=147258");
con.Open();
String sql = "update 出差信息表1 set 出差总时间='" +hour.Substring(0,5) + "分钟" + "' where 职工编号='" + textBox1.Text + "'";
SqlCommand com = new SqlCommand(sql, con);
int n = com.ExecuteNonQuery();
if (n > 0)
{
this.出差信息表1TableAdapter.Fill(this.职工考勤系统DataSet3.出差信息表1);
MessageBox.Show("记录完成!");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void button4_Click(object sender, EventArgs e)
{
try
{
string s;
s = this.dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[0].Value.ToString();
long n = Convert.ToInt64(s);
SqlConnection conn = new SqlConnection("Data Source=ZHANGHAO\\SQL2012;Initial Catalog=职工考勤系统;User Id=sa;Password=147258");
conn.Open();
String sql = "delete from 出差信息表1 where 职工编号='" + n + "'";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
MessageBox.Show("删除成功!");
this.出差信息表1TableAdapter.Fill(this.职工考勤系统DataSet3.出差信息表1);
conn.Close();
}
catch
{
MessageBox.Show("请选择要删除的课程号");
}
}
}
}
6.6加班信息系统
图6-6 加班信息系统
其中删除记录代码:
private void button1_Click(object sender, EventArgs e)
{
try
{
SqlConnection conn = new SqlConnection("Data Source=ZHANGHAO\\SQL2012;Initial Catalog=职工考勤系统;User Id=sa;Password=147258");
conn.Open();
String sql = "select * from 职工信息表 where 职工编号='" + textBox1.Text + "'";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
SqlDataReader dr = cmd.ExecuteReader();
if (dr.HasRows)
while (dr.Read())
{
tx.Text = dr["职工姓名"].ToString();
}
else
{
MessageBox.Show("查无此人");
}
conn.Close();
}
catch (Exception ex) { MessageBox.Show(ex.Message); }
try
{
SqlConnection conn = new SqlConnection("Data Source=ZHANGHAO\\SQL2012;Initial Catalog=职工考勤系统;User Id=sa;Password=147258");
conn.Open();
String sql = "insert into 加班信息表(职工编号,职工姓名,加班开始时间)values('" + textBox1.Text + "','" + tx.Text + "','" + DateTime.Now.ToString()+ "')";
SqlCommand cmd = new SqlCommand(sql, conn);
int n = cmd.ExecuteNonQuery();
if (n > 0)
{
MessageBox.Show("签到成功");
this.加班信息表TableAdapter.Fill(this.职工考勤系统DataSet5.加班信息表);
}
conn.Close();
}
catch { MessageBox.Show("禁止重复签到"); }
}
private void button2_Click(object sender, EventArgs e)
{
try
{
SqlConnection connn = new SqlConnection("Data Source=ZHANGHAO\\SQL2012;Initial
展开阅读全文