人员管理系统.docx

上传人:牧羊曲112 文档编号:1902532 上传时间:2022-12-25 格式:DOCX 页数:51 大小:743.71KB
返回 下载 相关 举报
人员管理系统.docx_第1页
第1页 / 共51页
人员管理系统.docx_第2页
第2页 / 共51页
人员管理系统.docx_第3页
第3页 / 共51页
人员管理系统.docx_第4页
第4页 / 共51页
人员管理系统.docx_第5页
第5页 / 共51页
点击查看更多>>
资源描述

《人员管理系统.docx》由会员分享,可在线阅读,更多相关《人员管理系统.docx(51页珍藏版)》请在三一办公上搜索。

1、目 录1系统设计的目的和意义22系统总框架图33软件功能描述34软件代码的设计341数据结构描述与定义342模块设计55软件使用说明76测试结果与分析77比较有特色的函数128存在的不足与对策149课程设计总结14附录:源程序清单(核心部分)151系统设计的目的和意义采用面向对象设计思想,管理2类人员。教师信息(姓名,编号,年龄,职称,学历,籍贯,工作日期),学生信息(姓名,年龄,学号,籍贯,入学日期)。完整输入/输出设计,写入ACCESS文件,分别建立两个表信息,一个存储教师信息,一个存储学生信息。采用工程文件方式组织程序。能进行增、 删、 查、改等操作。初始完成密码认证框的编写。外观设计风

2、格各异2系统总框架图3软件功能描述管理2类人员:教师信息(姓名,编号,年龄,职称,学历,籍贯,工作日期),学生信息(姓名,年龄,学号,籍贯,入学日期)。完整输入/输出设计,写入ACCESS文件。能进行增、删、 查、改等操作。采用友好的用户界面。管理用户:添加、删除、修改密码等操作。4软件代码的设计41数据结构描述与定义ACCESS表表password:Puser文本Ppassword文本Pisadmin是/否表student:Sname文本Sno文本Sage文本Snative文本Setime文本表teacher:Tname文本Tno文本Tage文本Ttitle文本Tdegree文本Tnativ

3、e文本Twtime文本MFC类class CUserSet : public CRecordset/用户数据定义CStringm_Puser;CStringm_Ppassword;BOOL m_Pisadmin;class CStudentSet : public CRecordset/学生数据定义CStringm_Sname;CStringm_Sno;CStringm_Sage;CStringm_Snative;CStringm_Setime;class CTeacherSet : public CRecordset/教师数据定义CStringm_Tname;CStringm_Tno;CSt

4、ringm_Tage;CStringm_Ttitle;CStringm_Tdegree;CStringm_Tnative;CStringm_Twtime;42模块设计系统共分成七个模块,分别是:用户登录模块,用户管理模块,学生信息查询模块,学生信息编辑模块,教师信息查询模块,教师信息编辑模块,帮助模块。用户登录模块用户管理模块查询模块(学生信息查询,教师信息查询)编辑模块(学生信息编辑,教师信息编辑)5软件使用说明登录系统时可根据ACCESS表password查看用户名和密码。无需建立ODBC。登录成功后显示主菜单,有系统管理,学生信息管理,教师信息管理和帮助。在系统管理中,你可以进行用户管理

