计算机科学与工程学院课程设计报告题目全称:员工管理信息系统的设计与实现—岗位与薪金信息管理学生学号:**********姓名:李伟德指导老师:刘勇国职称:副教授指导老师评语:签字:课程设计成绩:一、实验室名称:计算机学院软件实验室二、实验项目名称:员工管理信息系统的设计与实现—岗位与薪金信息管理三、实验学时:32四、实验原理:员工管理信息系统是由员工管理,部门管理,岗位管理以及薪金管理四部分组成。
系统前台采用Visual Stdio 2005 工具开发而成,开发语言是C#程序设计语言,主要是因为C#是微软为.NET平台量身定做的编程语言,它是一种现代面向对象程序设计语言,使程序员能够快速地在.NET平台上开发种类丰富的应用程序,它继承了C++和Java的语法,去掉了C++中的许多复杂和容易引起问题的东西,是由C和C++发展而来的一种“简单、高效、面向对象、类型安全”的程序设计语言,其综合了Visual Basic的高效率和C++的强大功能。
系统后台的数据库采用Miscrosoft Access 2003数据库,主要依据是考虑到系统的数据规模并不大,如果用SQL Server 2005等数据库会造成浪费,而且维护起来比较难。
而Access数据库是一个轻量级的数据库,其具有简单,方便的特性,已经满足我们的需求。
五、实验目的:1.使学生掌握数据库的实现原理,了解SQL的查询命令,并能在实践中使用。
2.使学生学会使用C#语言进行程序设计,了解Vistual Stdio 2005 的开发工具的原理,并设计出实际可行的项目。
3.加强学生的动手能力,把课堂上学到得东西,融入到实际的项目,达到学以致用的目的。
4.锻炼学生的思维能力,使学生能够领略计算机编程的实现方法,达到举一反三的效果。
六、实验内容:在员工信息管理系统中完成“岗位”和“薪金”信息管理功能。
岗位信息管理功能包括:1. 添加岗位:可以添加岗位名称,岗位描述等信息。
2. 删除岗位:可以删除岗位名称,岗位描述等信息。
3. 修改岗位:可以修改指定岗位的岗位名称,岗位描述等信息。
4. 查询岗位:可以查询指定岗位的岗位名称,岗位描述等信息。
薪金信息管理功能包括:1. 添加员工薪金信息:可以添加员工姓名,月份,备注,薪金等信息。
2. 删除员工薪金信息:可以删除指定员工的姓名,月份,备注,薪金等信息。
3. 修改员工薪金信息:可以修改指定员工的姓名,月份,备注,薪金等信息。
4. 查询员工薪金信息:可以查询指定员工的薪金等信息。
七、实验器材(设备、元器件):1.一台Windows XP平台或以上的PC机;2.Vistual Stdio 2005开发软件及Microsoft ACCESS2003数据库软件;八、实验步骤:1、设计系统结构组成系统提供了一套员工综合信息管理平台,使得系统管理人员对公司的岗位进行分类,进而确定各个岗位所对应的部门信息,在已有部门信息的基础上能够对所有员工信息进行分类管理。
主要功能有:岗位设置、员工个人信息管理、员工所属部门信息管理、员工薪金信息管理。
系统模块设计划分如下:员工薪金信息模块:可以删除、添加、修改和查询员工薪金信息;岗位设置模块:可以删除、添加、修改和查询岗位;它们之间既是相互联系同时又是彼此独立的,整个框架结构如图1所示。
图1 系统整体框架本课程设计实现岗位和薪金管理模块功能:(1)岗位设置模块岗位设置模块功能包括:添加岗位、删除岗位、修改岗位、查询岗位。
基于上面的需求分析,我们可以列出用户操作的模块,其中的每一个模块对于一个功能,如图2所示。
图2 岗位设置模块用例图(2)薪金管理模块薪金管理模块功能包括:添加员工薪金信息、删除员工薪金信息、修改员工薪金信息、查询员工薪金信息。
基于上面的需求分析,我们可以列出用户操作的模块,其中的每一个模块对于一个功能,如图3所示。
图3 薪金信息管理模块用例图2、数据库的设计与实现数据库是员工信息管理系统的后台,存储着所有的信息,在员工信息管理系统中有着很重要的地位。
数据库设计的好与坏,直接影响到这个系统的运行效率。
良好的数据库设计,可以提高数据信息的存储效率,确保数据信息的完整性和一致性。
在仔细调研员工信息管理过程的基础上,通过对管理内容的分析,设计的数据项和数据结构如下:岗位信息表:包含岗位编号、岗位名称、描述等信息;员工薪金表:薪金编号、月份、员工编号、薪金、备注等信息;有了上面的数据项和数据结构,就可以进行数据库的设计了。
设计过程主要分为两个阶段,即数据库概念结构设计和逻辑结构设计。
基于对数据库需求的分析,在这一阶段可以设计出能够满足用户需求的各种实例以及它们之间的关系,为下一阶段的逻辑设计打下基础。
图4 岗位信息实体E-R图图5 员工薪金信息实体E-R图有了上面的实例以及实例之间的关系,再针对员工信息管理系统的需求,通过对系统的整体分析,为本系统设计如下的数据项和数据结构:表1 相关信息表设计3.设计系统各模块3.1 岗位设置模块设计添加岗位在主窗口中点击“添加岗位”按钮,即可弹出如下对话框,依次填写岗位名称,岗位描述后,点击“确定”按钮,将弹出添加成功的提示。
删除岗位在浏览岗位的对话框中,首先选择要删除的行,然后点击“删除”按钮,删除成功后,将弹出删除成功的提示。
修改岗位在浏览岗位对话框中,选择要修改的行,然后点击修改按钮,即可弹出新的对话框,在此对话框可以进行岗位编号,岗位名称,岗位描述的修改,修改成功后,将得到相应的提示信息。
查询岗位依次在主窗口中点击岗位浏览,即可弹出岗位浏览对话框。
3.2 薪金信息管理模块设计添加薪金信息在主窗口中选择员工薪金管理,再点击“添加薪金”,就会弹出添加薪金信息对话框,依次填写员工姓名,月份,备注,薪金等信息,按确定后,系统先检查信息完整性,如果满足要求,就可添加成功,并给出相关提示。
删除薪金信息在浏览员工的对话框窗口,先选择要删除的行,然后点击删除,如果删除成功,则会给出“删除员工‘XXX’成功”的提示信息。
修改薪金信息在浏览员工薪金的对话框中,选择要修改的员工信息,然后点击“修改”按钮,即可弹出新的对话框,在这对话框可以更改月份,薪金,和备注这三项信息。
查询薪金信息在员工薪金信息浏览的对话框中,先在选择员工的下拉框中选择要查看的员工,之后点击“开始查询”,系统将会把所选员工的所有薪金信息显示出来。
九、实验数据及结果分析:1. 岗位设置模块设计运行结果1.1添加岗位在主窗口中点击“添加岗位”按钮,即可弹出如下对话框,依次填写岗位名称,岗位描述后,点击“确定”按钮,将弹出添加成功的提示,如图6所示。
图6 岗位添加1.2删除岗位在浏览岗位的对话框中,首先选择要删除的行,然后点击“删除”按钮,删除成功后,将弹出删除成功的提示。
如图7所示。
图7 删除岗位1.3修改岗位在浏览岗位对话框中,选择要修改的行,然后点击修改按钮,即可弹出新的对话框,在此对话框可以进行岗位编号,岗位名称,岗位描述的修改,修改成功后,将得到相应的提示信息。
如图8所示,实习生岗位名称改成“普通员工”岗位的修改过程。
图8 修改岗位1.4查询岗位依次在主窗口中点击岗位浏览,即可弹出岗位浏览对话框,如图9所示。
图9 修改岗位2. 薪金信息管理模块设计2.1 添加薪金信息在主窗口中选择员工薪金管理,再点击“添加薪金”,就会弹出添加薪金信息对话框,依次填写员工姓名,月份,备注,薪金等信息,按确定后,系统先检查信息完整性,如果满足要求,就可添加成功,并给出相关提示,如图10所示。
图10 添加薪金信息2.2 删除薪金信息在浏览员工的对话框窗口,先选择要删除的行,然后点击删除,如果删除成功,则会给出“删除员工‘XXX’成功”的提示信息。
执行效果如图11所示。
图11 删除员工薪金信息2.3 修改员工薪金信息在浏览员工薪金的对话框中,选择要修改的员工信息,然后点击“修改”按钮,即可弹出新的对话框,在这对话框可以更改月份,薪金,和备注这三项信息。
效果如图12所示。
图12 修改薪金信息2.4 查询员工薪金信息在员工薪金信息浏览的对话框中,先在选择员工的下拉框中选择要查看的员工,之后点击“开始查询”,系统将会把所选员工的所有薪金信息显示出来。
执行结果如图13所示。
图13 查询薪金信息十、实验结论:由实验结果分析可知,岗位设置与薪金信息管理两个模块能正确地运行。
可以实现基本的添加,删除,修改和查询等操作。
在前台设计上,展现了C#语言的简单,高效,面向对象的特点,其可视化的设计方式,更让程序员能把注意力集中到设计实现上来。
在后台的数据库方面,再次验证了Access能胜任本次实验的所有功能需求。
十一、总结及心得体会:本次实验是我第一次使用C#程序设计语言和Microsoft Office Access数据库系统进行对实际的项目的模拟实现。
由于是初次运用,实验过程中遇到了不少困难,但每一次我都会认真分析问题所在,积极的搜集资料,和老师同学相互讨论,最终把问题一一的解决了。
在这过程中,不仅把平常老师在上课中讲的理论知识结合到实际中来,还学会了如何去解决问题,更重要的是它增强了我对程序设计的兴趣。
另一方面,在设计的过程中,我对Vistual Stdio 2005 的实现原理有了更进一步的了解,通过C#语言的使用,我深深的体会到了其简单,高效的特性,它具有Vistual Basic的可视化设计方式,又结合了C++的严谨,高效,面向对象的运行机制。
而在Microsoft Access方面,我认识到了SQL命令的编程实现方式,学会了如何在C#程序中调用Access数据库。
十二、对本实验过程及方法、手段的改进建议:本实验实现了员工管理信息系统的岗位和薪金管理这两个模块,并经过初步的测试,其实现了所要求的功能。
但一个投入运行的员工管理系统不仅要求在功能上,还要要求在细节,用户使用习惯上都得符合用户的需求,而且需要经过更加严谨的测试,本次实验中的测试的数据是人工输入的,数据量比较小,可以开发一个辅助插件来模拟用户的大量数据的输入,以便更好地分析其在数据量大的时候的运行效果。
源代码:(因为代码较多,在此只给出核心实现代码)1 岗位设置模块代码:1.1添加岗位代码private void button1_Click(object sender, System.EventArgs e){if(textBox1.Text.Trim()==""||textBox2.Text.Trim()=="")MessageBox(0,"请输入岗位名称和描述!","提示",0);else{oleDbConnection1.Open();OleDbCommand cmd = new OleDbCommand("select * from jobinfo where JobName='"+textBox1.Text.Trim()+"'",oleDbConnection1);if(cmd.ExecuteScalar() != null)MessageBox(0,"岗位名称重复,请重新输入!","提示",0);else{string sql = "insert into jobinfo (JobName,Remark) values ('"+textBox1.T ext.Trim()+"','"+textBox2.T ext.Trim()+"')";mandText = sql;cmd.ExecuteNonQuery();MessageBox(0,"添加岗位信息成功!","提示",0);textBox1.Clear();textBox2.Clear();}oleDbConnection1.Close();}1.2删除岗位1)删除岗位函数实现代码:private void button3_Click(object sender, System.EventArgs e){if (dataGrid1[dataGrid1.CurrentCell]!=null){string sql="select JobName from jobinfo where JobID="+ds.Tables["job"].Rows[dataGrid1.CurrentCell.RowNumber][0].ToString().Trim()+" and JobID not in (select distinct jobinfo.JobID from personinfo inner join jobinfo on personinfo.JobName=jobinfo.JobName)";OleDbCommand cmd=new OleDbCommand(sql,oleDbConnection1);OleDbDataReader dr;dr=cmd.ExecuteReader();if (!dr.Read()){MessageBox.Show("删除岗位'"+ds.Tables["job"].Rows[dataGrid1.CurrentCell.RowNumber][1].ToString().Trim()+"'失败,请先删除与此岗位相关的员工","提示");dr.Close();}else{dr.Close();sql="delete * from jobinfo where JobName not in (select distinct JobName from personinfo) and JobID="+ds.Tables["job"].Rows[dataGrid1.CurrentCell.RowNumber][0].ToString().Trim();mandText=sql;cmd.ExecuteNonQuery();MessageBox.Show("删除岗位'"+ds.Tables["job"].Rows[dataGrid1.CurrentCell.RowNumber][1].ToString().Trim()+"'成功","提示");}}}1.3修改岗位1)修改岗位信息函数代码实现:private void button1_Click(object sender, System.EventArgs e){if ((textBox1.Text.Trim()=="") || (textBox2.Text.Trim()==""))MessageBox.Show("提示","请输入完整的岗位信息");else{cn.Open();OleDbCommand cmd=new OleDbCommand("select * from jobinfo where JobName='"+textBox1.Text.Trim()+"' and JobID<>"+this.Tag.T oString().Trim(),cn);if (null!=cmd.ExecuteScalar())MessageBox.Show("岗位名称发生重复","提示");else{string sql="update jobinfo set JobName='"+textBox1.Text.Trim()+"',Remark='"+textBox2.T ext.Trim()+"' where JobID="+this.Tag.ToString().Trim();mandText=sql;cmd.ExecuteNonQuery();MessageBox.Show("岗位信息修改成功","提示");}cn.Close();}}1.4查询岗位1)浏览岗位代码实现函数:private void BrowseSpecialtyl_Load(object sender, System.EventArgs e){oleDbConnection1.Open();string sql="select JobID as 编号,JobName as 岗位名称,Remark as 描述from jobinfo";OleDbDataAdapter adp=new OleDbDataAdapter(sql,oleDbConnection1);ds=new DataSet();ds.Clear();adp.Fill(ds,"job");dataGrid1.DataSource=ds.Tables[0].DefaultView;}//当DataGrid1中当前单元格发生变化时,将对应的岗位名称显示在DataGrid1标题中private void dataGrid1_CurrentCellChanged(object sender, System.EventArgs e){oleDbConnection1.Open();string sql="select JobID as 编号,JobName as 岗位名称,Remark as 描述from jobinfo";OleDbDataAdapter adp=new OleDbDataAdapter(sql,oleDbConnection1);ds=new DataSet();ds.Clear();adp.Fill(ds,"job");dataGrid1.DataSource=ds.Tables[0].DefaultView;dataGrid1.CaptionText=dataGrid1[dataGrid1.CurrentRowIndex,1].ToString();}2 薪金信息管理模块代码:2.1 添加薪金信息添加薪金信息函数代码实现:private void button1_Click(object sender, System.EventArgs e){if (textBox2.Text.Trim()=="" || comboBox1.Text.Trim()=="" || textBox3.Text.Trim()=="" || textBox4.Text.Trim()=="")MessageBox(0,"请填写完整的信息","提示",0);else{string strSQL = "select * from income where PID="+comboBox1.SelectedValue.T oString()+"";OleDbCommand cmd=new OleDbCommand(strSQL,oleDbConnection1);// if (null!=cmd.ExecuteScalar())// MessageBox(0,"员工姓名重复","提示",0);// else// {string sql1,sql2,sql;sql1="insert into income (Imonth,Remark,Income,PID";sql2="values('"+textBox2.T ext.ToString()+"','"+textBox3.Text.ToString()+"','"+textBox4.T ext.ToString()+"' ,"+comboBox1.SelectedValue.ToString();sql=sql1+") "+sql2+")";mandText=sql;cmd.ExecuteNonQuery();MessageBox(0,"薪金信息添加成功","提示",0);// }}}2)添加薪金信息初始化函数代码:private void AddIncome_Load(object sender, System.EventArgs e){oleDbConnection1.Open();OleDbDataAdapter adp=new OleDbDataAdapter("select PID,Pname from personinfo",oleDbConnection1);DataSet ds=new DataSet();adp.Fill(ds,"person");comboBox1.DisplayMember="Pname";comboBox1.ValueMember="PID";comboBox1.DataSource=ds.Tables[0].DefaultView;}2.2 删除薪金信息1)删除员工薪金实现函数代码:private void button4_Click(object sender, System.EventArgs e){if (dataGrid1.CurrentRowIndex>=0 && dataGrid1.DataSource!=null && dataGrid1[dataGrid1.CurrentCell]!=null){string sql="delete * from income where PID='"+ds.Tables["income"].Rows[dataGrid1.CurrentCell.RowNumber][0].ToString().Trim( )+"'";OleDbCommand cmd=new OleDbCommand(sql,oleDbConnection1);mandText=sql;cmd.ExecuteNonQuery();MessageBox.Show("删除员工'"+ds.Tables["income"].Rows[dataGrid1.CurrentCell.RowNumber][4].ToString().Trim()+"'成功","提示");}elseMessageBox.Show("没有指定的员工信息","提示");}2.3 修改薪金信息1)修改薪金函数:private void button1_Click(object sender, System.EventArgs e){string sql;sql="select * from income where PID='"+comboBox1.SelectedValue.ToString()+"' and IID<>"+this.Tag.T oString().Trim();OleDbCommand cmd=new OleDbCommand(sql,oleDbConnection1);if (null!=cmd.ExecuteScalar())MessageBox.Show("月份重复","提示");else{sql="update income set Imonth='"+textBox2.Text.ToString()+"',Remark='"+textBox3.T ext.ToString()+"',Income='"+t extBox4.Text.ToString()+"',PID='"+comboBox1.SelectedValue.T oString()+"'";// if (textBox8.T ext.Trim()!="")// sql=sql+",Remark='"+textBox8.Text.Trim()+"'";sql=sql+" where IID="+this.Tag.ToString().Trim();mandText=sql;cmd.ExecuteNonQuery();MessageBox.Show("员工薪金修改成功","提示");}oleDbConnection1.Close();}private void button2_Click(object sender, System.EventArgs e){this.Close();}2)修改薪金初始化函数:private void ModifyIncome_Load(object sender, System.EventArgs e){oleDbConnection1.Open();OleDbDataAdapter adp=new OleDbDataAdapter("select PID, Pname from personinfo",oleDbConnection1);DataSet ds=new DataSet();adp.Fill(ds,"person");comboBox1.DisplayMember="personinfo";comboBox1.ValueMember="PID";comboBox1.DataSource=ds.Tables[0].DefaultView;comboBox1.Text=label6.T ext.Trim();}2.4查询薪金信息1)查询薪金函数代码实现:private void button1_Click(object sender, System.EventArgs e){string sql="select income.PID as 员工编号,income.Imonth as 月份,income.Income as 薪金,income.Remark as 备注,personinfo.Pname as 员工姓名,income.IID as 自动编号from income inner join personinfo on income.PID = personinfo.PID where personinfo.Pname='"+comboBox1.T ext.ToString()+"' order by IID";OleDbDataAdapter adp=new OleDbDataAdapter(sql,oleDbConnection1);ds=new DataSet();ds.Clear();adp.Fill(ds,"income");if (ds.T ables[0].Rows.Count!=0){dataGrid1.DataSource=ds.Tables[0].DefaultView;dataGrid1.CaptionText="共有"+ds.T ables[0].Rows.Count+"条查询结果";}else{dataGrid1.CaptionText="没有您所查找的员工薪金信息";dataGrid1.DataSource=null;}。