人员管理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
人员管理系统
1.系统设计的目的和意义 (2)
2.系统总框架图 (2)
3.软件功能描述 (2)
4.软件代码的设计 (3)
4.1数据结构描述与定义 (3)
4.2模块设计 (4)
5.软件使用说明 (6)
6.测试结果与分析 (7)
7.比较有特色的函数 (12)
8.存在的不足与计策 (13)
9.课程设计总结 (14)
附录:源程序清单(核心部分) (15)
1.系统设计的目的和意义
采纳面向对象设计思想,治理2类人员。
教师信息(姓名,编号,年龄,职称,学历,籍贯,工作日期),学生信息(姓名,年龄,学号,籍贯,入学日期)。
完整输入/输出设计,写入ACCESS文件,分别建立两个表信息,一个储备教师信息,一个储备学生信息。
采纳工程文件方式组织程序。
能进行增、删、查、改等操作。
初始完成密码认证框的编写。
外观设计风格各异
2.系统总框架图
3.软件功能描述
治理2类人员:教师信息(姓名,编号,年龄,职称,学历,籍贯,工作日期),学生信息(姓名,年龄,学号,籍贯,入学日期)。
完整输入/输出设计,写入ACCESS文件。
能进行增、删、查、改等操作。
采纳友好的用户界面。
治理用户:添加、删除、修改密码等操作。
4.软件代码的设计
4.1数据结构描述与定义
①ACCESS表
表password:
表student:
表teacher:
②MFC类
class CUserSet : public CRecordset //用户数据定义{
CString m_Puser;
CString m_Ppassword;
BOOL m_Pisadmin;
}
class CStudentSet : public CRecordset //学生数据定义{
CString m_Sname;
CString m_Sno;
CString m_Sage;
CString m_Snative;
CString m_Setime;
}
class CTeacherSet : public CRecordset //教师数据定义
{
CString m_Tname;
CString m_Tno;
CString m_Tage;
CString m_Ttitle;
CString m_Tdegree;
CString m_Tnative;
CString m_Twtime;
}
4.2模块设计
系统共分成七个模块,分别是:用户登录模块,用户治理模块,学生信息查询模块,学生信息编辑模块,教师信息查询模块,教师信息编辑模块,关心模块。
①用户登录模块
②用户治理模块
③查询模块(学生信息查询,教师信息查询)
④编辑模块(学生信息编辑,教师信息编辑)
5.软件使用说明
登录系统时可依照ACCESS表password查看用户名和密码。
无需建立ODBC。
登录成功后显示主菜单,有系统治理,学生信息治理,教师信息治理和关心。
在系统治理中,你能够进行用户治理,注销/重新登录和退出系统。
在学生信息治理中,你能够进行学生信息查询和添加/修改信息。
教师信息治理中,你能够进行教师信息查询和添加/修改信息。
在关心中,你能够查看软件的相关内容。
专门提醒:假如你的登录是非治理员,那么你将没有用户治理,添加/修改信息等操作。
在用户治理中,你能够修改密码,新增用户,删除用户。
在信息查询中,你能够通过编号查询或姓名查询。
能够同时输入或不输,若不输则显示全部信息。
在添加/修改信息中,你能够对信息进行添加,修改,删除等操作。
6.测试结果与分析
运行程序,显示登录界面。
(治理员建议使用:用户名“weiheng”,密码“1234”。
非治理员建议使用:用户名“ww”,密码“1234”。
)
成功登录后显示主界面。
然后依照菜单内容依次运行。
返回登录界面。
这是用户信息界面。
以治理员身份进入该界面。
图为创建一个用户“bbb”的操作。
这是学生信息查询界面。
若不输入查询项查询,则显示所有数据。
图为依照学生学号查询。
显示,添加,修改,删除一体化。
依照所需要的操作进行操作。
图为教师信息查询。
操作方法如同学生信息查询
图为教师信息编辑。
操作方法如同学生信息编辑
图为关心界面。
7.比较有特色的函数
①显示全部信息函数,以下是显示全部教师信息函数。
void CTeachereDlg::OnTeonall()
{
m_ctlList.DeleteAllItems();
m_ctlList.SetRedraw(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_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);
}
②查询函数,以下是学生信息查询函数
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_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
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_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()
{ }
CWhApp theApp;
BOOL CWhApp::InitInstance()
{ AfxEnableControlContainer();
SQLConfigDataSource(NULL,ODBC_ADD_DSN, //通过程序创建ODBC "Microsoft Access Driver (*.mdb)",
"DSN=WhODBC\0"
"Description=Hotel\0"
"FileType=Access\0"
"DBQ=.\\Wh.mdb\0 );
#ifdef _AFXDLL
Enable3dControls();
#else
Enable3dControlsStatic();
#endif
SetRegistryKey(_T("Local AppWizard-Generated Applications"));
LoadStdProfileSettings(0);
InitializeSkin(_T("XPCorona.ssk")); //加载皮肤
CLoginDlg loginDlg; //先显示登录界面if(loginDlg.DoModal()!=IDOK)
return FALSE;
CSingleDocTemplate* 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->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
m_pMainWnd->SetWindowText("人员治理系统"); //显示主菜单标题return TRUE; }
class CAboutDlg : public CDialog
{public:
CAboutDlg();
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX); protected:
DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { }
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 THIS_FILE
static char THIS_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; }
CString CUserSet::GetDefaultConnect()
{ return _T("ODBC;DSN=WhODBC"); }
CString CUserSet::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 _DEBUG
void CUserSet::AssertValid() const
{ CRecordset::AssertValid(); }
void CUserSet::Dump(CDumpContext& dc) const
{ CRecordset::Dump(dc); }
#endif
文件:StudentSet.cpp
#include "stdafx.h"
#include "wh.h"
#include "StudentSet.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_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; } CString CStudentSet::GetDefaultConnect()
{ return _T("ODBC;DSN=WhODBC"); } CString CStudentSet::GetDefaultSQL()
{ return _T("[student]"); }
void CStudentSet::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
void CStudentSet::AssertValid() const
{ CRecordset::AssertValid(); }
void CStudentSet::Dump(CDumpContext& dc) const
{ CRecordset::Dump(dc); }
#endif
文件:TeacherSet.cpp
#include "stdafx.h"
#include "wh.h"
#include "TeacherSet.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_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; }
CString CTeacherSet::GetDefaultConnect()
{ return _T("ODBC;DSN=WhODBC"); }
CString CTeacherSet::GetDefaultSQL()
{ return _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, _T("[Tnative]"), m_Tnative);
RFX_Text(pFX, _T("[Tworktime]"), m_Twtime); }
#ifdef _DEBUG
void CTeacherSet::AssertValid() const
{ CRecordset::AssertValid(); }
void CTeacherSet::Dump(CDumpContext& dc) const
{ CRecordset::Dump(dc); }
#endif
文件:LoginDlg.cpp
#include "stdafx.h"
#include "wh.h"
#include "LoginDlg.h"
#include "UserSet.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CLoginDlg::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_Control(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;
if(m_valUser.IsEmpty())
{ MessageBox("请输入用户名!", "您的访问出错了!", MB_ICONEXCLAMATION);
m_ctlUser.SetFocus();
return; }
if(m_valPass.IsEmpty()) //检查密码是否输入
{ MessageBox("请输入密码!", "您的访问出错了!", MB_ICONEXCLAMA TION);
m_ctlPass.SetFocus();
return; }
CWhApp* ptheApp = (CWhApp *) AfxGetApp();
strSQL.Format("select * from password where Puser='%s' AND Ppassword='%s'",m_valUser,m_valPass);
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); }
else
{ ptheApp->m_bIsAdmin = recordset.m_Pisadmin;
recordset.Close();
CDialog::OnOK(); }
}
BOOL CLoginDlg::OnInitDialog()
{ CDialog::OnInitDialog();
CUserSet recordset ;
strSQL="select * from password";
if(!recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL))
{ MessageBox("打开数据库失败!","数据库错误",MB_OK);
return FALSE; }
while(!recordset.IsEOF())
{ m_ctlUser.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_FILE
static char THIS_FILE[] = __FILE__;
#endif
CUserDlg::CUserDlg(CWnd* pParent /*=NULL*/) : CDialog(CUserDlg::IDD, pParent) { m_bIsAdmin = FALSE;
m_valPass = _T("");
m_valRePass = _T("");
m_valUser = _T(""); }
void CUserDlg::DoDataExchange(CDataExchange* pDX)
DDX_Control(pDX, IDC_UUSER, m_ctlUser);
DDX_Control(pDX, IDC_UPASS, m_ctlPass);
DDX_Control(pDX, IDC_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_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);
RefreshData(); //在添加用户列表中添加用户名return TRUE; }
void CUserDlg::RefreshData()
{ m_ctlList.SetFocus();
m_ctlList.DeleteAllItems(); //清空用户列表
m_ctlList.SetRedraw(FALSE);
CString strSQL;
UpdateData(TRUE);
strSQL="select * from password"; //打开记录集
{ MessageBox("打开数据库失败!","数据库错误",MB_ICONSTOP);
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); //设置用户名编辑框为可用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("打开数据库失败!","数据库错误",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.SetFocus();
return; }
if(m_valPass!=m_valRePass) //验证密码与确认密码是否一致{ MessageBox("两次输入地密码不一致,请重新输入密码!");
m_ctlPass.SetFocus();
m_valPass = "";
m_valRePass = "";
UpdateData(FALSE);
return; }
CString strSQL;
if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL))
{ MessageBox("打开数据库失败!","数据库错误",MB_ICONSTOP);
return ; }
if(m_ctlUser.IsWindowEnabled())
{//增加新用户
if(m_recordset.GetRecordCount()!=0) //判定用户是否已存在{ m_recordset.Close();
MessageBox("该用户差不多存在!");
return; }
m_recordset.AddNew();
m_recordset.m_Puser = m_valUser;
m_recordset.m_Ppassword = m_valPass;
m_recordset.m_Pisadmin = m_bIsAdmin;
m_recordset.Update();
MessageBox("用户添加成功!请记住用户名和密码!");
m_recordset.Close(); }
else
{//修改用户信息
if(m_recordset.GetRecordCount()==0) //判定用户是否不存在{ m_recordset.Close();
MessageBox("该用户不存在!请更新数据库");
return; }
m_recordset.Edit();
m_recordset.m_Puser = m_valUser;
m_recordset.m_Ppassword = m_valPass;
m_recordset.m_Pisadmin = m_bIsAdmin;
m_recordset.Update();
MessageBox("用户修改成功!请记住用户名和密码!");
m_recordset.Close(); }
RefreshData();
}
void CUserDlg::OnUcancel()
{ m_valUser = "";
m_valPass = "";
m_valRePass = "";
m_bIsAdmin = FALSE;
m_ctlUser.EnableWindow(FALSE);
UpdateData(FALSE); }
void CUserDlg::OnClickUlist(NMHDR* pNMHDR, LRESULT* pResult)
{ CString strSQL;
UpdateData(TRUE);
m_ctlUser.EnableWindow(FALSE);
int i = m_ctlList.GetSelectionMark(); //从数据库中猎取选择用户名的资料m_valUser = m_ctlList.GetItemText(i,0);
strSQL.Format("select * from password where Puser='%s'",m_valUser);
if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL))
{ MessageBox("打开数据库失败!","数据库错误",MB_ICONSTOP);
return ; }
//显示用户资料
m_valPass = m_recordset.m_Ppassword;
m_valRePass = m_valPass;
m_bIsAdmin = m_recordset.m_Pisadmin;
m_recordset.Close();
UpdateData(FALSE);
*pResult = 0; }
文件:StudentDlg.cpp
#include "stdafx.h"
#include "StudentDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CStudentDlg::CStudentDlg(CWnd* pParent /*=NULL*/) : CDialog(CStudentDlg::IDD, pParent) { m_valSname = _T("");
m_valSno = _T(""); }
void CStudentDlg::DoDataExchange(CDataExchange* pDX)
{ CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST1, m_ctlList);
DDX_Text(pDX, IDC_SSNAME, m_valSname);
DDX_Text(pDX, IDC_SSNO, m_valSno); }
BEGIN_MESSAGE_MAP(CStudentDlg, CDialog)
ON_BN_CLICKED(IDC_SSEARCH, OnSsearch)
END_MESSAGE_MAP()
BOOL CStudentDlg::OnInitDialog()
{ CDialog::OnInitDialog();
m_ctlList.InsertColumn(0,"学生学号");
m_ctlList.InsertColumn(1,"学生姓名");
m_ctlList.InsertColumn(2,"学生年龄");
m_ctlList.InsertColumn(3,"学生籍贯");
m_ctlList.InsertColumn(4,"入学日期");
m_ctlList.SetColumnWidth(0,120);
m_ctlList.SetColumnWidth(1,110);
m_ctlList.SetColumnWidth(2,60);
m_ctlList.SetColumnWidth(3,110);
m_ctlList.SetColumnWidth(4,175);
return 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_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); }
文件:StudenteDlg.cpp
#include "stdafx.h"
#include "wh.h"
#include "StudenteDlg.h"
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CStudenteDlg::CStudenteDlg(CWnd* pParent /*=NULL*/) : CDialog(CStudenteDlg::IDD, pParent) { m_valSetime = _T("");
m_valSname = _T("");
m_valSnative = _T("");
m_valSno = _T("");
m_valSage = _T(""); }
void CStudenteDlg::DoDataExchange(CDataExchange* pDX)
{ CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_SELIST, m_ctlList);
DDX_Text(pDX, IDC_SEETIME, m_valSetime);
DDX_Text(pDX, IDC_SENAME, m_valSname);
DDX_Text(pDX, IDC_SENA TIVE, m_valSnative);
DDX_Text(pDX, IDC_SENO, m_valSno);
DDX_Text(pDX, IDC_SEAGE, m_valSage); }
BEGIN_MESSAGE_MAP(CStudenteDlg, CDialog)
ON_BN_CLICKED(IDC_SEADDNEW, OnSeaddnew)
ON_NOTIFY(NM_CLICK, IDC_SELIST, OnClickSelist)
ON_BN_CLICKED(IDC_SEDELETE, OnSedelete)
ON_BN_CLICKED(IDC_SEONALL, OnSeonall)
ON_BN_CLICKED(IDC_SEEDIT, OnSeedit)
END_MESSAGE_MAP()
BOOL CStudenteDlg::OnInitDialog()
{ CDialog::OnInitDialog();
m_ctlList.InsertColumn(0,"学生学号");
m_ctlList.InsertColumn(1,"学生姓名");
m_ctlList.InsertColumn(2,"学生年龄");
m_ctlList.InsertColumn(3,"学生籍贯");
m_ctlList.InsertColumn(4,"入学日期");
m_ctlList.SetColumnWidth(0,120);
m_ctlList.SetColumnWidth(1,90);
m_ctlList.SetColumnWidth(2,60);
m_ctlList.SetColumnWidth(3,90);
m_ctlList.SetColumnWidth(4,155);
m_ctlList.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
CStudentSet recordset; //初始化学生信息
if(!recordset.Open(AFX_DB_USE_DEFAULT_TYPE,"select * from student"))
{ MessageBox("打开数据库失败!","数据库错误",MB_ICONSTOP);
return FALSE; }
recordset.Close();
return TRUE; }
void CStudenteDlg::OnClickSelist(NMHDR* pNMHDR, LRESULT* pResult)
{ int i = m_ctlList.GetSelectionMark();
m_valSno = m_ctlList.GetItemText(i,0);
m_valSname = m_ctlList.GetItemText(i,1);
m_valSage = m_ctlList.GetItemText(i,2);
m_valSnative = m_ctlList.GetItemText(i,3);
m_valSetime = m_ctlList.GetItemText(i,4);
UpdateData(FALSE);
*pResult = 0; }
void CStudenteDlg::OnSeaddnew()
{ UpdateData( TRUE );
if(m_valSname.IsEmpty())
{ MessageBox("请输入学生姓名!");
return; }
if(m_valSno.IsEmpty())
{ MessageBox("请输入学生学号!");
return;
}
if(m_valSage.IsEmpty())
{ MessageBox("请输入学生年龄!");
return; }
if(m_valSnative.IsEmpty())
{ MessageBox("请输入学生籍贯!");
return; }
if(m_valSetime.IsEmpty())
{ MessageBox("请输入学生入学日期!");
return; }
CString str="select * from student";
int flag=0;
if( !m_recordset.Open( AFX_DB_USE_DEFAULT_TYPE , _T(str) ) )
{ MessageBox("打开数据库失败!","数据库错误",MB_ICONSTOP);
return ; }
while( !m_recordset.IsEOF() )
{ if( m_valSno == m_recordset.m_Sno )
{ flag=1;
break; }
else
{ m_recordset.MoveNext(); }
}
if( flag==1)
{ MessageBox( "已有此人,添加失败!", "学生信息", MB_ICONEXCLAMATION);
return; }
//添加学生记录
m_recordset.AddNew();
m_recordset.m_Sno = m_valSno;
m_recordset.m_Sname = m_valSname;
m_recordset.m_Sage = m_valSage;
m_recordset.m_Snative= m_valSnative;
m_recordset.m_Setime = m_valSetime;
m_recordset.Update();
m_recordset.Close();
//更新列表
CStudenteDlg::OnSeonall();
//更新界面显示
m_valSno = _T("");
m_valSname = _T("");
m_valSage = _T("");
m_valSnative = _T("");
m_valSetime = _T("");
UpdateData(FALSE); }
void CStudenteDlg::OnSedelete()
{ int i = m_ctlList.GetSelectionMark();
if(0>i)
{ MessageBox("请选择一条记录进行删除!");
return; }
CString strSQL;
strSQL.Format("select * from student where Sno = '%s' ",m_ctlList.GetItemText(i,0));
if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL))
{ MessageBox("打开数据库失败!");
return ; }
if (MessageBox( "你确定吗?", "删除信息", MB_OKCANCEL)==IDCANCEL)
{ return; }
m_recordset.Delete();
m_recordset.Close();
m_ctlList.DeleteItem(i);
//更新界面显示
m_valSno = _T("");
m_valSname = _T("");
m_valSage = _T("");
m_valSnative = _T("");
m_valSetime = _T("");
UpdateData(FALSE);
}
void CStudenteDlg::OnSeonall()
{ m_ctlList.DeleteAllItems();
m_ctlList.SetRedraw(FALSE);
UpdateData(TRUE);
CString strSQL;
strSQL.Format( "select * from student ");
if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL))
{ MessageBox("打开数据库失败!","数据库错误",MB_ICONSTOP);
return ; }
int i=0;
CString strTime;
while(!m_recordset.IsEOF())
{ m_ctlList.InsertItem(0,m_recordset.m_Sno);
m_ctlList.SetItemText(0,1,m_recordset.m_Sname);
m_ctlList.SetItemText(0,2,m_recordset.m_Sage);
m_ctlList.SetItemText(0,3,m_recordset.m_Snative);
m_ctlList.SetItemText(0,4,m_recordset.m_Setime);
i++;
m_recordset.MoveNext();
}
m_recordset.Close();
m_ctlList.SetRedraw(TRUE);
}
void CStudenteDlg::OnSeedit()
{ UpdateData( TRUE );
if(m_valSname.IsEmpty())
{ MessageBox("请输入学生姓名!");
return; }
if(m_valSno.IsEmpty())
{ MessageBox("请输入学生学号!");
return; }
if(m_valSage.IsEmpty())
{ MessageBox("请输入学生年龄!");
return; }
if(m_valSnative.IsEmpty())
{ MessageBox("请输入学生籍贯!");
return; }
if(m_valSetime.IsEmpty())
{ MessageBox("请输入学生入学日期!");
return; }
CString str="select * from student";
int flag=0;
if( !m_recordset.Open( AFX_DB_USE_DEFAULT_TYPE, _T(str) ) )
{ MessageBox("打开数据库失败!","数据库错误",MB_ICONSTOP);
return ; }
while( !m_recordset.IsEOF() )
{ if( m_valSno == m_recordset.m_Sno )
{ flag=1;
break; }
else
{ m_recordset.MoveNext(); }
}
if( flag==0)
{ MessageBox( "查无此人,默认添加!", "学生信息", MB_ICONINFORMATION );
CStudenteDlg::OnSeaddnew();
return; }
//修改学生记录
m_recordset.Edit();
m_recordset.m_Sno = m_valSno;
m_recordset.m_Sname = m_valSname;
m_recordset.m_Sage = m_valSage;
m_recordset.m_Snative= m_valSnative;
m_recordset.m_Setime = m_valSetime;
m_recordset.Update();
m_recordset.Close();
//更新列表
CStudenteDlg::OnSeonall();
//更新界面显示
m_valSno = _T("");
m_valSname = _T("");
m_valSage = _T("");
m_valSnative = _T("");
m_valSetime = _T("");
UpdateData(FALSE); }
文件:TeacherDlg.cpp
#include "stdafx.h"
#include "wh.h"
#include "TeacherDlg.h"
#include "TeacherSet.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CTeacherDlg::CTeacherDlg(CWnd* pParent /*=NULL*/) : CDialog(CTeacherDlg::IDD, pParent) { m_valTname = _T("");
m_valTno = _T(""); }
void CTeacherDlg::DoDataExchange(CDataExchange* pDX)
{ CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_TTLIST, m_ctlList);
DDX_Text(pDX, IDC_TTNAME, m_valTname);
DDX_Text(pDX, IDC_TTNO, m_valTno); }
BEGIN_MESSAGE_MAP(CTeacherDlg, CDialog)
ON_BN_CLICKED(IDC_TTSEARCH, OnTtsearch)
END_MESSAGE_MAP()
BOOL CTeacherDlg::OnInitDialog()
{ CDialog::OnInitDialog();
m_ctlList.InsertColumn(0,"教师编号");
m_ctlList.InsertColumn(1,"教师姓名");
m_ctlList.InsertColumn(2,"教师年龄");
m_ctlList.InsertColumn(3,"教师职称");
m_ctlList.InsertColumn(4,"教师学历");
m_ctlList.InsertColumn(5,"教师籍贯");
m_ctlList.InsertColumn(6,"工作日期");
m_ctlList.SetColumnWidth(0,60);
m_ctlList.SetColumnWidth(1,60);
m_ctlList.SetColumnWidth(2,45);
m_ctlList.SetColumnWidth(3,90);
m_ctlList.SetColumnWidth(4,90);
m_ctlList.SetColumnWidth(5,90);
m_ctlList.SetColumnWidth(6,140);。