5、,注销/重新登录和退出系统。在学生信息管理中,你可以进行学生信息查询和添加/修改信息。教师信息管理中,你可以进行教师信息查询和添加/修改信息。在帮助中,你可以查看软件的相关内容。特别提醒:如果你的登录是非管理员,那么你将没有用户管理,添加/修改信息等操作。在用户管理中,你可以修改密码,新增用户,删除用户。在信息查询中,你可以通过编号查询或姓名查询。可以同时输入或不输,若不输则显示全部信息。在添加/修改信息中,你可以对信息进行添加,修改,删除等操作。6测试结果与分析运行程序,显示登录界面。(管理员建议使用:用户名“weiheng”,密码“1234”。非管理员建议使用:用户名“ww”,密码“123

6、4”。)成功登录后显示主界面。然后根据菜单内容依次运行。返回登录界面。这是用户信息界面。以管理员身份进入该界面。图为创建一个用户“bbb”的操作。这是学生信息查询界面。若不输入查询项查询,则显示所有数据。图为根据学生学号查询。显示,添加,修改,删除一体化。根据所需要的操作进行操作。图为教师信息查询。操作方法如同学生信息查询图为教师信息编辑。操作方法如同学生信息编辑图为帮助界面。7比较有特色的函数 显示全部信息函数,以下是显示全部教师信息函数。void CTeachereDlg:OnTeonall() m_ctlList.DeleteAllItems();m_ctlList.SetRedraw(

7、FALSE);UpdateData(TRUE);CString strSQL;strSQL.Format( select * from teacher);if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)MessageBox(打开数据库失败!,数据库错误,MB_ICONSTOP);return ;int i=0;while(!m_recordset.IsEOF()m_ctlList.InsertItem(i,m_recordset.m_Tno);m_ctlList.SetItemText(i,1,m_recordset.m_Tname);m

8、_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.SetRe

9、draw(TRUE);查询函数,以下是学生信息查询函数void CStudentDlg:OnSsearch() UpdateData( TRUE );m_ctlList.DeleteAllItems();m_ctlList.SetRedraw(FALSE);CString str=select * from student;UpdateData( true );if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE, _T(str)MessageBox(打开数据库失败!,数据库错误,MB_ICONSTOP);return ;int i=0;while(!m_r

10、ecordset.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.Set

11、ItemText(i,4,m_recordset.m_Setime);i+;m_recordset.MoveNext();m_recordset.Close();m_ctlList.SetRedraw(TRUE);8存在的不足与对策 一开始做的程序,界面简单,显示信息单调,分不清普通用户和管理员的区别。改进后,加入了图片和皮肤系统提供了友好的界面,采用列表控件进行对多组数据的显示,同时添加根据是否是管理员进行操作判定。9课程设计总结在这次课程设计中,我学到了很多。拿到课题是觉得还是很简单的,即便加入身份验证功能。无非就是三张ACCESS表,一张储存用户名和密码,一张储存学生信息,还有一张储存教

12、师信息。创建对话框也就三个,分别对应。内容简单,功能也满足要求,但是缺乏创新。于是在此基础上又加入了注册和修改密码。反复改,反复改,不知不觉的一个工程做了好几遍。当我把所有我能想到的东西都加进去后,还是觉得少了点什么。这一直觉来自于看了一个人做的图书管理系统,在界面上比我优化,在功能上比我先进,虽然他做的不是和我一个系统。看到比自己好的,不自觉地开始改进。首先是创建ODBC,从需要自己创建ODBC开始到程序生成ODBC,感觉很复杂,其实也就几行代码的问题。其次是皮肤,没有皮肤觉得界面太难看。虽然是下载的文件,但是添进去也是一个难事,还要添加一个SkinPlusPlus.h。再有就是采用列表控件

13、,只要会了方法,输出信息非常方便。原来我程序思想是在学生信息中分为查询、添加、修改、删除等模块,现在进行统一,查询还是查询系统,添加、修改和删除融合成一个编辑系统。教师也是一样。在对于用户,也不局限于一旦创建只能修改密码,现在还可以注销账号。最后是各个功能的衔接,用菜单来调用。同时根据是否是管理员进行判定某些操作是否可用。这次课程设计同时也使我对MFC有了更深刻的认识。再也不是局限于那几个控件和某些类的派生。对不同文件之间的联系,.h和.cpp之间的联系有了更深层次的理解。以前因为知识的匮乏,总是纳闷各个文件之间是怎样作用的,现在虽然不是十分的了解,但已经能感受到其中的奥妙所在,让我感受到C+

14、的无穷魅力。附录:源程序清单(核心部分)文件: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#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endifBEGIN_MESSAGE_MAP(CWhApp, CWinApp)ON_COMMAND(ID_APP_ABOUT, On

15、AppAbout)ON_COMMAND(ID_FILE_NEW, CWinApp:OnFileNew)ON_COMMAND(ID_FILE_OPEN, CWinApp:OnFileOpen)END_MESSAGE_MAP()CWhApp:CWhApp()CWhApp theApp;BOOL CWhApp:InitInstance()AfxEnableControlContainer();SQLConfigDataSource(NULL,ODBC_ADD_DSN,/通过程序创建ODBCMicrosoft Access Driver (*.mdb),DSN=WhODBC0Description=H

16、otel0 FileType=Access0 DBQ=.Wh.mdb0 );#ifdef _AFXDLLEnable3dControls();#elseEnable3dControlsStatic();#endifSetRegistryKey(_T(Local AppWizard-Generated Applications);LoadStdProfileSettings(0); InitializeSkin(_T(XPCorona.ssk);/加载皮肤CLoginDlg loginDlg;/先显示登录界面if(loginDlg.DoModal()!=IDOK)return FALSE;CSi

17、ngleDocTemplate* pDocTemplate;pDocTemplate = new CSingleDocTemplate(IDR_MAINFRAME,RUNTIME_CLASS(CWhDoc),RUNTIME_CLASS(CMainFrame), RUNTIME_CLASS(CWhView);AddDocTemplate(pDocTemplate);CCommandLineInfo cmdInfo;ParseCommandLine(cmdInfo);if (!ProcessShellCommand(cmdInfo)return FALSE;m_pMainWnd-ShowWindo

18、w(SW_SHOW);m_pMainWnd-UpdateWindow();m_pMainWnd-SetWindowText(人员管理系统);/显示主菜单标题return TRUE;class CAboutDlg : public CDialogpublic:CAboutDlg();enum IDD = IDD_ABOUTBOX ;protected:virtual void DoDataExchange(CDataExchange* pDX); protected:DECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:I

19、DD)void CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)END_MESSAGE_MAP()void CWhApp:OnAppAbout()CAboutDlg aboutDlg;aboutDlg.DoModal();文件:UserSet.cpp#include stdafx.h#include wh.h#include UserSet.h#ifdef _DEBUG#define new DEBUG_NEW#undef T

20、HIS_FILEstatic char THIS_FILE = _FILE_;#endifIMPLEMENT_DYNAMIC(CUserSet, CRecordset)CUserSet:CUserSet(CDatabase* pdb): CRecordset(pdb)m_Puser = _T();m_Ppassword = _T();m_Pisadmin = FALSE;m_nFields = 3;m_nDefaultType = snapshot;CString CUserSet:GetDefaultConnect()return _T(ODBC;DSN=WhODBC);CString CU

21、serSet:GetDefaultSQL()return _T(password);void CUserSet: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 _DEBUGvoid CUserSet:AssertValid() const

22、CRecordset:AssertValid();void CUserSet:Dump(CDumpContext& dc) constCRecordset:Dump(dc);#endif文件:StudentSet.cpp#include stdafx.h#include wh.h#include StudentSet.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endifIMPLEMENT_DYNAMIC(CStudentSet, CRecordset)CStudentSe

23、t: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;CString CStudentSet:GetDefaultConnect()return _T(ODBC;DSN=WhODBC);CString CStudentSet:GetDefaultSQL()return _T(student);void CStudentSet:Do

24、FieldExchange(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 _DEBUGvoid CStudentSet:AssertValid() constC

25、Recordset:AssertValid();void CStudentSet:Dump(CDumpContext& dc) constCRecordset:Dump(dc);#endif 文件:TeacherSet.cpp#include stdafx.h#include wh.h#include TeacherSet.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endifIMPLEMENT_DYNAMIC(CTeacherSet, CRecordset)CTeache

26、rSet: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;CString CTeacherSet:GetDefaultConnect()return _T(ODBC;DSN=WhODBC);CString CTeacherSet:GetDefaultSQL()re

27、turn _T(teacher);void CTeacherSet: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,

28、_T(Tnative), m_Tnative);RFX_Text(pFX, _T(Tworktime), m_Twtime);#ifdef _DEBUGvoid CTeacherSet:AssertValid() constCRecordset:AssertValid();void CTeacherSet:Dump(CDumpContext& dc) constCRecordset:Dump(dc);#endif文件:LoginDlg.cpp#include stdafx.h#include wh.h#include LoginDlg.h#include UserSet.h#ifdef _DE

29、BUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endifCLoginDlg:CLoginDlg(CWnd* pParent): CDialog(CLoginDlg:IDD, pParent)m_valPass = _T();m_valUser = _T();void CLoginDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);DDX_Control(pDX, IDC_LUSER, m_ctlUser);DDX_Co

