mydemoview.cpp

来自「一个简单的用户信息管理系统」· C++ 代码 · 共 468 行

CPP
468
字号
// MyDemoView.cpp : implementation of the CMyDemoView class
//

#include "stdafx.h"
#include "MyDemo.h"

#include "MyDemoDoc.h"
#include "MyDemoView.h"

#include "addDLG.h"
#include "searchDLG.h"
#include "departDLG.h"
#include "titleDLG.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMyDemoView

IMPLEMENT_DYNCREATE(CMyDemoView, CListView)

BEGIN_MESSAGE_MAP(CMyDemoView, CListView)
	//{{AFX_MSG_MAP(CMyDemoView)
	ON_COMMAND(ID_USER_ADD, OnUserAdd)
	ON_COMMAND(ID_USER_EDIT, OnUserEdit)
	ON_COMMAND(ID_USER_DEL, OnUserDel)
	ON_COMMAND(ID_USER_LIST, OnUserList)
	ON_NOTIFY_REFLECT(NM_DBLCLK, OnDblclk)
	ON_COMMAND(ID_DWXX, OnDwxx)
	ON_COMMAND(ID_TITLE, OnTitle)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CListView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CListView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CListView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMyDemoView construction/destruction

CMyDemoView::CMyDemoView()
{
	// TODO: add construction code here
	ctrl=&CMyDemoView::GetListCtrl();
	
}

CMyDemoView::~CMyDemoView()
{
}

BOOL CMyDemoView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CListView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CMyDemoView drawing

void CMyDemoView::OnDraw(CDC* pDC)
{
	CMyDemoDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
}

void CMyDemoView::OnInitialUpdate()
{

	ctrl->InsertColumn(0,"用户ID",LVCFMT_LEFT,60);
	ctrl->InsertColumn(1,"用户名",LVCFMT_LEFT,100);
	ctrl->InsertColumn(2,"密码",LVCFMT_LEFT,50);

	ctrl->InsertColumn(3,"权限",LVCFMT_LEFT,60);
	ctrl->InsertColumn(4,"性别",LVCFMT_LEFT,60);
	ctrl->InsertColumn(5,"住址",LVCFMT_LEFT,60);
	ctrl->InsertColumn(6,"单位",LVCFMT_LEFT,60);
	ctrl->InsertColumn(7,"电子邮箱",LVCFMT_LEFT,60);
	ctrl->InsertColumn(8,"职务",LVCFMT_LEFT,60);
	ctrl->InsertColumn(9,"电话",LVCFMT_LEFT,60);
	ctrl->InsertColumn(10,"个人介绍",LVCFMT_LEFT,100);

SetWindowLong(ctrl->m_hWnd,GWL_STYLE,WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT);

ctrl->SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
m_db.Open(_T("Demo02"));
m_rs.m_pDatabase=&m_db;

	CListView::OnInitialUpdate();
	//ListAllUser();
	CMyDemoView::ListAllUser();

	// TODO: You may populate your ListView with items by directly accessing
	//  its list control through a call to GetListCtrl().
}

/////////////////////////////////////////////////////////////////////////////
// CMyDemoView printing

BOOL CMyDemoView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CMyDemoView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CMyDemoView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CMyDemoView diagnostics

#ifdef _DEBUG
void CMyDemoView::AssertValid() const
{
	CListView::AssertValid();
}

void CMyDemoView::Dump(CDumpContext& dc) const
{
	CListView::Dump(dc);
}

