工资管理系统课程设计报告.docx
《工资管理系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《工资管理系统课程设计报告.docx(26页珍藏版)》请在冰豆网上搜索。
工资管理系统课程设计报告
1:
课程设计介绍
设计题目:
工资管理系统
设计介绍:
利用所学知识,开发小型应用系统,使学生掌握运用可视化编程技术编写调试应用系统程序,训练学生独立开发应用系统、进行数据处理的综合能力,理解工程的概念和头文件的使用,熟悉封装、继承和多态性等这些面向对象编程的特点。
2:
开发环境
系统环境:
操作系统需要WindowsXp以上版本;
开发工具MicrosoftVisualc++6.0;
数据库使用MicrosoftofficeAccess2003;
3:
设计目的
(1)、进一步巩固、加深学生所学专业课程《可视化程序设计》的基本理论知识,理论联系实际。
(2)、利用所学知识,开发小型应用系统,掌握运用VC++语言编写调试应用系统程序。
(3)、熟练掌握C++语言的基本语法,灵活运用各种数据类型。
(4)、进一步掌握在集成环境下如何调试程序(单步调试,设置断点、观察表达式,分块调试)和修改程序。
4:
设计要求:
(1)、创建类并使用类对象完成相应的任务。
(2)、深入理解封装、继承和多态这的等面向对象的编程的特点。
(3)、设计的小型工资管理系统可以收集、处理、存储信息,拥有查阅、增添、删除、修改等功能。
5:
流程图和模块图
设计步骤:
模块图:
主模块:
工资信息模块:
统计模块:
查阅模块:
增删操作模块:
6:
设计内容:
6.1.数据库与数据表的设计
作为工资管理系统,它是数据库应用系统数据处理的典范,数据库应用系统开发的前提是首先开发数据库和数据库中的数据表。
因此在本案例中,我们采用MicrosoftAccess2003创建数据库和数据表。
为此我们先定义一个“职工工资数据表”的结构,如表所示。
“职工工资数据表”结构
字段名称
字段类型
字段大小
小数位数
索引
必须填写
年份
数字
整型
是
月份
数字
整型
是
职位
文本
整形
是
职工编号
数字
整型
是
职工姓名
文本
16
是
部门
文本
20
是
基本工资
数字
长整型
自动
是
业绩工资
数字
长整型
自动
是
奖金
数字
长整型
自动
是
津贴
数字
长整型
自动
是
各种补助
数字
长整型
自动
是
应发数
数字
长整型
自动
是
水电费
数字
长整型
自动
是
房租
数字
长整型
自动
是
储蓄
数字
长整型
自动
是
会费
数字
长整型
自动
是
保险
数字
长整型
自动
是
扣除总计
数字
长整型
自动
是
实发工资
数字
长整型
自动
是
6.2.创建工资管理系统基本框架
在前面我们已经创建了“工资管理数据库”、“职工工资数据表”。
它可为应用程序提供一个数据源。
应用程序就是对该数据源的记录进行访问、增加、删除以及数据管理的一切操作。
有了这一切的工作,我们就可以着手进行应用系统的构建了。
我们先要用ODBC驱动将我们建好的数据库。
在MicrosoftVisualc++6.0中建立工程,在选择数据源的时候选择开放式数据源连接的驱动程序类型作为系统的数据源也就是ODBC。
6.3.开发工资处理界面
应用系统向导只能生成一个应用程序基本框架,该框架还不具备任何功能,我们在框架的基础上进行系统各种功能的制作。
通常一个应用程序框架生成两个对话框,一个是IDD_ABOUTBOX对话框,它是一个说明该系统的对话框,是由向导自动完成该对话框仍然是基本的。
在基本框架中另外一个对话框就是主对话框IDD_MY_FORM,而它就是我们加工制作的主要内容,数据源也是专门为该对话框引入的。
6.4.主对话框IDD_MY_FORM中控件的加入与布局
在工资管理系统中,主对话框主要用于处理工资管理的一切内容。
根据自己设计和功能的需要在此窗口上添加需要的控件,如图。
为各个控件修改属性,具体属性如下表。
标签对象的基本属性
ID
标题内容
IDC_STATICCAPTION
职工工资管理系统
IDC_STATICNE
年份
IDC_STATICYF
月份
IDC_STATICZGBH
职工编号
IDC_STATICZGXM
职工姓名
IDC_STATICZGBM
部门
IDC_STATICJBGZ
基本工资
IDC_STATICJJ
奖金
IDC_STATICYJGZ
业绩工资
IDC_STATICJT
津贴
IDC_STATICGZBZ
各种补助
IDC_STATICRDF
水电费
IDC_STATICFZOU
房租
IDC_STATICCX
储蓄
IDC_STATICHF
会费
IDC_STATICBX
保险
IDC_STATICYFHJ
应发合计
IDC_STATICKCHJ
扣除合计
IDC_STATICSFGZ
实发工资
编辑框控件的基本属性和编辑内容
ID
编辑内容
IDC_EDITNF
年份
IDC_EDITYF
月份
IDC_EDITZGBH
职工编号
IDC_EDITZGBM
所在部门
IDC_EDITZGXM
职工姓名
IDC_EDITJBGZ
基本工资
IDC_EDITJJ
奖金
IDC_EDITYJGZ
业绩工资
IDC_EDITJT
津贴
IDC_EDITGZBZ
各种补助
IDC_EDITRDF
水电费
IDC_EDITFZOU
房租
IDC_EDITCX
储蓄
IDC_EDITHF
会费
IDC_EDITBX
保险
IDC_EDITYFHJ
应发合计
IDC_EDITKCHJ
扣除合计
IDC_EDITSFGZ
实发工资
命令按钮对象的基本属性
ID
标题内容
IDC_BUTIONFIRST
第一条
IDC_BUTIONNEXT
下一条
IDC_BUTIONPREV
前一条
IDC_BUTIONLAST
最后一条
IDC_BUTIONSUM
执行统计
IDC_RADIOADD
增加记录
IDC_RADIODELETE
删除记录
IDC_RADIOUPDATE
刷新记录
分组控件对象的基本属性
ID
标题
IDC_STATICDATA
工资信息
IDC_STATICBROWSE
查阅浏览
IDC_STATICADDDELETUPD
增删操作
IDC_STATICCOUNT
统计
6.5.为编辑框控件建立数据字段映射
在对话框中的一切编辑框控件,均是用于进行数据处理和数据显示的,我们为它们建立字段映射,即将创建的数据集中的每一个字段与一个编辑框进行“数据绑定”,如图。
6.6.为命令按钮增加函数并编制过程代码
在此我们需要用一些命令来完成对数据的操作,需要为命令按钮建立函数和编制过程代码。
(1).“第一条记录”命令按钮代码
voidCMyView:
:
OnBUTTONfirst()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_pSet->MoveFirst();
if(m_pSet->IsBOF())
{
MessageBox("记录已在第一条");
m_pSet->MoveNext();
UpdateData(FALSE);
return;
}
UpdateData(FALSE);
}
(2)、上一条按钮命令的代码
voidCMyView:
:
OnBUTTONprev()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_pSet->MovePrev();
if(m_pSet->IsBOF())
{
MessageBox("记录已在第一条");
m_pSet->MoveNext();
UpdateData(FALSE);
return;
}
UpdateData(FALSE);
}
(3)、下一条按钮命令的代码
voidCMyView:
:
OnBUTTONnext()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_pSet->MoveNext();
if(m_pSet->IsEOF())
{
MessageBox("记录已是最后一条!
");
m_pSet->MovePrev();
UpdateData(FALSE);
return;
}
UpdateData(FALSE);
}
(4)、最后一条按钮的代码
voidCMyView:
:
OnBUTTONlast()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_pSet->MoveLast();
if(m_pSet->IsEOF())
{
MessageBox("记录已是最后一条!
");
m_pSet->MovePrev;
UpdateData(FALSE);
return;
}
UpdateData(FALSE);
}
(5)、增加记录的代码
voidCMyView:
:
OnRADIOzjjl()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_pSet->AddNew();
UpdateData(FALSE);
}
(6)、删除记录的代码
voidCMyView:
:
OnRADIOsxjl()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_pSet->Edit();
UpdateData();
m_pSet->Update();
m_pSet->Requery();
m_pSet->CancelUpdate();
}
(7)修改记录的代码
voidCMyView:
:
OnRADIOscjl()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_pSet->Delete();
m_pSet->MoveNext();
if(m_pSet->IsEOF())
m_pSet->MoveLast();
if(m_pSet->IsBOF())
m_pSet->SetFieldNull(NULL);
UpdateData(FALSE);
}
(8)、统计的代码
voidCMyView:
:
OnBUTTONtongji()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_pSet->Edit();
m_pSet->m_ydgz=m_pSet->m_jbgz+m_pSet->m_jj+m_pSet->m_yj+m_pSet->m_jt+m_pSet->m_gzbz;
m_pSet->m_ykgz=m_pSet->m_cx+m_pSet->m_hf+m_pSet->m_bx+m_pSet->m_fz+m_pSet->m_sdf;
m_pSet->m_sdgz=m_pSet->m_ydgz-m_pSet->m_ykgz;
UpdateData(FALSE);
m_pSet->Requery();
}
7:
调试
1.主界面:
2.统计
3.下一条
4.上一条
5.最后一条
6.第一条
7.删除操作
8修改操作
8.程序清单
#include"stdafx.h"
#include"工资管理系统.h"
#include"¹工资管理系统Set.h"
#include"工资管理系统Doc.h"
#include"工资管理系统View.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
//CMyView
BOOLm_Add=false;
IMPLEMENT_DYNCREATE(CMyView,CRecordView)
BEGIN_MESSAGE_MAP(CMyView,CRecordView)
//{{AFX_MSG_MAP(CMyView)
ON_BN_CLICKED(IDC_BUTTON_first,OnBUTTONfirst)
ON_BN_CLICKED(IDC_BUTTON_prev,OnBUTTONprev)
ON_BN_CLICKED(IDC_BUTTON_next,OnBUTTONnext)
ON_BN_CLICKED(IDC_BUTTON_last,OnBUTTONlast)
ON_BN_CLICKED(IDC_RADIO_zjjl,OnRADIOzjjl)
ON_BN_CLICKED(IDC_RADIO_sxjl,OnRADIOsxjl)
ON_BN_CLICKED(IDC_RADIO_scjl,OnRADIOscjl)
ON_BN_CLICKED(IDC_BUTTON_tongji,OnBUTTONtongji)
//}}AFX_MSG_MAP
//Standardprintingcommands
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()
/////////////////////////////////////////////////////////////////////////////
//CMyViewconstruction/destruction
CMyView:
:
CMyView()
:
CRecordView(CMyView:
:
IDD)
{
//{{AFX_DATA_INIT(CMyView)
m_pSet=NULL;
//}}AFX_DATA_INIT
//TODO:
addconstructioncodehere
}
CMyView:
:
~CMyView()
{
}
voidCMyView:
:
DoDataExchange(CDataExchange*pDX)
{
CRecordView:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMyView)
DDX_FieldText(pDX,IDC_EDIT_bm,m_pSet->m_bm,m_pSet);
DDX_FieldText(pDX,IDC_EDIT_cx,m_pSet->m_cx,m_pSet);
DDX_FieldText(pDX,IDC_EDIT_gzbz,m_pSet->m_gzbz,m_pSet);
DDX_FieldText(pDX,IDC_EDIT_hf,m_pSet->m_hf,m_pSet);
DDX_FieldText(pDX,IDC_EDIT_jbgz,m_pSet->m_jbgz,m_pSet);
DDX_FieldText(pDX,IDC_EDIT_jj,m_pSet->m_jj,m_pSet);
DDX_FieldText(pDX,IDC_EDIT_jt,m_pSet->m_jt,m_pSet);
DDX_FieldText(pDX,IDC_EDIT_sdf,m_pSet->m_sdf,m_pSet);
DDX_FieldText(pDX,IDC_EDIT_nf,m_pSet->m_nf,m_pSet);
DDX_FieldText(pDX,IDC_EDIT_yf,m_pSet->m_yf,m_pSet);
DDX_FieldText(pDX,IDC_EDIT_yj,m_pSet->m_yj,m_pSet);
DDX_FieldText(pDX,IDC_EDIT_zgbh,m_pSet->m_zgbh,m_pSet);
DDX_FieldText(pDX,IDC_EDIT_zgxm,m_pSet->m_zgxm,m_pSet);
DDX_FieldText(pDX,IDC_EDIT_zw,m_pSet->m_zw,m_pSet);
DDX_FieldText(pDX,IDC_EDIT1_bx,m_pSet->m_bx,m_pSet);
DDX_FieldText(pDX,IDC_EDIT_sdgz,m_pSet->m_sdgz,m_pSet);
DDX_FieldText(pDX,IDC_EDIT_ydgz,m_pSet->m_ydgz,m_pSet);
DDX_FieldText(pDX,IDC_EDIT_ykgz,m_pSet->m_ykgz,m_pSet);
DDX_FieldText(pDX,IDC_EDIT1_fz,m_pSet->m_fz,m_pSet);
//}}AFX_DATA_MAP
}
BOOLCMyView:
:
PreCreateWindow(CREATESTRUCT&cs)
{
//TODO:
ModifytheWindowclassorstylesherebymodifying
//theCREATESTRUCTcs
returnCRecordView:
:
PreCreateWindow(cs);
}
voidCMyView:
:
OnInitialUpdate()
{
m_pSet=&GetDocument()->m_mySet;
CRecordView:
:
OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
}
/////////////////////////////////////////////////////////////////////////////
//CMyViewprinting
BOOLCMyView:
:
OnPreparePrinting(CPrintInfo*pInfo)
{//defaultpreparation
returnDoPreparePrinting(pInfo);
}
voidCMyView:
:
OnBeginPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)
{
//TODO:
addextrainitializationbeforeprinting
}
voidCMyView:
:
OnEndPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)
{
//TODO:
addcleanupafterprinting
}
/////////////////////////////////////////////////////////////////////////////
//CMyViewdiagnostics
#ifdef_DEBUG
voidCMyView:
:
AssertValid()const
{
CRecordView:
:
AssertValid();
}
voidCMyView:
:
Dump(CDumpContext&dc)const
{
CRecordView:
:
Dump(dc);
}
CMyDoc*CMyView:
:
GetDocument()//non-debugversionisinline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyDoc)));
return(CMyDoc*)m_pDocument;
}
#endif//_DEBUG
/////////////////////////////////////////////////////////////////////////////
//CMyViewdatabasesupport
CRecordset*CMyView:
:
OnGetRecordset()
{returnm_pSet;
}
/////////////////////////////////////////////////////////////////////////////
//CMyViewmessagehandlers
voidCMyView:
:
OnBUTTONfirst()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_pSet->MoveFirst();
if(m_pSet->IsBOF())
{
MessageBox("记录已经在第一条¡");
m_pSet->MoveNext();
UpdateData(FALSE);
return;
}
UpdateData(FALSE);
}
voidCMyView:
:
OnBUTTONprev()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_pSet->MovePrev();
if(m_pSet->IsBOF())
{
MessageBox("记录已经在第一条¡");
m_pSet->MoveNext();
UpdateData(FALSE);
return;
}
UpdateData(FALSE);
}
voidCMyView:
:
OnBUTTONnext()
{
//TODO