数据库人事管理系统课程设计.docx
《数据库人事管理系统课程设计.docx》由会员分享,可在线阅读,更多相关《数据库人事管理系统课程设计.docx(21页珍藏版)》请在冰豆网上搜索。
数据库人事管理系统课程设计
课程设计
课程名称数据库原理及应用
题目名称人事管理系统
学生学院应用数学学院
专业班级
学号
学生姓名
指导教师
2014年6月5日
目录
一、题目要求2
二、程序界面与操作演示2
1、登陆界面2
2、功能界面3
3、添加员工信息3
4、修改员工信息3
5、删除员工信息4
6、根据条件查询员工信息5
三、设计思路与制作过程6
1、系统构架图6
2、设计环境6
3、数据库的设计7
4、设置ODBC与SQLServe的连接7
5、建立应用程序11
6、主要功能模块的实现代码14
七、总结与体会17
一、题目要求
题目:
人事管理系统
内容要求:
(1)员工各种信息的输入,包括员工的基本信息、学历信息、婚姻状况信息和职称等;
(2)员工各种信息的修改;
(3)对于转出、辞职、辞退、退休员工信息的删除;
(4)按照一定的条件,查询,统计符合条件的员工信息;
(5)至少应该包括每个员工详细信息的查询,按婚姻状况查询、学历查询、工作岗位查询等;
(6)至少应该包括按学历、婚姻状况、岗位、参加工作时间等统计各自的员工信息。
二、程序界面与操作演示
1、登陆界面
打开系统后,会弹出登陆界面(我设置的账号是wu,密码是8):
当输入了不正确的账号密码后,则无法登陆:
2、功能界面
用管理员账号密码登陆后,会出现以下界面:
点击最后一个按钮“退出登陆”,则会返回到登陆界面,要求重新输入账号密码。
3、添加员工信息
在操作界面上,点击第一个按钮“添加员工”,输入员工信息后,按确定即可完成员工信息的添加:
4、修改员工信息
在操作界面上,点击第二个按钮“修改或删除员工信息”。
输入想要修改的员工的工号,点击按钮“查询”,即可在下面的员工信息栏显示该员工的信息,然后在对应的编辑框中更改员工的信息,更改完毕后点击“修改”按钮即可完成员工信息的修改。
5、删除员工信息
删除员工信息的功能使用步骤基本同上,先在操作界面点击第二个按钮“修改或删除员工信息”;然后填入想要删除的员工的工号,点击“查询”按钮;查询出来后,点击“删除”按钮即可完成员工信息的删除。
6、根据条件查询员工信息
在操作界面点击“高级查询员工信息”按钮,会进入高级查询的界面。
高级查询分为婚姻、学历、职位三个条件的筛选查询,可以只填写一个条件,或者同时填写多个条件。
点击“查询”按钮后,查询结果会显示在下方的表格中。
三、设计思路与制作过程
1、系统构架图
2、设计环境
由于我的个人电脑是使用Win8.1的操作系统,在某些情况下对VisualC++6.0和SQLServer2005的兼容性和支持性不好,所以我是在虚拟机VMwareWorkstation9.0下的XP系统中完成系统的设计的。
开发环境:
WindowsXP
使用软件:
MicrosoftVisualC++6.0
MicrosoftSQLServer2005
3、数据库的设计
建立“人事管理数据库”,并建立一张“员工”表。
适当给表添加员工信息,以作调试人事管理系统时使用。
4、设置ODBC与SQLServe的连接
建立好数据库后,保存数据库。
然后打开系统的“控制面板——管理工具——数据源(ODBC)”,按照下图描述进行设置。
5、建立应用程序
先建立MFC应用程序,根据功能需求,设计多个窗体。
设置好数据源(ODBC)后,可以将MFC工程连接数据库:
6、主要功能模块的实现代码
//添加员工信息的代码如下:
voidADD:
:
OnAdd()//添加信息
{
CRecordsetrs(&db);//数据集
CStringstr;
str.Format("insertintopeoplevalues(number='%s',name='%s',post='%s',xueli='%s',mariage='%s',time='%s'",m_number,m_name.m_sex,m_post,m_xueli,m_marriage,m_time)";
rs.Open(CRecordset:
:
forwardOnly,str);
if(!
rs.IsEOF())
{
this->messagebox("添加成功!
");
}
else
this->messagebox("添加失败!
");
}
//“修改或删除员工信息”中的查询功能
voidINFOCHANGE:
:
OnQuery()//根据工号查询显示
{
CRecordsetrs(&db);//数据集
CStringstr1,str2,str3,str3,str4,str5,str6,str7;
rs.Open(CRecordset:
:
forwardOnly,"selectNAMEfrompeoplewherenumber=m_number");
while(!
rs.IsEOF())
{
rs.GetFieldValue("number",str1);
m_number=str1;
rs.GetFieldValue("name",str2);
m_name=str2;
rs.GetFieldValue("sex",str3);
m_sex=str3;
rs.GetFieldValue("post",str4);
m_post=str4;
rs.GetFieldValue("xueli",str5);
m_xueli=str5;
rs.GetFieldValue("marriage",str6);
m_marriage=str6;
rs.GetFieldValue("time",str7);
m_time=str7;
}
rs.Close();
}
//修改员工信息功能
voidINFOCHANGE:
:
OnInfochange()//根据工号查找出来的数据进行修改
{
CRecordsetrs(&db);//数据集
CStringstr;
CStringstr;
str.Format("updatepeoplesetnumber=m_number,name='%s',post='%s',xueli='%s',mariage='%s',time='%s'",m_number,m_name.m_sex,m_post,m_xueli,m_marriage,m_time);
CRecordsetrs(&db);//数据集
CStringstr;
rs.Open(CRecordset:
:
forwardOnly,str);
rs.Open(CRecordset:
:
forwardOnly,";
if(!
rs.IsEOF())
{
this->messagebox("修改成功!
");
}
else
this->messagebox("修改成功!
");
rs.Close();
}
//条件查询员工信息功能
voidQUERY:
:
OnQuery()
{
this->UpdateData(true);
CStringstrHeader[7]={"工号","姓名","性别","岗位","学历","婚姻","入职时间"};
for(intnCol=0;nCol<7;nCol++)
m_list.InsertColumn(nCol,strHeader[nCol],LVCFMT_LEFT,100);
this->UpdateData(false);
CStringstr;
str.Format("select*frompeoplewheremarriage='%s',xueli='%s',,post='%s",m_marriage,m_xueli,m_post);
Recordset.m_pDatabase=&m_database;
CRecordsetrs(&db);//数据集
CStringstr;
rs.Open(CRecordset:
:
forwardOnly,str);
Recordset.Open(AFX_DB_USE_DEFAULT_TYPE,str);
if(!
Recordset.IsEOF())
{
CStringstr;
str=(LPCTSTR)_bstr_t(Recordset.GetRecordCount"number"));
m_list.SetItem(nItem,0,str);
str=(LPCTSTR)_bstr_t(Recordset.GetRecordCount("name"));
m_list.SetItemText(nItem,1,str);
str=(LPCTSTR)_bstr_t(Recordset.GetRecordCount("sex"));
m_list.SetItemText(nItem,2,str);
str=(LPCTSTR)_bstr_t(Recordset.GetRecordCount("post"));
m_list.SetItemText(nItem,3,str);
str=(LPCTSTR)_bstr_t(Recordset.("xueli"));
m_list.SetItemText(nItem,4,str);
str=(LPCTSTR)_bstr_t(Recordset.GetRecordCount("marriage"));
m_list.SetItemText(nItem,5,str);
str=(LPCTSTR)_bstr_t(Recordset.GetRecordCount("time"));
m_list.SetItemText(nItem,5,str);
}
else
this->MessageBox("没有找到相应数据!
");
}
七、总结与体会
在本次的课程设计中,也许很多人刚开始都无从下手,因为除了需要熟悉SQLServer的操作外,还要对编程语言有一定的功底和更多的未知的困惑。
所以我需要一开始就清晰这次课程设计的思路和条理。
其实在课程设计指导书中已经给了我很大的提示和帮助,首先要理解好题目,明白题目所需要的功能要求;然后把人事管理系统的架构设计出来;此时,心中已经对这个系统有一个比较清晰的认知了,只需要不断完善和细化,同时可以在VisualC++中把界面建立出来,剩下的就是技术层面上的问题了。
在此之前吧,最令我困惑的是怎么把数据库和设计的应用程序连接在一起,虽然指导书上有适当的提示,但我还是比较迷惑,一知半解的。
后来我在网上查了资料,了解到了以下这几种办法:
第一种是在所建立的C++项目中的stdafx.h头文件中引入ADO,具体代码如下:
#import“c:
\ProgramFiles\CommonFiles\System\ado\msado15.dll”
no_namespacerename(”EOF”,“adoEOF”)rename(”BOF”,“adoBOF”)
然后定义_ConnectionPtr变量后调用Connection对象的Open方法建立与服务器的连接。
数据类型_ConnectionPtr实际上是由类模板_com_ptr_t得到的一个具体的实例类。
_ConnectionPtr类封装了Connection对象的Idispatch接口指针及其一些必要的操作。
可以通过这个指针操纵Connection对象。
第二种就是课程设计指导书里提到的利用ODBC连接的办法。
解决了这个问题后,另一个问题又产生了。
我在做的时候是在SQLServer2005数据库中建一个表,然后在VisualC++里做窗体,最后用窗体链接数据库进行操作,但是如果需要在未建数据库表的电脑中运行,不知道怎么办。
我开始的设想是把数据库中的mdf文件、ldf文件提取出来,然后放在应用程序的文件夹中,可以随着应用程序一起移动。
后来在网上查找资料时,发现这种用语句来加载数据库的方法确实可行。
还有一种办法就是使用附加数据库,在别的电脑打开SQLServer2005直接附加数据库,要注意的是SQLServer的版本需要一致。
做课程设计最大的乐趣就是能不断发现新领域的问题,然后经过摸索,不断尝试,不断总结,从而解决问题,积累经验,让自己的能力得到很大的提升,能让我们更有成就感,激发我们学习的兴趣。
这次课程设计的题目很实用也很有代表性,老师们辛苦啦!
我会利用空闲时间试着把其他的题目都做一做,努力的探寻成功之道。