30、ntrol(pDX, IDC_LPASS, m_ctlPass);DDX_Text(pDX, IDC_LPASS, m_valPass);DDX_CBString(pDX, IDC_LUSER, m_valUser);BEGIN_MESSAGE_MAP(CLoginDlg, CDialog)ON_BN_CLICKED(IDC_LOK, OnLok)END_MESSAGE_MAP()void CLoginDlg:OnLok() CUserSet recordset;CString strSQL;UpdateData(TRUE);if(m_valUser.IsEmpty()MessageBox(请

31、输入用户名!, 您的访问出错了!, MB_ICONEXCLAMATION);m_ctlUser.SetFocus();return;if(m_valPass.IsEmpty()/检查密码是否输入MessageBox(请输入密码!, 您的访问出错了!, MB_ICONEXCLAMATION);m_ctlPass.SetFocus();return;CWhApp* ptheApp = (CWhApp *) AfxGetApp();strSQL.Format(select * from password where Puser=%s AND Ppassword=%s,m_valUser,m_valP

32、ass);if(!recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)MessageBox(打开数据库失败!,数据库错误, MB_ICONSTOP);return ;if(recordset.GetRecordCount()=0)recordset.Close();MessageBox(密码错误,请重新输入!, Are you tricking me?, MB_ICONSTOP );m_valPass=;m_ctlPass.SetFocus();UpdateData(FALSE);elseptheApp-m_bIsAdmin = recordset.m_

33、Pisadmin;recordset.Close();CDialog:OnOK();BOOL CLoginDlg:OnInitDialog() CDialog:OnInitDialog();CUserSet recordset ;CString strSQL;UpdateData(TRUE);strSQL=select * from password;if(!recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)MessageBox(打开数据库失败!,数据库错误,MB_OK);return FALSE;while(!recordset.IsEOF()m_c

34、tlUser.AddString(recordset.m_Puser);recordset.MoveNext();recordset.Close();return TRUE; void CLoginDlg:OnCancel() CDialog:OnCancel();文件:UserDlg.cpp#include stdafx.h#include wh.h#include UserDlg.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endifCUserDlg:CUserDlg(

35、CWnd* pParent /*=NULL*/): CDialog(CUserDlg:IDD, pParent)m_bIsAdmin = FALSE;m_valPass = _T();m_valRePass = _T();m_valUser = _T();void CUserDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);DDX_Control(pDX, IDC_UUSER, m_ctlUser);DDX_Control(pDX, IDC_UPASS, m_ctlPass);DDX_Control(pDX, I

36、DC_ULIST, m_ctlList);DDX_Check(pDX, IDC_UCHECK, m_bIsAdmin);DDX_Text(pDX, IDC_UPASS, m_valPass);DDX_Text(pDX, IDC_UREPASS, m_valRePass);DDX_Text(pDX, IDC_UUSER, m_valUser);BEGIN_MESSAGE_MAP(CUserDlg, CDialog)ON_BN_CLICKED(IDC_UADDNEW, OnUaddnew)ON_BN_CLICKED(IDC_UDELETE, OnUdelete)ON_BN_CLICKED(IDC_

37、UOK, OnUok)ON_BN_CLICKED(IDC_UCANCEL, OnUcancel)ON_NOTIFY(NM_CLICK, IDC_ULIST, OnClickUlist)END_MESSAGE_MAP()BOOL CUserDlg:OnInitDialog() CDialog:OnInitDialog();/创建用户列表m_ctlList.InsertColumn(0,用户名);m_ctlList.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);m_ctlList.SetColumnWidth(0,155);Refr

