1、 数 据 库 课 程 设 计 报 告 理论成绩 实践成绩 总成绩 院系:信息管理学院 专业:软件工程 班级:软件Q1141 组长:李艳平(11150038) 组员:孙俊珍(11150053) 王 毅(11150132) 左礼振(11150077) 题目:工资管理系统 教师:石黎 时间:2013.11.23 目录 一、设计目的 - 1 - 二、数据库功能分析 - 1 - 2.1 信息输入功能 - 1
2、 2.2 数据修改删除功能 - 2 - 2.3 查询和统计功能 - 2 - 三、数据库设计 - 2 - 3.1 需求分析 - 2 - 3.2 概念分析(E-R图) - 3 - 3.3 逻辑设计…………………………………………………………………..- 4- 3.4 物理设计 - 7 - 3.5 实施与维护 - 7 - 四、界面设计及相关代码 - 8 - 4.1 数据库的连接操作 - 8 - 4.2 登陆界面 - 10 - 4.3 管理员操作 - 13 - 4.4 职工操作 - 35 - 五、感想及总结 - 39 -
3、 六、参考文献 - 42 - 一、设计目的 工资管理是一项琐碎、复杂而又十分细致的工作,一般不允许发生差错。手工进行工资发放工作,需要反复地进行抄写、计算,不仅花费财务人员大量的时间,而且往往由于抄写不慎,出现张冠李戴,或者由于计算机的疏忽,出现工资发放错误的现象。计算机进行工资发放工作,不仅能够保证工资核算正确无误、快速输出,而且还可以利用工资数据库对有关工资的各种信息进行统计,服务于财务部门其他方面的核算和财务处理。实现企业员工工资管理的系统化、规范化和自动化,能够和人事管理系统、考勤管理系统相结合,真正实现企业高效、科学、现代化的员工管理。 二、数据库
4、功能分析 2.1 信息输入功能 1) 输入员工的基本信息。包括:员工编号、姓名、性别、参加工作时间、所属部门、职位 等基本信息 2) 输入员工的工资信息。包括:岗位基本工资、津贴、考勤等相关信息。 3) 输入员工的部门信息。包括:部门编号、部门名称、部门负责人、部门人数、部门与外界的联系方式。 2.2 数据修改删除功能 1) 修改和删除员工的基本信息。当单位人员的信息发生变化,如职称的改变,工作部门变动,或调离本单位等,系统应能修改员工的信息或将其从员工信息表中删除。 2) 修改和删除员工的工资信息。员工升职加薪、工资普调是企业中常见的事情,这就需要系统能方便对员工工资进行个别
5、及批量的修改;如员工调离本单位,就应当从员工信息表中删除这个员工信息,将其工资信息表中相应的数据删除。 3) 修改和删除部门信息。当一个部门的负责人或联系方式发生改变时,系统中相关部门信息也能做相应改变。 2.3 查询和统计功能 1) 能够查询指定员工的基本信息 2) 能够查询部门信息 3) 查询某个员工的工资信息 4) 统计部门总人数、共工资、平均工资 5) 工资表月工资记录的生成功能。生成当月所有员工或所有部门的工资记录,同时能进行员工工资的计算,即基本工资、奖励金额、应扣金额。 三、数据库设计 3.1 需求分析: 《工资管理系统》针对的用户是小型企业,工资项目比较少,
6、较为固定,工资管理涉及企业管理的多个方面,如员工职务宫中变化、员工考勤情况、员工加班情况等等。根据这些信息,在每个月的某个固定时间,生成企业对全体员工的月工资。对于月工资,能够实现按照员工、部门、月、年进行统计分析,产生相应报表。 需求信息整理(DFD图)如下: 第0层DFD图 3.2 概念分析(E-R图) 3.3 逻辑设计 1. 数据字典 表1 Allowance (员工津贴) 列 名 数据类型 可否为空 说 明 emp_no varchar(10) not null 员工号(主键一) overt
7、ime_month varchar(20) not null 加班时间(主键二) Overtime_days int null 加班天数 Overtime_pay float null 加班工资 表2 Attendance (考勤信息统计) 列 名 数据类型 可否为空 说 明 emp_no varchar(10) not null 员工号(主键一) attend_month varchar(20) not null 时间(主键二) Absent_days int null 缺勤天
8、数 Absent_pay float null 考勤工资 表3 BasicWages(工资标准表格) 列 名 数据类型 可否为空 说 明 emp_pos Varchar(10) not null 工种(主键) basic_wage Float not null 基本工资 表 4 EmpBasicInfo (员工基本情况表) 列 名 数据类型 可否为空 说 明 emp_no VARCHAR(10) NOT NULL 员工号(主键)
9、 emp_name VARCHAR(40) NULL 员工名称 emp_pos VARCHAR(40) NOT NULL 职位 sex Char(2) NULL 性别 department_id VARChar(10) NOT NULL 员工部门 emp_time VARCHAR(20) NOT NULL 入公司时间 telephone Char(11) Null 电话号码 2. 关系模式 员工基本信息表(所属部门,入公司时间,电话号码) 员工津贴表(员工号,加班时间,加班天数,加班工资)
10、 员工考勤表(员工号,时间,缺勤天数,考勤工资) 基本工资表(职位,基本工资) 部门信息表(部门编号,部门名称,部门人数,联系方式) 用户登陆(ID号,用户名,密码) 3. 视图设计 为及时更新数据,减少数据库后台操作,设计了部门工资情况及员工月工资情况两个视图 部门工资情况视图: 员工月工资视图: A 3.4 物理设计 数据库最终是要存储在物理设备上的,为一个给定的逻辑数据模
11、型选取一个最适合应用环境的物理结构(存储结构与存取方法)的过程,就是数据库的物理设计。数据库的物理结构依赖于给定的计算机系统和DBMS。 3.5 实施与维护 确定了数据库的逻辑结构和物理结构后,就可以用所选用的DBMS提供的数据定义语言(DDL)来严格定义数据库,包括建立表、定义表的约束等。数据库系统投入运行后,对数据库设计进行评价、调整、修改等维护工作。 四、界面设计及相关代码 4.1 数据库的连接操作 using System; using System.Collections.Generic; using System.Text; using System.D
12、ata;
using System.Data.SqlClient;
namespace 工资管理系统
{
///
13、gion 建立数据库连接
///
14、ect = new SqlConnection(str_sqlcon); //连接数据库
return myConnect;
}
#endregion
#region 创建DataSet对象
///
15、>表名
///
16、r sqlda = new SqlDataAdapter(str_sqlcom, sqlcon); //创建SQL命令生成器 SqlCommandBuilder thisBuild = new SqlCommandBuilder(sqlda); //数据的内存驻留表示形式,它表示一个数据集 DataSet myds = new DataSet(); //Fill方法用来填充DataSet或DataTable数据集,str_ta
17、ble是一个虚表 sqlda.Fill(myds, str_table); return myds; } #endregion } } 4.1 登陆界面 namespace 工资管理系统 { public partial class Form1 : Form { BaseOperate boperate = new BaseOperate(); //声明一个BaseOperate类的一个对象,以调
18、用其方法 public Form1() { InitializeComponent(); } #region 核对用户身份 public void IDverify(string str_sqltab, Form myform) { string str_sqlcom = "Select * from " + str_sqltab; string str_vtab = "vistual_table";
19、 DataSet thisDset = boperate.getDataSet(str_sqlcom, str_vtab); int i = 0; foreach (DataRow row in thisDset.Tables[str_vtab].Rows) { if (textBox1.Text == row["user_id"].ToString()) { BaseOpe
20、rate.userID = row["user_id"].ToString(); BaseOperate.username = row["username"].ToString(); if (textBox2.Text == row["password"].ToString()) { BaseOperate.password = textBox2.Text; myform
21、Show(); break; } else { MessageBox.Show("密码错误!请重新输入!"); textBox2.Text = ""; } } else {
22、 i = i + 1; if (i == thisDset.Tables[str_vtab].Rows.Count) { MessageBox.Show("无此用户信息,请重新输入!"); textBox1.Text = ""; textBox2.Text = ""; textB
23、ox1.Focus(); } } } } #endregion #region 登陆信息检查 private void button1_Click(object sender, EventArgs e) { if (textBox1.Text == "" && textBox2.Text == "") { Mess
24、ageBox.Show("请输入账户和密码!"); textBox1.Focus(); } else if (textBox1.Text == "" && textBox2.Text != "") { MessageBox.Show("请输入账户名"); textBox1.Focus(); } else if (textBox1.Text != "" && tex
25、tBox2.Text == "") { MessageBox.Show("请输入密码!"); textBox2.Focus(); } else if (!radioButton1.Checked && !radioButton2.Checked) { MessageBox.Show("请选择登陆身份!"); } el
26、se if (radioButton1.Checked) { if (textBox1.Text == "001" && textBox2.Text == "1001") { Form2 myform2 = new Form2(); myform2.Show(); } else {
27、 MessageBox.Show("用户名和密码错误!"); textBox1.Text = ""; textBox2.Text = ""; radioButton1.Checked = false; radioButton2.Checked = false; } } else if (radioButton2.Checked)
28、 { Form3 myform3 = new Form3(); IDverify("Staff", myform3); } } #endregion #region 重置登陆信息 private void button2_Click(object sender, EventArgs e) { textBox1.Text = ""; te
29、xtBox2.Text = ""; radioButton1.Checked = false; radioButton2.Checked = false; textBox1.Focus(); } #endregion } } 4.3 管理员操作 1) 查询员工信息 2) 查询部门信息 3) 查询津贴信息: 4) 查询考勤信息: 5)员工月工资汇总: 6)部门平均工资: namespa
30、ce 工资管理系统 { public partial class Form2 : Form { BaseOperate boperate = new BaseOperate(); //声明一个BaseOperate类的一个对象,以调用其方法 public Form2() { InitializeComponent(); } #region 显示员工信息 private void 员工信息ToolStripMenuItem_Click(
31、object sender, EventArgs e) { string str_sqlcom = "Select * from EmpBasicInfo"; string str_vtab = "vistual_table"; DataSet thisDset = boperate.getDataSet(str_sqlcom, str_vtab); listBox1.Items.Clear(); listBox1.Items.Add("工号\t姓
32、名\t 职位\t性别\t所属部门\t入职时间\t电话号码"); foreach (DataRow row in thisDset.Tables[str_vtab].Rows) listBox1.Items.Add(row["emp_no"].ToString() + "\t" + row["emp_name"].ToString() + "\t" + row["emp_pos"].ToString() + "\t " + row["sex"].ToString() + "\t " + row[
33、"depart_name"].ToString() + "\t\t" + row["emp_time"].ToString() + "\t" + row["telephone"].ToString()); } #endregion #region 显示部门信息 private void 部门信息ToolStripMenuItem_Click(object sender, EventArgs e) { string str_sqlcom = "Select * from Dep
34、artment"; string str_vtab = "vistual_table"; DataSet thisDset = boperate.getDataSet(str_sqlcom, str_vtab); listBox1.Items.Clear(); listBox1.Items.Add("部门号\t部门名称\t负责人\t 职工人数\t联系电话"); foreach (DataRow row in thisDset.Tables[str_vtab].Ro
35、ws) listBox1.Items.Add(row["depart_id"].ToString() + "\t" + row["depart_name"].ToString() + "\t\t" + row["depart_head"].ToString() + "\t " + row["depart_emps"].ToString() + "\t\t" + row["depart_tel"].ToString()); } #endregion #r
36、egion 显示部门信息 private void 津贴信息ToolStripMenuItem_Click(object sender, EventArgs e) { string str_sqlcom = "Select * from Allowance"; string str_vtab = "vistual_table"; DataSet thisDset = boperate.getDataSet(str_sqlcom, str_vtab); li
37、stBox1.Items.Clear(); listBox1.Items.Add("职工号\t\t加班月份\t加班天数\t加班工资"); foreach (DataRow row in thisDset.Tables[str_vtab].Rows) listBox1.Items.Add(row["emp_no"].ToString() + "\t\t" + row["overtime_month"].ToString() + "\t\t " + row["over
38、time_days"].ToString() + "\t\t " + row["overtime_pay"].ToString()); } #endregion #region 出勤统计 private void 出勤统计ToolStripMenuItem_Click(object sender, EventArgs e) { string str_sqlcom = "Select * from Attendance"; string str_vta
39、b = "vistual_table"; DataSet thisDset = boperate.getDataSet(str_sqlcom, str_vtab); listBox1.Items.Clear(); listBox1.Items.Add("职工号\t\t考勤月份\t缺勤天数\t扣除工资"); foreach (DataRow row in thisDset.Tables[str_vtab].Rows) listBox1.Items.Add(ro
40、w["emp_no"].ToString() + "\t\t" + row["attend_month"].ToString() + "\t\t " + row["absent_days"].ToString() + "\t\t " + row["absent_pay"].ToString()); } #endregion #region 员工月工资汇总 private void 员工月工资汇总ToolStripMenuItem_Click(object sender, Ev
41、entArgs e) { string str_sqlcom = "Select * from MonthWages"; string str_vtab = "vistual_table"; DataSet thisDset = boperate.getDataSet(str_sqlcom, str_vtab); listBox1.Items.Clear(); listBox1.Items.Add("工号\t月份\t工资\t底薪\t津贴\t考勤")
42、 foreach (DataRow row in thisDset.Tables[str_vtab].Rows) listBox1.Items.Add(row["emp_no"].ToString() + "\t" + row["pay_time"].ToString() + "\t" + row["basic_wage"].ToString() + "\t" + row["overtime_pay"].ToString() + "\t" + row["absent_pay"].ToStri
43、ng() + "\t" + row["month_pay"].ToString()); } #endregion #region 各部门工资情况 private void 各部门工资情况ToolStripMenuItem_Click(object sender, EventArgs e) { string str_sqlcom = "select * from DepartAvgWage"; string str_vtab = "vistual_ta
44、ble"; DataSet thisDset = boperate.getDataSet(str_sqlcom, str_vtab); listBox1.Items.Clear(); listBox1.Items.Add("部门\t 月份\t 部门人数\t部门总工资\t部门平均工资"); foreach (DataRow row in thisDset.Tables[str_vtab].Rows) listBox1.Items.Add(row["depa
45、rt_name"].ToString() + "\t " + row["pay_month"].ToString() + "\t " + row["depart_emps"].ToString() + "\t\t " + row["sum_wage"].ToString() + " \t " + row["avg_wage"].ToString()); } #endregion #region 更新数据 private void 更新数据ToolStr
46、ipMenuItem_Click(object sender, EventArgs e) { Form4 newform = new Form4(); newform.Show(); } #endregion #region 退出 private void 退出ToolStripMenuItem_Click(object sender, EventArgs e) { this.Close();
47、 } #endregion } } 7)信息修改: namespace 工资管理系统 { public partial class Form4 : Form { BaseOperate boperate = new BaseOperate(); //声明一个BaseOperate类的一个对象,以调用其方法 public Form4() { InitializeComponent(); }
48、 #region 修改员工信息
///
49、 MessageBox.Show("请输入工号!"); textBox1.Focus(); } else { string str_sqlcom = "Select * from EmpBasicInfo"; string str_vtab = "vistual_table"; DataSet thisDset = boperate.getDataSet(
50、str_sqlcom, str_vtab); int search = 0; foreach (DataRow row in thisDset.Tables[str_vtab].Rows) { if (row["emp_no"].ToString() == textBox1.Text) { string no = textBox1.Text;






