资源描述
《面向对象编程技术》课程设计试验汇报
姓名:
学号:
班级:
指导老师:
日期:
目录:
一. 设计任务和要求……………………………………………………….3
1. 设计目标……………………………………………………………………3
2. 课程设计要求………………………………………………………..3
二. 系统分析……………………………………………………………………3
1. 需求分析:………………………………………………………………3
2. 功效分析:………………………………………………………………3
3. 系统功效模块………………………………………………………..3
4. 功效实现……………………………………………………………3
5. 模块框架图…………………………………………………………...4
三. 系统设计…………………………………………………………………...4
四. 问题分析和试验总结………………………………………………..10
课程设计部分源代码…………………………………………………………11
一. 设计任务和要求
设计题目:人事管理系统
1.设计目标:
制作人事管理系统,实现对增加数据统计,删除统计,排序统计,筛选统计数据要求。
2.课程设计要求
A.用access创建人事管理数据表,该表统计职员基础信息,其中包含职员编号,职员姓名,所在部门,职员年纪,工作时间,基础工资,职称和监理等信息。
B.创建新数据源
C.叙述对“MFC AppEizard(exe)”生成应用程序框架认识,了解和开发心得
二.系统分析
1.需求分析:
l 可利用该程序实现对职员信息统计和浏览
l 能够对职员信息进行输入、删除、排序、和筛选等操作;
2.功效分析:
l 新增统计:系统能在原有统计基础上增加新统计。
l 删除统计:对数据表中数据进行删除。
l 筛选统计:依据职员标号对职员进行筛选进行正确查找职员人员。
l 排序统计:对职员信息编号进行从小到大排序
3.系统功效模块
人事管理系统有:新增统计、深处统计、排序统计、筛选及浏览统计。
4.功效实现:
1) “筛选及浏览统计”模块:
在access中建表时,在职员编号栏开启关键词索引功效,筛选时在对话框编辑框内输入要筛选职员标号即可进行筛选。
2) “新增统计”模块:
再新建一个对话框创建一个新类,给每个编辑框绑定变量,在人事管理系统view.cpp中添加自拟头文件
3) “数据删除模块”
显示目前数据内容,点击删除按钮将该职员全部信息删除。
4) “排序统计”模块
显示目前数据内容,点击排序按钮将目前表中全部职员信息从小到大排序。
5.模块框架图
人事管理系统
该职员信息消失
排序统计
排序数据
显示目前编号最小职员信息
删除数据
删除统计
保留职员信息
填写信息
增加统计
筛选统计
输入编号
显示职员信息
三、系统设计
人事管理系统.mdb表初始化结果
1.界面设计
运行时主界面
l 增加统计界面
增加信息成功:
l 筛选界面
筛选成功:
l 排序和删除界面
删除了李英信息
排序功效:
2、程序设计
经过主窗体调用其它窗体,在调用增加统计时要弹出新对话框,一边输入要添加信息。筛选统计时,要实现在创建access数据库时打开索引功效。这么再点击筛选统计是只要在新对话框中输入关键词(职员编号)便可。
四、课程设计问题分析和试验总结
此次人事管理系统设计,关键是利用MFC操作,以让程序愈加便于操作和使用,这其中也出现了不少问题,走了很多弯路,比如:
1. 创建数据源,用控制面板设置数据源文件时老是犯错。
处理方法:先在access中创建人事管理系统表,然后在控制面板中标准添加指定数据源。
2. 在写对话框类组员函数时总出现大小写错误,造成程序编译不能经过。
处理措施:仔细检验源代码,利用错误提醒更正。
3. 在编写子对话框组员函数时,编译老提醒该类未申明。
处理措施:原因是未在view.cpp文件中添加对应类头文件,所以在对应位置添加头文件。
4. 在添加函数中,发觉试验指导步骤结果增加统计函数运行结果不能正常添加统计。
处理措施:点击增加函数时,应该弹出输入信息对话框,方便新增职员信息,新增完成后,点击确定完成添加操作。上网查阅资料后,完善了增加函数代码,并新增了一个对话框和对应类CDlgAdd,使其能完成其指定功效。
本程序部分源代码:
// 人事管理系统View.cpp : implementation of the CMyView class
//
#include "stdafx.h"
#include "人事管理系统.h"
#include "DlgQuery.h"
#include "DlgAdd.h"
#include "人事管理系统Set.h"
#include "人事管理系统Doc.h"
#include "人事管理系统View.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMyView
IMPLEMENT_DYNCREATE(CMyView, CRecordView)
BEGIN_MESSAGE_MAP(CMyView, CRecordView)
//{{AFX_MSG_MAP(CMyView)
ON_BN_CLICKED(IDC_BUTTON_ADD, OnButtonAdd)
ON_BN_CLICKED(IDC_BUTTON_DEL, OnButtonDel)
ON_BN_CLICKED(IDC_BUTTON_FILTER, OnButtonFilter)
ON_BN_CLICKED(IDC_BUTTON_SORT, OnButtonSort)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CRecordView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CRecordView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CRecordView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMyView construction/destruction
CMyView::CMyView()
: CRecordView(CMyView::IDD)
{
//{{AFX_DATA_INIT(CMyView)
m_pSet = NULL;
m_gzsj = 0;
//}}AFX_DATA_INIT
// TODO: add construction code here
}
CMyView::~CMyView()
{
}
void CMyView::DoDataExchange(CDataExchange* pDX)
{
CRecordView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMyView)
DDX_FieldText(pDX, IDC_EDIT_JBGZ, m_pSet->m_jbgz, m_pSet);
DDX_FieldText(pDX, IDC_EDIT_JL, m_pSet->m_jl, m_pSet);
DDX_FieldText(pDX, IDC_EDIT_SZBM, m_pSet->m_szbm, m_pSet);
DDX_FieldText(pDX, IDC_EDIT_ZC, m_pSet->m_zc, m_pSet);
DDX_FieldText(pDX, IDC_EDIT_ZGBH, m_pSet->m_zgbh, m_pSet);
DDX_FieldText(pDX, IDC_EDIT_ZGNL, m_pSet->m_zgnl, m_pSet);
DDX_FieldText(pDX, IDC_EDIT_ZGXB, m_pSet->m_zgxb, m_pSet);
DDX_FieldText(pDX, IDC_EDIT_ZGXM, m_pSet->m_zgxm, m_pSet);
DDX_DateTimeCtrl(pDX, IDC_DATETIMEPICKER_GZSJ, m_pSet->m_gzsj);
//}}AFX_DATA_MAP
}
BOOL CMyView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CRecordView::PreCreateWindow(cs);
}
void CMyView::OnInitialUpdate()
{
m_pSet = &GetDocument()->m_mySet;
CRecordView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
}
/////////////////////////////////////////////////////////////////////////////
// CMyView printing
BOOL CMyView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CMyView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CMyView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CMyView diagnostics
#ifdef _DEBUG
void CMyView::AssertValid() const
{
CRecordView::AssertValid();
}
void CMyView::Dump(CDumpContext& dc) const
{
CRecordView::Dump(dc);
}
CMyDoc* CMyView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyDoc)));
return (CMyDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMyView database support
CRecordset* CMyView::OnGetRecordset()
{
return m_pSet;
}
/////////////////////////////////////////////////////////////////////////////
// CMyView message handlers
void CMyView::OnButtonAdd()
{
// TODO: Add your control notification handler code here
/* m_pSet->AddNew();
m_pSet->Update();//更新统计集
m_pSet->Requery();//重新提取数据
m_pSet->MoveLast();//移动下一条统计
UpdateData(FALSE);//更新视图*/
try
{
CDlgAdd DlgAdd;
if(DlgAdd.DoModal()==IDOK)//"模式窗口方法打开,结束前不能操纵父窗口"
{
m_pSet->AddNew();
m_pSet->m_zgbh=DlgAdd.m_zgbh;
m_pSet->m_zgxm=DlgAdd.m_zgxm;
m_pSet->m_zgnl=DlgAdd.m_zgnl;
m_pSet->m_zgxb=DlgAdd.m_zgxb;
m_pSet->m_zc=DlgAdd.m_zc;
m_pSet->m_szbm=DlgAdd.m_szbm;
m_pSet->m_jbgz=DlgAdd.m_jbgz;
m_pSet->m_gzsj=DlgAdd.m_gzsj;
m_pSet->m_jl=DlgAdd.m_jl;
m_pSet->Update();//更新统计集
m_pSet->Requery();//重新提取统计集
m_pSet->MoveLast();//移动下一条统计
UpdateData(FALSE);//更新视图
}
}
catch (CDBException* e)
{
MessageBox(e->m_strError);//对于异常信息处理,这里是简单输犯错误信息
}
}
void CMyView::OnButtonDel()
{
// TODO: Add your control notification handler code here
m_pSet->Delete();
m_pSet->MoveNext();
if(m_pSet->IsEOF())
m_pSet->MoveLast();
if(m_pSet->IsBOF())
m_pSet->SetFieldNull(NULL);
UpdateData(FALSE);
}
void CMyView::OnButtonFilter()
{
// TODO: Add your control notification handler code here
CDlgQuery Dlgquery;
CString value;
if(Dlgquery.DoModal()==IDOK)//"模式窗口方法打开,结束前不能操纵父窗口"
{
value="职员编号=+"+Dlgquery.m_query+"";
m_pSet->m_strFilter=value;
m_pSet->Requery();
UpdateData(FALSE);
}
}
void CMyView::OnButtonSort()
{
// TODO: Add your control notification handler code here
m_pSet->m_strSort="职员编号";
m_pSet->Requery();
UpdateData(FALSE);
}
展开阅读全文