38、eshData();/在添加用户列表中添加用户名return TRUE; void CUserDlg:RefreshData() m_ctlList.SetFocus();m_ctlList.DeleteAllItems();/清空用户列表m_ctlList.SetRedraw(FALSE);CString strSQL;UpdateData(TRUE);strSQL=select * from password;/打开记录集if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)MessageBox(打开数据库失败!,数据库错误,MB_ICON

39、STOP);return ;int i=0;while(!m_recordset.IsEOF()/添加用户名到用户列表中m_ctlList.InsertItem(i+,m_recordset.m_Puser);m_recordset.MoveNext();m_recordset.Close();m_ctlList.SetRedraw(TRUE);void CUserDlg:OnUaddnew() m_valUser = ;/清空用户资料m_valPass = ;m_valRePass = ;m_bIsAdmin = FALSE;m_ctlUser.EnableWindow(TRUE);/设置用

40、户名编辑框为可用m_ctlUser.SetFocus();UpdateData(FALSE);/更新数据到界面void CUserDlg:OnUdelete() UpdateData(TRUE);if(m_valUser=)/判断是否指定用户MessageBox(请选择一个用户!);return;CString strSQL;strSQL.Format(select * from password where Puser=%s,m_valUser);if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)MessageBox(打开数据库失败!,数

41、据库错误,MB_ICONSTOP);return ;m_recordset.Delete();/删除该用户m_recordset.Close();RefreshData();/刷新用户列表m_valUser = ;m_valPass = ;m_valRePass = ;m_bIsAdmin = FALSE;UpdateData(FALSE);void CUserDlg:OnUok() UpdateData();if(m_ctlUser.IsWindowEnabled() if(m_valUser=)/增加新用户的输入检查MessageBox(请填写用户名!);m_ctlUser.SetFocus();return;else if(m_valUser=)/修改用户信息的输入检查MessageBox(请选择一个用户!);return;if(m_valPass=)/限制密码不能为空 MessageBox(密码不能为空,请输入密码!);m_ctlPass.SetF

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号