⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 demoview.cpp

📁 用户信息管理程序
💻 CPP
字号:
// DemoView.cpp : implementation of the CDemoView class
//

#include "stdafx.h"
#include "Demo.h"

#include "DemoDoc.h"
#include "DemoView.h"

//增加CMainFrame的引用声明
#include "MainFrm.h"

#include "UserSearchDlg.h"
#include "UserRecordSet.h"
#include "UserDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CDemoView

IMPLEMENT_DYNCREATE(CDemoView, CListView)

BEGIN_MESSAGE_MAP(CDemoView, CListView)
	//{{AFX_MSG_MAP(CDemoView)
	ON_NOTIFY_REFLECT(NM_DBLCLK, OnDblclk)
	//}}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()

/////////////////////////////////////////////////////////////////////////////
// CDemoView construction/destruction

CDemoView::CDemoView()
{
	// TODO: add construction code here

}

CDemoView::~CDemoView()
{
}

BOOL CDemoView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs
	//设置CListCtrl的格式为:LV_SREPORT 并且 LVS_SINGLESEL
	cs.style|=LVS_REPORT|LVS_SINGLESEL;

	return CListView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CDemoView drawing

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

void CDemoView::OnInitialUpdate()
{
	//创建一个CListCtrl指针
    CListCtrl* ctl;
	//将CListCtrl指针指向CListView的CListCtrl
	ctl=&GetListCtrl();
	//利用CListCtrl的指针,设置列的题头
	ctl->InsertColumn(0,"用户ID",LVCFMT_LEFT,50);
    ctl->InsertColumn(1,"用户名",LVCFMT_LEFT,60);
    ctl->InsertColumn(2,"密码",LVCFMT_LEFT,60);
    ctl->InsertColumn(3,"权限",LVCFMT_LEFT,60);
    ctl->InsertColumn(4,"性别",LVCFMT_LEFT,60);
    ctl->InsertColumn(5,"住址",LVCFMT_LEFT,90);
    ctl->InsertColumn(6,"单位",LVCFMT_LEFT,100);
    ctl->InsertColumn(7,"职务",LVCFMT_LEFT,90);
    ctl->InsertColumn(8,"电子邮箱",LVCFMT_LEFT,120);
    ctl->InsertColumn(9,"电话",LVCFMT_LEFT,80);
    ctl->InsertColumn(10,"个人介绍",LVCFMT_LEFT,100);
	//利用CListCtrl的指针,设置一段测试数据
   	ctl->InsertItem(0,"1");
	ctl->SetItemText(0,1,"陈旭");
    ctl->SetItemText(0,2,"1234");
    ctl->SetItemText(0,3,"S-------------");
	ctl->SetItemText(0,4,"男");
	ctl->SetItemText(0,5,"清华大学");
	ctl->SetItemText(0,6,"清华大学学生宿舍");
	ctl->SetItemText(0,7,"学生");
	ctl->SetItemText(0,8,"stu@mails.tsinghua.edu.cn");
	ctl->SetItemText(0,9,"1390123456");
	ctl->SetItemText(0,10,"自我介绍……");

	
	/*ctl=&GetListCtrl();
	//创建CUserRecordSet的实例
	CUserRecordSet m_UserRecordSet;
	//记录用户序号
	int i=0;
	//定义一个变量来保存“%”
	char chrTemp='%';
	CString strTemp;
	if(m_UserRecordSet.IsOpen())
		m_UserRecordSet.Close();
	m_UserRecordSet.Open(CUserRecordSet::snapshot,NULL,CUserRecordSet::none);
		//输出匹配查询条件的用户记录,直到记录为空
	while(!m_UserRecordSet.IsEOF())
	{
			//将UserID转换为CString,以便输出
			strTemp.Format("%s",m_UserRecordSet.m_UserID);
			//设置ListCtrl记录的Item值
			ctl->InsertItem(i,strTemp);
			ctl->SetItemText(i,1,m_UserRecordSet.m_UserName);
			ctl->SetItemText(i,2,m_UserRecordSet.m_UserPwd);
			ctl->SetItemText(i,3,m_UserRecordSet.m_UserAble);
			ctl->SetItemText(i,4,m_UserRecordSet.m_UserSex);
			ctl->SetItemText(i,5,m_UserRecordSet.m_UserDep);
			ctl->SetItemText(i,6,m_UserRecordSet.m_UserAddr);
            ctl->SetItemText(i,7,m_UserRecordSet.m_UserTitle);
			ctl->SetItemText(i,8,m_UserRecordSet.m_UserEmail);
			ctl->SetItemText(i,9,m_UserRecordSet.m_UserPhone);
			ctl->SetItemText(i,10,m_UserRecordSet.m_UserInfo);
			//记录游标移到下一条记录
			m_UserRecordSet.MoveNext();
	}
		//关闭记录集
		if(m_UserRecordSet.IsOpen())
			m_UserRecordSet.Close();*/


	CListView::OnInitialUpdate();

	//获取CMianFrame的指针
    CMainFrame* m_Frm=(CMainFrame*)::AfxGetMainWnd();
	//将CMainFrame的m_Frm指针指向CDemoView的实例m_ListView
    m_Frm->m_ListView=this;
	// TODO: You may populate your ListView with items by directly accessing
	//  its list control through a call to GetListCtrl().
}