CMyDemoDoc* CMyDemoView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyDemoDoc)));
	return (CMyDemoDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMyDemoView message handlers

void CMyDemoView::ListAllUser()
{
if(!m_rs.IsOpen())
       m_rs.Open();

ctrl->DeleteAllItems();

int i=0;
CString strtemp;

m_rs.MoveLast();
while (!m_rs.IsBOF())
{
	strtemp.Format("%d",m_rs.m_UserID);//m_userID是long类型

	ctrl->InsertItem(i,strtemp);
    ctrl->SetItemText(i,1,m_rs.m_UserName);
	ctrl->SetItemText(i,2,m_rs.m_UserPwd);
	ctrl->SetItemText(i,3,m_rs.m_UserAble);
	ctrl->SetItemText(i,4,m_rs.m_UserSex);
	ctrl->SetItemText(i,5,m_rs.m_UserAddr);
	ctrl->SetItemText(i,6,m_rs.m_UserDep);
	ctrl->SetItemText(i,7,m_rs.m_UserEmail);
	ctrl->SetItemText(i,8,m_rs.m_UserTitle);
	ctrl->SetItemText(i,9,m_rs.m_UserPhone);
	ctrl->SetItemText(i,10,m_rs.m_UserInfo);

m_rs.MovePrev();

}
if(m_rs.IsOpen())
m_rs.Close();

}

void CMyDemoView::OnUserAdd() 
{
	// TODO: Add your command handler code here
	CaddDLG dlg;
if(dlg.DoModal()!=IDOK)
   return;

//保存前先判断有无同名用户
if(m_rs.IsOpen())
   m_rs.Close();
//匹配变量是字符型,两边加''
m_rs.m_strFilter.Format("UserName = '%s' order by UserID ASC",dlg.m_UserName.operator LPCTSTR());
m_rs.Open();

if(!m_rs.IsEOF())
{AfxMessageBox("同名用户已经存在,请重新输入!",MB_ICONEXCLAMATION);
         return;
m_rs.Close();
}
//******************************
try
{
	m_rs.AddNew();

	m_rs.m_UserName=dlg.m_UserName;
	m_rs.m_UserAble = dlg.m_UserAble;
	m_rs.m_UserAddr = dlg.m_UserAddr;
	m_rs.m_UserDep = dlg.m_UserDep;
	m_rs.m_UserEmail = dlg.m_UserEmail;
	m_rs.m_UserInfo = dlg.m_UserInfo;
	m_rs.m_UserPhone = dlg.m_UserPhone;
	m_rs.m_UserPwd = dlg.m_UserPwd;
	m_rs.m_UserSex = dlg.m_UserSex;
	m_rs.m_UserTitle = dlg.m_UserTitle;

if(m_rs.CanUpdate())

	m_rs.Update();
MessageBox("用户信息增加成功!");


}

catch(CDBException* e)
{AfxMessageBox(e->m_strError,MB_ICONEXCLAMATION);
e->Delete();
return;
}
//关闭数据库
m_rs.Close();

//刷新界面显示
CMyDemoView::ListAllUser();

}

void CMyDemoView::OnUserEdit() 
{
CaddDLG dlg;
//判断是否选中记录
POSITION pos=ctrl->GetFirstSelectedItemPosition();
if(pos==NULL)
{AfxMessageBox("请先选中一条记录!");
	return;
}
//记录当前行的主项目的信息
int m_CurUser=ctrl->GetNextSelectedItem(pos);

//int m_CurUser=ctrl->GetNextItem(-1,LVNI_SELECTED);
//在显示前初始化对话框的内容
//	char chrTemp[201] = {'\0'};
//char* chrTemp={'\0'};//函数要求字符型指针,并初始化
   //ctrl->GetItemText(m_CurUser,1,chrTemp,sizeof(char[20]));
 // dlg.m_UserName=chrTemp;

/*
  ctrl->GetItemText(m_CurUser,2,chrTemp,sizeof(char[20]));
	dlg.m_UserPwd = chrTemp;
	ctrl->GetItemText(m_CurUser,3,chrTemp,sizeof(char[20]));
	dlg.m_UserAble = chrTemp;
	ctrl->GetItemText(m_CurUser,4,chrTemp,sizeof(char[4]));
	dlg.m_UserSex = chrTemp;
	ctrl->GetItemText(m_CurUser,5,chrTemp,sizeof(char[50]));
	dlg.m_UserAddr = chrTemp;
	ctrl->GetItemText(m_CurUser,6,chrTemp,sizeof(char[50]));
	dlg.m_UserDep = chrTemp;

	ctrl->GetItemText(m_CurUser,7,chrTemp,sizeof(char[50]));
	dlg.m_UserEmail = chrTemp;
	ctrl->GetItemText(m_CurUser,8,chrTemp,sizeof(char[20]));
	dlg.m_UserTitle = chrTemp;
	ctrl->GetItemText(m_CurUser,9,chrTemp,sizeof(char[20]));
	dlg.m_UserPhone = chrTemp;
	ctrl->GetItemText(m_CurUser,10,chrTemp,sizeof(char[200]));
	dlg.m_UserInfo = chrTemp;
	*/
dlg.m_UserName=ctrl->GetItemText(m_CurUser,1);
dlg.m_UserPwd=ctrl->GetItemText(m_CurUser,2);
dlg.m_UserAble=ctrl->GetItemText(m_CurUser,3);
dlg.m_UserSex=ctrl->GetItemText(m_CurUser,4);
dlg.m_UserAddr=ctrl->GetItemText(m_CurUser,5);
dlg.m_UserDep=ctrl->GetItemText(m_CurUser,6);
dlg.m_UserEmail=ctrl->GetItemText(m_CurUser,7);
dlg.m_UserTitle=ctrl->GetItemText(m_CurUser,8);
dlg.m_UserPhone=ctrl->GetItemText(m_CurUser,9);
dlg.m_UserInfo=ctrl->GetItemText(m_CurUser,10);
//UpdateData(FALSE);
	dlg.m_title="修改用户信息";
	if(dlg.DoModal()!=IDOK)
		return;
	//保存修改后的信息
//	ctrl->GetItemText(m_CurUser,0,chrTemp,sizeof(char[20]));

	//int m_id=atoi(chrTemp);
	CString strm_id;
     strm_id=ctrl->GetItemText(m_CurUser,0);
     int m_id=atoi(strm_id);


	//定义表中的记录
	if(m_rs.IsOpen())
		m_rs.Close();
	m_rs.m_strFilter.Format("UserID= %d order by UserID",m_id);
	m_rs.Open();

	if(m_rs.IsEOF())
	{m_rs.Close();
		AfxMessageBox("没有该记录,不能修改!");
	
	}
	try
	{
	m_rs.Edit();
	//把对话框上的值赋给数据库
	m_rs.m_UserAble = dlg.m_UserAble;
			m_rs.m_UserAddr = dlg.m_UserAddr;
		m_rs.m_UserDep = dlg.m_UserDep;
			m_rs.m_UserEmail = dlg.m_UserEmail;
			m_rs.m_UserInfo = dlg.m_UserInfo;
			m_rs.m_UserName = dlg.m_UserName;
			m_rs.m_UserPhone = dlg.m_UserPhone;
			m_rs.m_UserPwd = dlg.m_UserPwd;
			m_rs.m_UserSex = dlg.m_UserSex;
			m_rs.m_UserTitle = dlg.m_UserTitle;
if(m_rs.CanUpdate())
m_rs.Update();
      AfxMessageBox("修改成功!");
	}
	catch(CDBException* e)
	{
		AfxMessageBox(e->m_strError,MB_ICONEXCLAMATION);
		e->Delete();
	}
//将用户信息及时更新到ListCtrl中
	
	ctrl->SetItemText(m_CurUser,1,dlg.m_UserName);
	ctrl->SetItemText(m_CurUser,2,dlg.m_UserPwd);
	ctrl->SetItemText(m_CurUser,3,dlg.m_UserAble);
	ctrl->SetItemText(m_CurUser,4,dlg.m_UserSex);
	ctrl->SetItemText(m_CurUser,5,dlg.m_UserAddr);
	ctrl->SetItemText(m_CurUser,6,dlg.m_UserDep);
	ctrl->SetItemText(m_CurUser,8,dlg.m_UserTitle);
	ctrl->SetItemText(m_CurUser,7,dlg.m_UserEmail);
	ctrl->SetItemText(m_CurUser,9,dlg.m_UserPhone);
	ctrl->SetItemText(m_CurUser,10,dlg.m_UserInfo);
}

void CMyDemoView::OnUserDel() 
{
	POSITION pos=ctrl->GetFirstSelectedItemPosition();

	if(pos==NULL)
	{AfxMessageBox("请选中一条记录!");
	return;
	}

	int m_CurUser=ctrl->GetNextSelectedItem(pos);

	char chartemp[21]={'\0'};
	ctrl->GetItemText(m_CurUser,0,chartemp,sizeof(char[20]));
	int m_id=atoi(chartemp);
		
m_rs.m_strFilter.Format("UserID = %d order by UserID",m_id);
m_rs.Open();

if(m_rs.IsEOF())
{AfxMessageBox("没有该记录!");
return;
}
//匹配后台数据库,在表中删除该记录信息
	if(AfxMessageBox("您确认要删除该记录吗?一旦删除则永久不能恢复!",MB_YESNO|MB_ICONEXCLAMATION)==IDYES)
	{
	
		try{


           m_rs.Delete();
		}
catch(CDBException* e)
{e->ReportError();
e->Delete();
	
}
	
//删除视图显示
ctrl->DeleteItem(m_CurUser);
}
}

void CMyDemoView::OnUserList() 
{

CsearchDLG dlg;
CdemoSet m_ds;
CString strtemp;
	char chrTemp='%';

int i=0;
if(dlg.DoModal()!=IDOK)
   return;

if(m_ds.IsOpen())
  m_ds.Close();

//m_ds.m_strFilter.Format("UserName like '%c%s%c' order by UserID",chrTemp,dlg.m_strSearch.operator LPCTSTR(),chrTemp);
m_ds.m_strFilter="UserName like '%"+dlg.m_strSearch+"%' order by UserID";
MessageBox(m_ds.m_strFilter);
m_ds.Open();
//long l=m_ds.GetRecordCount();
if(m_ds.IsEOF())
{AfxMessageBox("没有符合条件的记录!");
return;
}
//CListCtrl* ctrl;
//ctrl=&CMyDemoView::GetListCtrl();
ctrl->DeleteAllItems();

m_ds.MoveLast();

while (!m_ds.IsBOF())
{strtemp.Format("%d",m_ds.m_UserID);//m_userID是long类型

	ctrl->InsertItem(i,strtemp);
    ctrl->SetItemText(i,1,m_ds.m_UserName);
	ctrl->SetItemText(i,2,m_ds.m_UserPwd);
	ctrl->SetItemText(i,3,m_ds.m_UserAble);
	ctrl->SetItemText(i,4,m_ds.m_UserSex);
	ctrl->SetItemText(i,5,m_ds.m_UserAddr);
	ctrl->SetItemText(i,6,m_ds.m_UserDep);
	ctrl->SetItemText(i,7,m_ds.m_UserEmail);
	ctrl->SetItemText(i,8,m_ds.m_UserTitle);
	ctrl->SetItemText(i,9,m_ds.m_UserPhone);
	ctrl->SetItemText(i,10,m_ds.m_UserInfo);
m_ds.MovePrev();
//i++;
}
m_ds.Close();

}



void CMyDemoView::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	
	*pResult = 0;
	CMyDemoView::OnUserEdit();

}

void CMyDemoView::OnDwxx() 
{
	// TODO: Add your command handler code here
	CdepartDLG dlg;
	dlg.DoModal();

}

void CMyDemoView::OnTitle() 
{
	// TODO: Add your command handler code here
	CtitleDLG dlg;
	dlg.DoModal();

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?