1、目 录1 前言32 需求分析43 概要设计43.1系统功能模块设计43.2 流程图44 详细设计54.1.数据库需求分析54.2模块分析 .64.3整体界面的实现64.4 查询成绩的实现114.5 添加.删除和修改记录的实现135 测试分析176 心得体会17参考文献18致 谢19公司人员信息管理系统摘 要本次课程设计任务是通过编写一个公司人员信息管理系统,学习用Visual C+ 6.0开发简单的管理系统。采用Visual C+ 6.0软件为主要开发工具。本系统主要完成对公司员工情况和公司信息的管理,包括人员信息的添加、修改、删除等。系统还可以完成对各类信息的浏览、增加、排序、查询等功能。由
2、于我们还没有学习数据库,所以在编写这个程序的过程中备受煎熬,显得心有余而力不足。 系统的核心是引用数据库来存储和修改公司人员的信息联系,每一个动作都可能影响到其它的功能,还有数据的改变,当完成对数据的操作时系统会自动地完成数据库的修改。关键字:VC+6.0;公司人员信息管理系统;模块化设计;数据库;1 前言使用计算机管理人员信息,不但可以大量节省时间、人力、财力、物力,而且能更全面有效地掌握公司的基本情况,及时获取最新而又准确的资料和信息。此课程设计就是这样一个管理公司人员信息的系统,其功能与实现方面有比较好的的针对性和实用性。软件是在Visual c+平台上开发的,利用数据库存储数据和信息。
3、利用数据库操作,能比较方便地实现对人员信息的操作与管理。2 需求分析Visual C+6.0的MFC提供了大量的类库函数强大支持。开发一个人员信息管理系统,可以实现人员信息的管理。并提供新信息输入,对现有记录的删除修改等工作。公司人员管理系统是典型的信息管理系统(MIS),其开发主要包括后台数据信息的建立和保存以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的库。而对于后者则要求应用程序功能完备,易使用等特点。3 概要设计3.1系统功能模块设计公司人事管理系统信息输入增加记录信息删除信息排序数据库提供数据源信息输出密码进入 图3-1 系统功能模块流程图1、信
4、息输入:输入公司职员的基本信息。2、信息输出:输出公司职员的基本信息。3、密码进入:用户用密码才能进入本系统。4、增加记录:增加人员基本信息。5、信息删除:删除指定人员的信息。6、信息排序:对已有信息进行排序。3.2 程序运行平台开发工具: Visual C+,Access 2007.运行环境:Windows 9x、Windows NT/2000、Windows XP4 详细设计4.1.数据的存储 根据上面所介绍的本系统的各个模块及其需要实现的功能,我们用数据库来存储信息:1公司人员数据库信息表 用于保存公司职员的基本信息。4.2模块分析1. 输入密码,进入系统系统开始运行就出现输入密码对话框
5、,密码正确后才能进入主界面(默认密码为yangjianwen)。2. 显示模块显示模块将输出所有职员的主要资料 。3. 修改模块首先由用户输入要修改的职员的姓名,然后系统用修改函数查找,显示该名职员的资料,然后系统提示用户输入需要修改的项目和新的资料。4. 排序模块对输入的职员数据进行排序,是更为有序信息管理。5. 删除模块首先由用户输入要删除的单个职员姓名,然后调用删除函数,删除该名职员的资料。6. 信息增加可以随时增加职员信息,实行数据库的扩充。4.3整体界面的实现 图 4-1 系统主界面程序的具体实现部分如程序清单如下所示: / 杨健文View.cpp : implementation
6、of the CMyView class/#include stdafx.h#include 杨健文.h#include Global.h#include 杨健文Set.h#include 杨健文Doc.h#include 杨健文View.h#include IDD_DIALOG1.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CMyViewIMPLEMENT_DYNCREATE(CMyView, CRecordView)BEGIN_MESSAGE_MAP(CM
7、yView, CRecordView)/AFX_MSG_MAP(CMyView)ON_BN_CLICKED(IDC_BUTTON1, Ontianjia)ON_BN_CLICKED(IDC_BUTTON2, Onshanchu)ON_BN_CLICKED(IDC_BUTTON3, Onshaixuan)ON_BN_CLICKED(IDC_BUTTON4, Onpaixu)/AFX_MSG_MAP/ Standard printing commandsON_COMMAND(ID_FILE_PRINT, CRecordView:OnFilePrint)ON_COMMAND(ID_FILE_PRIN
8、T_DIRECT, CRecordView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CRecordView:OnFilePrintPreview)END_MESSAGE_MAP() void CMyView:DoDataExchange(CDataExchange* pDX)CRecordView:DoDataExchange(pDX);/AFX_DATA_MAP(CMyView)DDX_FieldText(pDX, IDC_EDIT1, m_pSet-m_column1, m_pSet);DDX_FieldText(pDX, IDC_EDI
9、T2, m_pSet-m_column2, m_pSet);DDX_FieldText(pDX, IDC_EDIT3, m_pSet-m_column3, m_pSet);DDX_FieldText(pDX, IDC_EDIT4, m_pSet-m_column4, m_pSet);DDX_FieldText(pDX, IDC_EDIT5, m_pSet-m_column5, m_pSet);DDX_FieldText(pDX, IDC_EDIT6, m_pSet-m_column6, m_pSet);DDX_FieldText(pDX, IDC_EDIT7, m_pSet-m_column7
10、, m_pSet);DDX_FieldText(pDX, IDC_EDIT8, m_pSet-m_column8, m_pSet);DDX_FieldText(pDX, IDC_EDIT9, m_pSet-m_column9, m_pSet);/AFX_DATA_MAPBOOL CMyView:PreCreateWindow(CREATESTRUCT& cs)/ TODO: Modify the Window class or styles here by modifying/ the CREATESTRUCT csreturn CRecordView:PreCreateWindow(cs);
11、void CMyView:OnInitialUpdate()m_pSet = &GetDocument()-m_mySet;CRecordView:OnInitialUpdate();GetParentFrame()-RecalcLayout();ResizeParentToFit();/ CMyView printingBOOL CMyView:OnPreparePrinting(CPrintInfo* pInfo)/ default preparationreturn DoPreparePrinting(pInfo);void CMyView:OnBeginPrinting(CDC* /*
12、pDC*/, CPrintInfo* /*pInfo*/)/ TODO: add extra initialization before printingvoid CMyView:OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: add cleanup after printing/ CMyView diagnostics#ifdef _DEBUGvoid CMyView:AssertValid() constCRecordView:AssertValid();void CMyView:Dump(CDumpContext& dc
13、) constCRecordView:Dump(dc);CMyDoc* CMyView:GetDocument() / non-debug version is inlineASSERT(m_pDocument-IsKindOf(RUNTIME_CLASS(CMyDoc);return (CMyDoc*)m_pDocument;#endif /_DEBUG/ CMyView database supportCRecordset* CMyView:OnGetRecordset()return m_pSet;/ CMyView message handlers4.4 输入密码进入系统模块的实现图
14、4-2 输入密码进入系统的实现源代码如下:/ CMyView construction/destructionCMyView:CMyView(): CRecordView(CMyView:IDD)/AFX_DATA_INIT(CMyView)m_pSet = NULL;/AFX_DATA_INIT/ TODO: add construction code here CIDD_DIALOG1 ed; CString a;if(ed.DoModal()=IDCANCEL)a=您确定要退出此系统吗?; if(MB_QUERY(a)=IDYES)exit(0);int i=0;while(ed.m_s
15、trmima!=yangjianwen) i+;MB_ERROR(密码错误! 请重新输入!);if(ed.DoModal()=IDCANCEL|i=3) if(i=3)MB_ERROR(对不起,您的输入的错误次数超过3次!系统将自动退出!); exit(0); MB_INFO(欢迎进入公司人事管理系统!);CMyView:CMyView()4.5删除、排序和添加功能的实现 删除功能的实现情况 图 4-3-1 删除功能的实现 图 4-3-2 删除功能的实现删除功能的源代码:void CMyView:Onshanchu() / TODO: Add your control notification
16、 handler code herem_pSet-Delete(); m_pSet-MoveNext(); if(m_pSet-IsEOF() m_pSet-MoveLast(); if(m_pSet-IsBOF() m_pSet-SetFieldNull(NULL); UpdateData(FALSE); 排序功能的实现情况 图 4-4 排序功能的实现排序功能的源代码:void CMyView:Onpaixu() / TODO: Add your control notification handler code herem_pSet-m_strSort=职工编号; m_pSet-Reque
17、ry(); UpdateData(FALSE); 添加功能的实现情况 图 4-5 添加功能的实现增添功能的源代码:void CMyView:Ontianjia() / TODO: Add your control notification handler code herem_pSet-AddNew(); UpdateData(FALSE);4.6(特色)数据库的实现图 4-6 -1 建立数据库图 4-6-2 建立数据表图 4-6-3 建立数据表(续)5 测试分析经过测试,该系统能够较好地完成需求分析中的任务,如数据的添加、修改、删除、排序、查找。其中,修改可通过先进行查询后再修改,还利用数据
18、库的索引功能避免用户重复注册,并且利用数据库,对数据进行有条理的管理,可拓展性强。但仍然存在很多问题,如不太美观,没有利用图片对对话框进行美化等,功能的实现也不算完善,代码的处理太过精简,有待进一步改善。6 心得体会参考文献1、伍俊良 Visual C+课程设计与系统开发案例 清华大学出版社 2004致 谢一个学期的VC+课程学习,让我对VC有了一定程度上的认识。了解了VC的发展历史,熟悉了VC语言的基础知识,明白了VC的基本语法规则,可以运用VC来完成简单程序的编写和调试。 在此,我由衷感谢我的老师,您是我见过的老师中最有耐心的一个,无论您在忙什么,无论您有多忙,只要我们开口问您,您总是态度
19、温和的为我们解答。为人师者,当以您为榜样!您的慈爱和耐心是我坚持的动力。附录:相关源代码/ 杨健文View.cpp : implementation of the CMyView class/#include stdafx.h#include 杨健文.h#include Global.h#include 杨健文Set.h#include 杨健文Doc.h#include 杨健文View.h#include IDD_DIALOG1.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#
20、endif/ CMyViewIMPLEMENT_DYNCREATE(CMyView, CRecordView)BEGIN_MESSAGE_MAP(CMyView, CRecordView)/AFX_MSG_MAP(CMyView)ON_BN_CLICKED(IDC_BUTTON1, Ontianjia)ON_BN_CLICKED(IDC_BUTTON2, Onshanchu)ON_BN_CLICKED(IDC_BUTTON3, Onshaixuan)ON_BN_CLICKED(IDC_BUTTON4, Onpaixu)/AFX_MSG_MAP/ Standard printing comman
21、dsON_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/destructionCMyView:CMyView(): CRecordView(CMyView:IDD)/AFX_DATA_INIT(CMyView)m_pSet =
22、NULL;/AFX_DATA_INIT/ TODO: add construction code here CIDD_DIALOG1 ed; CString a;if(ed.DoModal()=IDCANCEL)a=您确定要退出此系统吗?; if(MB_QUERY(a)=IDYES)exit(0);int i=0;while(ed.m_strmima!=yangjianwen) i+;MB_ERROR(密码错误! 请重新输入!);if(ed.DoModal()=IDCANCEL|i=3) if(i=3)MB_ERROR(对不起,您的输入的错误次数超过3次!系统将自动退出!); exit(0);
23、 MB_INFO(欢迎进入公司人事管理系统!);CMyView:CMyView()void CMyView:DoDataExchange(CDataExchange* pDX)CRecordView:DoDataExchange(pDX);/AFX_DATA_MAP(CMyView)DDX_FieldText(pDX, IDC_EDIT1, m_pSet-m_column1, m_pSet);DDX_FieldText(pDX, IDC_EDIT2, m_pSet-m_column2, m_pSet);DDX_FieldText(pDX, IDC_EDIT3, m_pSet-m_column3
24、, m_pSet);DDX_FieldText(pDX, IDC_EDIT4, m_pSet-m_column4, m_pSet);DDX_FieldText(pDX, IDC_EDIT5, m_pSet-m_column5, m_pSet);DDX_FieldText(pDX, IDC_EDIT6, m_pSet-m_column6, m_pSet);DDX_FieldText(pDX, IDC_EDIT7, m_pSet-m_column7, m_pSet);DDX_FieldText(pDX, IDC_EDIT8, m_pSet-m_column8, m_pSet);DDX_FieldT
25、ext(pDX, IDC_EDIT9, m_pSet-m_column9, m_pSet);/AFX_DATA_MAPBOOL CMyView:PreCreateWindow(CREATESTRUCT& cs)/ TODO: Modify the Window class or styles here by modifying/ the CREATESTRUCT csreturn CRecordView:PreCreateWindow(cs);void CMyView:OnInitialUpdate()m_pSet = &GetDocument()-m_mySet;CRecordView:On
26、InitialUpdate();GetParentFrame()-RecalcLayout();ResizeParentToFit();/ CMyView printingBOOL CMyView:OnPreparePrinting(CPrintInfo* pInfo)/ default preparationreturn DoPreparePrinting(pInfo);void CMyView:OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: add extra initialization before printin
27、gvoid CMyView:OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: add cleanup after printing/ CMyView diagnostics#ifdef _DEBUGvoid CMyView:AssertValid() constCRecordView:AssertValid();void CMyView:Dump(CDumpContext& dc) constCRecordView:Dump(dc);CMyDoc* CMyView:GetDocument() / non-debug versio
28、n is inlineASSERT(m_pDocument-IsKindOf(RUNTIME_CLASS(CMyDoc);return (CMyDoc*)m_pDocument;#endif /_DEBUG/ CMyView database supportCRecordset* CMyView:OnGetRecordset()return m_pSet;/ CMyView message handlersvoid CMyView:Ontianjia() / TODO: Add your control notification handler code herem_pSet-AddNew()
29、; UpdateData(FALSE);void CMyView:Onshanchu() / TODO: Add your control notification handler code herem_pSet-Delete(); m_pSet-MoveNext(); if(m_pSet-IsEOF() m_pSet-MoveLast(); if(m_pSet-IsBOF() m_pSet-SetFieldNull(NULL); UpdateData(FALSE);void CMyView:Onshaixuan() / TODO: Add your control notification
30、handler code hereCIDD_DIALOG2 IDD_DIALOG2; IDD_DIALOG2.DoModal(); CString value; if( IDD_DIALOG2. DoModal()=IDOK) value=职工编号=+IDD_DIALOG2.m_query+ ; m_pSet-m_strFilter=value; m_pSet-Requery(); UpdateData(FALSE);void CMyView:Onpaixu() / TODO: Add your control notification handler code herem_pSet-m_strSort=职工编号; m_pSet-Requery(); UpdateData(FALSE);忽略此处. 25