人员管理系统.docx
《人员管理系统.docx》由会员分享,可在线阅读,更多相关《人员管理系统.docx(56页珍藏版)》请在冰豆网上搜索。
人员管理系统
人员管理系统
1.系统设计的目的和意义
采纳面向对象设计思想,治理2类人员。
教师信息(姓名,编号,年龄,职称,学历,籍贯,工作日期),学生信息(姓名,年龄,学号,籍贯,入学日期)。
完整输入/输出设计,写入ACCESS文件,分别建立两个表信息,一个储备教师信息,一个储备学生信息。
采纳工程文件方式组织程序。
能进行增、删、查、改等操作。
初始完成密码认证框的编写。
外观设计风格各异
2.系统总框架图
3.软件功能描述
治理2类人员:
教师信息(姓名,编号,年龄,职称,学历,籍贯,工作日期),学生信息(姓名,年龄,学号,籍贯,入学日期)。
完整输入/输出设计,写入ACCESS文件。
能进行增、删、查、改等操作。
采纳友好的用户界面。
治理用户:
添加、删除、修改密码等操作。
4.软件代码的设计
4.1数据结构描述与定义
①ACCESS表
表password:
Puser
文本
Ppassword
文本
Pisadmin
是/否
表student:
Sname
文本
Sno
文本
Sage
文本
Snative
文本
Setime
文本
表teacher:
Tname
文本
Tno
文本
Tage
文本
Ttitle
文本
Tdegree
文本
Tnative
文本
Twtime
文本
②MFC类
classCUserSet:
publicCRecordset//用户数据定义
{
CStringm_Puser;
CStringm_Ppassword;
BOOLm_Pisadmin;
}
classCStudentSet:
publicCRecordset//学生数据定义
{
CStringm_Sname;
CStringm_Sno;
CStringm_Sage;
CStringm_Snative;
CStringm_Setime;
}
classCTeacherSet:
publicCRecordset//教师数据定义
{
CStringm_Tname;
CStringm_Tno;
CStringm_Tage;
CStringm_Ttitle;
CStringm_Tdegree;
CStringm_Tnative;
CStringm_Twtime;
}
4.2模块设计
系统共分成七个模块,分别是:
用户登录模块,用户治理模块,学生信息查询模块,学生信息编辑模块,教师信息查询模块,教师信息编辑模块,关心模块。
①用户登录模块
②用户治理模块
③查询模块(学生信息查询,教师信息查询)
④编辑模块(学生信息编辑,教师信息编辑)
5.软件使用说明
登录系统时可依照ACCESS表password查看用户名和密码。
无需建立ODBC。
登录成功后显示主菜单,有系统治理,学生信息治理,教师信息治理和关心。
在系统治理中,你能够进行用户治理,注销/重新登录和退出系统。
在学生信息治理中,你能够进行学生信息查询和添加/修改信息。
教师信息治理中,你能够进行教师信息查询和添加/修改信息。
在关心中,你能够查看软件的相关内容。
专门提醒:
假如你的登录是非治理员,那么你将没有用户治理,添加/修改信息等操作。
在用户治理中,你能够修改密码,新增用户,删除用户。
在信息查询中,你能够通过编号查询或姓名查询。
能够同时输入或不输,若不输则显示全部信息。
在添加/修改信息中,你能够对信息进行添加,修改,删除等操作。
6.测试结果与分析
运行程序,显示登录界面。
(治理员建议使用:
用户名“weiheng”,密码“1234”。
非治理员建议使用:
用户名“ww”,密码“1234”。
)
成功登录后显示主界面。
然后依照菜单内容依次运行。
返回登录界面。
这是用户信息界面。
以治理员身份进入该界面。
图为创建一个用户“bbb”的操作。
这是学生信息查询界面。
若不输入查询项查询,则显示所有数据。
图为依照学生学号查询。
显示,添加,修改,删除一体化。
依照所需要的操作进行操作。
图为教师信息查询。
操作方法如同学生信息查询
图为教师信息编辑。
操作方法如同学生信息编辑
图为关心界面。
7.比较有特色的函数
①显示全部信息函数,以下是显示全部教师信息函数。
voidCTeachereDlg:
:
OnTeonall()
{
m_ctlList.DeleteAllItems();
m_ctlList.SetRedraw(FALSE);
UpdateData(TRUE);
CStringstrSQL;
strSQL.Format("select*fromteacher");
if(!
m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL))
{
MessageBox("打开数据库失败!
","数据库错误",MB_ICONSTOP);
return;
}
inti=0;
while(!
m_recordset.IsEOF())
{
m_ctlList.InsertItem(i,m_recordset.m_Tno);
m_ctlList.SetItemText(i,1,m_recordset.m_Tname);
m_ctlList.SetItemText(i,2,m_recordset.m_Tage);
m_ctlList.SetItemText(i,3,m_recordset.m_Ttitle);
m_ctlList.SetItemText(i,4,m_recordset.m_Tdegree);
m_ctlList.SetItemText(i,5,m_recordset.m_Tnative);
m_ctlList.SetItemText(i,6,m_recordset.m_Twtime);
i++;
m_recordset.MoveNext();
}
m_recordset.Close();
m_ctlList.SetRedraw(TRUE);
}
②查询函数,以下是学生信息查询函数
voidCStudentDlg:
:
OnSsearch()
{
UpdateData(TRUE);
m_ctlList.DeleteAllItems();
m_ctlList.SetRedraw(FALSE);
CStringstr="select*fromstudent";
UpdateData(true);
if(!
m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,_T(str)))
{
MessageBox("打开数据库失败!
","数据库错误",MB_ICONSTOP);
return;
}
inti=0;
while(!
m_recordset.IsEOF())
{if((m_recordset.m_Sno==m_valSno||m_valSno=="")&&
(m_recordset.m_Sname==m_valSname||m_valSname==""))
{
m_ctlList.InsertItem(i,m_recordset.m_Sno);
m_ctlList.SetItemText(i,1,m_recordset.m_Sname);
m_ctlList.SetItemText(i,2,m_recordset.m_Sage);
m_ctlList.SetItemText(i,3,m_recordset.m_Snative);
m_ctlList.SetItemText(i,4,m_recordset.m_Setime);
i++;
}
m_recordset.MoveNext();
}
m_recordset.Close();
m_ctlList.SetRedraw(TRUE);
}
8.存在的不足与计策
一开始做的程序,界面简单,显示信息单调,分不清一般用户和治理员的区别。
改进后,加入了图片和皮肤系统提供了友好的界面,采纳列表控件进行对多组数据的显示,同时添加依照是否是治理员进行操作判定。
9.课程设计总结
在这次课程设计中,我学到了专门多。
拿到课题是觉得依旧专门简单的,即便加入身份验证功能。
无非确实是三张ACCESS表,一张储存用户名和密码,一张储存学生信息,还有一张储存教师信息。
创建对话框也就三个,分别对应。
内容简单,功能也满足要求,然而缺乏创新。
因此在此基础上又加入了注册和修改密码。
反复改,反复改,不知不觉的一个工程做了好几遍。
当我把所有我能想到的东西都加到里面去后,依旧觉得少了点什么。
这一直觉来自于看了一个人做的图书治理系统,在界面上比我优化,在功能上比我先进,尽管他做的不是和我一个系统。
看到比自己好的,不自觉地开始改进。
第一是创建ODBC,从需要自己创建ODBC开始到程序生成ODBC,感受专门复杂,事实上也就几行代码的问题。
其次是皮肤,没有皮肤觉得界面太难看。
尽管是下载的文件,然而添到里面去也是一个难事,还要添加一个SkinPlusPlus.h。
再有确实是采纳列表控件,只要会了方法,输出信息专门方便。
原先我程序思想是在学生信息中分为查询、添加、修改、删除等模块,现在进行统一,查询依旧查询系统,添加、修改和删除融合成一个编辑系统。
教师也是一样。
在关于用户,也不局限于一旦创建只能修改密码,现在还能够注销账号。
最后是各个功能的衔接,用菜单来调用。
同时依照是否是治理员进行判定某些操作是否可用。
这次课程设计同时也使我对MFC有了更深刻的认识。
再也不是局限于那几个控件和某些类的派生。
对不同文件之间的联系,.h和.cpp之间的联系有了更深层次的明白得。
往常因为知识的匮乏,总是纳闷各个文件之间是如何样作用的,现在尽管不是十分的了解,但差不多能感受到其中的奥妙所在,让我感受到C++的无穷魅力。
附录:
源程序清单(核心部分)
文件:
wh.cpp
#include"stdafx.h"
#include"wh.h"
#include"MainFrm.h"
#include"whDoc.h"
#include"whView.h"
#include"LoginDlg.h"
#include"SkinPlusPlus.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
BEGIN_MESSAGE_MAP(CWhApp,CWinApp)
ON_COMMAND(ID_APP_ABOUT,OnAppAbout)
ON_COMMAND(ID_FILE_NEW,CWinApp:
:
OnFileNew)
ON_COMMAND(ID_FILE_OPEN,CWinApp:
:
OnFileOpen)
END_MESSAGE_MAP()
CWhApp:
:
CWhApp()
{}
CWhApptheApp;
BOOLCWhApp:
:
InitInstance()
{AfxEnableControlContainer();
SQLConfigDataSource(NULL,ODBC_ADD_DSN,//通过程序创建ODBC
"MicrosoftAccessDriver(*.mdb)",
"DSN=WhODBC\0"
"Description=Hotel\0"
"FileType=Access\0"
"DBQ=.\\Wh.mdb\0);
#ifdef_AFXDLL
Enable3dControls();
#else
Enable3dControlsStatic();
#endif
SetRegistryKey(_T("LocalAppWizard-GeneratedApplications"));
LoadStdProfileSettings(0);
InitializeSkin(_T("XPCorona.ssk"));//加载皮肤
CLoginDlgloginDlg;//先显示登录界面
if(loginDlg.DoModal()!
=IDOK)
returnFALSE;
CSingleDocTemplate*pDocTemplate;
pDocTemplate=newCSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CWhDoc),
RUNTIME_CLASS(CMainFrame),
RUNTIME_CLASS(CWhView));
AddDocTemplate(pDocTemplate);
CCommandLineInfocmdInfo;
ParseCommandLine(cmdInfo);
if(!
ProcessShellCommand(cmdInfo))
returnFALSE;
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
m_pMainWnd->SetWindowText("人员治理系统");//显示主菜单标题
returnTRUE;}
classCAboutDlg:
publicCDialog
{public:
CAboutDlg();
enum{IDD=IDD_ABOUTBOX};
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);
protected:
DECLARE_MESSAGE_MAP()};
CAboutDlg:
:
CAboutDlg():
CDialog(CAboutDlg:
:
IDD)
{}
voidCAboutDlg:
:
DoDataExchange(CDataExchange*pDX)
{CDialog:
:
DoDataExchange(pDX);}
BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)
END_MESSAGE_MAP()
voidCWhApp:
:
OnAppAbout()
{CAboutDlgaboutDlg;
aboutDlg.DoModal();}
文件:
UserSet.cpp
#include"stdafx.h"
#include"wh.h"
#include"UserSet.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
IMPLEMENT_DYNAMIC(CUserSet,CRecordset)
CUserSet:
:
CUserSet(CDatabase*pdb):
CRecordset(pdb)
{m_Puser=_T("");
m_Ppassword=_T("");
m_Pisadmin=FALSE;
m_nFields=3;
m_nDefaultType=snapshot;}
CStringCUserSet:
:
GetDefaultConnect()
{return_T("ODBC;DSN=WhODBC");}
CStringCUserSet:
:
GetDefaultSQL()
{return_T("[password]");}
voidCUserSet:
:
DoFieldExchange(CFieldExchange*pFX)
{pFX->SetFieldType(CFieldExchange:
:
outputColumn);
RFX_Text(pFX,_T("[Puser]"),m_Puser);
RFX_Text(pFX,_T("[Ppassword]"),m_Ppassword);
RFX_Bool(pFX,_T("[Pisadmin]"),m_Pisadmin);}
#ifdef_DEBUG
voidCUserSet:
:
AssertValid()const
{CRecordset:
:
AssertValid();}
voidCUserSet:
:
Dump(CDumpContext&dc)const
{CRecordset:
:
Dump(dc);}
#endif
文件:
StudentSet.cpp
#include"stdafx.h"
#include"wh.h"
#include"StudentSet.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
IMPLEMENT_DYNAMIC(CStudentSet,CRecordset)
CStudentSet:
:
CStudentSet(CDatabase*pdb):
CRecordset(pdb)
{m_Sname=_T("");
m_Sno=_T("");
m_Sage=_T("");
m_Snative=_T("");
m_Setime=_T("");
m_nFields=5;
m_nDefaultType=snapshot;}
CStringCStudentSet:
:
GetDefaultConnect()
{return_T("ODBC;DSN=WhODBC");}
CStringCStudentSet:
:
GetDefaultSQL()
{return_T("[student]");}
voidCStudentSet:
:
DoFieldExchange(CFieldExchange*pFX)
{pFX->SetFieldType(CFieldExchange:
:
outputColumn);
RFX_Text(pFX,_T("[Sname]"),m_Sname);
RFX_Text(pFX,_T("[Sno]"),m_Sno);
RFX_Text(pFX,_T("[Sage]"),m_Sage);
RFX_Text(pFX,_T("[Snative]"),m_Snative);
RFX_Text(pFX,_T("[Setime]"),m_Setime);}
#ifdef_DEBUG
voidCStudentSet:
:
AssertValid()const
{CRecordset:
:
AssertValid();}
voidCStudentSet:
:
Dump(CDumpContext&dc)const
{CRecordset:
:
Dump(dc);}
#endif
文件:
TeacherSet.cpp
#include"stdafx.h"
#include"wh.h"
#include"TeacherSet.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
IMPLEMENT_DYNAMIC(CTeacherSet,CRecordset)
CTeacherSet:
:
CTeacherSet(CDatabase*pdb):
CRecordset(pdb)
{m_Tname=_T("");
m_Tno=_T("");
m_Tage=_T("");
m_Ttitle=_T("");
m_Tdegree=_T("");
m_Tnative=_T("");
m_Twtime=_T("");
m_nFields=7;
m_nDefaultType=snapshot;}
CStringCTeacherSet:
:
GetDefaultConnect()
{return_T("ODBC;DSN=WhODBC");}
CStringCTeacherSet:
:
GetDefaultSQL()
{return_T("[teacher]");}
voidCTeacherSet:
:
DoFieldExchange(CFieldExchange*pFX)
{pFX->SetFieldType(CFieldExchange:
:
outputColumn);
RFX_Text(pFX,_T("[Tname]"),m_Tname);
RFX_Text(pFX,_T("[Tno]"),m_Tno);
RFX_Text(pFX,_T("[Tage]"),m_Tage);
RFX_Text(pFX,_T("[Ttitle]"),m_Ttitle);
RFX_Text(pFX,_T("[Tdegree]"),m_Tdegree);
RFX_Text(pFX,_T("[Tnative]"),m_Tnative);
RFX_Text(pFX,_T("[Tworktime]"),m_Twtime);}
#ifdef_DEBUG
voidCTeacherSet:
:
AssertValid()const
{CRecordset:
:
AssertValid();}
voidCTeacherSet:
:
Dump(CDumpContext&dc)const
{CRecordset:
:
Dump(dc);}
#endif
文件:
LoginDlg.cpp
#include"stdafx.h"
#include"wh.h"
#include"LoginDlg.h"
#include"UserSet.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
CLoginDlg:
:
CLoginDlg(CWnd*pParent):
CDialog(CLoginDlg:
:
IDD,pParent)
{m_valPass=_T("");
m_valUser=_T("");}
voidCLoginDlg:
:
DoDa