高校工资管理系统课题报告.doc
软件工程实验报告专业:计算机科学与技术课题:高校工资管理系统组员:汪 道 德李 翠 芳金 忠孙 元 勋指导老师:王勇2012年5月31日目录软件工程实验报告1目录2第一章 课题描述4第二章 需求分析52.1 社会需求52.2性能需求52.3友好性需求6第三章 程序设计73.1系统功能模块图73.2 数据流图83.3 数据字典93.4 E-R图133.5 数据库表设计13第四章 系统设计144.1登陆管理144.2员工管理184.3 员工出勤管理224.4 工资管理254.5 系统流程图28第五章 系统测试295.1使用测试:295.2错误测试:305.3数据库测试:30第六章总结31第一章课题描述系统介绍假设学校共有教职工约1000人,10个行政部门和8个系部。每个月20日前各部门(包括系、部)要将出勤情况上报人事处,23日前人事处将出勤工资、奖金及扣款清单送财务处。财务处于每月月底将教职工的工资表做好并将数据送银行。每月初(3日前)将工资条发给各单位。若有员工调入、调出、校内调动、离退休等数据变化,则由人事处通知相关部门和财务处。第二章需求分析 2.1 社会需求工资管理系统是一个企业单位不可或缺的部分,他能为用户提供充足的信息和快捷的查询手段。一个工资管理系统可以高效能、大容量的收集、处理、存储工资管理信息,大幅度的工资管理信息系统的工作质量和效率。能够为企业管理人员及时掌握整个工资管理系统的全面情况,提供系统的准确的工资管理信息,可以促进工资管理工作的规范化及各项管理制度与指标体系的建立和健全。为企业提供各种加工管理了工资管理信息,以满足工资管理的特殊要求,适应新形势对职工队伍建设提出的新要求,帮助管理人员选择方案,实现优化决策。虽然当前,不少单位的工资管理部门对于计算机应用还仅限于简单的单机应用,随着时间的推移、任务的复杂、用户的需求,其应用还会扩大。 2.2 性能需求职工基本信息管理子系统: 1)职工基本信息输入:数据输入,存储 2)建立职工基本信息表:数据集中 3)职工基本信息查询:数据查询 4)职工基本信息修改: a.写修改职工基本信息:数据修改 b.发送提示信息至其他部门:数据读出职工出勤信息管理子系统: 1)职工出缺勤信息输入:数据输入,存储 2)职工出缺勤信息查询:数据查询 3)职工出缺勤信息表的建立:数据集中职工工资管理子系统: 1)职工基本工资信息读取:数据读出 2)职工实际工资奖金计算:数据加工 3)标准工资信息与银行之间的双向传输:数据读出,输入 4)工资条对各部门的发放:数据读出 2.3 友好性需求一个系统做出来后最主要的是实用,而且易学易用,所以我们的工资管理系统注重界面友好型,以及界面功能明显性。第三章程序设计 3.1 系统功能模块图扣款统计奖项统计缺勤天数请假天数加班天数查询职工基本信息修改职工基本信息录入职工基本信息删除职工基本信息各系部查询职工工资汇总录入职工工资汇总修改职工工资汇总职工扣款信息职工奖金信息职工出勤信息职工基本信息财务处人事处工资管理系统 3.2 数据流图0级数据流图:学校工资管理系统各系部人事部财务部录入人员信息人员信息录入人员出勤信息录入人员工资信息人员信息查询人员信息一级数据流图:各系部工资信息基本信息出勤奖金扣款信息基本 信息 子系统出勤奖金扣款子系统职工工资子系统财务处人事处二级数据流图职工工资子系统数据流图:银行职工工资信息生成财务处职工信息工资整理人事处 职工基本信息各系部 3.3 数据字典 数据项名:工号别名:TNo,简述:所有职工的编号类型:CHAR长度:10数据项名: 姓名别名: NAME简述:所有职工的姓名类型:CHAR 长度:8数据项名:所属系别别名:DEPARTMENTS 简述:职工所属的部门类型:CHAR长度:20取值范围及含义: 具体的部门名称 数据项名:职位别名:JOBS 简述:职工所在该部门的具体职位类型:CHAR长度:20取值范围及含义: 具体的职位名称 数据项名: 应出勤次数/月别名:SHOULD简述:按工作表每个月应出勤的次数 类型:INT长度:2取值范围及含义:次数数据项名: 实际出勤次数/月别名:ACTUAL简述:实际每个月应出勤的次数 类型:INT长度:2取值范围及含义:次数数据项名: 缺勤次数别名:MISSNUM简述:每个月应缺勤的次数 类型:INT长度:2取值范围及含义:次数数据项名: 缺勤原因别名:REASON简述:缺勤的具体原因 类型:CHAR长度:50取值范围及含义:缺勤的大致原因数据项名: 基本工资别名:JIBENGONGZI简述:由工龄和职位规定的基本工资 类型:INT长度:5取值范围及含义:金额数目数据项名: 原始奖金别名:YUANSHIJIANGJIN简述:由工龄和职位规定的原始奖金 类型:INT长度:5取值范围及含义: :金额数目数据项名:缺勤金别名:QUEQINJIN简述:由缺勤次数所得的应扣金额数目 类型:INT长度:5取值范围及含义:金额数目数据项名:实际工资 别名:SHIJIGONGZI简述:每月实际得到的工资数金额数目 类型:INT长度:5取值范围及含义:金额数目 3.4 E-R图实际工资缺勤金原始奖金基本工资职工工资实出勤次数缺勤次数缺勤原因应出勤次数所属系别职位姓名工号出勤状况日常考勤工资管理制度调用财务工资基本规定 3.5 数据库表设计职工基本信息表:字段名字段类型字段宽度能否为空主键工号char10否是年龄Int2否姓名char8否所属系别char20职位char20职工出缺勤信息表:字段名字段类型字段宽度能否为空主键工号char10否是姓名char8否应出勤次数/月Int2否实际出勤次数/月Int2否缺勤次数Int2缺勤原因char50职工工资信息表:字段名字段类型字段宽度能否为空主键工号char10否是姓名char8否基本工资Int5否奖金Int5否扣款金Int5实际工资Int5第四章系统设计 4.1 登陆管理界面设计:图1 登录界面代码实现:namespace CRM_Login public partial class Form1 : Form public Form1() InitializeComponent(); private void timer2_Tick(object sender, EventArgs e) if (heigh <= 200) this.panel1.Size = new System.Drawing.Size(311, heigh); heigh += 3; else timer2.Stop(); private void button1_Click(object sender, EventArgs e) if (txt_LoginName = null) MessageBox.Show("请输入用户名", "登录界面"); else if (txt_LoginPwd = null) MessageBox.Show("请输入密码", "登录界面"); /*连接数据库,验证用户*/ string sqlcon = "Data Source=.;Database=school;User id=sa;PWD="try using(SqlConnection My_con=new SqlConnection(sqlcon) My_con.Open(); string sqlstr; sqlstr = "select * from loginuser where name='" + txt_LoginName.Text.Trim() + "' and pwd='" + txt_LoginPwd.Text.Trim() + "' " if (radioButton2.Checked = true) sqlstr = "select * from loginuser where name='" + txt_LoginName.Text.Trim() + "' and pwd='" + txt_LoginPwd.Text.Trim() + "' and apartment='人事部'" else if (radioButton3.Checked = true) sqlstr = "select * from loginuser where name='" + txt_LoginName.Text.Trim() + "' and pwd='" + txt_LoginPwd.Text.Trim() + "' and apartment=' 财务部'" SqlCommand sqlcom = new SqlCommand(sqlstr, My_con); SqlDataReader SDR = sqlcom.ExecuteReader(); SDR.Read(); if (SDR.HasRows) /读取到数据说明存在该用户,可以登录 timer1.Start(); else /否则用户不存在 MessageBox.Show("用户名或密码错误","错误"); My_con.Close(); catch (SqlException ) MessageBox.Show("远程客户端无响应,请稍后再试!","错误"); return; private void exitToolStripMenuItem_Click(object sender, EventArgs e) show.Get_Close(this); private void btn_Cancel_Click(object sender, EventArgs e) txt_LoginName.Text = "" txt_LoginPwd.Text = "" int heigh = 0; private void pictureBox1_Click(object sender, EventArgs e) show.Get_Close(this);/退出 /*将用户名传递给用户信息界面*/ public string getparent() return txt_LoginName.Text; 4.2员工管理 界面设计图2 员工信息录入界面代码实现: Form_Show show = new Form_Show(); /*录入*/ private void button7_Click_1(object sender, EventArgs e) /*查询数据库是否已有该数据*/ SqlConnection My_con11 = new SqlConnection(sqlcon); My_con11.Open(); SqlCommand cmd11 = My_con11.CreateCommand(); string str1 = "select num from worker where num='" + textBox1.Text + "'" /设置cmd对象的三个属性 cmd11.Connection = My_con11; cmd11.CommandText = str1; cmd11.CommandType = CommandType.Text; SqlDataReader SDR2 = cmd11.ExecuteReader(); if (SDR2.Read() MessageBox.Show("该工号已存在,请核对后重新输入", "错误"); return; /*向数据库插入数据*/ try SqlConnection SqlConn = new SqlConnection(sqlcon); string str = "insert into worker(id,name,apartment,position,begain_time,over_time,tel,man_id,address,date_birth) values('" + textBox1.Text + "','" + textBox2.Text + "','" + comboBox1.Text + "','" + comboBox2.Text + "','" + dateTimePicker1.Text + "','" + dateTimePicker2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "','" + textBox5.Text + "','"+dateTimePicker3.Text+"') " SqlCommand SqlCmd = new SqlCommand(str, SqlConn); SqlConn.Open(); SqlCmd.ExecuteNonQuery(); SqlConn.Close(); MessageBox.Show("员工信息录入成功!", "提示"); textBox1.Text = null; textBox2.Text = null; textBox3.Text = null; textBox4.Text = null; textBox5.Text = null; comboBox1.Text = null; comboBox2.Text = null; dateTimePicker1.Text = DateTime.Now.ToString("yyyy年MM月dd日 "); dateTimePicker2.Text = DateTime.Now.ToString("yyyy年MM月dd日 "); dateTimePicker3.Text = "1990年1月1日" catch(SqlException) MessageBox.Show("员工信息录入失败,请稍后再录入!","错误"); return; /*刷新listview中的数据*/ listView1.Items.Clear(); SqlConnection My_con = new SqlConnection(sqlcon); My_con.Open(); SqlCommand cmd = My_con.CreateCommand(); string sqlstr = "select id,name,apartment,position,begain_time,over_time, tel,man_id,address,date_birth from worker" /设置cmd对象的三个属性 cmd.Connection = My_con; cmd.CommandText = sqlstr; cmd.CommandType = CommandType.Text; /读取数据并赋值给OleDbDataReader对象 SDR SqlDataReader SDR = cmd.ExecuteReader(); int i = 1;/序列号 while (SDR.Read() /读取到数据说明存在该用户,可以登录 string r1 = SDR.GetString(0); string r2 = SDR.GetString(1); string r3 = SDR.GetString(2); string r4 = SDR.GetString(3); ListViewItem listViewItem; listViewItem = listView1.Items.Add(i.ToString(); listViewItem.SubItems.Add(r1); listViewItem.SubItems.Add(r2); listViewItem.SubItems.Add(r3); i+; My_con.close(); private void button5_Click(object sender, EventArgs e) textBox1.Text = null; textBox2.Text = null; textBox3.Text = null; textBox4.Text = null; textBox5.Text = null; comboBox1.Text = null; comboBox2.Text = null; dateTimePicker1.Text = DateTime.Now.ToString("yyyy年MM月dd日 "); dateTimePicker2.Text = DateTime.Now.ToString("yyyy年MM月dd日 "); dateTimePicker3.Text = "1990年1月1日" 4.3 员工出勤管理界面设计图3 员工出勤录入界面代码实现: private void button6_Click_1(object sender, EventArgs e) if (textBox1.Text.Length != 8) MessageBox.Show("员工工号为8位,请重新输入!", "错误"); return; SqlConnection My_con = new SqlConnection(sqlcon); My_con.Open(); SqlCommand cmd = My_con.CreateCommand(); string sqlstr = "select id,name,apartment,position,begain_time,over_time,tel,man_id,address,date_birth from worker where id='"+textBox1.Text+"'" /设置cmd对象的三个属性 cmd.Connection = My_con; cmd.CommandText = sqlstr; cmd.CommandType = CommandType.Text; /读取数据并赋值给OleDbDataReader对象 SDR SqlDataReader SDR = cmd.ExecuteReader(); if (SDR.Read() /读取到数据说明存在该用户,可以登录 string r1 = SDR.GetString(0); string r2 = SDR.GetString(1); string r3 = SDR.GetString(2); textBox1.Text = r1; textBox2.Text = r2; comboBox1.Text = r3 else MessageBox.Show("不存在此员工号,请核对后重新输入!", "错误"); textBox1.Text = null; return; My_con.Close(); private void listView1_DoubleClick(object sender, EventArgs e) textBox1.Text = listView1.SelectedItems0.SubItems1.Text; textBox2.Text = listView1.SelectedItems0.SubItems2.Text; comboBox1.Text = listView1.SelectedItems0.SubItems3.Text; comboBox2.Text = listView1.SelectedItems0.SubItems4.Text; dateTimePicker1.Text = listView1.SelectedItems0.SubItems5.Text; dateTimePicker2.Text = listView1.SelectedItems0.SubItems6.Text; textBox3.Text = listView1.SelectedItems0.SubItems7.Text; textBox4.Text = listView1.SelectedItems0.SubItems8.Text; textBox5.Text = listView1.SelectedItems0.SubItems10.Text; dateTimePicker3.Text = listView1.SelectedItems0.SubItems9.Text; 4.4 工资管理界面设计图4 员工工资录入界面代码实现:void CTXGZ:OnButton2() / TODO: Add your control notification handler code hereUpdateData(TRUE);m_yuefen.SetCurSel(0);/AfxMessageBox("该编号的职工不存在,请先到职工管理添加职工信息!");if(m_Bianhao.IsEmpty()|m_Jibengz=NULL|m_Yuefen.IsEmpty()AfxMessageBox("编号不允许空值,请重新填写!");ClearALL();return;OnInitADOConn();float f1=m_Jibengz+m_Jintie+m_Gangtie+m_Butie+m_Fangtie+m_Jiaotongbt;CString cstr1;cstr1.Format("%.2f",f1);m_yfsh.SetWindowText(cstr1);float f2=m_Fangzu+m_Chuxu+m_Huifei;CString cstr2;cstr2.Format("%.2f",f2);m_yksh.SetWindowText(cstr2);float f4;f4=calculator(f1-f2);float f3=f1-f2-f4;CString cstr3;cstr3.Format("%.2f",f3);m_shfsh.SetWindowText(cstr3);CString cstr4;cstr4.Format("%.2f",f4);m_grsdsh.SetWindowText(cstr4);CString str;str.Format("insert into 工资表 values ('%s','%s',%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f)",m_Bianhao,m_Yuefen,m_Jibengz,m_Jintie,m_Gangtie,m_Butie,m_Fangtie,m_Jiaotongbt,f1,m_Fangzu,m_Chuxu,m_Huifei,f4,f2,f3);_variant_t var;int fieldrow;try/捕捉表的主键存在重复值的异常m_pConnection->Execute(_bstr_t)str,&var,adCmdText);fieldrow=(int)V_I2(&var);catch(.)AfxMessageBox("该编号记录已存在,新增失败");ClearALL();return;m_pConnection->Close();m_gzlist.DeleteAllItems();AddToGrid();void CTXGZ:OnButton3() UpdateData(TRUE);if(m_Bianhao.IsEmpty()|m_Yuefen.IsEmpty()AfxMessageBox("请填写要更新的职工的信息!");ClearALL();return;OnInitADOConn();CString str;str.Format("update 工资表 set 基本工资=%.2f,月份='%s',津贴=%.2f,岗贴=%.2f,补贴=%.2f,房贴=%.2f,交通补贴=%.2f, 房租=%.2f,储蓄=%.2f,会费=%.2f where 职工编号='%s'",m_Jibengz,m_Yuefen,m_Jintie,m_Gangtie,m_Butie,m_Fangtie,m_Jiaotongbt,m_Fangzu,m_Chuxu,m_Huifei,m_Bianhao); 4.5 系统流程图