/////////////////////////////////////////////////////////////////////////////
// CDemoView printing

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

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

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

/////////////////////////////////////////////////////////////////////////////
// CDemoView diagnostics

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

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

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

/////////////////////////////////////////////////////////////////////////////
// CDemoView message handlers

void CDemoView::RemoveAll()
{
    //增加值指针变量指向ListView的CListCtrl
	CListCtrl *ctl;
	ctl=&GetListCtrl();
	//删除CListCtrl中的所有记录
	ctl->DeleteAllItems();

}

void CDemoView::ListUser(CString strUserName)
{
    //删除前次输出的用户记录
	RemoveAll();
	//建立一个指针,用以操作ListCtrl输出用户记录
	CListCtrl *ctl;
	ctl=&GetListCtrl();
	//创建CUserRecordSet的实例
	CUserRecordSet m_UserRecordSet;
	//记录用户序号
	int i=0;
	//定义一个变量来保存“%”
	char chrTemp='%';
	CString strTemp;
	try 
	{
		if(m_UserRecordSet.IsOpen())
			m_UserRecordSet.Close();
		//设置查询条件“UserName=strUserName”		   
		m_UserRecordSet.m_strFilter.Format("UserName like '%c%s%c' order by UserID ASC",
			chrTemp,strUserName.operator LPCTSTR(),chrTemp);
		m_UserRecordSet.Open(CUserRecordSet::snapshot,NULL,CUserRecordSet::none);
		//输出匹配查询条件的用户记录,直到记录为空
		while(!m_UserRecordSet.IsEOF())
		{
			//将UserID转换为CString,以便输出
			strTemp.Format("%s",m_UserRecordSet.m_UserID);
			//设置ListCtrl记录的Item值
			ctl->InsertItem(i,strTemp);
			ctl->SetItemText(i,1,m_UserRecordSet.m_UserName);
			ctl->SetItemText(i,2,m_UserRecordSet.m_UserPwd);
			ctl->SetItemText(i,3,m_UserRecordSet.m_UserAble);
			ctl->SetItemText(i,4,m_UserRecordSet.m_UserSex);
			ctl->SetItemText(i,5,m_UserRecordSet.m_UserDep);
			ctl->SetItemText(i,6,m_UserRecordSet.m_UserAddr);
            ctl->SetItemText(i,7,m_UserRecordSet.m_UserTitle);
			ctl->SetItemText(i,8,m_UserRecordSet.m_UserEmail);
			ctl->SetItemText(i,9,m_UserRecordSet.m_UserPhone);
			ctl->SetItemText(i,10,m_UserRecordSet.m_UserInfo);
			//记录游标移到下一条记录
			m_UserRecordSet.MoveNext();
		}
		//关闭记录集
		if(m_UserRecordSet.IsOpen())
			m_UserRecordSet.Close();
	}
	//意外捕获
	catch(CDBException *e)
	{
		e->Delete();
		return;
	}
}

