C++课程设计报告.docx
《C++课程设计报告.docx》由会员分享,可在线阅读,更多相关《C++课程设计报告.docx(31页珍藏版)》请在冰豆网上搜索。
![C++课程设计报告.docx](https://file1.bdocx.com/fileroot1/2023-2/1/4287b8a3-8192-4889-bc36-13551463dead/4287b8a3-8192-4889-bc36-13551463dead1.gif)
C++课程设计报告
青岛理工大学
C++面向对象课程设计报告
院(系)计算机工程学院
专业:
_计算机科学与技术
学生姓名:
__
班级:
___学号:
_
题目:
___人事管理系统_
起迄日期:
_12月20号—12月31号
设计地点:
_2#401室
指导教师:
_
完成日期:
2010年12月31日
目录
一、需求分析2
二、设计内容2
1、程序的主要功能模块:
2
2、主要模块的流程图6
(1)添加记录:
6
(2)修改记录:
6
(3)删除记录:
7
(4)查询记录:
7
(5)排序:
8
(6)统计人数:
8
3、数据库的建立及设计步骤:
9
【1】建立数据库及连接步骤9
【2】程序主要代码:
14
(1)添加记录14
(2)修改记录14
(3)删除记录15
(4)查询记录15
(5)排序15
(6)统计人数15
(7)初始化界面16
三、调试分析16
1.实际完成的情况说明:
16
2.程序的性能分析:
16
3.上机过程中出现的问题及其解决方案:
16
4.程序中可以改进的地方说明:
17
5.程序中可以扩充的功能及设计实现构想:
17
四、用户手册17
1建立数据库17
2登录界面:
17
3选择功能:
17
五、设计总结21
六、参考文献22
七、附录22
一、需求分析
1、开发这个系统的目的就是帮助企业的人力资源部门提高工作效率,实现企业人事信息管理的系统化,规范化和自动话。
在C++面向对象思想的指导下,用数据库系统设计方法对公司人事系统进行设计,使公司管理人员能够更容易、更方便的用计算机进行对人事的管理。
2、能够实现以下功能:
显示第一条记录,下一条记录,上一条记录,最后一条记录,添加记录,修改记录,删除记录,查询记录,排序和统计人数等功能。
二、设计内容
1、程序的主要功能模块:
(1)CAboutDlg类//系统自动定义生成
classCAboutDlg:
publicCDialog
{
public:
CAboutDlg();
enum{IDD=IDD_ABOUTBOX};
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);
protected:
DECLARE_MESSAGE_MAP()
};
(2)CMainFrame类//系统自动定义生成
classCMainFrame:
publicCFrameWnd
{
protected:
CMainFrame();
DECLARE_DYNCREATE(CMainFrame)
public:
public:
virtualBOOLPreCreateWindow(CREATESTRUCT&cs);
public:
virtual~CMainFrame();
#ifdef_DEBUG
virtualvoidAssertValid()const;
virtualvoidDump(CDumpContext&dc)const;
#endif
protected:
CStatusBarm_wndStatusBar;
CToolBarm_wndToolBar;
protected:
afx_msgintOnCreate(LPCREATESTRUCTlpCreateStruct);
DECLARE_MESSAGE_MAP()
};
(3)CMyApp类//系统自动定义生成
classCMyApp:
publicCWinApp
{
public:
CMyApp();
public:
virtualBOOLInitInstance();
afx_msgvoidOnAppAbout();
DECLARE_MESSAGE_MAP()
};
(4)CMyDoc类//系统自动定义生成
classCMyDoc:
publicCDocument
{
protected:
CMyDoc();
DECLARE_DYNCREATE(CMyDoc)
public:
CMySetm_mySet;
public:
public:
virtualBOOLOnNewDocument();
virtualvoidSerialize(CArchive&ar);
public:
virtual~CMyDoc();
#ifdef_DEBUG
virtualvoidAssertValid()const;
virtualvoidDump(CDumpContext&dc)const;
#endif
protected:
protected:
DECLARE_MESSAGE_MAP()
};
(5)CMySet类//系统自动定义生成
classCMySet:
publicCRecordset
{
public:
CMySet(CDatabase*pDatabase=NULL);
DECLARE_DYNAMIC(CMySet)
longm_column1;
CStringm_column2;
CStringm_column3;
CStringm_column4;
longm_column5;
CStringm_column6;
longm_column7;
CStringm_column8;
CStringm_column9;
public:
virtualCStringGetDefaultConnect();
virtualCStringGetDefaultSQL();
virtualvoidDoFieldExchange(CFieldExchange*pFX);
#ifdef_DEBUG
virtualvoidAssertValid()const;
virtualvoidDump(CDumpContext&dc)const;
#endif
};
(6)CMyView类//定义编写的视图类
classCMyView:
publicCRecordView
{
protected:
CMyView();
DECLARE_DYNCREATE(CMyView)
public:
enum{IDD=IDD_MY_FORM};
CMySet*m_pSet;
longm_bianhao;
CStringm_xingming;
CStringm_xingbie;
CStringm_bumen;
intm_nianling;
CStringm_jingyan;
intm_gongzi;
CStringm_zhiwei;
CStringm_xueli;
intm_renshu;
public:
CMyDoc*GetDocument();
public:
public:
virtualCRecordset*OnGetRecordset();
virtualBOOLPreCreateWindow(CREATESTRUCT&cs);
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);
virtualvoidOnInitialUpdate();//}}AFX_VIRTUAL
public:
voidRefreshData();
virtual~CMyView();
#ifdef_DEBUG
virtualvoidAssertValid()const;
virtualvoidDump(CDumpContext&dc)const;
#endif
protected:
protected:
afx_msgvoidOnButtonFIRST();
afx_msgvoidOnButtonNEXT();
afx_msgvoidOnButtonPREV();
afx_msgvoidOnButtonLAST();
afx_msgvoidOnButtonADD();
afx_msgvoidOnButtonMODIFY();
afx_msgvoidOnButtonDELETE();
afx_msgvoidOnButtonSEARCH();
afx_msgvoidOnButtonCHUSHIHUA();
afx_msgvoidOnButtonSORTRECO();
afx_msgvoidOnButtonCOUNT();
DECLARE_MESSAGE_MAP()
};
成员函数的功能
afx_msgvoidOnButtonFIRST();显示第一条记录
afx_msgvoidOnButtonNEXT();显示下一条记录
afx_msgvoidOnButtonPREV();显示前一条记录
afx_msgvoidOnButtonLAST();显示最后一条记录
afx_msgvoidOnButtonADD();添加记录
afx_msgvoidOnButtonMODIFY();修改记录
afx_msgvoidOnButtonDELETE();删除记录
afx_msgvoidOnButtonSEARCH();查询记录
afx_msgvoidOnButtonCHUSHIHUA();初始化界面
afx_msgvoidOnButtonSORTRECO();对数据库排序
afx_msgvoidOnButtonCOUNT();对人数进行统计
2、主要模块的流程图
(1)添加记录:
(2)修改记录:
(3)删除记录:
(4)查询记录:
(5)排序:
(6)统计人数:
3、数据库的建立及设计步骤:
【1】建立数据库及连接步骤
人事管理数据表结构创建
字段名称
字段类型
字段大小
索引
必须填写
职工编号
数字
长整型
惟一、主索引
是
职工姓名
文本
20
是
职工性别
文本
2
是
所在部门
文本
30
是
职工年龄
数字
整型
是
工作时间
文本
20
是
基本工资
数字
整型
是
职位
文本
20
是
学历
文本
20
是
用MicrosoftAccess建立数据库,数据类型如上表所示。
打开控制面板中的管理工具的数据源,点击添加。
【2】程序主要代码:
(1)添加记录
voidCMyView:
:
OnButtonADD()
{
try
{
m_pSet->AddNew();//设置数据集为添加记录状态
UpdateData(TRUE);//用控件的当前内容更新成员变量
m_pSet->m_column1=m_bianhao;//把成员变量的值赋给数据集的相应成员
m_pSet->m_column2=m_xingming;
m_pSet->m_column3=m_xingbie;
m_pSet->m_column4=m_bumen;
m_pSet->m_column5=m_nianling;
m_pSet->m_column6=m_jingyan;
m_pSet->m_column7=m_gongzi;
m_pSet->m_column8=m_zhiwei;
m_pSet->m_column9=m_xueli;
m_pSet->Update();//执行写入操作
m_pSet->Requery();//更新数据集
}
catch(CDBException*pe)
{
AfxMessageBox(pe->m_strError);//如果发生数据库异常则报告相应错误
pe->Delete();
}
}
(2)修改记录
voidCMyView:
:
OnButtonMODIFY()
{
try
{
m_pSet->Edit();//设置数据集为编辑记录状态
UpdateData(TRUE);//用控件的当前内容更新成员变量
m_pSet->m_column1=m_bianhao;//把成员变量的值赋给数据集的相应成员
m_pSet->m_column2=m_xingming;
m_pSet->m_column3=m_xingbie;
m_pSet->m_column4=m_bumen;
m_pSet->m_column5=m_nianling;
m_pSet->m_column6=m_jingyan;
m_pSet->m_column7=m_gongzi;
m_pSet->m_column8=m_zhiwei;
m_pSet->m_column9=m_xueli;
m_pSet->Update();//执行写入操作
m_pSet->Requery();//更新数据集
}
catch(CDBException*pe)
{
AfxMessageBox(pe->m_strError);//如果发生数据库异常则报告相应错误
pe->Delete();
}
}
(3)删除记录
voidCMyView:
:
OnButtonDELETE()
{
try
{
m_pSet->Delete();//设置数据集为删除状态
m_pSet->Requery();//更新数据集
RefreshData();//更新视图
}
catch(CDBException*pe)
{
AfxMessageBox(pe->m_strError);//如果发生数据库异常则报告相应错误
pe->Delete();
}
}
(4)查询记录
voidCMyView:
:
OnButtonSEARCH()
{
UpdateData(TRUE);
m_pSet->MoveFirst();
while(m_pSet->m_column1!
=m_bianhao)
m_pSet->MoveNext();
RefreshData();
}
(5)排序
voidCMyView:
:
OnButtonSORTRECO()
{
m_pSet->m_strSort="职工编号";//指定排序字段
m_pSet->Requery();//刷新数据库
UpdateData(FALSE);//更新表单
}
(6)统计人数
voidCMyView:
:
OnButtonCOUNT()
{
UpdateData(TRUE);//用控件的当前内容更新成员变量
longi;
m_pSet->MoveLast();
i=m_pSet->m_column1;
m_pSet->MoveFirst();
intj=1;
while(m_pSet->m_column1!
=i)
{
j+=1;
m_pSet->MoveNext();
}
m_renshu=j;//将J的值赋值给人数变量
m_pSet->m_column1=0;
m_pSet->m_column2=_T("");
m_pSet->m_column3=_T("");
m_pSet->m_column4=_T("");
m_pSet->m_column5=0;
m_pSet->m_column6=_T("");
m_pSet->m_column7=0;
m_pSet->m_column8=_T("");
m_pSet->m_column9=_T("");
RefreshData();//更新视图
}
(7)初始化界面
voidCMyView:
:
OnButtonCHUSHIHUA()
{
m_pSet->m_column1=0;
m_pSet->m_column2=_T("");
m_pSet->m_column3=_T("");
m_pSet->m_column4=_T("");
m_pSet->m_column5=0;
m_pSet->m_column6=_T("");
m_pSet->m_column7=0;
m_pSet->m_column8=_T("");
m_pSet->m_column9=_T("");
RefreshData();
}
三、调试分析
1.实际完成的情况说明:
本程序可以实现数据库记录的添加,修改、删除,查询,排序,初始化界面和统计人数等功能
2.程序的性能分析:
可以处理简单的数据,当数据不符合要求时会出现提示:
超出处理范围。
相关操作不能在界面中显示,例如排序,必须在界面中一个一个显示,不能一起显示出来。
添加,修改,删除都可以可以通过查询体现出来。
能够查询第一条,下一条记录,上一条记录和最后一条记录。
3.上机过程中出现的问题及其解决方案:
在设计定义表格时工作时间定义为数据库所提供的时间模式,出现错误,涉及相关知识,我并不太会,所以把时间都定义成文本类型。
通过MFC建立的登陆界面,在修改后,并不能在运行是体现出来。
可以换一台机器就可以了。
在建立数据库时,数据类型要和输入数据,编程变量保持一致。
数据源名必须与你所创建的数据库的名称一致。
在有数据源的情况下,程序才能正常运行。
4.程序中可以改进的地方说明:
可以分别统计各部门的人数或分别统计男女人数,统计工资超过一定数的人数等功能,设计一个列表功能,输出修改,删除,添加,排序等功能,使用户能够直接看到处理结果。
5.程序中可以扩充的功能及设计实现构想:
可以在该系统中添加工资管理系统。
并且直接显示排序后的数据库,并可以通过对话框进入不同的处理功能。
不用通过主键,只要输入相关信息,就可显示所有满足条件的记录信息
四、用户手册
1、建立数据库
2登录界面:
3选择功能:
(1)排序:
单击排序按钮,对数据库中的成员,按编号排序
数据库排序后的情况:
(2)查询记录:
输入职工编号编号,单击查询记录按钮
(3)添加记录:
输入所要添加的记录,再单击添加记录按钮
添加记录后的数据库
(4)删除记录:
查询到所要删除的记录,再单击按钮删除
删除后的数据库
(5)修改记录:
查询到所要修改的记录,然后修改后,单击修改按钮。
修改后的数据库
(6)初始化界面:
单击按钮,即可进入初始化界面
(7)统计人数:
单击统计人数按钮,即可输出数据库中的人数
五、设计总结
经过不到两个星期的课程设计,通过看书和问同学和老师,顺利完成该课程设计。
通过该次设计,收获颇多。
但是我编写的人事管理系统并不实用,并不符合实际人事管理的情况,并不能满足对象的需求,这是因为我对实际情况的不了解以及知识不足所造成的。
但是通过该课程设计,我了解怎样建立数据库,并对其进行连接,了解了其各阶段的基本任务,熟悉了程序总流程框图,了解了程序的生成过程、构造工具及其相关的技术对课本上的知识有了更深的理解,同时对于MFC有了一定的了解,MFC通过四个宏来声明和实现消息映射表。
MFC的这种表驱动的机制使消息处理结构变得更加清晰,明了。
MFC应用程序框架 应用程序类,框架窗口类,试图类,文档类构成了应用程序的框架,框架的功能是通过各类之间的协调工作实现的类。
MFC采用文档/试图结构来实现数据和数据表现的分离,文档试图的分离有利于数据和数据表现的单独改变。
MFC用类信息存储了动态创建类对象时所需要的消息。
把原来以为很深奥的书本知识变的更为简单,对实验原理有更深的理解。
通过把该程序设计的内容,算法的执行顺序在计算机上实现,知道和理解了怎样制一个人事管理系统,但其中还有很多不足,很多方面都和实际情况不相符,但是对该理论在实践中的应用有深刻的理解。
通过该次课程设计,全面系统的理解了数据库创建和连接以及MFC编程的原理,程序构造的一般原理和基本实现方法。
把课本知识和实际操作相结合,激发了学习的积极性。
把学过的C++面相对象的知识强化,能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解。
该课程设计中程序比较复杂,不一定能一次性通过,在调试时应该仔细,在程序调试时,一定要有耐心,找出出错的原因。
在这次实习中,我按照实验指导的思想来完成。
加深了MFC编程的内部功能及内部实现,培养实践动手能力和程序开发能力的目的。
只看和想,不实际编程,很难发现自己的错误,只有通过编程运行才能更好的指导我们学习,让我们知道自己的不足,以及怎样处理编程期间出现的问题,更有利于我们的学习。
六、参考文献
1.李兰、任凤华.C++面向对象程序设计.西安:
西安电子科技大学出版社,2010.9
2.郑莉.C++语言程序设计(第3版).北京:
清华大学出版社,2005.7
3.钱能.C++程序设计教程(第2版).北京:
清华大学出版社,2005.8
4.黄维通.VisualC++面向对象与可视化程序设计(第2版).北京:
清华大学出版社,2003.12
5.刘路放.VisualC++与面向对象程序设计教程(第二版).北京:
高等教育出版社,2007.8
七、附录
MainFrm.cpp//人事管理框架类
StdAfx.cpp//人事管理头文件类实现
人事管理系统.cpp//人事管理主程序类实现
人事管理系统Doc.cpp//人事管理文档类实现
人事管理系统Set.cpp//人事管理数据集类实现
人事管理系统View.cpp//人事管理数据集类实现
MainFrm.h//人事管理框架类
Resource.h//人事管理资源类
StdAfx.h//人事管理头文件类
人事管理系统.h//人事管理主程序类
人事管理系统Doc.h//人事管理文档类
人事管理系统Set.h//人事管理数据类
人事管理系统View.h//人事管理视图类