//增加成员函数EditCurUser(),其作用是编辑当前用户信息
void CDemoView::EditCurUser()
{
	//创建一个CListCtrl指针,用以操作ListCtrl输出用户记录
    CListCtrl* ctl;
	//将CListCtrl指针指向CListView的CListCtrl
	ctl=&GetListCtrl();
	//寻找当前选中的记录的位置
	POSITION pos=ctl->GetFirstSelectedItemPosition();
	if(pos==NULL)
	{
		//如果没有选择记录,则提示并退出
		AfxMessageBox("请先选中一条记录!");
		return;
	}
	//获取当前记录的位置游标
	int m_CurUser=ctl->GetNextSelectedItem(pos);
	//创建一个CUserDlg实例
	CUserDlg m_UserDlg;
	//创建一个临时字符串来保存当前用户信息
	char chrTemp[201]={'\0'};
	//初始化m_UserDlg的用户信息
	ctl->GetItemText(m_CurUser,1,chrTemp,sizeof(char[20]));
	m_UserDlg.m_UserName=chrTemp;
    ctl->GetItemText(m_CurUser,2,chrTemp,sizeof(char[20]));
	m_UserDlg.m_UserPwd=chrTemp;
    ctl->GetItemText(m_CurUser,3,chrTemp,sizeof(char[20]));
	m_UserDlg.m_UserAble=chrTemp;
    ctl->GetItemText(m_CurUser,4,chrTemp,sizeof(char[4]));
	m_UserDlg.m_UserSex=chrTemp;
    ctl->GetItemText(m_CurUser,5,chrTemp,sizeof(char[50]));
	m_UserDlg.m_UserAddr=chrTemp;
    ctl->GetItemText(m_CurUser,6,chrTemp,sizeof(char[50]));
	m_UserDlg.m_UserDep=chrTemp;
    ctl->GetItemText(m_CurUser,7,chrTemp,sizeof(char[20]));
	m_UserDlg.m_UserTitle=chrTemp;
    ctl->GetItemText(m_CurUser,8,chrTemp,sizeof(char[50]));
	m_UserDlg.m_UserEmail=chrTemp;
    ctl->GetItemText(m_CurUser,9,chrTemp,sizeof(char[20]));
	m_UserDlg.m_UserPhone=chrTemp;
    ctl->GetItemText(m_CurUser,10,chrTemp,sizeof(char[200]));
	m_UserDlg.m_UserInfo=chrTemp;
	
	//设置用户对话框窗口标题
	m_UserDlg.m_Title="修改用户信息";
	
	//将变量内容更新到对话框中,并显示对话框
	m_UserDlg.DoModal();
	if(m_UserDlg.DoModal()!=IDOK)
	{
		//如果用户选择取消按钮,则退出
		return;
	}
	//如果用户选择“确定”按钮,则进行下面的数据库更新
	//取得用户ID
	ctl->GetItemText(m_CurUser,0,chrTemp,sizeof(char[20]));
	//将用户ID转换成整数保存,后面的数据库操作将以次为匹配条件
	int m_CurUserID=atoi(chrTemp);
	//创建CUserRecordSet实例
	CUserRecordSet m_UserRecordSet;
	try
	{
		if(m_UserRecordSet.IsOpen())
			m_UserRecordSet.Close();
		//输入匹配条件UserID=m_CurUserID
		m_UserRecordSet.m_strFilter.Format("UserID=%d order by UserID",m_CurUserID);
		m_UserRecordSet.Open(CUserRecordSet::snapshot,NULL,CUserRecordSet::none);
		//如果用户记录存在,则进行修改操作
		if(m_UserRecordSet.IsOpen() && !m_UserRecordSet.IsEOF())
		{
			//设置编辑当前记录
			m_UserRecordSet.Edit();
			//开始编辑该记录的内容
			m_UserRecordSet.m_UserAble=m_UserDlg.m_UserAble;
			m_UserRecordSet.m_UserAddr=m_UserDlg.m_UserAddr;
            m_UserRecordSet.m_UserDep=m_UserDlg.m_UserDep;
			m_UserRecordSet.m_UserEmail=m_UserDlg.m_UserEmail;
            m_UserRecordSet.m_UserInfo=m_UserDlg.m_UserInfo;
			m_UserRecordSet.m_UserName=m_UserDlg.m_UserName;
            m_UserRecordSet.m_UserPhone=m_UserDlg.m_UserPhone;
			m_UserRecordSet.m_UserPwd=m_UserDlg.m_UserPwd;
            m_UserRecordSet.m_UserSex=m_UserDlg.m_UserSex;
			m_UserRecordSet.m_UserTitle=m_UserDlg.m_UserTitle;
			//如果可以更新,则更新到数据库
			if(m_UserRecordSet.CanUpdate())
			{
				m_UserRecordSet.Update();
				
			}
			//更新完毕,关闭数据库
			if(m_UserRecordSet.IsOpen())
				m_UserRecordSet.Close();

			//将用户信息及时更新到ListCtrl中
			ctl->SetItemText(m_CurUser,1,m_UserDlg.m_UserName);
	        ctl->SetItemText(m_CurUser,2,m_UserDlg.m_UserPwd);
            ctl->SetItemText(m_CurUser,3,m_UserDlg.m_UserAble);
	        ctl->SetItemText(m_CurUser,4,m_UserDlg.m_UserSex);
            ctl->SetItemText(m_CurUser,5,m_UserDlg.m_UserAddr);
  	        ctl->SetItemText(m_CurUser,6,m_UserDlg.m_UserDep);
            ctl->SetItemText(m_CurUser,7,m_UserDlg.m_UserTitle);
	        ctl->SetItemText(m_CurUser,8,m_UserDlg.m_UserEmail);
            ctl->SetItemText(m_CurUser,9,m_UserDlg.m_UserPhone);
         	ctl->SetItemText(m_CurUser,10,m_UserDlg.m_UserInfo);

			//提示用户,修改成功
			AfxMessageBox("修改成功!");
		}
		else//如果用户操作中用户信息不存在了
		{
			//关闭数据库
			if(m_UserRecordSet.IsOpen())
				m_UserRecordSet.Close();
			//提示用户
			AfxMessageBox("该记录不存在,无从修改!");
			return;
		}
	}
	catch(CDBException *e)
	{
		e->ReportError();
		return;
	}
	
}

//响应“双击”来修改用户信息
void CDemoView::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	*pResult = 0;
	//直接用相应函数进行处理
	EditCurUser();
}

void CDemoView::DelCurUser()
{
	//建立一个指针,用以操作ListCtrl输出用户记录
	CListCtrl *ctl;
	ctl=&GetListCtrl();
	//寻找当前选中的记录的位置
	POSITION pos=ctl->GetFirstSelectedItemPosition();
	if(pos==NULL)
	{
		AfxMessageBox("请先选中一条记录!");
		return;
	}
	//获取当前记录的位置游标
	int m_CurUser=ctl->GetNextSelectedItem(pos);
	//创建一个CUserDlg实例
	CUserDlg m_UserDlg;
	//创建一个临时字符串来保存当前用户信息
	char chrTemp[201]={'\0'};
	//取得用户ID
	ctl->GetItemText(m_CurUser,0,chrTemp,sizeof(char[20]));
	//将用户ID转换成整数保存,后面的数据库操作将以次为匹配条件
	int m_CurUserID=atoi(chrTemp);
	//创建CUserRecordSet实例
	CUserRecordSet m_UserRecordSet;
	try
	{
		if(m_UserRecordSet.IsOpen())
			m_UserRecordSet.Close();
		//输入匹配条件UserID=m_CurUserID
		m_UserRecordSet.m_strFilter.Format("UserID=%d order by UserID",m_CurUserID);
		m_UserRecordSet.Open(CUserRecordSet::snapshot,NULL,CUserRecordSet::none);
		//如果用户记录存在,则进行修改操作
		if(m_UserRecordSet.IsOpen() && !m_UserRecordSet.IsEOF())
		{
			//设置编辑当前记录
			m_UserRecordSet.Delete();
			if(m_UserRecordSet.IsOpen())
				m_UserRecordSet.Close();
			//提示用户,删除成功
			AfxMessageBox("删除成功!");
		}
		else//如果用户操作中用户信息不存在了
		{
			//关闭数据库
			if(m_UserRecordSet.IsOpen())
				m_UserRecordSet.Close();
			//提示用户
			AfxMessageBox("该记录不存在,无法删除!");
			return;
		}
	}
	catch(CDBException *e)
	{
		e->ReportError();
		return;
	}


}

⌨️ 快捷键说明

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